Util

pyltm.util.make_txy(*args, **kwargs)

Overloaded function.

  1. make_txy(values: list[tuple[str, list[float]]]) -> pyltm._core_pyltm.Txy

    Creates a Txy from a list of timestamps and values.

    Example:

    ``` txy = make_txy(

    [

    (“2023-W01”, [1, 2, 3, 4, 5]), (“2023-W02”, [1, 2, 3, 4, 5]), (“2023-W03”, [1, 2, 3, 4, 5]), (“2023-W04”, [1, 2, 3, 4, 5]),

    ]

  2. make_txy(values: list[tuple[datetime.datetime, list[float]]]) -> pyltm._core_pyltm.Txy

    Creates a Txy from a list of DateTime-timestamps and values.

    Example:

    ``` d1 = datetime(2023, 1, 2) d2 = d1 + timedelta(weeks=1) d3 = d1 + timedelta(weeks=2) d4 = d1 + timedelta(weeks=3)

    txy = make_txy(
    [

    (d1, [1, 2, 3, 4, 5]), (d2, [1, 2, 3, 4, 5]), (d3, [1, 2, 3, 4, 5]), (d4, [1, 2, 3, 4, 5]),

    ]

pyltm has a submodule named util.

Some of the more useful methods are the ones to create various ``Txy``s.

make_txy

When you want to create a Txy object, you can use the make_txy function.

Previously it was only possible to create a Txy with two distinct lists, one for timestamps and one for scenarios.

With the new way, it is possible to create a Txy with a list of tuples, where each tuple contains a timestamp and a list of values for each scenario.

Consider the original method:

import pyltm

# Original
inflow = pyltm.Txy()

inflow.timestamps = [
    datetime(2024, 1, 1),
    datetime(2024, 5, 1),
    datetime(2024, 10, 1),
]
inflow.scenarios = [
    [1.01, 3.90, 2.82],
    [0.81, 3.12, 2.25],
    [0.40, 1.56, 1.13],
    [0.53, 2.03, 1.46],
    [0.44, 1.72, 1.24],
    [0.61, 2.34, 1.69],
    [0.93, 3.58, 2.59],
    [0.69, 2.65, 1.92],
]

With the new way:

import pyltm

# New way
inflow2 = pyltm.util.make_txy(
    [
        (
            "2024-01-01T00:00:00Z",
            [1.01, 0.81, 0.40, 0.53, 0.44, 0.61, 0.93, 0.69],
        ),
        (
            "2024-05-01T00:00:00Z",
            [3.90, 3.12, 1.56, 2.03, 1.72, 2.34, 3.58, 2.65],
        ),
        (
            "2024-10-01T00:00:00Z",
            [2.82, 2.25, 1.13, 1.46, 1.24, 1.69, 2.59, 1.92],
        ),
    ],
)

# Make sure they are equal
assert inflow == inflow2

Functionally they are equivalent. It is way simpler to add a timestamp with the new way, than with the original method.

For a more complete example where make_txy is used to create timeseries for regulated and unregulated energy inflow for an aggregated hydro module.:

import pyltm

# Previous
agg_hydro_hallingdal = session.model.add(
"enmag",
"hallingdal_enmag_aggregated",
    {
        "reservoir_energy": 100000.0,
        "station_power": 22.0,
        "start_reservoir_energy": 60000,
        "regulated_energy_inflow": {
            "timestamps": [
                "2024-01-01T00:00:00Z",
                "2024-05-01T00:00:00Z",
                "2024-10-01T00:00:00Z",
            ],
            "scenarios": [
                [1.01, 3.90, 2.82],
                [0.81, 3.12, 2.25],
                [0.40, 1.56, 1.13],
                [0.53, 2.03, 1.46],
                [0.44, 1.72, 1.24],
                [0.61, 2.34, 1.69],
                [0.93, 3.58, 2.59],
                [0.69, 2.65, 1.92],
            ],
        },
        "unregulated_energy_inflow": {
            "timestamps": [
                "2024-01-01T00:00:00Z",
                "2024-05-01T00:00:00Z",
                "2024-10-01T00:00:00Z",
            ],
            "scenarios": [
                [0.06, 0.23, 0.17],
                [0.07, 0.28, 0.20],
                [0.03, 0.12, 0.09],
                [0.04, 0.16, 0.11],
                [0.08, 0.31, 0.23],
                [0.05, 0.19, 0.14],
                [0.05, 0.19, 0.14],
                [0.04, 0.14, 0.10],
            ],
        },
    },
)

# New way
agg_hydro_hallingdal = pyltm.AggregatedHydroModule()
session.model.add(agg_hydro_hallingdal)
agg_hydro_hallingdal.name = "hallingdal_enmag_aggregated"
agg_hydro_hallingdal.reservoir_energy = 100000.0
agg_hydro_hallingdal.station_power = 22.0
agg_hydro_hallingdal.start_reservoir_energy = 60000
agg_hydro_hallingdal.regulated_power_inflow = pyltm.util.make_txy(
    [
        (
            "2024-01-01T00:00:00Z",
            [1.01, 0.81, 0.40, 0.53, 0.44, 0.61, 0.93, 0.69],
        ),
        (
            "2024-05-01T00:00:00Z",
            [3.90, 3.12, 1.56, 2.03, 1.72, 2.34, 3.58, 2.65],
        ),
        (
            "2024-10-01T00:00:00Z",
            [2.82, 2.25, 1.13, 1.46, 1.24, 1.69, 2.59, 1.92],
        ),
    ],
)
agg_hydro_hallingdal.unregulated_power_inflow = pyltm.util.make_txy(
    [
        (
            "2024-01-01T00:00:00Z",
            [0.06, 0.07, 0.03, 0.04, 0.08, 0.05, 0.05, 0.04],
        ),
        (
            "2024-05-01T00:00:00Z",
            [0.23, 0.28, 0.12, 0.16, 0.31, 0.19, 0.19, 0.14],
        ),
        (
            "2024-10-01T00:00:00Z",
            [0.17, 0.20, 0.09, 0.11, 0.23, 0.14, 0.14, 0.10],
        ),
    ],
)