Aeso
=========================

.. py:module:: gridstatus.aeso


Submodules
----------
.. toctree::
   :titlesonly:
   :maxdepth: 1

   aeso/index.rst
   aeso_constants/index.rst


Package Contents
----------------

Classes Summary
~~~~~~~~~~~~~~~

.. autoapisummary::

   gridstatus.aeso.AESO





Contents
~~~~~~~~~~~~~~~~~~~
.. py:class:: AESO(api_key: str | None = None)

   API client for Alberta Electric System Operator (AESO) data.

   Handles authentication and provides methods to access various AESO datasets
   including supply and demand, market data, and operational information.

   Initialize the AESO API client.

   :param api_key: AESO API key. If not provided, will try to get from AESO_API_KEY environment variable.


   **Attributes**

   .. list-table::
      :widths: 15 85
      :header-rows: 0

      * - **api_key**
        - None
      * - **base_url**
        - 'https://apimgw.aeso.ca/public'
      * - **default_headers**
        - None
      * - **default_timezone**
        - 'US/Mountain'
      * - **HISTORICAL_FORECAST_EARLIEST**
        - None
      * - **HISTORICAL_FORECAST_LATEST**
        - None
      * - **MAX_NAVIGATION_ATTEMPTS**
        - 100


   **Methods**

   .. autoapisummary::
      :nosignatures:

      gridstatus.aeso.AESO.get_asset_list
      gridstatus.aeso.AESO.get_daily_average_pool_price
      gridstatus.aeso.AESO.get_forecast_pool_price
      gridstatus.aeso.AESO.get_fuel_mix
      gridstatus.aeso.AESO.get_generator_outages_hourly
      gridstatus.aeso.AESO.get_interchange
      gridstatus.aeso.AESO.get_load
      gridstatus.aeso.AESO.get_load_forecast
      gridstatus.aeso.AESO.get_pool_price
      gridstatus.aeso.AESO.get_reserves
      gridstatus.aeso.AESO.get_solar_10_min
      gridstatus.aeso.AESO.get_solar_forecast_12_hour
      gridstatus.aeso.AESO.get_solar_forecast_7_day
      gridstatus.aeso.AESO.get_solar_hourly
      gridstatus.aeso.AESO.get_supply_and_demand
      gridstatus.aeso.AESO.get_system_marginal_price
      gridstatus.aeso.AESO.get_transmission_outages
      gridstatus.aeso.AESO.get_unit_status
      gridstatus.aeso.AESO.get_wind_10_min
      gridstatus.aeso.AESO.get_wind_forecast_12_hour
      gridstatus.aeso.AESO.get_wind_forecast_7_day
      gridstatus.aeso.AESO.get_wind_hourly

   .. py:method:: get_asset_list(asset_id: str | None = None, pool_participant_id: str | None = None, operating_status: str | None = None, asset_type: str | None = None) -> pandas.DataFrame

      Get list of assets in the AESO system.

      :param asset_id: Filter by specific asset ID
      :param pool_participant_id: Filter by pool participant ID
      :param operating_status: Filter by operating status
      :param asset_type: Filter by asset type

      :returns: DataFrame containing asset information


   .. py:method:: get_daily_average_pool_price(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) -> pandas.DataFrame

      Get daily average pool price data with on-peak and off-peak breakdowns.

      On-peak hours are defined as hours ending 8 through 23 (inclusive).
      Off-peak hours are all other hours.

      :returns: DataFrame containing daily average price data


   .. py:method:: get_forecast_pool_price(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) -> pandas.DataFrame

      Get pool price data.

      :returns: DataFrame containing pool price data


   .. py:method:: get_fuel_mix() -> pandas.DataFrame

      Get current generation by fuel type.

      :returns: DataFrame containing generation data by fuel type, with each fuel type as a column
                containing its net generation value


   .. py:method:: get_generator_outages_hourly(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) -> pandas.DataFrame

      Get hourly generator outage data.

      :param date: Start date for the data. Can be "latest" to get current data.
      :param end: End date for the data. If not provided, will get 24 months of data.
      :param verbose: Whether to print verbose output.

      :returns: DataFrame containing generator outage data


   .. py:method:: get_interchange() -> pandas.DataFrame

      Get current interchange flows with neighboring regions.

      :returns: DataFrame containing interchange data with separate columns for each region's flow
                and a net interchange flow column


   .. py:method:: get_load(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) -> pandas.DataFrame

      Get current load data.

      :returns: DataFrame containing load data


   .. py:method:: get_load_forecast(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) -> pandas.DataFrame

      Get load forecast data.

      The AESO publishes load forecasts daily at 7am Mountain Time. The forecast covers
      the next 13 days. The publish time is determined as follows:

      - For historical data: 7am on the day of the interval if interval is after 7am,
        otherwise 7am the previous day
      - For future data: 7am today (if after 7am) or 7am yesterday (if before 7am)

      :returns: DataFrame containing load forecast data with publish times.


   .. py:method:: get_pool_price(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) -> pandas.DataFrame

      Get pool price data.

      :returns: DataFrame containing pool price data


   .. py:method:: get_reserves() -> pandas.DataFrame

      Get current reserve data.

      :returns: DataFrame containing reserve information


   .. py:method:: get_solar_10_min(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) -> pandas.DataFrame

      Get actual solar generation data with 10-minute intervals.

      :returns: DataFrame containing actual solar generation data with 10-minute intervals


   .. py:method:: get_solar_forecast_12_hour(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) -> pandas.DataFrame

      Get 12-hour solar forecast data.

      :returns: DataFrame containing 12-hour solar forecast data with min, most likely, and max values


   .. py:method:: get_solar_forecast_7_day(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) -> pandas.DataFrame

      Get 7-day solar forecast data.

      :returns: DataFrame containing 7-day solar forecast data with min, most likely, and max values


   .. py:method:: get_solar_hourly(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) -> pandas.DataFrame

      Get actual solar generation data with hourly intervals.

      :returns: DataFrame containing actual solar generation data with hourly intervals


   .. py:method:: get_supply_and_demand() -> pandas.DataFrame

      Get current supply and demand summary data.

      :returns: DataFrame containing current supply and demand information


   .. py:method:: get_system_marginal_price(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) -> pandas.DataFrame

      Get system marginal price data.

      :returns: DataFrame containing system marginal price data with minutely intervals


   .. py:method:: get_transmission_outages(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None) -> pandas.DataFrame

      Get transmission outages data.

      :param date: Start date for the data. Can be "latest" to get current data.
      :param end: End date for the data. If not provided, will get data for the specified date.

      :returns: DataFrame containing transmission outage data


   .. py:method:: get_unit_status(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], verbose: bool = False) -> pandas.DataFrame

      Get current unit status data for all assets in the AESO system.

      :returns:

                - Time: Timestamp of the data
                - Asset: Asset identifier
                - Fuel Type: Type of fuel used
                - Sub Fuel Type: Sub-category of fuel type
                - Maximum Capability: Maximum generation capability in MW
                - Net Generation: Current net generation in MW
                - Dispatched Contingency Reserve: Amount of contingency reserve dispatched in MW
      :rtype: DataFrame containing unit status data with columns


   .. py:method:: get_wind_10_min(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) -> pandas.DataFrame

      Get actual wind generation data with 10-minute intervals.

      :returns: DataFrame containing actual wind generation data with 10-minute intervals


   .. py:method:: get_wind_forecast_12_hour(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) -> pandas.DataFrame

      Get 12-hour wind forecast data.

      :returns: DataFrame containing 12-hour wind forecast data with min, most likely, and max values


   .. py:method:: get_wind_forecast_7_day(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) -> pandas.DataFrame

      Get 7-day wind forecast data.

      :returns: DataFrame containing 7-day wind forecast data with min, most likely, and max values


   .. py:method:: get_wind_hourly(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) -> pandas.DataFrame

      Get actual wind generation data with hourly intervals.

      :returns: DataFrame containing actual wind generation data with hourly intervals



