battery_optimizer_app.models#
Functions
|
Composite discriminator combining country and use_case. |
Classes
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- class battery_optimizer_app.models.APIWrappedAFRREnergyRequest(*, request_id, problem_type=ProblemType.AFRR_ENERGY, payload, orderbook=None, bucketing_approach=BucketingApproach.whole, blocked_capacities=[], timestamps, premiums=[], premium_lower_bound_per_MWh=10.0, premium_upper_bound_per_MWh=9999.0, premium_multiplier=3.0)#
Bases:
APIWrappedBatteryOptimizer- Parameters:
request_id (str)
problem_type (ProblemType)
payload (DERequest)
orderbook (str | None)
bucketing_approach (BucketingApproach)
blocked_capacities (list[EnergyMarketContinuousPositions])
premiums (list[aFRREnergyPremium])
- model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'extra': 'ignore', 'frozen': False, 'json_encoders': {<class 'datetime.datetime'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timedeltas.Timedelta'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timestamps.Timestamp'>: <function BaseModel.<lambda>>, <class 'pandas.core.frame.DataFrame'>: <function BaseModel.<lambda>>, <class 'pandas.core.series.Series'>: <function BaseModel.<lambda>>}, 'validate_default': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- problem_type: ProblemType#
- class battery_optimizer_app.models.APIWrappedBatteryOptimizer(*, request_id, problem_type=ProblemType.PNL, payload, orderbook=None, bucketing_approach=BucketingApproach.whole, blocked_capacities=[])#
Bases:
BaseModel- Parameters:
request_id (str)
problem_type (ProblemType)
payload (Annotated[Annotated[UKRequest, Tag(tag=(<Country.UK: 'uk'>, <UseCase.BESS: 'bess'>))] | Annotated[DERequest, Tag(tag=(<Country.DE: 'de'>, <UseCase.BESS: 'bess'>))] | Annotated[EVDERequest, Tag(tag=(<Country.DE: 'de'>, <UseCase.EV: 'ev'>))] | Annotated[EVUKRequest, Tag(tag=(<Country.UK: 'uk'>, <UseCase.EV: 'ev'>))], Discriminator(discriminator=~battery_optimizer_app.models.get_battery_optimizer_discriminator, custom_error_type=None, custom_error_message=None, custom_error_context=None)])
orderbook (str | None)
bucketing_approach (BucketingApproach)
blocked_capacities (list[EnergyMarketContinuousPositions])
- aggregate_blocked_capacities()#
Generally, we may be sent blocked capacities with overlapping time ranges, i.e. multuple entries for the same time_from and time_to. Here, we aggregate such entries by summing their volumes.
- classmethod avoid_premature_intraday_buckets_check(data)#
- blocked_capacities: list[EnergyMarketContinuousPositions]#
- bucketing_approach: BucketingApproach#
- model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'extra': 'ignore', 'frozen': False, 'json_encoders': {<class 'datetime.datetime'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timedeltas.Timedelta'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timestamps.Timestamp'>: <function BaseModel.<lambda>>, <class 'pandas.core.frame.DataFrame'>: <function BaseModel.<lambda>>, <class 'pandas.core.series.Series'>: <function BaseModel.<lambda>>}, 'validate_default': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- payload: get_battery_optimizer_discriminator, custom_error_type=None, custom_error_message=None, custom_error_context=None)]#
- problem_type: ProblemType#
- reinstate_buckets_check()#
- validate_blocked_capacities_timestamps()#
Validate that blocked_capacities timestamps align with optimization_time_range. Both time_from and time_to must be within the optimization bounds.
- class battery_optimizer_app.models.APIWrappedBodRequest(*, request_id, problem_type=ProblemType.BOD, payload)#
Bases:
BaseModel- Parameters:
request_id (str)
problem_type (ProblemType)
payload (BodRequest)
- model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'extra': 'ignore', 'frozen': False, 'json_encoders': {<class 'datetime.datetime'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timedeltas.Timedelta'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timestamps.Timestamp'>: <function BaseModel.<lambda>>, <class 'pandas.core.frame.DataFrame'>: <function BaseModel.<lambda>>, <class 'pandas.core.series.Series'>: <function BaseModel.<lambda>>}, 'validate_default': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- payload: BodRequest#
- problem_type: ProblemType#
- class battery_optimizer_app.models.APIWrappedMelMilBoaRequest(*, request_id, problem_type=ProblemType.MELMILBOA, payload, boas=None, start=None, baseline)#
Bases:
APIWrappedMelMilRequest- Parameters:
request_id (str)
problem_type (ProblemType)
payload (UKRequest)
start (datetime | None)
baseline (list[BaselinePoint])
- baseline: list[BaselinePoint]#
- ensure_soc_level_after_boa_is_given()#
- ensure_soc_level_of_boa_is_given()#
- model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'extra': 'ignore', 'frozen': False, 'json_encoders': {<class 'datetime.datetime'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timedeltas.Timedelta'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timestamps.Timestamp'>: <function BaseModel.<lambda>>, <class 'pandas.core.frame.DataFrame'>: <function BaseModel.<lambda>>, <class 'pandas.core.series.Series'>: <function BaseModel.<lambda>>}, 'validate_default': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- problem_type: ProblemType#
- class battery_optimizer_app.models.APIWrappedMelMilNowRequest(*, request_id, problem_type=ProblemType.MELMILNOW, payload)#
Bases:
APIWrappedMelMilRequest- Parameters:
request_id (str)
problem_type (ProblemType)
payload (UKMelMilNowRequest)
- model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'extra': 'ignore', 'frozen': False, 'json_encoders': {<class 'datetime.datetime'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timedeltas.Timedelta'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timestamps.Timestamp'>: <function BaseModel.<lambda>>, <class 'pandas.core.frame.DataFrame'>: <function BaseModel.<lambda>>, <class 'pandas.core.series.Series'>: <function BaseModel.<lambda>>}, 'validate_default': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- payload: UKMelMilNowRequest#
- problem_type: ProblemType#
- class battery_optimizer_app.models.APIWrappedMelMilRequest(*, request_id, problem_type=ProblemType.MELMIL, payload)#
Bases:
BaseModel- Parameters:
request_id (str)
problem_type (ProblemType)
payload (UKRequest)
- ensure_asset_strategy_optimization_markets_is_empty()#
- model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'extra': 'ignore', 'frozen': False, 'json_encoders': {<class 'datetime.datetime'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timedeltas.Timedelta'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timestamps.Timestamp'>: <function BaseModel.<lambda>>, <class 'pandas.core.frame.DataFrame'>: <function BaseModel.<lambda>>, <class 'pandas.core.series.Series'>: <function BaseModel.<lambda>>}, 'validate_default': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- problem_type: ProblemType#
- class battery_optimizer_app.models.aFRREnergyPosition(*, start, volume_MW, base_price_per_MWh, premium_per_MWh, price_per_MWh, market, metadata, blocked_capacities=[])#
Bases:
BaseModel- Parameters:
start (datetime)
base_price_per_MWh (float)
premium_per_MWh (float)
price_per_MWh (float)
market (MarketType)
metadata (aFRREnergyPositionMetadata | None)
blocked_capacities (list[EnergyMarketContinuousPositions])
- blocked_capacities: list[EnergyMarketContinuousPositions]#
- market: MarketType#
- metadata: aFRREnergyPositionMetadata | None#
- model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'extra': 'ignore', 'frozen': False, 'json_encoders': {<class 'datetime.datetime'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timedeltas.Timedelta'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timestamps.Timestamp'>: <function BaseModel.<lambda>>, <class 'pandas.core.frame.DataFrame'>: <function BaseModel.<lambda>>, <class 'pandas.core.series.Series'>: <function BaseModel.<lambda>>}, 'validate_default': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class battery_optimizer_app.models.aFRREnergyPositionMetadata(*, result)#
Bases:
BaseModel- Parameters:
result (DataFrame)
- model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'extra': 'ignore', 'frozen': False, 'json_encoders': {<class 'datetime.datetime'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timedeltas.Timedelta'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timestamps.Timestamp'>: <function BaseModel.<lambda>>, <class 'pandas.core.frame.DataFrame'>: <function BaseModel.<lambda>>, <class 'pandas.core.series.Series'>: <function BaseModel.<lambda>>}, 'validate_default': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- result: DataFrame#
- class battery_optimizer_app.models.aFRREnergyPositions(*, start, afrr_positive, afrr_negative)#
Bases:
BaseModel- Parameters:
start (datetime)
afrr_positive (aFRREnergyPosition)
afrr_negative (aFRREnergyPosition)
- afrr_negative: aFRREnergyPosition#
- afrr_positive: aFRREnergyPosition#
- model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'extra': 'ignore', 'frozen': False, 'json_encoders': {<class 'datetime.datetime'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timedeltas.Timedelta'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timestamps.Timestamp'>: <function BaseModel.<lambda>>, <class 'pandas.core.frame.DataFrame'>: <function BaseModel.<lambda>>, <class 'pandas.core.series.Series'>: <function BaseModel.<lambda>>}, 'validate_default': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class battery_optimizer_app.models.aFRREnergyPremium(*, start, afrr_positive_premium_per_MWh=None, afrr_negative_premium_per_MWh=None)#
Bases:
BaseModel- Parameters:
- model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'extra': 'ignore', 'frozen': False, 'json_encoders': {<class 'datetime.datetime'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timedeltas.Timedelta'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timestamps.Timestamp'>: <function BaseModel.<lambda>>, <class 'pandas.core.frame.DataFrame'>: <function BaseModel.<lambda>>, <class 'pandas.core.series.Series'>: <function BaseModel.<lambda>>}, 'validate_default': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class battery_optimizer_app.models.aFRREnergyResult(*, request, positions)#
Bases:
BaseModel- Parameters:
request (APIWrappedAFRREnergyRequest)
positions (list[aFRREnergyPositions])
- model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'extra': 'ignore', 'frozen': False, 'json_encoders': {<class 'datetime.datetime'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timedeltas.Timedelta'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timestamps.Timestamp'>: <function BaseModel.<lambda>>, <class 'pandas.core.frame.DataFrame'>: <function BaseModel.<lambda>>, <class 'pandas.core.series.Series'>: <function BaseModel.<lambda>>}, 'validate_default': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- positions: list[aFRREnergyPositions]#
- request: APIWrappedAFRREnergyRequest#