Domain

class trident.domain.Area

Bases: pybind11_object

A market area. Logical price and power transfer node.

__init__(self: Area) None
as_json(self: Area) str
property depletion_season_end

End of the depletion season relative to january 1st each year. Must be smaller than depletion_season_start.

Type:

TimeDelta

property depletion_season_start

Start of the depletion season relative to january 1st each year. Must be larger than depletion_season_end.

Type:

TimeDelta

static from_json(json: str) Area
property id

Unique object identifier

Type:

str

property inflows

Inflow series with watermark id and average_inflow for a given area.

Type:

trident.domain._trident_domain.ListInflow

property load_parts

Load parts in the area

Type:

trident.domain._trident_domain.ListLoadPart

property market_steps

Market steps in the area

Type:

trident.domain._trident_domain.ListMarketStep

property name

Unique name

Type:

str

property price_area_id

Price area identifier

Type:

str

property smoothing_window

Length of window when smoothing reservoir layer sizes. Value is doubled due to being both before and after point.

Type:

TimeDelta

class trident.domain.Battery

Bases: pybind11_object

Power storage devices

__init__(self: Battery) None
property area_id

Identifier of the associated area

Type:

str

property end_value_type

Sets how the end value should be set for the battery. Could be from the dual value of the state of energy the previous decision problem, or given as a time series.

Type:

BatteryEndValueType

property id

Unique object identifier

Type:

str

property initial_end_value

The end value [mu/GWh] for the initial decision problem, given that end_value_type is “endogenous”

Type:

float

property initial_state_of_energy

GWh

Type:

float

property name

Unique name

Type:

str

class trident.domain.BatteryEndValueType

Bases: pybind11_object

The type of end value used in a battery.

Members:

ENDOGENOUS : A single end value is set based on the dual value of the battery state of energy at the beginning of the previous decision problem.

EXOGENOUS : An NDArray time series must provide the endvalues. If it contains multiple values the battery energy will be divided into layers corresponding to the end values.

ENDOGENOUS = <BatteryEndValueType.ENDOGENOUS: 0>
EXOGENOUS = <BatteryEndValueType.EXOGENOUS: 1>
__init__(self: BatteryEndValueType, value: int) None
property name
Type:

str

property value
Type:

int

class trident.domain.ChpThermalPlant

Bases: pybind11_object

Combined heat and power plants, where some of the production is heat. Temperature dependent.

__init__(self: ChpThermalPlant) None
property area_id

Numeric ID of associated area

Type:

str

property id

Numeric ID

Type:

str

property name

Unique name

Type:

str

property temperature_function_reference_id

Reference to temperature function for the combined heat and production thermal unit.

Type:

str

property temperature_reference_id

Reference to temperature series for the combined heat and production thermal unit.

Type:

str

class trident.domain.DataSet

Bases: pybind11_object

Data class for time dependent data stored as time series. The time series, xy_time_series and xy_curves are placed in a dict, with the key being the URL.

__init__(*args, **kwargs)

Overloaded function.

  1. __init__(self: trident.domain._trident_domain.DataSet) -> None

  2. __init__(self: trident.domain._trident_domain.DataSet, id: str) -> None

property id
Type:

str

property ndarrayts
Type:

trident.domain._trident_domain.ResourceWrapperNDArrayTS

property scenario_bound_rids
Type:

list[str]

property signature
Type:

trident.domain._trident_domain.SourceSignature

property time_series

Dictionary of trident.domain.TimeSeries

Type:

trident.domain._trident_domain.StringTimeSeriesMap

property xy_curves

Dictionary of trident.domain.XYCurve

Type:

trident.domain._trident_domain.StringXYCurveMap

property xy_time_series

Dictionary of trident.domain.XYTimeSeries

Type:

trident.domain._trident_domain.StringXYTSMap

class trident.domain.DynamicResponseType

Bases: pybind11_object

The response dynamic of a market step, price elastic load or thermal plant. Available types are ‘momentary’, ‘asymptotic’ and ‘linear’. Linear or asymptotic means there is some delay in the change of demand.

Members:

MOMENTARY : TODO: Add docstring for enum value DynamicResponseType::MOMENTARY

ASYMPTOTIC : TODO: Add docstring for enum value DynamicResponseType::ASYMPTOTIC

LINEAR : TODO: Add docstring for enum value DynamicResponseType::LINEAR

ASYMPTOTIC = <DynamicResponseType.ASYMPTOTIC: 1>
LINEAR = <DynamicResponseType.LINEAR: 2>
MOMENTARY = <DynamicResponseType.MOMENTARY: 0>
__init__(self: DynamicResponseType, value: int) None
property name
Type:

str

property value
Type:

int

class trident.domain.ExponentialPriceElasticity

Bases: pybind11_object

TODO: Add docstring for class ExponentialPriceElasticity

__init__(self: ExponentialPriceElasticity) None
property exponent

TODO: Add docstring for class field ExponentialPriceElasticity::exponent

Type:

float

property lower_price_limit

TODO: Add docstring for class field ExponentialPriceElasticity::lower_price_limit

Type:

float

property normal_price

TODO: Add docstring for class field ExponentialPriceElasticity::normal_price

Type:

float

property response_dynamic

TODO: Add docstring for class field ExponentialPriceElasticity::response_dynamic

Type:

DynamicResponseType

property upper_price_limit

TODO: Add docstring for class field ExponentialPriceElasticity::upper_price_limit

Type:

float

class trident.domain.FuelType

Bases: pybind11_object

Fuel types are decriptions of different fuels used in thermal plants for calculating prices

__init__(self: FuelType) None
property co2_equivalent

CO2 equivalence of fuel. TODO: Unit

Type:

float

property energy_coefficient

Energy coefficient GWh/fuel

Type:

float

property id

Unique object identifier

Type:

str

property name

Unique name

Type:

str

class trident.domain.HydraulicJunction

Bases: pybind11_object

Node points that connect waterways

__init__(self: HydraulicJunction) None
property area_id

Identifier of the associated area

Type:

str

property id

Unique object identifier

Type:

str

property name

Unique name

Type:

str

class trident.domain.HydroPlant

Bases: pybind11_object

Hydro power plant using water as a source of power.

__init__(self: HydroPlant) None
property area_id

Identifier of the associated area

Type:

str

property discharge_path_id

Identifier of the associated waterway

Type:

str

property efficiency

Power production efficiency (GWh/Mm3)

Type:

float

property has_startup_costs

Flag if this power plant has startup costs or not.

Type:

bool

property id

Unique object identifier

Type:

str

property max_production_capacity

Maximum production capacity (MW)

Type:

float

property min_production_capacity

Minimum production capacity (MW)

Type:

float

property name

Unique name

Type:

str

property owner_share

Owner share (percentage)

Type:

float

property pressure_tunnel

The pressure tunnel of the hydro plant

Type:

PressureTunnel

property unregulated_inflow_rate

Average unregulated inflow (Mm^3/year)

Type:

float

property unregulated_inflow_source

A string id which identifies a unregulated inflow data source.

Type:

str

property volume_dependent_discharge_reservoir_id

Id of reservoir whose volume affect maximum discharge for this plant.

Type:

Optional[str]

class trident.domain.InterpolationType

Bases: pybind11_object

Members:

instant

linear

__init__(self: InterpolationType, value: int) None
instant = <InterpolationType.instant: 0>
linear = <InterpolationType.linear: 1>
property name
Type:

str

property value
Type:

int

class trident.domain.JLObject

Bases: pybind11_object

__init__(self: JLObject) None
class trident.domain.LoadPart

Bases: pybind11_object

A component in the power load scheme of a market area.

__init__(self: LoadPart) None
property exponential_price_elasticity

TODO: Add docstring for class field LoadPart::exponential_price_elasticity

Type:

Optional[ExponentialPriceElasticity]

property id

Unique object identifier

Type:

str

property name

Unique name

Type:

str

property piecewise_linear_price_elasticity

TODO: Add docstring for class field LoadPart::piecewise_linear_price_elasticity

Type:

Optional[PiecewiseLinearPriceElasticity]

property temperature_corrections

Temperature corrections that apply to this load part

Type:

trident.domain._trident_domain.ListTemperatureCorrection

class trident.domain.LogLevel

Bases: pybind11_object

Logging level

Members:

SILENT : No log messages

CRITICAL : Critical errors

ERROR : Errors

WARNING : Warnings

NORMAL : Normal log messages

VERBOSE : Debug log messages

CRITICAL = <LogLevel.CRITICAL: 1>
ERROR = <LogLevel.ERROR: 2>
NORMAL = <LogLevel.NORMAL: 4>
SILENT = <LogLevel.SILENT: 0>
VERBOSE = <LogLevel.VERBOSE: 5>
WARNING = <LogLevel.WARNING: 3>
__init__(self: LogLevel, value: int) None
property name
Type:

str

property value
Type:

int

class trident.domain.LogicalModel

Bases: pybind11_object

Logical model for energy domain

__init__(self: LogicalModel) None
property areas

All areas

Type:

trident.domain._trident_domain.ListArea

as_json(self: LogicalModel) str
property batteries

All batteries in the model

Type:

trident.domain._trident_domain.ListBattery

property chp_thermal_plants

All combined heat and power plants in the power system

Type:

trident.domain._trident_domain.ListChpThermalPlant

static from_json(json: str) LogicalModel
property fuel_types

All fuel types

Type:

trident.domain._trident_domain.ListFuelType

property hydraulic_junctions

All hydraulic junctions in hydrological system

Type:

trident.domain._trident_domain.ListHydraulicJunction

property hydro_plants

All hydro plants in hydrological system

Type:

trident.domain._trident_domain.ListHydroPlant

property id

ID for this Logical Model

Type:

str

property power_connections

All power connections

Type:

trident.domain._trident_domain.ListPowerConnection

property pumps

All pumps in hydrological system

Type:

trident.domain._trident_domain.ListPump

property reservoirs

All reservoirs in hydrological system

Type:

trident.domain._trident_domain.ListReservoir

property sea

Hydraulic node representing a global water drain

Type:

trident.domain._trident_domain.Sea

property signature

Source signature of this model

Type:

trident.domain._trident_domain.SourceSignature

property solar_parks

All photovoltaic parks in the power system

Type:

trident.domain._trident_domain.ListSolarPark

property thermal_plants

All thermal plants in the power system

Type:

trident.domain._trident_domain.ListThermalPlant

property unit_of_input_prices

The unit of input prices. All input prices are assumed to use same unit. This can be used to discern the money unit (mu). E.g. if the input price unit is øre/kWh, and the output timeseries are mu/GWh, then mu = 1e6 øre.

Type:

PriceUnit

property waterways

All waterways in hydrological system

Type:

trident.domain._trident_domain.ListWaterway

property wind_parks

All wind parks in the power system

Type:

trident.domain._trident_domain.ListWindPark

class trident.domain.LogicalModelView

Bases: pybind11_object

__init__(self: LogicalModelView, model: LogicalModel) None
area_by_id(self: LogicalModelView, arg0: str) Area

Returns an area by id.

create_area(self: LogicalModelView, area_id: str, area_name: str) Area

Create a new area.

create_battery(self: LogicalModelView, battery_id: str, battery_name: str, area_id: str) Battery

Create a new battery.

create_bypass_path(self: LogicalModelView, waterway_id: str, waterway_name: str, upstream_reservoir_id: str, downstream_reservoir_id: str) Waterway

Creates a new bypass path between the specified reservoirs.

The bypass path’s waterway_id must be unique among all waterways.

create_chp_thermal_plant(self: LogicalModelView, chp_thermal_plant_id: str, chp_thermal_plant_name: str, area_id: str, temperature_reference_id: str, temperature_function_reference_id: str) ChpThermalPlant

Creates a new chp thermal plant.

create_discharge_path(self: LogicalModelView, waterway_id: str, waterway_name: str, upstream_reservoir_id: str, downstream_reservoir_id: str) Waterway

Creates a new discharge path between the specified reservoirs.

The discharge path’s waterway_id must be unique among all waterways.

create_fuel_type(self: LogicalModelView, arg0: str, arg1: str, arg2: float, arg3: float) FuelType

Creates a new fuel type.

create_hydraulic_junction(self: LogicalModelView, hydraulic_junction_id: str, hydraulic_junction_name: str, area_id: str) HydraulicJunction

Creates a hydraulic junction at the specified reservoir.

create_hydro_plant(self: LogicalModelView, hydro_plant_id: str, hydro_plant_name: str, area_id: str, waterway_id: str) HydroPlant

Creates a new hydro plant.

create_inflow(self: LogicalModelView, area_id: str, watermark_id: str, average_inflow: float) trident.domain._trident_domain.Inflow

Create a new inflow object.

create_load_part(self: LogicalModelView, load_type_id: str, load_type_name: str, area_id: str) LoadPart

Create a new load type.

create_market_step(self: trident.domain._trident_domain.LogicalModelView, market_step_id: str, market_step_name: str, area_id: str, response_dynamic: trident.domain._trident_domain.DynamicResponseType = <DynamicResponseType.MOMENTARY: 0>) MarketStep

Creates a new market step.

create_power_connection(self: LogicalModelView, power_connection_id: str, power_connection_name: str, from_area_id: str, to_area_id: str) PowerConnection

Create a new power connection between two areas.

create_pump(self: LogicalModelView, pump_id: str, pump_name: str, waterway_id: str, connected_reservoir_id: str) Pump

Creates a new pump which pumps from and to the reservoirs of the specified waterway. The waterway must be a pump tunnel.

create_pump_tunnel(self: LogicalModelView, waterway_id: str, waterway_name: str, upstream_reservoir_id: str, downstream_reservoir_id: str) Waterway

Creates a pump tunnel between the specified reservoirs.

The pump tunnel’s waterway_id must be unique among all waterways.

create_reservoir(self: LogicalModelView, reservoir_id: str, reservoir_name: str, area_id: str) trident.domain._trident_domain.ReservoirView

Create a new reservoir.

create_sea(self: LogicalModelView) None

Create a sea entity which can be connected with waterways.

create_solar_park(self: LogicalModelView, solar_park_id: str, solar_park_name: str, area_id: str) SolarPark

Create a new solar park.

create_spillage_path(self: LogicalModelView, waterway_id: str, waterway_name: str, upstream_reservoir_id: str, downstream_reservoir_id: str) Waterway

Creates a new spillage path between the specified reservoirs.

The spillage path’s waterway_id must be unique among all waterways.

create_temperature_correction(self: LogicalModelView, load_part: LoadPart, temp_series_ref: str, correction_series_ref: str, weight: float) TemperatureCorrection

Creates a new temperature correction for a load part

create_thermal_plant(self: trident.domain._trident_domain.LogicalModelView, thermal_plant_id: str, thermal_plant_name: str, area_id: str, fuel_type_id: Optional[str], response_dynamic: trident.domain._trident_domain.DynamicResponseType = <DynamicResponseType.MOMENTARY: 0>) ThermalPlant

Creates a new thermal plant.

create_tunnel(self: LogicalModelView, waterway_id: str, waterway_name: str, upstream_reservoir_id: str, downstream_reservoir_id: str) Waterway

Creates a tunnel between the specified reservoirs.

The tunnel’s waterway_id must be unique among all waterways.

create_waterway(self: LogicalModelView, waterway_id: str, waterway_name: str, waterway_type: WaterwayType, upstream_reservoir_id: str, downstream_reservoir_id: str) Waterway

Creates a new waterway between the specified reservoirs.

The waterway_id must be unique among all waterways.

create_wind_park(self: LogicalModelView, wind_park_id: str, wind_park_name: str, area_id: str) WindPark

Create a new wind park.

property data
Type:

LogicalModel

fuel_type_by_id(self: LogicalModelView, arg0: str) FuelType

Returns fuel type by id.

hydro_plant_by_id(self: LogicalModelView, arg0: str) HydroPlant

Returns an hydro plant by id.

hydro_plants_in_area(self: LogicalModelView, arg0: str) list[HydroPlant]

Returns all hydro plant in the specified area.

property id
Type:

str

load_type_by_id_and_area(self: LogicalModelView, arg0: str, arg1: str) LoadPart

Return a load type by load type id and area id

pumps_in_area(self: LogicalModelView, arg0: str) list[Pump]

Returns an pump by id.

reservoir_by_id(self: LogicalModelView, arg0: str) trident.domain._trident_domain.ReservoirView

Returns an reservoir by id.

reservoirs_in_area(self: LogicalModelView, arg0: str) list[trident.domain._trident_domain.ReservoirView]

Returns all reservoirs in the specified area.

property sea_reservoir_id

Get the reservoir id of the sea.

Type:

str

set_exponential_price_elasticity(self: trident.domain._trident_domain.LogicalModelView, load_part: trident.domain._trident_domain.LoadPart, normal_price: float, upper_price_limit: float, lower_price_limit: float, exponent: float, response_dynamic: trident.domain._trident_domain.DynamicResponseType = <DynamicResponseType.MOMENTARY: 0>) None

Sets exponential price elasticity in a load part.

set_piecewise_linear_price_elasticity(self: trident.domain._trident_domain.LogicalModelView, load_part: trident.domain._trident_domain.LoadPart, pieces: list[Annotated[list[float], FixedSize(2)]], response_dynamic: trident.domain._trident_domain.DynamicResponseType = <DynamicResponseType.MOMENTARY: 0>) None

Sets a piecewise linear price elasticity for a load part.

waterway_by_id(self: LogicalModelView, arg0: str) Waterway

Returns an waterway by id.

waterways_by_type(self: LogicalModelView, waterway_type: WaterwayType) list[Waterway]

Returns all waterways of the given type.

class trident.domain.MarketStep

Bases: pybind11_object

A price dependent contract, a generic way to simulate buying or selling power.

__init__(self: MarketStep) None
property id

Unique object identifier

Type:

str

property name

Unique name

Type:

str

property response_dynamic

Response type of the market step. Momentary, or a form of price adaptivity

Type:

DynamicResponseType

class trident.domain.ModuleSelector

Bases: pybind11_object

Specifies the UUID and/or name of a module to select

__init__(self: ModuleSelector) None
property enabled

Enable this module

Type:

bool

property name

The name of a module

Type:

str

property uuid

The UUID of a module

Type:

str

class trident.domain.NDArray

Bases: pybind11_object

A N-dimensional array type that is compatible with numpy.ndarray

__init__(*args, **kwargs)

Overloaded function.

  1. __init__(self: trident.domain._trident_domain.NDArray, data: Buffer) -> None

  2. __init__(self: trident.domain._trident_domain.NDArray, data: Iterable) -> None

index(self: NDArray, *args) int

Compute the offset of an element

property ndims
Type:

int

property shape
Type:

object

property strides
Type:

object

class trident.domain.NDArrayTS

Bases: pybind11_object

A time series containing NDArrayTS elements

__init__(*args, **kwargs)

Overloaded function.

  1. __init__(self: trident.domain._trident_domain.NDArrayTS) -> None

  2. __init__(self: trident.domain._trident_domain.NDArrayTS, times: list[int], values: list[trident.domain._trident_domain.NDArray]) -> None

  3. __init__(self: trident.domain._trident_domain.NDArrayTS, times: list[int], values: list[Buffer]) -> None

  4. __init__(self: trident.domain._trident_domain.NDArrayTS, times: Iterable, values: Iterable) -> None

at(self: NDArrayTS, t: int) NDArray

Look up an element by time, in microseconds

iter(self: NDArrayTS, start: int, end: int, delta: int) trident.domain._trident_domain.NDArrayTSIterable

Create an iterable context that yields elements at specified time intervals

property t
Type:

list

property v
Type:

list

class trident.domain.PiecewiseLinearPriceElasticity

Bases: pybind11_object

TODO: Add docstring for class PiecewiseLinearPriceElasticity

__init__(self: PiecewiseLinearPriceElasticity) None
property pieces

TODO: Add docstring for class field PiecewiseLinearPriceElasticity::pieces

Type:

list[Annotated[list[float], FixedSize(2)]]

property response_dynamic

TODO: Add docstring for class field PiecewiseLinearPriceElasticity::response_dynamic

Type:

DynamicResponseType

class trident.domain.PowerConnection

Bases: pybind11_object

A power line connection between two areas.

__init__(self: PowerConnection) None
property flow

Start net power flow for the connection (MW)

Type:

float

property from_area_id

Identifier of the area connected from

Type:

str

property id

Unique object identifier

Type:

str

property name

Unique name

Type:

str

property to_area_id

Identifier of the area connected to

Type:

str

class trident.domain.PressureTunnel

Bases: pybind11_object

A tunnel with water under pressure in a hydro plant or a pump.

__init__(self: PressureTunnel) None
property nominal_hydraulic_head

Nominal hydraulic head (m)

Type:

float

property tailrace_elevation

Elevation of the tailrace (masl)

Type:

float

class trident.domain.PriceUnit

Bases: pybind11_object

The unit of prices

Members:

UNKNOWN : TODO: Add docstring for enum value PriceUnit::UNKNOWN

NOK_ORE_PER_KWH : TODO: Add docstring for enum value PriceUnit::NOK_ORE_PER_KWH

EUR_CENT_PER_MWH : TODO: Add docstring for enum value PriceUnit::EUR_CENT_PER_MWH

EUR_CENT_PER_MWH = <PriceUnit.EUR_CENT_PER_MWH: 3>
NOK_ORE_PER_KWH = <PriceUnit.NOK_ORE_PER_KWH: 2>
UNKNOWN = <PriceUnit.UNKNOWN: 1>
__init__(self: PriceUnit, value: int) None
property name
Type:

str

property value
Type:

int

class trident.domain.Pump

Bases: pybind11_object

A water pumping station, capable of moving water between two reservoirs.

__init__(self: Pump) None
property average_energy_equivalent

The average energy equivalent set by the user.

Type:

float

property average_pump_power

Power consumed when pumping (MW)

Type:

float

property connected_reservoir_id

Identifier of the connected reservoir

Type:

str

property id

Unique object identifier

Type:

str

property max_pump_capacity

Maximum flow the pump is capable of (m3/s)

Type:

float

property name

Unique name

Type:

str

property nominal_lift_height

The nominal head between the lower and upper reservoir (m)

Type:

float

property owner_share

Share of ownership of the pump

Type:

float

property pump_capacities

Pump capacities for the pumps’ pumping capacity versus lift height curve (m3/s)

Type:

list[float]

property pump_capacity_slope

Slope of the function between lift height and pump capacity

Type:

float

property validation_heights

Height points for validation. Lower and upper head limits (m)

Type:

list[float]

property waterway_id

Identifier of the associated waterway

Type:

str

class trident.domain.Reservoir

Bases: pybind11_object

A water reservoir in a watercourse.

__init__(self: Reservoir) None
property area_id

Identifier of the associated area

Type:

str

property average_energy_equivalent

Average energy equivalent for the water in the reservoir.

Type:

float

property id

Unique object identifier

Type:

str

property initial_volume

Initial reservoir volume. (Mm^3)

Type:

float

property is_regulated

Flag indicating whether the reservoir is a regulation reservoir (true) or buffer reservoir (false). Defaults to true.

Type:

bool

property max_volume

Maximum physical reservoir volume. (Mm^3)

Type:

float

property max_volume_restriction_type

Reservoir maximum volume restriction type. Soft limits introduces penalty for max volume use, absolute demands use of spillage path.

Type:

ReservoirVolumeRestrictionType

property min_volume_restriction_type

Reservoir minimum volume restriction type.

Type:

ReservoirVolumeRestrictionType

property name

Unique name

Type:

str

property regulated_inflow_rate

Average regulated inflow (Mm^3/year)

Type:

float

property regulated_inflow_source

A string id which identifies a regulated inflow data source.

Type:

str

property regulation_degree

Degree of regulation. Used to disaggregate water values using the target reservoir method.

Type:

Optional[float]

property target_type

Target type of the reservoir. None means that the reservoir is not a target reservoir.

Type:

ReservoirTargetType

class trident.domain.ReservoirTargetType

Bases: pybind11_object

The type of reservoir target model for a reservoir.

Members:

NONE : TODO: Add docstring for enum value ReservoirTargetType::NONE

END_OF_PERIOD : TODO: Add docstring for enum value ReservoirTargetType::END_OF_PERIOD

END_OF_PERIOD = <ReservoirTargetType.END_OF_PERIOD: 1>
NONE = <ReservoirTargetType.NONE: 0>
__init__(self: ReservoirTargetType, value: int) None
property name
Type:

str

property value
Type:

int

class trident.domain.ReservoirVolumeRestrictionType

Bases: pybind11_object

The type of volume restriction for a reservoir.

Members:

NONE : TODO: Add docstring for enum value ReservoirVolumeRestrictionType::NONE

SOFT : Discharge from a reservoir is restricted when its volume is below the limit. This is modeled by creating a preprocessed hard volume restriction with a limit that is the minimum of the input limit and the achievable minimum volume based on a safe inflow computation.

HARD : Reservoir volume below the limit is punished. This is modeled as an insentive to use a minimum volume layer.

SOFT_NO_DISCHARGE : Deprecated. Discharge from a reservoir is restricted when its volume is below the limit. This is modeled by setting the discharge variables to 0 for entire master problem if the volume is below the limit at the beginning of the problem.

HARD = <ReservoirVolumeRestrictionType.HARD: 2>
NONE = <ReservoirVolumeRestrictionType.NONE: 0>
SOFT = <ReservoirVolumeRestrictionType.SOFT: 1>
SOFT_NO_DISCHARGE = <ReservoirVolumeRestrictionType.SOFT_NO_DISCHARGE: 3>
__init__(self: ReservoirVolumeRestrictionType, value: int) None
property name
Type:

str

property value
Type:

int

class trident.domain.RunConfig

Bases: pybind11_object

Run config, containing all the info for a run

__init__(self: RunConfig) None
as_json(self: RunConfig) str
property data_set_id

Unique ID of the data set to use

Type:

str

static from_json(json: str) RunConfig
property gen_master_lp_files

Specifies of which iterations to generate LP files

Type:

list[int]

property gen_master_mps_files

Specifies of which iterations to generate MPS files

Type:

list[int]

property gen_master_solution_files

Specifies of which iterations to generate solution files for the master LP problems

Type:

list[int]

property gen_reports

Specifies which reports to generate. See Engine.get_report for more info.

Type:

set[str]

property id

Unique string ID for this run config

Type:

str

property log_level

Log level to use for this run

Type:

LogLevel

property logical_model_id

Unique ID of the logical model to use

Type:

str

property modules

Modules

Type:

list[ModuleSelector]

property parameters

Configuration parameters

Type:

JLObject

property scenarios

All scenarios to run (Note: Currently must be exactly 1)

Type:

list[ScenarioSpec]

property simulation_config

Simulation parameters

Type:

SimulationConfig

property solver

TODO: Add docstring for class field RunConfig::solver

Type:

SolverConfig

property use_data_memcache

Memcache policy; data (e.g. time series) in memory

Type:

bool

class trident.domain.ScenarioSpec

Bases: pybind11_object

Specification for the scenario bound resources and configured scenario year

__init__(self: ScenarioSpec) None
property scenario_id

ID of the scenario.

Type:

str

property scenario_year

Start year of the historical period for the scenario.

Type:

int

class trident.domain.SimulationConfig

Bases: pybind11_object

Simulation parameters for a run

__init__(self: SimulationConfig) None
property decision_problem_overlap

How long the overlap between decision problems should be. The default is zero. The overlap adds to the total length of the decision problem, but result data is only exported for the main interval, and not the overlap.

Type:

TimeDelta

property decision_problem_time_lengths

The time interval between each decision problem by index in microseconds. Default is 1 week. Each element is used once, and if the simulation runs longer than the total of the decision problem time lengths, then the final time length is repeated until the end.

Type:

list[TimeDelta]

property simulation_end_time

End time for simulation. The last decision problem may overlap with this point, but it may never start at or after it.

Type:

TimePoint

property simulation_start_time

Start time for simulation.

Type:

TimePoint

property target_decision_problem_index

The decision problem index to stop the run at, if simulation_end_time hasn’t been reached. If set to 0, the value is ignored.

Type:

int

property time_step_lengths

Time step lengths for the decision problem. Default is 1 hour. Each element is used once, and if the decision problem is longer than the total of the time steps, the final element is repeated until the end.

Type:

list[TimeDelta]

class trident.domain.SolverAlgorithm

Bases: pybind11_object

LP solver algorithm

Members:

DUAL_SIMPLEX : Dual simplex

BARRIER : Barrier

PRIMAL_SIMPLEX : Primal simplex

CUOPT_PDLP : Primal-Dual Hybrid Gradient for Linear Program

BARRIER = <SolverAlgorithm.BARRIER: 2>
CUOPT_PDLP = <SolverAlgorithm.CUOPT_PDLP: 4>
DUAL_SIMPLEX = <SolverAlgorithm.DUAL_SIMPLEX: 1>
PRIMAL_SIMPLEX = <SolverAlgorithm.PRIMAL_SIMPLEX: 3>
__init__(self: SolverAlgorithm, value: int) None
property name
Type:

str

property value
Type:

int

class trident.domain.SolarPark

Bases: pybind11_object

A solar energy park.

__init__(self: SolarPark) None
property area_id

Identifier of the associated area

Type:

str

property has_cost

Set to true if the pv park has a cost associated with it. Plant will be handled like market steps with capacity and cost if true.

Type:

bool

property id

Unique object identifier

Type:

str

property name

Unique name

Type:

str

property owner_share

Owner share (percentage)

Type:

float

property production_weight_id

Identifier for resource (time series) with production weight

Type:

str

class trident.domain.SolverConfig

Bases: pybind11_object

Specifies a solver library to use

__init__(self: SolverConfig) None
property algorithm

LP solver algorithm

Type:

SolverAlgorithm

property deterministic_mode

Set solver configurations which increases the likelihood of the result being the same across different platforms. But might increase solve time.

Type:

bool

property name

Name of the solver, e.g. “coin-clp”, “cplex”, etc.

Type:

str

property version

Version string, or “default”.

Type:

str

class trident.domain.TemperatureCorrection

Bases: pybind11_object

A temperature correction.

__init__(self: TemperatureCorrection) None
property correction_series_ref

Reference to temperature correction function

Type:

str

property temp_series_ref

Reference to temperature time series

Type:

str

property weight

Factor of the corresponding correction

Type:

float

class trident.domain.ThermalPlant

Bases: pybind11_object

Thermal plants are producers of power. Behaves as market steps, with certain extended features such as production ramping

__init__(self: ThermalPlant) None
property area_id

Identifier of the associated area

Type:

str

property fuel_type_id

Identifier of fuel type

Type:

Optional[str]

property id

Unique object identifier

Type:

str

property name

Unique name

Type:

str

property ramping_limit

Ramping limit (GW/h)

Type:

Optional[float]

property response_dynamic

Price responce type. Momentary or dynamic

Type:

DynamicResponseType

class trident.domain.TimeDelta

Bases: pybind11_object

__init__(*args, **kwargs)

Overloaded function.

  1. __init__(self: trident.domain._trident_domain.TimeDelta) -> None

  2. __init__(self: trident.domain._trident_domain.TimeDelta, arg0: str) -> None

  3. __init__(self: trident.domain._trident_domain.TimeDelta, arg0: int) -> None

property value
Type:

int

class trident.domain.TimePoint

Bases: pybind11_object

__init__(*args, **kwargs)

Overloaded function.

  1. __init__(self: trident.domain._trident_domain.TimePoint) -> None

  2. __init__(self: trident.domain._trident_domain.TimePoint, arg0: str) -> None

  3. __init__(self: trident.domain._trident_domain.TimePoint, arg0: int) -> None

property value
Type:

int

class trident.domain.TimeSeries

Bases: pybind11_object

__init__(self: trident.domain._trident_domain.TimeSeries, t: list[int], v: list[float], interpolation: trident.domain._trident_domain.InterpolationType = <InterpolationType.instant: 0>) None

Create a new time series.

aggregate(self: TimeSeries, unit_time: int = 1000000, start_value: float = 0.0, scaling_factor: float = 1.0) TimeSeries
at(*args, **kwargs)

Overloaded function.

  1. at(self: trident.domain._trident_domain.TimeSeries, time: int) -> float

Get value of time series at a time. Value is either interpolated or the value of the closest previous.

  1. at(self: trident.domain._trident_domain.TimeSeries, arg0: list[int]) -> list[float]

property interpolation

Interpolation type of the time series. Either linear, or instant. Instant will interpet the graph as star steps.

Type:

InterpolationType

iter_aggr_averages(**kwargs)
iter_aggr_sums(**kwargs)
iter_aggr_times(**kwargs)
iter_aggr_values(**kwargs)
iter_times(**kwargs)
iter_values(**kwargs)
max(self: TimeSeries) float
min(self: TimeSeries) float
shift(self: TimeSeries, time_delta: int) TimeSeries

Return a new time series with the time axis shifted. The time axis will be allocated in a new std::vector, with ownership held by the time series.

property t

Time vector of the time series.

Type:

memoryview

t_to_numpy(self: TimeSeries) numpy.ndarray[numpy.int64]

Get a numpy array of the times of the time series.

property v

Value vector of the time series.

Type:

memoryview

v_to_numpy(self: TimeSeries) numpy.ndarray[numpy.float64]

Get a numpy array of the values of the time series.

class trident.domain.Waterway

Bases: pybind11_object

A waterway that connects reservoirs, hydraulic junctions, and the sea.

__init__(self: Waterway) None
property downstream_reservoir_id

Identifier of downstream entity

Type:

str

property id

Unique object identifier

Type:

str

property name

Unique name

Type:

str

property upstream_reservoir_id

Identifier of upstream entity

Type:

str

property waterway_type

Type of waterway. Type controls model behaviour

Type:

WaterwayType

class trident.domain.WaterwayType

Bases: pybind11_object

The type of a waterway.

Members:

NONE : Undefined waterway type

DISCHARGE : A waterway used for water discharged from a HydroPlant

BYPASS : A waterway used for release bypassing a HydroPlant discharge path

SPILLAGE : A path taken by water when a Reservoir is full

PUMP_TUNNEL : A path taken by water when pumped to an upstream Reservoir

TUNNEL : Open tunnel between reservoirs. This should be connected to an equalizing junction. This represents a generic connection between nodes. This is one-way as with all other pathways, although not neccesarily in a “downward” direction. See “AN Filstruktur_V10.pdf” section 15.9.2 page 134

BYPASS = <WaterwayType.BYPASS: 2>
DISCHARGE = <WaterwayType.DISCHARGE: 1>
NONE = <WaterwayType.NONE: 0>
PUMP_TUNNEL = <WaterwayType.PUMP_TUNNEL: 4>
SPILLAGE = <WaterwayType.SPILLAGE: 3>
TUNNEL = <WaterwayType.TUNNEL: 5>
__init__(self: WaterwayType, value: int) None
property name
Type:

str

property value
Type:

int

class trident.domain.WindPark

Bases: pybind11_object

A wind power park.

__init__(self: WindPark) None
property area_id

Identifier of the associated area

Type:

str

property has_cost

Set to true if the wind park has a cost associated with it. Plant will be handled like market steps with capacity and cost if true.

Type:

bool

property id

Unique object identifier

Type:

str

property name

Unique name

Type:

str

property owner_share

Owner share (percentage)

Type:

float

property production_weight_id

Identifier for resource (time series) with production weight

Type:

str

class trident.domain.XYCurve

Bases: pybind11_object

The XYCurve class stores two vectors, one with the X-values, and one with the corresponding Y-values. The class supports compression, such that if two subsequent values have the save value, only the first element is stored. Thus to retrieve all values, the XYCurveIter class should be applied.

__init__(*args, **kwargs)

Overloaded function.

  1. __init__(self: trident.domain._trident_domain.XYCurve) -> None

  2. __init__(self: trident.domain._trident_domain.XYCurve, x: list[float], y: list[float]) -> None

  3. __init__(self: trident.domain._trident_domain.XYCurve, x: list[float], y: list[float], interpolation: trident.domain._trident_domain.Interpolation) -> None

at(self: XYCurve, x: float) float

Get the curve’s y value at x.

iter_x(start, stop, delta)
iter_y(start, stop, delta)
property x
Type:

list[float]

property y
Type:

list[float]

class trident.domain.XYTimeSeries(*args)

Bases: pybind11_object

__init__(*args)
at(self: XYTimeSeries, arg0: int) XYCurve
property t
Type:

memoryview

property v
Type:

trident.domain._trident_domain.XyCurveSpan