From b02d68dbc615b9802c54d6e9806430aceee1b354 Mon Sep 17 00:00:00 2001 From: Jostein Solaas <33114722+jsolaas@users.noreply.github.com> Date: Fri, 15 Sep 2023 14:03:23 +0200 Subject: [PATCH] refactor: generate time series schema (#176) --- .../references/keywords/EXTRAPOLATION.md | 23 +- .../validation/json_schemas/time-series.json | 146 ---------- .../input/yaml_types/components/yaml_asset.py | 10 +- .../time_series/yaml_time_series.py | 70 +++++ .../test_json_schema_changed/schemas.json | 262 ++++++++---------- 5 files changed, 193 insertions(+), 318 deletions(-) delete mode 100644 src/ecalc/libraries/libecalc/common/libecalc/input/validation/json_schemas/time-series.json create mode 100644 src/ecalc/libraries/libecalc/common/libecalc/input/yaml_types/time_series/yaml_time_series.py diff --git a/docs/docs/about/references/keywords/EXTRAPOLATION.md b/docs/docs/about/references/keywords/EXTRAPOLATION.md index 2b73b8a119..a71812f8b9 100644 --- a/docs/docs/about/references/keywords/EXTRAPOLATION.md +++ b/docs/docs/about/references/keywords/EXTRAPOLATION.md @@ -9,19 +9,13 @@ ## Description :::caution -Only valid for CSV data of type `MISCELLANEOUS`. For `TIME_SERIES` of [TYPE](TYPE) -`DEFAULT` the keyword is not supported as input, and the functionality is defaulted to `False`.. +Only valid for `TIME_SERIES` of [TYPE](TYPE) `MISCELLANEOUS`. For type +`DEFAULT` the keyword is not supported as input, and the functionality is defaulted to `False`. ::: -Defines whether the rates in the source should be set to 0 after the last time step, or equal -to value at last time step after the time interval. +Defines whether the rates in the source should be set to 0 after the last time step (`False`), or equal +to value at last time step after the time interval (`True`). -Not supported when [TYPE](TYPE) is set to `DEFAULT`. - -| `TYPE` set to | `EXTRAPOLATION` default | -|-------------------------------------------|--------------------------------------| -| `DEFAULT` | Not supported | -| `MISCELLANEOUS` | No default | ## Format ~~~~~~~~yaml @@ -29,10 +23,11 @@ EXTRAPOLATION: ~~~~~~~~ ### Requirements -[EXTRAPOLATION](EXTRAPOLATION) has to be specified if -[TYPE](TYPE) is set to `MISCELLANEOUS`. -[EXTRAPOLATION](EXTRAPOLATION) can not be specified if -[TYPE](TYPE) is set to `DEFAULT`. + +| `TYPE` set to | `EXTRAPOLATION` default | +|-------------------------------------|-------------------------| +| `DEFAULT` | always `False` | +| `MISCELLANEOUS` | `False` | ## Example See the [TIME_SERIES](TIME_SERIES.md) `time_series_format`. diff --git a/src/ecalc/libraries/libecalc/common/libecalc/input/validation/json_schemas/time-series.json b/src/ecalc/libraries/libecalc/common/libecalc/input/validation/json_schemas/time-series.json deleted file mode 100644 index a3334e9bea..0000000000 --- a/src/ecalc/libraries/libecalc/common/libecalc/input/validation/json_schemas/time-series.json +++ /dev/null @@ -1,146 +0,0 @@ -{ - "id": "$SERVER_NAME/api/v1/schema-validation/time-series.json", - "type": "object", - "title": "ecalc yaml setup", - "description": "Time series", - "properties": { - "TIME_SERIES": { - "title": "TIME_SERIES", - "description": "Defines the inputs for time dependent variables, or “reservoir variables”.\n\n$ECALC_DOCS_KEYWORDS_URL/TIME_SERIES", - "type": "array", - "items": { - "oneOf": [ - { - "type": "object", - "properties": { - "NAME": { - "title": "NAME", - "description": "Name of the time series.\n\n$ECALC_DOCS_KEYWORDS_URL/NAME", - "type": "string" - }, - "FILE": { - "title": "FILE", - "description": "Specifies the name of a time series input file.\n\n$ECALC_DOCS_KEYWORDS_URL/FILE", - "type": "string" - }, - "TYPE": { - "title": "MISCELLANEOUS", - "description": "User defined file. All file interpretation options need to be set manually.\n\n$ECALC_DOCS_KEYWORDS_URL/TYPE#use-in-time-series", - "const": "MISCELLANEOUS" - }, - "INFLUENCE_TIME_VECTOR": { - "title": "INFLUENCE_TIME_VECTOR", - "description": "Determines if the time steps in this input source will contribute to the global time vector.\n\n$ECALC_DOCS_KEYWORDS_URL/INFLUENCE_TIME_VECTOR", - "type": "boolean" - }, - "EXTRAPOLATION": { - "title": "EXTRAPOLATION", - "description": "Defines whether the rates in the source should be set to 0 after last time step or constant equal to value at last time step after time interval.\n\n$ECALC_DOCS_KEYWORDS_URL/EXTRAPOLATION", - "type": "boolean" - }, - "INTERPOLATION_TYPE": { - "title": "INTERPOLATION_TYPE", - "description": "Defines how the time series are interpolated between input time steps.\n\n$ECALC_DOCS_KEYWORDS_URL/INTERPOLATION_TYPE", - "type": "string", - "anyOf": [ - { - "title": "LEFT", - "description": "The value at a certain time step is defining the value in the time interval before this time step.\n\n$ECALC_DOCS_KEYWORDS_URL/INTERPOLATION_TYPE", - "const": "LEFT" - }, - { - "title": "RIGHT", - "description": "The value at a certain time step is defining the value in the time interval after this time step.\n\n$ECALC_DOCS_KEYWORDS_URL/INTERPOLATION_TYPE", - "const": "RIGHT" - }, - { - "title": "LINEAR", - "description": "The value will be linearly interpolated between the time steps.\n\n$ECALC_DOCS_KEYWORDS_URL/INTERPOLATION_TYPE", - "const": "LINEAR" - } - ] - }, - "additionalProperties": false, - "required": [ - "NAME", - "FILE", - "TYPE", - "INFLUENCE_TIME_VECTOR", - "EXTRAPOLATION", - "INTERPOLATION_TYPE" - ] - } - }, - { - "type": "object", - "properties": { - "NAME": { - "title": "NAME", - "description": "Name of the time series.\n\n$ECALC_DOCS_KEYWORDS_URL/NAME", - "type": "string" - }, - "FILE": { - "title": "FILE", - "description": "Specifies the name of a time series input file.\n\n$ECALC_DOCS_KEYWORDS_URL/FILE", - "type": "string" - }, - "TYPE": { - "title": "TYPE", - "description": "Defines the type of time series input file.\n\n$ECALC_DOCS_KEYWORDS_URL/TYPE", - "type": "string", - "anyOf": [ - { - "title": "DEFAULT", - "description": "Reservoir profiles given in a CSV file.\n\n$ECALC_DOCS_KEYWORDS_URL/TYPE#use-in-time-series", - "const": "DEFAULT" - } - ] - }, - "INFLUENCE_TIME_VECTOR": { - "title": "INFLUENCE_TIME_VECTOR", - "description": "Determines if the time steps in this input source will contribute to the global time vector.\n\n$ECALC_DOCS_KEYWORDS_URL/INFLUENCE_TIME_VECTOR", - "type": "boolean" - }, - "EXTRAPOLATION": { - "title": "EXTRAPOLATION", - "description": "Defines whether the rates in the source should be set to 0 after last time step or constant equal to value at last time step after time interval.\n\n$ECALC_DOCS_KEYWORDS_URL/EXTRAPOLATION", - "type": "boolean" - }, - "INTERPOLATION_TYPE": { - "title": "INTERPOLATION_TYPE", - "description": "Defines how the time series are interpolated between input time steps.\n\n$ECALC_DOCS_KEYWORDS_URL/INTERPOLATION_TYPE", - "type": "string", - "anyOf": [ - { - "title": "LEFT", - "description": "The value at a certain time step is defining the value in the time interval before this time step.\n\n$ECALC_DOCS_KEYWORDS_URL/INTERPOLATION_TYPE", - "const": "LEFT" - }, - { - "title": "RIGHT", - "description": "The value at a certain time step is defining the value in the time interval after this time step.\n\n$ECALC_DOCS_KEYWORDS_URL/INTERPOLATION_TYPE", - "const": "RIGHT" - }, - { - "title": "LINEAR", - "description": "The value will be linearly interpolated between the time steps.\n\n$ECALC_DOCS_KEYWORDS_URL/INTERPOLATION_TYPE", - "const": "LINEAR" - } - ] - }, - "additionalProperties": false, - "required": [ - "NAME", - "FILE", - "TYPE", - "INFLUENCE_TIME_VECTOR", - "EXTRAPOLATION", - "INTERPOLATION_TYPE" - ] - } - } - ] - } - } - } -} diff --git a/src/ecalc/libraries/libecalc/common/libecalc/input/yaml_types/components/yaml_asset.py b/src/ecalc/libraries/libecalc/common/libecalc/input/yaml_types/components/yaml_asset.py index 27bab85754..e000d6b803 100644 --- a/src/ecalc/libraries/libecalc/common/libecalc/input/yaml_types/components/yaml_asset.py +++ b/src/ecalc/libraries/libecalc/common/libecalc/input/yaml_types/components/yaml_asset.py @@ -2,6 +2,9 @@ from libecalc.input.yaml_types import YamlBase from libecalc.input.yaml_types.components.yaml_installation import YamlInstallation +from libecalc.input.yaml_types.time_series.yaml_time_series import ( + YamlTimeSeriesCollection, +) from libecalc.input.yaml_types.yaml_placeholder_type import YamlPlaceholderType from libecalc.input.yaml_types.yaml_schema_helpers import ( replace_placeholder_property_with_legacy_ref, @@ -18,11 +21,6 @@ class Config: @staticmethod def schema_extra(schema: Dict[str, Any], model: Type["YamlInstallation"]) -> None: - replace_placeholder_property_with_legacy_ref( - schema=schema, - property_key="TIME_SERIES", - property_ref="$SERVER_NAME/api/v1/schema-validation/time-series.json#properties/TIME_SERIES", - ) replace_placeholder_property_with_legacy_ref( schema=schema, property_key="FACILITY_INPUTS", @@ -39,7 +37,7 @@ def schema_extra(schema: Dict[str, Any], model: Type["YamlInstallation"]) -> Non property_ref="$SERVER_NAME/api/v1/schema-validation/fuel-types.json#properties/FUEL_TYPES", ) - time_series: YamlPlaceholderType = Field( + time_series: List[YamlTimeSeriesCollection] = Field( None, title="TIME_SERIES", description="Defines the inputs for time dependent variables, or 'reservoir variables'." diff --git a/src/ecalc/libraries/libecalc/common/libecalc/input/yaml_types/time_series/yaml_time_series.py b/src/ecalc/libraries/libecalc/common/libecalc/input/yaml_types/time_series/yaml_time_series.py new file mode 100644 index 0000000000..8e5459a32b --- /dev/null +++ b/src/ecalc/libraries/libecalc/common/libecalc/input/yaml_types/time_series/yaml_time_series.py @@ -0,0 +1,70 @@ +from typing import Literal, Union + +from libecalc.input.yaml_types import YamlBase +from pydantic import Field + + +class YamlTimeSeriesCollectionBase(YamlBase): + class Config: + title = "TimeSeries" + + name: str = Field( + ..., + title="NAME", + description="Name of the time series.\n\n$ECALC_DOCS_KEYWORDS_URL/NAME", + ) + file: str = Field( + ..., + title="FILE", + description="Specifies the name of a time series input file.\n\n$ECALC_DOCS_KEYWORDS_URL/FILE", + ) + type: Literal["DEFAULT", "MISCELLANEOUS"] = Field( + ..., + title="TYPE", + description="Defines the type of time series input file.\n\n$ECALC_DOCS_KEYWORDS_URL/TYPE", + ) + influence_time_vector: bool = Field( + True, + title="INFLUENCE_TIME_VECTOR", + description="Determines if the time steps in this input source will contribute to the global time vector.\n\n$ECALC_DOCS_KEYWORDS_URL/INFLUENCE_TIME_VECTOR", + ) + + +class YamlDefaultTimeSeriesCollection(YamlTimeSeriesCollectionBase): + class Config: + fields = { + "interpolation_type": {"exclude": True}, + } + + type: Literal["DEFAULT"] = Field( + ..., + title="TYPE", + description="Defines the type of time series input file.\n\n$ECALC_DOCS_KEYWORDS_URL/TYPE", + ) + + interpolation_type: Literal["RIGHT"] = Field( + "RIGHT", + title="INTERPOLATION_TYPE", + description="Defines how the time series are interpolated between input time steps.\n\n$ECALC_DOCS_KEYWORDS_URL/INTERPOLATION_TYPE", + ) + + +class YamlMiscellaneousTimeSeriesCollection(YamlTimeSeriesCollectionBase): + type: Literal["MISCELLANEOUS"] = Field( + ..., + title="TYPE", + description="Defines the type of time series input file.\n\n$ECALC_DOCS_KEYWORDS_URL/TYPE", + ) + extrapolation: bool = Field( + False, + title="EXTRAPOLATION", + description="Defines whether the rates in the source should be set to 0 after last time step or constant equal to value at last time step after time interval.\n\n$ECALC_DOCS_KEYWORDS_URL/EXTRAPOLATION", + ) + interpolation_type: Literal["LEFT", "RIGHT", "LINEAR"] = Field( + ..., + title="INTERPOLATION_TYPE", + description="Defines how the time series are interpolated between input time steps.\n\n$ECALC_DOCS_KEYWORDS_URL/INTERPOLATION_TYPE", + ) + + +YamlTimeSeriesCollection = Union[YamlDefaultTimeSeriesCollection, YamlMiscellaneousTimeSeriesCollection] diff --git a/src/ecalc/libraries/libecalc/common/tests/input/validation/snapshots/test_validation_json_schemas/test_json_schema_changed/schemas.json b/src/ecalc/libraries/libecalc/common/tests/input/validation/snapshots/test_validation_json_schemas/test_json_schema_changed/schemas.json index 7835be18e3..5290d24281 100644 --- a/src/ecalc/libraries/libecalc/common/tests/input/validation/snapshots/test_validation_json_schemas/test_json_schema_changed/schemas.json +++ b/src/ecalc/libraries/libecalc/common/tests/input/validation/snapshots/test_validation_json_schemas/test_json_schema_changed/schemas.json @@ -332,6 +332,51 @@ "title": "CompressorSystemOperationalSettings", "type": "object" }, + "YamlDefaultTimeSeriesCollection": { + "additionalProperties": false, + "properties": { + "FILE": { + "description": "Specifies the name of a time series input file.\n\nhttps://test.ecalc.equinor.com/docs/docs/modelling/keywords/FILE", + "title": "FILE", + "type": "string" + }, + "INFLUENCE_TIME_VECTOR": { + "default": true, + "description": "Determines if the time steps in this input source will contribute to the global time vector.\n\nhttps://test.ecalc.equinor.com/docs/docs/modelling/keywords/INFLUENCE_TIME_VECTOR", + "title": "INFLUENCE_TIME_VECTOR", + "type": "boolean" + }, + "INTERPOLATION_TYPE": { + "default": "RIGHT", + "description": "Defines how the time series are interpolated between input time steps.\n\nhttps://test.ecalc.equinor.com/docs/docs/modelling/keywords/INTERPOLATION_TYPE", + "enum": [ + "RIGHT" + ], + "title": "INTERPOLATION_TYPE", + "type": "string" + }, + "NAME": { + "description": "Name of the time series.\n\nhttps://test.ecalc.equinor.com/docs/docs/modelling/keywords/NAME", + "title": "NAME", + "type": "string" + }, + "TYPE": { + "description": "Defines the type of time series input file.\n\nhttps://test.ecalc.equinor.com/docs/docs/modelling/keywords/TYPE", + "enum": [ + "DEFAULT" + ], + "title": "TYPE", + "type": "string" + } + }, + "required": [ + "NAME", + "FILE", + "TYPE" + ], + "title": "TimeSeries", + "type": "object" + }, "YamlElectricityConsumer": { "additionalProperties": false, "properties": { @@ -741,6 +786,59 @@ "title": "Installation", "type": "object" }, + "YamlMiscellaneousTimeSeriesCollection": { + "additionalProperties": false, + "properties": { + "EXTRAPOLATION": { + "default": false, + "description": "Defines whether the rates in the source should be set to 0 after last time step or constant equal to value at last time step after time interval.\n\nhttps://test.ecalc.equinor.com/docs/docs/modelling/keywords/EXTRAPOLATION", + "title": "EXTRAPOLATION", + "type": "boolean" + }, + "FILE": { + "description": "Specifies the name of a time series input file.\n\nhttps://test.ecalc.equinor.com/docs/docs/modelling/keywords/FILE", + "title": "FILE", + "type": "string" + }, + "INFLUENCE_TIME_VECTOR": { + "default": true, + "description": "Determines if the time steps in this input source will contribute to the global time vector.\n\nhttps://test.ecalc.equinor.com/docs/docs/modelling/keywords/INFLUENCE_TIME_VECTOR", + "title": "INFLUENCE_TIME_VECTOR", + "type": "boolean" + }, + "INTERPOLATION_TYPE": { + "description": "Defines how the time series are interpolated between input time steps.\n\nhttps://test.ecalc.equinor.com/docs/docs/modelling/keywords/INTERPOLATION_TYPE", + "enum": [ + "LEFT", + "RIGHT", + "LINEAR" + ], + "title": "INTERPOLATION_TYPE", + "type": "string" + }, + "NAME": { + "description": "Name of the time series.\n\nhttps://test.ecalc.equinor.com/docs/docs/modelling/keywords/NAME", + "title": "NAME", + "type": "string" + }, + "TYPE": { + "description": "Defines the type of time series input file.\n\nhttps://test.ecalc.equinor.com/docs/docs/modelling/keywords/TYPE", + "enum": [ + "MISCELLANEOUS" + ], + "title": "TYPE", + "type": "string" + } + }, + "required": [ + "NAME", + "FILE", + "TYPE", + "INTERPOLATION_TYPE" + ], + "title": "TimeSeries", + "type": "object" + }, "YamlPump": { "additionalProperties": false, "properties": { @@ -1134,9 +1232,19 @@ "type": "string" }, "TIME_SERIES": { - "$ref": "https://test.ecalc.equinor.com/api/v1/schema-validation/time-series.json#properties/TIME_SERIES", "description": "Defines the inputs for time dependent variables, or 'reservoir variables'.\n\nhttps://test.ecalc.equinor.com/docs/docs/modelling/keywords/TIME_SERIES", - "title": "TIME_SERIES" + "items": { + "anyOf": [ + { + "$ref": "#/definitions/YamlDefaultTimeSeriesCollection" + }, + { + "$ref": "#/definitions/YamlMiscellaneousTimeSeriesCollection" + } + ] + }, + "title": "TIME_SERIES", + "type": "array" }, "VARIABLES": { "additionalProperties": { @@ -4011,155 +4119,5 @@ "type": "object" }, "uri": "https://test.ecalc.equinor.com/api/v1/schema-validation/models.json" - }, - { - "fileMatch": [], - "schema": { - "description": "Time series", - "id": "https://test.ecalc.equinor.com/api/v1/schema-validation/time-series.json", - "properties": { - "TIME_SERIES": { - "description": "Defines the inputs for time dependent variables, or \u201creservoir variables\u201d.\n\nhttps://test.ecalc.equinor.com/docs/docs/modelling/keywords/TIME_SERIES", - "items": { - "oneOf": [ - { - "properties": { - "EXTRAPOLATION": { - "description": "Defines whether the rates in the source should be set to 0 after last time step or constant equal to value at last time step after time interval.\n\nhttps://test.ecalc.equinor.com/docs/docs/modelling/keywords/EXTRAPOLATION", - "title": "EXTRAPOLATION", - "type": "boolean" - }, - "FILE": { - "description": "Specifies the name of a time series input file.\n\nhttps://test.ecalc.equinor.com/docs/docs/modelling/keywords/FILE", - "title": "FILE", - "type": "string" - }, - "INFLUENCE_TIME_VECTOR": { - "description": "Determines if the time steps in this input source will contribute to the global time vector.\n\nhttps://test.ecalc.equinor.com/docs/docs/modelling/keywords/INFLUENCE_TIME_VECTOR", - "title": "INFLUENCE_TIME_VECTOR", - "type": "boolean" - }, - "INTERPOLATION_TYPE": { - "anyOf": [ - { - "const": "LEFT", - "description": "The value at a certain time step is defining the value in the time interval before this time step.\n\nhttps://test.ecalc.equinor.com/docs/docs/modelling/keywords/INTERPOLATION_TYPE", - "title": "LEFT" - }, - { - "const": "RIGHT", - "description": "The value at a certain time step is defining the value in the time interval after this time step.\n\nhttps://test.ecalc.equinor.com/docs/docs/modelling/keywords/INTERPOLATION_TYPE", - "title": "RIGHT" - }, - { - "const": "LINEAR", - "description": "The value will be linearly interpolated between the time steps.\n\nhttps://test.ecalc.equinor.com/docs/docs/modelling/keywords/INTERPOLATION_TYPE", - "title": "LINEAR" - } - ], - "description": "Defines how the time series are interpolated between input time steps.\n\nhttps://test.ecalc.equinor.com/docs/docs/modelling/keywords/INTERPOLATION_TYPE", - "title": "INTERPOLATION_TYPE", - "type": "string" - }, - "NAME": { - "description": "Name of the time series.\n\nhttps://test.ecalc.equinor.com/docs/docs/modelling/keywords/NAME", - "title": "NAME", - "type": "string" - }, - "TYPE": { - "const": "MISCELLANEOUS", - "description": "User defined file. All file interpretation options need to be set manually.\n\nhttps://test.ecalc.equinor.com/docs/docs/modelling/keywords/TYPE#use-in-time-series", - "title": "MISCELLANEOUS" - }, - "additionalProperties": false, - "required": [ - "NAME", - "FILE", - "TYPE", - "INFLUENCE_TIME_VECTOR", - "EXTRAPOLATION", - "INTERPOLATION_TYPE" - ] - }, - "type": "object" - }, - { - "properties": { - "EXTRAPOLATION": { - "description": "Defines whether the rates in the source should be set to 0 after last time step or constant equal to value at last time step after time interval.\n\nhttps://test.ecalc.equinor.com/docs/docs/modelling/keywords/EXTRAPOLATION", - "title": "EXTRAPOLATION", - "type": "boolean" - }, - "FILE": { - "description": "Specifies the name of a time series input file.\n\nhttps://test.ecalc.equinor.com/docs/docs/modelling/keywords/FILE", - "title": "FILE", - "type": "string" - }, - "INFLUENCE_TIME_VECTOR": { - "description": "Determines if the time steps in this input source will contribute to the global time vector.\n\nhttps://test.ecalc.equinor.com/docs/docs/modelling/keywords/INFLUENCE_TIME_VECTOR", - "title": "INFLUENCE_TIME_VECTOR", - "type": "boolean" - }, - "INTERPOLATION_TYPE": { - "anyOf": [ - { - "const": "LEFT", - "description": "The value at a certain time step is defining the value in the time interval before this time step.\n\nhttps://test.ecalc.equinor.com/docs/docs/modelling/keywords/INTERPOLATION_TYPE", - "title": "LEFT" - }, - { - "const": "RIGHT", - "description": "The value at a certain time step is defining the value in the time interval after this time step.\n\nhttps://test.ecalc.equinor.com/docs/docs/modelling/keywords/INTERPOLATION_TYPE", - "title": "RIGHT" - }, - { - "const": "LINEAR", - "description": "The value will be linearly interpolated between the time steps.\n\nhttps://test.ecalc.equinor.com/docs/docs/modelling/keywords/INTERPOLATION_TYPE", - "title": "LINEAR" - } - ], - "description": "Defines how the time series are interpolated between input time steps.\n\nhttps://test.ecalc.equinor.com/docs/docs/modelling/keywords/INTERPOLATION_TYPE", - "title": "INTERPOLATION_TYPE", - "type": "string" - }, - "NAME": { - "description": "Name of the time series.\n\nhttps://test.ecalc.equinor.com/docs/docs/modelling/keywords/NAME", - "title": "NAME", - "type": "string" - }, - "TYPE": { - "anyOf": [ - { - "const": "DEFAULT", - "description": "Reservoir profiles given in a CSV file.\n\nhttps://test.ecalc.equinor.com/docs/docs/modelling/keywords/TYPE#use-in-time-series", - "title": "DEFAULT" - } - ], - "description": "Defines the type of time series input file.\n\nhttps://test.ecalc.equinor.com/docs/docs/modelling/keywords/TYPE", - "title": "TYPE", - "type": "string" - }, - "additionalProperties": false, - "required": [ - "NAME", - "FILE", - "TYPE", - "INFLUENCE_TIME_VECTOR", - "EXTRAPOLATION", - "INTERPOLATION_TYPE" - ] - }, - "type": "object" - } - ] - }, - "title": "TIME_SERIES", - "type": "array" - } - }, - "title": "ecalc yaml setup", - "type": "object" - }, - "uri": "https://test.ecalc.equinor.com/api/v1/schema-validation/time-series.json" } ] \ No newline at end of file