power-openapi-models 0.2.0__tar.gz → 0.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {power_openapi_models-0.2.0/src/power_openapi_models.egg-info → power_openapi_models-0.3.0}/PKG-INFO +1 -1
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0}/pyproject.toml +1 -1
- power_openapi_models-0.3.0/src/power_openapi_models/_schema_version.txt +1 -0
- {power_openapi_models-0.2.0/src/power_openapi_models/bundles/0.2.0 → power_openapi_models-0.3.0/src/power_openapi_models/bundles/0.3.0}/PortfolioDocument.json +96 -26
- {power_openapi_models-0.2.0/src/power_openapi_models/bundles/0.2.0 → power_openapi_models-0.3.0/src/power_openapi_models/bundles/0.3.0}/SystemDocument.json +305 -43
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0}/src/power_openapi_models/core/models.py +146 -6
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0}/src/power_openapi_models/dynamics/models.py +262 -1
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0}/src/power_openapi_models/infrastructure_core/models.py +61 -3
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0}/src/power_openapi_models/investments/models.py +64 -1
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0}/src/power_openapi_models/operations/models.py +281 -12
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0}/src/power_openapi_models/timeseries/models.py +40 -1
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0/src/power_openapi_models.egg-info}/PKG-INFO +1 -1
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0}/src/power_openapi_models.egg-info/SOURCES.txt +4 -3
- power_openapi_models-0.3.0/tests/test_unknown_properties.py +36 -0
- power_openapi_models-0.2.0/src/power_openapi_models/_schema_version.txt +0 -1
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0}/LICENSE +0 -0
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0}/README.md +0 -0
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0}/setup.cfg +0 -0
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0}/src/power_openapi_models/__init__.py +0 -0
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0}/src/power_openapi_models/_versioning.py +0 -0
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0}/src/power_openapi_models/core/__init__.py +0 -0
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0}/src/power_openapi_models/document.py +0 -0
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0}/src/power_openapi_models/dynamics/__init__.py +0 -0
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0}/src/power_openapi_models/infrastructure_core/__init__.py +0 -0
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0}/src/power_openapi_models/investments/__init__.py +0 -0
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0}/src/power_openapi_models/operations/__init__.py +0 -0
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0}/src/power_openapi_models/py.typed +0 -0
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0}/src/power_openapi_models/timeseries/__init__.py +0 -0
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0}/src/power_openapi_models/timestamps.py +0 -0
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0}/src/power_openapi_models.egg-info/dependency_links.txt +0 -0
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0}/src/power_openapi_models.egg-info/requires.txt +0 -0
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0}/src/power_openapi_models.egg-info/top_level.txt +0 -0
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0}/tests/test_document.py +0 -0
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0}/tests/test_document_versioning.py +0 -0
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0}/tests/test_import.py +0 -0
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0}/tests/test_public_api.py +0 -0
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0}/tests/test_readme.py +0 -0
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0}/tests/test_serde_fixture.py +0 -0
- {power_openapi_models-0.2.0 → power_openapi_models-0.3.0}/tests/test_timestamps.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
v0.3.0
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$comment": "Strict validation bundle for schema release 0.
|
|
2
|
+
"$comment": "Strict validation bundle for schema release 0.3.0.",
|
|
3
3
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
4
4
|
"additionalProperties": false,
|
|
5
5
|
"definitions": {
|
|
@@ -180,6 +180,15 @@
|
|
|
180
180
|
"description": "Name of the component. Components of the same type (e.g., `PowerLoad`) must have unique names, but components of different types (e.g., `PowerLoad` and `ACBus`) can have the same name.",
|
|
181
181
|
"type": "string"
|
|
182
182
|
},
|
|
183
|
+
"out_of_area_load_ids": {
|
|
184
|
+
"default": [],
|
|
185
|
+
"description": "IDs of the loads that belong to this area but connect to a bus in another area (PSS/E off-area loads). When area interchange control includes these loads (PSS/E AREAIN=2), their demand counts in the net interchange of this area, not of the area of their bus.",
|
|
186
|
+
"items": {
|
|
187
|
+
"type": "integer"
|
|
188
|
+
},
|
|
189
|
+
"type": "array",
|
|
190
|
+
"uniqueItems": true
|
|
191
|
+
},
|
|
183
192
|
"peak_active_power": {
|
|
184
193
|
"default": 0.0,
|
|
185
194
|
"description": "Peak active power in the area. Units: per power_units \u2014 NATURAL_UNITS: MW, COMPONENT_BASE: pu .",
|
|
@@ -193,6 +202,13 @@
|
|
|
193
202
|
"power_units": {
|
|
194
203
|
"$ref": "#/definitions/UnitSystem",
|
|
195
204
|
"description": "Unit basis for this component's power-family fields (active/reactive/apparent power, ratings, limits, ramp rates). COMPONENT_BASE: per unit on this component's own base_power. NATURAL_UNITS: the field's physical unit."
|
|
205
|
+
},
|
|
206
|
+
"scheduled_net_interchange": {
|
|
207
|
+
"description": "Scheduled net active power interchange of the area (PSS/E PDES): the area's total export minus its total import that area interchange control holds. Positive means the area exports power. `null` when the area has no scheduled interchange; `0.0` is a valid schedule. Units: per power_units \u2014 NATURAL_UNITS: MW, COMPONENT_BASE: pu .",
|
|
208
|
+
"type": [
|
|
209
|
+
"number",
|
|
210
|
+
"null"
|
|
211
|
+
]
|
|
196
212
|
}
|
|
197
213
|
},
|
|
198
214
|
"required": [
|
|
@@ -206,7 +222,7 @@
|
|
|
206
222
|
},
|
|
207
223
|
"AverageRateCurve": {
|
|
208
224
|
"additionalProperties": false,
|
|
209
|
-
"description": "A curve whose y values are the average rate `f(x)/x` at production level `x` \u2014 total cost or fuel divided by output, the form heat rate tables use when they report
|
|
225
|
+
"description": "A curve whose y values are the average rate `f(x)/x` at production level `x` \u2014 total cost or fuel divided by output, the form heat rate tables use when they report MMBtu/MWh against MW. `initial_input` records the total input at the minimum production point and is what makes conversion to an `InputOutputCurve` possible. Use `IncrementalCurve` when the data gives marginal rather than average rates.",
|
|
210
226
|
"properties": {
|
|
211
227
|
"curve_type": {
|
|
212
228
|
"const": "AVERAGE_RATE",
|
|
@@ -572,6 +588,10 @@
|
|
|
572
588
|
"id": {
|
|
573
589
|
"type": "integer"
|
|
574
590
|
},
|
|
591
|
+
"license": {
|
|
592
|
+
"description": "License of the source data, if known: an SPDX identifier such as 'CC-BY-4.0', or a license name or URL.",
|
|
593
|
+
"type": "string"
|
|
594
|
+
},
|
|
575
595
|
"organization": {
|
|
576
596
|
"description": "Publishing organization, e.g. 'U.S. Energy Information Administration'.",
|
|
577
597
|
"type": "string"
|
|
@@ -822,6 +842,11 @@
|
|
|
822
842
|
"$ref": "#/definitions/Period",
|
|
823
843
|
"description": "Step between the start of consecutive forecast windows. Part of the series' identity: two forecasts of one variable at the same resolution but different intervals \u2014 a day-ahead and a real-time forecast \u2014 are distinct series. `PT0S` is the canonical interval of a single-window forecast, which has no second window to step to."
|
|
824
844
|
},
|
|
845
|
+
"interval_alignment": {
|
|
846
|
+
"$ref": "#/definitions/IntervalAlignment",
|
|
847
|
+
"default": "PERIOD_ENDING",
|
|
848
|
+
"description": "Position of each timestamp in the period it represents."
|
|
849
|
+
},
|
|
825
850
|
"name": {
|
|
826
851
|
"description": "Time series name (e.g. max_active_power). Part of the series' identity, and often carrying a disambiguating suffix; `component_field` records what the values are for.",
|
|
827
852
|
"type": "string"
|
|
@@ -953,6 +978,11 @@
|
|
|
953
978
|
"$ref": "#/definitions/Period",
|
|
954
979
|
"description": "Step between the start of consecutive forecast windows. Part of the series' identity: two forecasts of one variable at the same resolution but different intervals \u2014 a day-ahead and a real-time forecast \u2014 are distinct series. `PT0S` is the canonical interval of a single-window forecast, which has no second window to step to."
|
|
955
980
|
},
|
|
981
|
+
"interval_alignment": {
|
|
982
|
+
"$ref": "#/definitions/IntervalAlignment",
|
|
983
|
+
"default": "PERIOD_ENDING",
|
|
984
|
+
"description": "Position of each timestamp in the period it represents."
|
|
985
|
+
},
|
|
956
986
|
"name": {
|
|
957
987
|
"description": "Time series name (e.g. max_active_power). Part of the series' identity, and often carrying a disambiguating suffix; `component_field` records what the values are for.",
|
|
958
988
|
"type": "string"
|
|
@@ -1204,10 +1234,10 @@
|
|
|
1204
1234
|
},
|
|
1205
1235
|
"FuelCurve": {
|
|
1206
1236
|
"additionalProperties": false,
|
|
1207
|
-
"description": "Variable operation cost of a device expressed in fuel consumed
|
|
1237
|
+
"description": "Variable operation cost of a device expressed in fuel consumed, in the fuel quantity `fuel_units` names, together with the price that converts fuel to currency. Wraps a `ValueCurve` in input-output, incremental, or average-rate form, whose y axis is fuel per hour; exactly one of `fuel_cost` and `fuel_cost_time_series` supplies the price.",
|
|
1208
1238
|
"properties": {
|
|
1209
1239
|
"fuel_cost": {
|
|
1210
|
-
"description": "Fixed fuel cost per
|
|
1240
|
+
"description": "Fixed fuel cost in USD per one `fuel_units` of fuel, or null when fuel_cost_time_series names a time-varying one. Exactly one of the two is set; producers and consumers enforce it.",
|
|
1211
1241
|
"type": [
|
|
1212
1242
|
"number",
|
|
1213
1243
|
"null"
|
|
@@ -1220,12 +1250,16 @@
|
|
|
1220
1250
|
"null"
|
|
1221
1251
|
]
|
|
1222
1252
|
},
|
|
1253
|
+
"fuel_units": {
|
|
1254
|
+
"$ref": "#/definitions/FuelUnit",
|
|
1255
|
+
"description": "The fuel quantity the curve's y axis counts (per hour) and `fuel_cost` is priced per. No default: an unstated fuel unit is ambiguous."
|
|
1256
|
+
},
|
|
1223
1257
|
"power_units": {
|
|
1224
1258
|
"$ref": "#/definitions/UnitSystem"
|
|
1225
1259
|
},
|
|
1226
1260
|
"startup_fuel_offtake": {
|
|
1227
1261
|
"$ref": "#/definitions/InputOutputCurve",
|
|
1228
|
-
"description": "Fuel consumed during startup, as a curve in
|
|
1262
|
+
"description": "Fuel consumed during startup, as a curve in `fuel_units`."
|
|
1229
1263
|
},
|
|
1230
1264
|
"value_curve": {
|
|
1231
1265
|
"$ref": "#/definitions/ValueCurve"
|
|
@@ -1242,12 +1276,22 @@
|
|
|
1242
1276
|
"required": [
|
|
1243
1277
|
"value_curve",
|
|
1244
1278
|
"power_units",
|
|
1279
|
+
"fuel_units",
|
|
1245
1280
|
"vom_cost",
|
|
1246
1281
|
"variable_cost_type"
|
|
1247
1282
|
],
|
|
1248
1283
|
"title": "FuelCurve",
|
|
1249
1284
|
"type": "object"
|
|
1250
1285
|
},
|
|
1286
|
+
"FuelUnit": {
|
|
1287
|
+
"description": "Fuel quantity a `FuelCurve` is expressed in: `MMBTU` (million British thermal units) or `GJ` (gigajoules) of heat content.",
|
|
1288
|
+
"enum": [
|
|
1289
|
+
"MMBTU",
|
|
1290
|
+
"GJ"
|
|
1291
|
+
],
|
|
1292
|
+
"title": "FuelUnit",
|
|
1293
|
+
"type": "string"
|
|
1294
|
+
},
|
|
1251
1295
|
"FunctionData": {
|
|
1252
1296
|
"description": "Raw mathematical data defining a function `f(x)` \u2014 coefficients or point tables with no units or interpretation attached. `function_type` selects the shape: linear, quadratic, piecewise linear through (x, y) points, or piecewise constant between x endpoints. What `x` and `y` stand for is supplied by whatever wraps this, and the `TIME_SERIES_*` variants hold a reference to a stored series in place of the numbers.",
|
|
1253
1297
|
"oneOf": [
|
|
@@ -1453,6 +1497,16 @@
|
|
|
1453
1497
|
"title": "InputOutputCurve",
|
|
1454
1498
|
"type": "object"
|
|
1455
1499
|
},
|
|
1500
|
+
"IntervalAlignment": {
|
|
1501
|
+
"description": "Position of a timestamp in the period of length `resolution` that its value represents. At a one-hour resolution, the value at 01:00 covers 01:00 to 02:00 for `PERIOD_BEGINNING`, 00:30 to 01:30 for `PERIOD_MIDPOINT`, and 00:00 to 01:00 for `PERIOD_ENDING`. Descriptive: the store records it and does not realign a series.",
|
|
1502
|
+
"enum": [
|
|
1503
|
+
"PERIOD_BEGINNING",
|
|
1504
|
+
"PERIOD_MIDPOINT",
|
|
1505
|
+
"PERIOD_ENDING"
|
|
1506
|
+
],
|
|
1507
|
+
"title": "IntervalAlignment",
|
|
1508
|
+
"type": "string"
|
|
1509
|
+
},
|
|
1456
1510
|
"LinearFunctionData": {
|
|
1457
1511
|
"additionalProperties": false,
|
|
1458
1512
|
"description": "Data for a linear function `f(x) = proportional_term * x + constant_term`.",
|
|
@@ -1909,7 +1963,7 @@
|
|
|
1909
1963
|
},
|
|
1910
1964
|
"points": {
|
|
1911
1965
|
"items": {
|
|
1912
|
-
"$ref": "#/definitions/
|
|
1966
|
+
"$ref": "#/definitions/TwoDimensionalFunctionPoint"
|
|
1913
1967
|
},
|
|
1914
1968
|
"type": "array"
|
|
1915
1969
|
}
|
|
@@ -2105,6 +2159,11 @@
|
|
|
2105
2159
|
"$ref": "#/definitions/Period",
|
|
2106
2160
|
"description": "Step between the start of consecutive forecast windows. Part of the series' identity: two forecasts of one variable at the same resolution but different intervals \u2014 a day-ahead and a real-time forecast \u2014 are distinct series. `PT0S` is the canonical interval of a single-window forecast, which has no second window to step to."
|
|
2107
2161
|
},
|
|
2162
|
+
"interval_alignment": {
|
|
2163
|
+
"$ref": "#/definitions/IntervalAlignment",
|
|
2164
|
+
"default": "PERIOD_ENDING",
|
|
2165
|
+
"description": "Position of each timestamp in the period it represents."
|
|
2166
|
+
},
|
|
2108
2167
|
"name": {
|
|
2109
2168
|
"description": "Time series name (e.g. max_active_power). Part of the series' identity, and often carrying a disambiguating suffix; `component_field` records what the values are for.",
|
|
2110
2169
|
"type": "string"
|
|
@@ -2429,6 +2488,11 @@
|
|
|
2429
2488
|
"$ref": "#/definitions/Period",
|
|
2430
2489
|
"description": "Step between the start of consecutive forecast windows. Part of the series' identity: two forecasts of one variable at the same resolution but different intervals \u2014 a day-ahead and a real-time forecast \u2014 are distinct series. `PT0S` is the canonical interval of a single-window forecast, which has no second window to step to."
|
|
2431
2490
|
},
|
|
2491
|
+
"interval_alignment": {
|
|
2492
|
+
"$ref": "#/definitions/IntervalAlignment",
|
|
2493
|
+
"default": "PERIOD_ENDING",
|
|
2494
|
+
"description": "Position of each timestamp in the period it represents."
|
|
2495
|
+
},
|
|
2432
2496
|
"name": {
|
|
2433
2497
|
"description": "Time series name (e.g. max_active_power). Part of the series' identity, and often carrying a disambiguating suffix; `component_field` records what the values are for.",
|
|
2434
2498
|
"type": "string"
|
|
@@ -2553,6 +2617,11 @@
|
|
|
2553
2617
|
"format": "date-time",
|
|
2554
2618
|
"type": "string"
|
|
2555
2619
|
},
|
|
2620
|
+
"interval_alignment": {
|
|
2621
|
+
"$ref": "#/definitions/IntervalAlignment",
|
|
2622
|
+
"default": "PERIOD_ENDING",
|
|
2623
|
+
"description": "Position of each timestamp in the period it represents."
|
|
2624
|
+
},
|
|
2556
2625
|
"length": {
|
|
2557
2626
|
"description": "Number of timesteps.",
|
|
2558
2627
|
"minimum": 0,
|
|
@@ -3253,6 +3322,7 @@
|
|
|
3253
3322
|
"id",
|
|
3254
3323
|
"initial_timestamp",
|
|
3255
3324
|
"interval",
|
|
3325
|
+
"interval_alignment",
|
|
3256
3326
|
"length",
|
|
3257
3327
|
"name",
|
|
3258
3328
|
"owner_category",
|
|
@@ -3422,6 +3492,26 @@
|
|
|
3422
3492
|
"title": "TimeSeriesQuadraticFunctionData",
|
|
3423
3493
|
"type": "object"
|
|
3424
3494
|
},
|
|
3495
|
+
"TwoDimensionalFunctionPoint": {
|
|
3496
|
+
"additionalProperties": false,
|
|
3497
|
+
"description": "A single point, given as its `x` and `y` coordinates.",
|
|
3498
|
+
"properties": {
|
|
3499
|
+
"x": {
|
|
3500
|
+
"description": "Units: the wrapped function's input unit.",
|
|
3501
|
+
"type": "number"
|
|
3502
|
+
},
|
|
3503
|
+
"y": {
|
|
3504
|
+
"description": "Units: the wrapped function's output unit.",
|
|
3505
|
+
"type": "number"
|
|
3506
|
+
}
|
|
3507
|
+
},
|
|
3508
|
+
"required": [
|
|
3509
|
+
"x",
|
|
3510
|
+
"y"
|
|
3511
|
+
],
|
|
3512
|
+
"title": "TwoDimensionalFunctionPoint",
|
|
3513
|
+
"type": "object"
|
|
3514
|
+
},
|
|
3425
3515
|
"UnitSystem": {
|
|
3426
3516
|
"description": "Unit basis a stored value is expressed in. COMPONENT_BASE: per-unit against a base the component records itself. NATURAL_UNITS: the quantity's own physical unit. No system-wide option: a value per-unitized against a shared base records that base on the component and rides as COMPONENT_BASE. Used in three scopes, each read against its own record rather than a document-wide table: a component's own `power_units` (against that component's `base_power`), a cost payload's own `power_units` (e.g. `CostCurve`, against the owning component's `base_power`), and a time series association's own `unit_system` (governing only that one series).",
|
|
3427
3517
|
"enum": [
|
|
@@ -3475,26 +3565,6 @@
|
|
|
3475
3565
|
],
|
|
3476
3566
|
"title": "ValueCurve",
|
|
3477
3567
|
"type": "object"
|
|
3478
|
-
},
|
|
3479
|
-
"XY_Coords": {
|
|
3480
|
-
"additionalProperties": false,
|
|
3481
|
-
"description": "A single point, given as its `x` and `y` coordinates.",
|
|
3482
|
-
"properties": {
|
|
3483
|
-
"x": {
|
|
3484
|
-
"description": "Units: the wrapped function's input unit.",
|
|
3485
|
-
"type": "number"
|
|
3486
|
-
},
|
|
3487
|
-
"y": {
|
|
3488
|
-
"description": "Units: the wrapped function's output unit.",
|
|
3489
|
-
"type": "number"
|
|
3490
|
-
}
|
|
3491
|
-
},
|
|
3492
|
-
"required": [
|
|
3493
|
-
"x",
|
|
3494
|
-
"y"
|
|
3495
|
-
],
|
|
3496
|
-
"title": "XY_Coords",
|
|
3497
|
-
"type": "object"
|
|
3498
3568
|
}
|
|
3499
3569
|
},
|
|
3500
3570
|
"description": "The serialized form of a whole investment portfolio: the candidate technologies, regional aggregations, and policy requirements that make up an expansion problem, the supplemental attributes that describe them, the association tables that link them, and the names of the sidecar files holding the base power system and the time series values. This is the interchange format between producers of portfolio data and the consumers that expand or solve it, so the shape is defined here rather than by convention in each producer.\n\nThere is no document-level unit system or base power. A portfolio records every value in natural units and, unlike a power system, carries no per-unit basis of its own: there is no `power_units`/`base_power` resolution to perform at the document level. The only unit marker that ever appears is an embedded cost payload's own `power_units` (on a CostCurve or FuelCurve), which is intrinsic to that curve and interpreted from the curve alone.\n\nDeliberately excluded from openapi-generator: `components` is a map from type name to an array of heterogeneous component objects, which the generated client cannot express as typed buckets. The hand-written container in the generated investments model package (`src/openapi/document.jl`) is the single representation of that type ordering, and its fields are checked against this file. This schema remains authoritative for every other language binding.\n\nThe base power system the portfolio expands is not embedded: `base_system_file` names a sidecar holding it as its own system document, so a portfolio and its base system can be written, moved, and read together. Time series *values* likewise never appear here \u2014 `time_series_associations` carries the metadata rows and `time_series_storage_file` names the sidecar; reading or writing that file is the consumer's job.",
|