From 45c3ff01bec33d25e60927372b3584364b4f6150 Mon Sep 17 00:00:00 2001 From: FelixMau Date: Tue, 9 Jul 2024 11:20:03 +0200 Subject: [PATCH 01/70] Commenting --- data_adapter_oemof/adapters.py | 2 + examples/industry/data_adapter_industry.py | 125 +++++----- poetry.lock | 255 +++++++++++---------- 3 files changed, 205 insertions(+), 177 deletions(-) diff --git a/data_adapter_oemof/adapters.py b/data_adapter_oemof/adapters.py index 8f78bbb..2127486 100644 --- a/data_adapter_oemof/adapters.py +++ b/data_adapter_oemof/adapters.py @@ -237,6 +237,8 @@ def get_busses(self) -> dict: busses = struct["inputs"] if bus == "to_bus": busses = struct["outputs"] + if self.__class__.type == "storage" and struct["inputs"] == struct["outputs"]: + busses = struct["outputs"] if len(busses) != 1: raise MappingError( f"Could not map {bus} to default bus - too many options" diff --git a/examples/industry/data_adapter_industry.py b/examples/industry/data_adapter_industry.py index 5e64bbe..988a4e1 100644 --- a/examples/industry/data_adapter_industry.py +++ b/examples/industry/data_adapter_industry.py @@ -24,66 +24,78 @@ EnergySystem.from_datapackage = classmethod(deserialize_energy_system) Model.add_constraints_from_datapackage = deserialize_constraints -# -# Download Collection -# Due to Nan values in "ind_scalar" type column datapackage.json must be adjusted after download +""" +Download Collection + +Some datasets must be adjusted due to wrong formatting in comments + - x2x_hydrogen_renewable + - x2x_p2gas_aec_1 + - x2x_p2gas_pemec_1 + - x2x_x2gas_mpyr_1 + + +Also adjust Modelstructure: + Delete lines: + - helper sinks in HelperO1 + - red marked lines in ProcessO1 (not yet uploaded or deleted data) +""" # from data_adapter.databus import download_collection # download_collection( # "https://databus.openenergyplatform.org/felixmaur/collections/steel_industry_test/" # ) - -structure = Structure( - "SEDOS_Modellstruktur", - process_sheet="Processes_O1", - parameter_sheet="Parameter_Input-Output", - helper_sheet="Helper_O1", -) - -adapter = Adapter( - "steel_industry_test", - structure=structure, -) - -# create dicitonary with all found in and outputs -process_adapter_map = pd.concat([pd.read_excel( - io=structure.structure_file, - sheet_name="Processes_O1", - usecols=("process", "facade adapter (oemof)"), - index_col="process" - ), pd.read_excel( - io=structure.structure_file, - sheet_name="Helper_O1", - usecols=("process", "facade adapter (oemof)"), - index_col="process" - )]).to_dict(orient="dict") - - - -parameter_map = { - "DEFAULT": {}, - "StorageAdapter": { - "capacity_potential": "expansion_limit", - "capacity": "installed_capacity", - "invest_relation_output_capacity": "e2p_ratio", - "inflow_conversion_factor": "input_ratio", - "outflow_conversion_factor": "output_ratio", - }, - "MIMOAdapter": { - "capacity_cost": "cost_fix_capacity_w", - "capacity": "capacity_w_resid", - "expandable": "capacity_w_abs_new_max", - }, - "modex_tech_wind_turbine_onshore": {"profile": "onshore"}, -} - -dp = DataPackage.build_datapackage( - adapter=adapter, - process_adapter_map=process_adapter_map, - parameter_map=parameter_map, -) -datapackage_path = pathlib.Path(__file__).parent / "datapackage" -dp.save_datapackage_to_csv(str(datapackage_path)) +# +# structure = Structure( +# "SEDOS_Modellstruktur", +# process_sheet="Processes_O1", +# parameter_sheet="Parameter_Input-Output", +# helper_sheet="Helper_O1", +# ) +# +# adapter = Adapter( +# "steel_industry_test", +# structure=structure, +# ) +# +# # create dicitonary with all found in and outputs +# process_adapter_map = pd.concat([pd.read_excel( +# io=structure.structure_file, +# sheet_name="Processes_O1", +# usecols=("process", "facade adapter (oemof)"), +# index_col="process" +# ), pd.read_excel( +# io=structure.structure_file, +# sheet_name="Helper_O1", +# usecols=("process", "facade adapter (oemof)"), +# index_col="process" +# )]).to_dict(orient="dict")["facade adapter (oemof)"] +# +# +# +# parameter_map = { +# "DEFAULT": {}, +# "StorageAdapter": { +# "capacity_potential": "expansion_limit", +# "capacity": "installed_capacity", +# "invest_relation_output_capacity": "e2p_ratio", +# "inflow_conversion_factor": "input_ratio", +# "outflow_conversion_factor": "output_ratio", +# }, +# "MIMOAdapter": { +# "capacity_cost": "cost_fix_capacity_w", +# "capacity": "capacity_w_resid", +# "expandable": "capacity_w_abs_new_max", +# }, +# "modex_tech_wind_turbine_onshore": {"profile": "onshore"}, +# } +# +# dp = DataPackage.build_datapackage( +# adapter=adapter, +# process_adapter_map=process_adapter_map, +# parameter_map=parameter_map, +# ) +# datapackage_path = pathlib.Path(__file__).parent / "datapackage" +# dp.save_datapackage_to_csv(str(datapackage_path)) es = EnergySystem.from_datapackage(path = "datapackage/datapackage.json", @@ -97,4 +109,5 @@ ) m = Model(es) -m.solve() \ No newline at end of file +m.solve() +print(m) \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index daa6996..26d8edf 100644 --- a/poetry.lock +++ b/poetry.lock @@ -183,13 +183,13 @@ files = [ [[package]] name = "certifi" -version = "2024.6.2" +version = "2024.7.4" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.6.2-py3-none-any.whl", hash = "sha256:ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56"}, - {file = "certifi-2024.6.2.tar.gz", hash = "sha256:3cd43f1c6fa7dedc5899d69d3ad0398fd018ad1a17fba83ddaf78aa46c747516"}, + {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"}, + {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"}, ] [[package]] @@ -517,7 +517,7 @@ test-randomorder = ["pytest-randomly"] [[package]] name = "data-adapter" -version = "0.21.0" +version = "0.22.0" description = "Provides general functionality for other data adapters" optional = false python-versions = ">=3.8.1,<4.0.0" @@ -537,7 +537,7 @@ units = "^0.7" type = "git" url = "https://git@github.com/sedos-project/data_adapter" reference = "main" -resolved_reference = "70696e652654a6fe2b7475a1dbb2d603650ff1f1" +resolved_reference = "6c2dc303b9f4fb5d79a38f856e50950ee6df100a" [[package]] name = "datapackage" @@ -617,18 +617,18 @@ test = ["pytest (>=6)"] [[package]] name = "filelock" -version = "3.15.1" +version = "3.15.4" description = "A platform independent file lock." optional = false python-versions = ">=3.8" files = [ - {file = "filelock-3.15.1-py3-none-any.whl", hash = "sha256:71b3102950e91dfc1bb4209b64be4dc8854f40e5f534428d8684f953ac847fac"}, - {file = "filelock-3.15.1.tar.gz", hash = "sha256:58a2549afdf9e02e10720eaa4d4470f56386d7a6f72edd7d0596337af8ed7ad8"}, + {file = "filelock-3.15.4-py3-none-any.whl", hash = "sha256:6ca1fffae96225dab4c6eaf1c4f4f28cd2568d3ec2a44e15a08520504de468e7"}, + {file = "filelock-3.15.4.tar.gz", hash = "sha256:2207938cbc1844345cb01a5a95524dae30f0ce089eba5b00378295a17e3e90cb"}, ] [package.extras] docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-asyncio (>=0.21)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-asyncio (>=0.21)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)", "virtualenv (>=20.26.2)"] typing = ["typing-extensions (>=4.8)"] [[package]] @@ -764,52 +764,62 @@ test = ["objgraph", "psutil"] [[package]] name = "highspy" -version = "1.7.1" +version = "1.7.2" description = "A thin set of pybind11 wrappers to HiGHS" optional = false python-versions = ">=3.8" files = [ - {file = "highspy-1.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc9f0d970859451777f02438dd7235f0b70ba222cc7707d81218060949c18769"}, - {file = "highspy-1.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bc050142a8c1070f3c2f228082e3c2ec9b245de06bd3283219161a46e056021e"}, - {file = "highspy-1.7.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78286d334e3108e4d59adaa519609676d06c0d57883da968308792836ca6c598"}, - {file = "highspy-1.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7bcffc0945c51ec5752afd2876e71c7186427fdcf5e014773aa457b8c9450d0"}, - {file = "highspy-1.7.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:6ada0f5bb3a7cfde3b4299d74e9289e3a1243dbc1c1f67fe5ebde3fff3642a2f"}, - {file = "highspy-1.7.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:224d1bb36206f45f5611998dad197e9dd90c0e92269ba6212949f7485b6976a7"}, - {file = "highspy-1.7.1-cp310-cp310-win32.whl", hash = "sha256:8cf067e0fab24eb850ace73462b03177c5d669af638314c659c41ae6eb445007"}, - {file = "highspy-1.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:995ed5debea798e57260875a1958e251cf35260cbf184d346511c90ca5a7e2d8"}, - {file = "highspy-1.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b921c73c26ec835f0c0ade3174fe8012e4025ec67def9fb431723f83939f35ca"}, - {file = "highspy-1.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:036cd07eb3f2632f92a238df2f13e61987fda40487388ddf1675a372d9fc246d"}, - {file = "highspy-1.7.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a067cb356cc606094b1ff02250afa804bc5a845065c797ce3ff2ebc35a6da13a"}, - {file = "highspy-1.7.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0145fbd90e2ddf0d2d961b7c3cab12917e305faca81c91ee7ad7927991eedba"}, - {file = "highspy-1.7.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3a4c3ff18ecec1b1c8a352f0c0eb0bdf538aa7345f8c16260d8a9b1e3377cc2c"}, - {file = "highspy-1.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:89e49a47671c3caeaea95c72a4564e5284529a60d12d56c167d1f8df97944642"}, - {file = "highspy-1.7.1-cp311-cp311-win32.whl", hash = "sha256:14c1b4381d451f605c6b13ce0cfce93bda79acffdd9c9fbf22b27df09751a1a0"}, - {file = "highspy-1.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:efadfb6559e16f2e9b7e967156501c074c7acaec0afafa29ac6d4d6e7ac82119"}, - {file = "highspy-1.7.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8074f49f4b9bc18f91bf1ad4519a16b691ec0ff5a568015a3b71ac0ee6367078"}, - {file = "highspy-1.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8df11a1c5604552233ec796fd23697e64c0ae6796e11003d83f2fbf978275a00"}, - {file = "highspy-1.7.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d6222985213eecc8aad7958a8939c05f072c68a5caa59c83713df29e2581ce0"}, - {file = "highspy-1.7.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3a3d10031d41102675c85b38f42252eb4691e350bc140b75dbab75ff717f041"}, - {file = "highspy-1.7.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:096a244825c1e930f1cbe1bbf8c3e2d158dfd45cdf51ae0e77b5fcb52ec1fc7d"}, - {file = "highspy-1.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4ede828865db9afb6868250c4e42cdf32133a3a29a3ebd6acaaafd3e19bf1"}, - {file = "highspy-1.7.1-cp312-cp312-win32.whl", hash = "sha256:1367f34c56fa9f4d3de6cb1d46a2d271a3680c0e9883d4dd779526c8cf568ae4"}, - {file = "highspy-1.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:a4692c7c2d4d298473ffc3a3b4e80da1edeb1a4b1d172858262bee759faa3b1d"}, - {file = "highspy-1.7.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2fa9bc9b2e8f648a269f0a6a17ef7525d1dd2dc6d2d33af727b79ae253eede2a"}, - {file = "highspy-1.7.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8b83e98d276e9616565395b439693625dc7ff0e0f717166a2d1d71dedb7b5986"}, - {file = "highspy-1.7.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c7a3edc391227f03d20cccc29e4cf588a7bc7b5538e691a583e65de8058b02f"}, - {file = "highspy-1.7.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:243c99f6290a289dbd9ba7988feac726da8326d6ea90889289f2ca583c16ffb6"}, - {file = "highspy-1.7.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:8d6c0e8293129a8e1d8841a12b8ef16caa8f979e3769f471a55ae76eaa2c248a"}, - {file = "highspy-1.7.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:a574eaa19261e2c3dc1dddb507e50626f63b17d48cac3b2b86cd054cdf6385bc"}, - {file = "highspy-1.7.1-cp38-cp38-win32.whl", hash = "sha256:81efbc1e8764a916d8784de7bbeaf5ac9cf284caad822028096a61824a035f2a"}, - {file = "highspy-1.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:265d21b3e72bce08716d114ffa91e9eaadfff086fc4b8e00dc3297a0165990dd"}, - {file = "highspy-1.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d0dbb4a41392720f798afba402dd90e763061085b2499cd8f41fb857db35632c"}, - {file = "highspy-1.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5363a165615601fa929791e4c629cbd961486ed5767d17406b6a81e8348cf7ff"}, - {file = "highspy-1.7.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7ecac3b629e0fd56a332a2470562ea05a11f10fef5b9ab2dae05d24ef84bfa8"}, - {file = "highspy-1.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8994f8fd79bf01879b7654747758fb7c28a361e5831d2d189f80d0b4b0403ba"}, - {file = "highspy-1.7.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:2ae8679ff66301ed9f8fec70d4bef3ae9639bdc12f3aee34f49d2225e98bdf92"}, - {file = "highspy-1.7.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7926185a1fb0b2a54a438fa3af846b75e2abc9a48bd2dc9edc25a95ef3c5bf7d"}, - {file = "highspy-1.7.1-cp39-cp39-win32.whl", hash = "sha256:2e544078ffc9e0bde5234cf1e2fe2f218edd38f30c63fddd7c9725e77a6f51ff"}, - {file = "highspy-1.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:638ed6e6e048d67f0f2b8bee8c72e9f866f67a13a3a4aa71e97d7958244b9b0c"}, - {file = "highspy-1.7.1.tar.gz", hash = "sha256:8bb9108d81eef5935d72d50773e237b69b7a7368e0f45a7b778d556b9667e281"}, + {file = "highspy-1.7.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:467124b1e01aeddff8b6d0aa7a56e51eef943ebb28d3e46dcbdd1e32b77384ec"}, + {file = "highspy-1.7.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:584590ec4d9948a6f1ef8a1ce51761e1c9c00241054c12cbc0e8a43f0f5183c6"}, + {file = "highspy-1.7.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c642da4035b6c33618bca73f01627fce94e07c1e741b46798dddddaa88cf376"}, + {file = "highspy-1.7.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5bebb73f80c47e3215547abb1ebf8e520ae5f7f24e5420ad270ad901f0725041"}, + {file = "highspy-1.7.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f0bfad2a4ebb37944bb1ed883f0fbdb733d98141fdf4902fee0f75b0160a6c0"}, + {file = "highspy-1.7.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c64ede6b8e567eec0d14d12ea67114af855b4c380881d848becfb91cb01c844d"}, + {file = "highspy-1.7.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0c2ee6f7b74a6a1508fceb7d40acf8097d81c5b75059628ea00715723d382110"}, + {file = "highspy-1.7.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f9acabd04d16c5586753a9d6ce03c6f57b47f094fe3ef3b34185656181ed8685"}, + {file = "highspy-1.7.2-cp310-cp310-win32.whl", hash = "sha256:8625e193766192d4cfdc543548dc6cacf92ac09c86e2fcc7e48342f4909a9668"}, + {file = "highspy-1.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:e4d17d0c9bbbe15654a44b0369e5f1ee95f36935b71d54d4bdf70bedcc1b256e"}, + {file = "highspy-1.7.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:eb2fb87f2cd72765fa281acc2fb10e0bacb5f5e7c3336bb267b917b5bffc30fc"}, + {file = "highspy-1.7.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cd96ff70cb9ba186129597e521a7afcaa2bbb285273ffa5417edfcc43d58a566"}, + {file = "highspy-1.7.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1152035fd6c861cb578115b976d03c38e4e0e2f87227ac93b4af12fb582ad971"}, + {file = "highspy-1.7.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4cb5b7067cd3cfc191920b33428395080d51892435cd507542ae75f7a2ae0853"}, + {file = "highspy-1.7.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ad5ef7ddfd6fd879dc9b6ac02a9eecd13fe2b0581cd03985e5faa89f43b24ac"}, + {file = "highspy-1.7.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:eb039878156f6b521f383a42b53e615521af430f0ae55e12d825b1368e1eaa47"}, + {file = "highspy-1.7.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:afd27cf82c922a2add4b940a7900a9e74a2b66556446c39abfe2d854cfcf59d1"}, + {file = "highspy-1.7.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:81de7b020255e40aafd28387f7642b3b6ea844e9cb42845a045a05411c7a055a"}, + {file = "highspy-1.7.2-cp311-cp311-win32.whl", hash = "sha256:d7d1c11f8c68ab537023f487585b1a4f447c5c03603feb2c5f76e77914c388ac"}, + {file = "highspy-1.7.2-cp311-cp311-win_amd64.whl", hash = "sha256:fafa076bad795c45d7f055f859b762c4a72abd872ecd9710e1d3c1202a9123ad"}, + {file = "highspy-1.7.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:659f240736ae923fd35acd8ea0e86dc4165e8aec8e72c191642ec546476c1130"}, + {file = "highspy-1.7.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1b466011f4091051f156a13b46ac569316cc2cddff0c2881ee456c765c535519"}, + {file = "highspy-1.7.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e574cb5ddb6dffbcae0db61ae1ebb7754191e6f42a822010b81e3599d1001df"}, + {file = "highspy-1.7.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fa831a9a4fb286fe90bcba7c8a663923a47c14a318bdd30a6b96707f9a3f7496"}, + {file = "highspy-1.7.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71364d2136b0c31116684af47c63ba8bd2ca6da9320a4fadb69a0f57606bbdf7"}, + {file = "highspy-1.7.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b46b73ce68c9a98c36584348a31263f6deef84d8138cac872439b383cc17293e"}, + {file = "highspy-1.7.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a075da0c7d5b269f720691f0d743013540eea35bf22419e23bd32b343d4dda27"}, + {file = "highspy-1.7.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:98b2f01ec21764f233293eaae2ee637884ec009e6db608c46a446433c60d5e31"}, + {file = "highspy-1.7.2-cp312-cp312-win32.whl", hash = "sha256:ba78467db9e4693a384644b221deecf5f0243d150540d65fcb33534103486490"}, + {file = "highspy-1.7.2-cp312-cp312-win_amd64.whl", hash = "sha256:47886d7794b3fa3fb12e5722d96989ef920a9a9460de66f4868632c8e723a07d"}, + {file = "highspy-1.7.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:22e31ee5d3854024d075697fcfac88394b90d0afe25b84e4283d3964d0cd991b"}, + {file = "highspy-1.7.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fe9b2291b01ff13e14a2720e436cf807b28d7a9d33d27861e7f26ced001bceec"}, + {file = "highspy-1.7.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2d86c87a997de23001c687c8b3bff265b0f9edb1403657f5bb895d2525f0e78"}, + {file = "highspy-1.7.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5c0b5d913ae2e509e10991596caa3b09670e18aa6b55aab324e00884561f44d4"}, + {file = "highspy-1.7.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf7973ba66d659728fadf7168f8d6a3560bef4333a504abfbc8cdb9ea51afd98"}, + {file = "highspy-1.7.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:3e361e98ddd757c0393677a9a52de6349abfbe79ff5d2132088a3d02c6c735d9"}, + {file = "highspy-1.7.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:69ea90d97effbc27eeb2e20488c7c510f7d12813d929a8ca3fd0a7c9832564ab"}, + {file = "highspy-1.7.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0af568e0e61934e748c2b1057fb48f7fc3bfef6d6e6f159c616dd0ececb223a7"}, + {file = "highspy-1.7.2-cp38-cp38-win32.whl", hash = "sha256:20e86e18203d96f6c2b9d358b14e0178a7f83ac8ec6e806255d3f80710839bea"}, + {file = "highspy-1.7.2-cp38-cp38-win_amd64.whl", hash = "sha256:0ac5990c90cc615a2a45143d2321d74a7857db2e79aa9ba3606461da99fb5c8b"}, + {file = "highspy-1.7.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2d8199c8bd0528bfaec85d441c25c570adf2334be5a75d6d6839190db2e14f83"}, + {file = "highspy-1.7.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d0a6d8b4fa17161c5b5941a49a9dab9b8569a3e6c28b2e28eaad3265fd8d7430"}, + {file = "highspy-1.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e10640542c41852d135172c87ced5e2664bbf12d5396a6f761ec8e62bc11ea6"}, + {file = "highspy-1.7.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64f99988d0c641843079c410883f606023ae4055e8e6158427cd4dc1e23227ff"}, + {file = "highspy-1.7.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb8a2919e958e07fd82e6d6f273374030f5232b09e2924c6d3f50e773bfa0a80"}, + {file = "highspy-1.7.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:72fdc8dd3bb5e0d34b8594a851b0cad299b31eef40a50a180b3260494d86b09e"}, + {file = "highspy-1.7.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:b008ccdfbb73fde912ed1dd605e27a122a81e0c472c338fa3b3fa24996e5379f"}, + {file = "highspy-1.7.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3675f3242ddd11b107bde3345779ac9eb8dd9a940337b43ce8127836b592feef"}, + {file = "highspy-1.7.2-cp39-cp39-win32.whl", hash = "sha256:b496a5d337508847737836ada6d930b404d921a119132cd1d14df47a4b488db7"}, + {file = "highspy-1.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:e7d3883c697103c8c39d808976a00b85d68f869b97bae6d48b7b03811dfbb925"}, + {file = "highspy-1.7.2.tar.gz", hash = "sha256:7987b2a3f013254a1845bceb4597087da4070f7887c0084024649486321ae213"}, ] [package.dependencies] @@ -820,13 +830,13 @@ test = ["numpy", "pytest"] [[package]] name = "identify" -version = "2.5.36" +version = "2.6.0" description = "File identification library for Python" optional = false python-versions = ">=3.8" files = [ - {file = "identify-2.5.36-py2.py3-none-any.whl", hash = "sha256:37d93f380f4de590500d9dba7db359d0d3da95ffe7f9de1753faa159e71e7dfa"}, - {file = "identify-2.5.36.tar.gz", hash = "sha256:e5e00f54165f9047fbebeb4a560f9acfb8af4c88232be60a488e9b68d122745d"}, + {file = "identify-2.6.0-py2.py3-none-any.whl", hash = "sha256:e79ae4406387a9d300332b5fd366d8994f1525e8414984e1a59e058b2eda2dd0"}, + {file = "identify-2.6.0.tar.gz", hash = "sha256:cb171c685bdc31bcc4c1734698736a7d5b6c8bf2e0c15117f4d469c8640ae5cf"}, ] [package.extras] @@ -1105,13 +1115,13 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "marko" -version = "2.1.0" +version = "2.1.2" description = "A markdown parser with high extensibility." optional = false python-versions = ">=3.8" files = [ - {file = "marko-2.1.0-py3-none-any.whl", hash = "sha256:fe36fa19ef6f8415c93fdcb542d7ec64aa56dea255a57fb6c662ea2a85dc3e1b"}, - {file = "marko-2.1.0.tar.gz", hash = "sha256:119155b3bf312403ff193027f24dc1c3070cc89fd97f459f1e60423c4adafa9f"}, + {file = "marko-2.1.2-py3-none-any.whl", hash = "sha256:c14aa7a77468aaaf53cf056dcd3d32398b9df4c3fb81f5e120dd37cbb9f8c859"}, + {file = "marko-2.1.2.tar.gz", hash = "sha256:a9170006b879376e6845c91b1ae3dce2992772954b99b70175ff888537186011"}, ] [package.extras] @@ -1403,13 +1413,13 @@ dev = ["pytest", "sphinx", "sphinx-rtd-theme"] [[package]] name = "openpyxl" -version = "3.1.4" +version = "3.1.5" description = "A Python library to read/write Excel 2010 xlsx/xlsm files" optional = false python-versions = ">=3.8" files = [ - {file = "openpyxl-3.1.4-py2.py3-none-any.whl", hash = "sha256:ec17f6483f2b8f7c88c57e5e5d3b0de0e3fb9ac70edc084d28e864f5b33bbefd"}, - {file = "openpyxl-3.1.4.tar.gz", hash = "sha256:8d2c8adf5d20d6ce8f9bca381df86b534835e974ed0156dacefa76f68c1d69fb"}, + {file = "openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2"}, + {file = "openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050"}, ] [package.dependencies] @@ -2026,32 +2036,32 @@ crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"] [[package]] name = "scikit-learn" -version = "1.5.0" +version = "1.5.1" description = "A set of python modules for machine learning and data mining" optional = false python-versions = ">=3.9" files = [ - {file = "scikit_learn-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:12e40ac48555e6b551f0a0a5743cc94cc5a765c9513fe708e01f0aa001da2801"}, - {file = "scikit_learn-1.5.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:f405c4dae288f5f6553b10c4ac9ea7754d5180ec11e296464adb5d6ac68b6ef5"}, - {file = "scikit_learn-1.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df8ccabbf583315f13160a4bb06037bde99ea7d8211a69787a6b7c5d4ebb6fc3"}, - {file = "scikit_learn-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c75ea812cd83b1385bbfa94ae971f0d80adb338a9523f6bbcb5e0b0381151d4"}, - {file = "scikit_learn-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:a90c5da84829a0b9b4bf00daf62754b2be741e66b5946911f5bdfaa869fcedd6"}, - {file = "scikit_learn-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2a65af2d8a6cce4e163a7951a4cfbfa7fceb2d5c013a4b593686c7f16445cf9d"}, - {file = "scikit_learn-1.5.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:4c0c56c3005f2ec1db3787aeaabefa96256580678cec783986836fc64f8ff622"}, - {file = "scikit_learn-1.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f77547165c00625551e5c250cefa3f03f2fc92c5e18668abd90bfc4be2e0bff"}, - {file = "scikit_learn-1.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:118a8d229a41158c9f90093e46b3737120a165181a1b58c03461447aa4657415"}, - {file = "scikit_learn-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:a03b09f9f7f09ffe8c5efffe2e9de1196c696d811be6798ad5eddf323c6f4d40"}, - {file = "scikit_learn-1.5.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:460806030c666addee1f074788b3978329a5bfdc9b7d63e7aad3f6d45c67a210"}, - {file = "scikit_learn-1.5.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:1b94d6440603752b27842eda97f6395f570941857456c606eb1d638efdb38184"}, - {file = "scikit_learn-1.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d82c2e573f0f2f2f0be897e7a31fcf4e73869247738ab8c3ce7245549af58ab8"}, - {file = "scikit_learn-1.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3a10e1d9e834e84d05e468ec501a356226338778769317ee0b84043c0d8fb06"}, - {file = "scikit_learn-1.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:855fc5fa8ed9e4f08291203af3d3e5fbdc4737bd617a371559aaa2088166046e"}, - {file = "scikit_learn-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:40fb7d4a9a2db07e6e0cae4dc7bdbb8fada17043bac24104d8165e10e4cff1a2"}, - {file = "scikit_learn-1.5.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:47132440050b1c5beb95f8ba0b2402bbd9057ce96ec0ba86f2f445dd4f34df67"}, - {file = "scikit_learn-1.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:174beb56e3e881c90424e21f576fa69c4ffcf5174632a79ab4461c4c960315ac"}, - {file = "scikit_learn-1.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261fe334ca48f09ed64b8fae13f9b46cc43ac5f580c4a605cbb0a517456c8f71"}, - {file = "scikit_learn-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:057b991ac64b3e75c9c04b5f9395eaf19a6179244c089afdebaad98264bff37c"}, - {file = "scikit_learn-1.5.0.tar.gz", hash = "sha256:789e3db01c750ed6d496fa2db7d50637857b451e57bcae863bff707c1247bef7"}, + {file = "scikit_learn-1.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:781586c414f8cc58e71da4f3d7af311e0505a683e112f2f62919e3019abd3745"}, + {file = "scikit_learn-1.5.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:f5b213bc29cc30a89a3130393b0e39c847a15d769d6e59539cd86b75d276b1a7"}, + {file = "scikit_learn-1.5.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ff4ba34c2abff5ec59c803ed1d97d61b036f659a17f55be102679e88f926fac"}, + {file = "scikit_learn-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:161808750c267b77b4a9603cf9c93579c7a74ba8486b1336034c2f1579546d21"}, + {file = "scikit_learn-1.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:10e49170691514a94bb2e03787aa921b82dbc507a4ea1f20fd95557862c98dc1"}, + {file = "scikit_learn-1.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:154297ee43c0b83af12464adeab378dee2d0a700ccd03979e2b821e7dd7cc1c2"}, + {file = "scikit_learn-1.5.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:b5e865e9bd59396220de49cb4a57b17016256637c61b4c5cc81aaf16bc123bbe"}, + {file = "scikit_learn-1.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:909144d50f367a513cee6090873ae582dba019cb3fca063b38054fa42704c3a4"}, + {file = "scikit_learn-1.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:689b6f74b2c880276e365fe84fe4f1befd6a774f016339c65655eaff12e10cbf"}, + {file = "scikit_learn-1.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:9a07f90846313a7639af6a019d849ff72baadfa4c74c778821ae0fad07b7275b"}, + {file = "scikit_learn-1.5.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5944ce1faada31c55fb2ba20a5346b88e36811aab504ccafb9f0339e9f780395"}, + {file = "scikit_learn-1.5.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:0828673c5b520e879f2af6a9e99eee0eefea69a2188be1ca68a6121b809055c1"}, + {file = "scikit_learn-1.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:508907e5f81390e16d754e8815f7497e52139162fd69c4fdbd2dfa5d6cc88915"}, + {file = "scikit_learn-1.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97625f217c5c0c5d0505fa2af28ae424bd37949bb2f16ace3ff5f2f81fb4498b"}, + {file = "scikit_learn-1.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:da3f404e9e284d2b0a157e1b56b6566a34eb2798205cba35a211df3296ab7a74"}, + {file = "scikit_learn-1.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:88e0672c7ac21eb149d409c74cc29f1d611d5158175846e7a9c2427bd12b3956"}, + {file = "scikit_learn-1.5.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:7b073a27797a283187a4ef4ee149959defc350b46cbf63a84d8514fe16b69855"}, + {file = "scikit_learn-1.5.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b59e3e62d2be870e5c74af4e793293753565c7383ae82943b83383fdcf5cc5c1"}, + {file = "scikit_learn-1.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bd8d3a19d4bd6dc5a7d4f358c8c3a60934dc058f363c34c0ac1e9e12a31421d"}, + {file = "scikit_learn-1.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:5f57428de0c900a98389c4a433d4a3cf89de979b3aa24d1c1d251802aa15e44d"}, + {file = "scikit_learn-1.5.1.tar.gz", hash = "sha256:0ea5d40c0e3951df445721927448755d3fe1d80833b0b7308ebff5d2a45e6414"}, ] [package.dependencies] @@ -2062,8 +2072,8 @@ threadpoolctl = ">=3.1.0" [package.extras] benchmark = ["matplotlib (>=3.3.4)", "memory_profiler (>=0.57.0)", "pandas (>=1.1.5)"] -build = ["cython (>=3.0.10)", "meson-python (>=0.15.0)", "numpy (>=1.19.5)", "scipy (>=1.6.0)"] -docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.3.4)", "memory_profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.1.5)", "plotly (>=5.14.0)", "polars (>=0.20.23)", "pooch (>=1.6.0)", "scikit-image (>=0.17.2)", "seaborn (>=0.9.0)", "sphinx (>=6.0.0)", "sphinx-copybutton (>=0.5.2)", "sphinx-gallery (>=0.15.0)", "sphinx-prompt (>=1.3.0)", "sphinxext-opengraph (>=0.4.2)"] +build = ["cython (>=3.0.10)", "meson-python (>=0.16.0)", "numpy (>=1.19.5)", "scipy (>=1.6.0)"] +docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.3.4)", "memory_profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.1.5)", "plotly (>=5.14.0)", "polars (>=0.20.23)", "pooch (>=1.6.0)", "pydata-sphinx-theme (>=0.15.3)", "scikit-image (>=0.17.2)", "seaborn (>=0.9.0)", "sphinx (>=7.3.7)", "sphinx-copybutton (>=0.5.2)", "sphinx-design (>=0.5.0)", "sphinx-gallery (>=0.16.0)", "sphinx-prompt (>=1.4.0)", "sphinx-remove-toctrees (>=1.0.0.post1)", "sphinxcontrib-sass (>=0.3.4)", "sphinxext-opengraph (>=0.9.1)"] examples = ["matplotlib (>=3.3.4)", "pandas (>=1.1.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.17.2)", "seaborn (>=0.9.0)"] install = ["joblib (>=1.2.0)", "numpy (>=1.19.5)", "scipy (>=1.6.0)", "threadpoolctl (>=3.1.0)"] maintenance = ["conda-lock (==2.5.6)"] @@ -2071,45 +2081,45 @@ tests = ["black (>=24.3.0)", "matplotlib (>=3.3.4)", "mypy (>=1.9)", "numpydoc ( [[package]] name = "scipy" -version = "1.13.1" +version = "1.14.0" description = "Fundamental algorithms for scientific computing in Python" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" files = [ - {file = "scipy-1.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca"}, - {file = "scipy-1.13.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d605e9c23906d1994f55ace80e0125c587f96c020037ea6aa98d01b4bd2e222f"}, - {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfa31f1def5c819b19ecc3a8b52d28ffdcc7ed52bb20c9a7589669dd3c250989"}, - {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26264b282b9da0952a024ae34710c2aff7d27480ee91a2e82b7b7073c24722f"}, - {file = "scipy-1.13.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eccfa1906eacc02de42d70ef4aecea45415f5be17e72b61bafcfd329bdc52e94"}, - {file = "scipy-1.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:2831f0dc9c5ea9edd6e51e6e769b655f08ec6db6e2e10f86ef39bd32eb11da54"}, - {file = "scipy-1.13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:27e52b09c0d3a1d5b63e1105f24177e544a222b43611aaf5bc44d4a0979e32f9"}, - {file = "scipy-1.13.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:54f430b00f0133e2224c3ba42b805bfd0086fe488835effa33fa291561932326"}, - {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e89369d27f9e7b0884ae559a3a956e77c02114cc60a6058b4e5011572eea9299"}, - {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a78b4b3345f1b6f68a763c6e25c0c9a23a9fd0f39f5f3d200efe8feda560a5fa"}, - {file = "scipy-1.13.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45484bee6d65633752c490404513b9ef02475b4284c4cfab0ef946def50b3f59"}, - {file = "scipy-1.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:5713f62f781eebd8d597eb3f88b8bf9274e79eeabf63afb4a737abc6c84ad37b"}, - {file = "scipy-1.13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5d72782f39716b2b3509cd7c33cdc08c96f2f4d2b06d51e52fb45a19ca0c86a1"}, - {file = "scipy-1.13.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:017367484ce5498445aade74b1d5ab377acdc65e27095155e448c88497755a5d"}, - {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:949ae67db5fa78a86e8fa644b9a6b07252f449dcf74247108c50e1d20d2b4627"}, - {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de3ade0e53bc1f21358aa74ff4830235d716211d7d077e340c7349bc3542e884"}, - {file = "scipy-1.13.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2ac65fb503dad64218c228e2dc2d0a0193f7904747db43014645ae139c8fad16"}, - {file = "scipy-1.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:cdd7dacfb95fea358916410ec61bbc20440f7860333aee6d882bb8046264e949"}, - {file = "scipy-1.13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:436bbb42a94a8aeef855d755ce5a465479c721e9d684de76bf61a62e7c2b81d5"}, - {file = "scipy-1.13.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:8335549ebbca860c52bf3d02f80784e91a004b71b059e3eea9678ba994796a24"}, - {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d533654b7d221a6a97304ab63c41c96473ff04459e404b83275b60aa8f4b7004"}, - {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637e98dcf185ba7f8e663e122ebf908c4702420477ae52a04f9908707456ba4d"}, - {file = "scipy-1.13.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a014c2b3697bde71724244f63de2476925596c24285c7a637364761f8710891c"}, - {file = "scipy-1.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:392e4ec766654852c25ebad4f64e4e584cf19820b980bc04960bca0b0cd6eaa2"}, - {file = "scipy-1.13.1.tar.gz", hash = "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c"}, + {file = "scipy-1.14.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7e911933d54ead4d557c02402710c2396529540b81dd554fc1ba270eb7308484"}, + {file = "scipy-1.14.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:687af0a35462402dd851726295c1a5ae5f987bd6e9026f52e9505994e2f84ef6"}, + {file = "scipy-1.14.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:07e179dc0205a50721022344fb85074f772eadbda1e1b3eecdc483f8033709b7"}, + {file = "scipy-1.14.0-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:6a9c9a9b226d9a21e0a208bdb024c3982932e43811b62d202aaf1bb59af264b1"}, + {file = "scipy-1.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:076c27284c768b84a45dcf2e914d4000aac537da74236a0d45d82c6fa4b7b3c0"}, + {file = "scipy-1.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42470ea0195336df319741e230626b6225a740fd9dce9642ca13e98f667047c0"}, + {file = "scipy-1.14.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:176c6f0d0470a32f1b2efaf40c3d37a24876cebf447498a4cefb947a79c21e9d"}, + {file = "scipy-1.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:ad36af9626d27a4326c8e884917b7ec321d8a1841cd6dacc67d2a9e90c2f0359"}, + {file = "scipy-1.14.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6d056a8709ccda6cf36cdd2eac597d13bc03dba38360f418560a93050c76a16e"}, + {file = "scipy-1.14.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:f0a50da861a7ec4573b7c716b2ebdcdf142b66b756a0d392c236ae568b3a93fb"}, + {file = "scipy-1.14.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:94c164a9e2498e68308e6e148646e486d979f7fcdb8b4cf34b5441894bdb9caf"}, + {file = "scipy-1.14.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:a7d46c3e0aea5c064e734c3eac5cf9eb1f8c4ceee756262f2c7327c4c2691c86"}, + {file = "scipy-1.14.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9eee2989868e274aae26125345584254d97c56194c072ed96cb433f32f692ed8"}, + {file = "scipy-1.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e3154691b9f7ed73778d746da2df67a19d046a6c8087c8b385bc4cdb2cfca74"}, + {file = "scipy-1.14.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c40003d880f39c11c1edbae8144e3813904b10514cd3d3d00c277ae996488cdb"}, + {file = "scipy-1.14.0-cp311-cp311-win_amd64.whl", hash = "sha256:5b083c8940028bb7e0b4172acafda6df762da1927b9091f9611b0bcd8676f2bc"}, + {file = "scipy-1.14.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:bff2438ea1330e06e53c424893ec0072640dac00f29c6a43a575cbae4c99b2b9"}, + {file = "scipy-1.14.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:bbc0471b5f22c11c389075d091d3885693fd3f5e9a54ce051b46308bc787e5d4"}, + {file = "scipy-1.14.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:64b2ff514a98cf2bb734a9f90d32dc89dc6ad4a4a36a312cd0d6327170339eb0"}, + {file = "scipy-1.14.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:7d3da42fbbbb860211a811782504f38ae7aaec9de8764a9bef6b262de7a2b50f"}, + {file = "scipy-1.14.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d91db2c41dd6c20646af280355d41dfa1ec7eead235642178bd57635a3f82209"}, + {file = "scipy-1.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a01cc03bcdc777c9da3cfdcc74b5a75caffb48a6c39c8450a9a05f82c4250a14"}, + {file = "scipy-1.14.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:65df4da3c12a2bb9ad52b86b4dcf46813e869afb006e58be0f516bc370165159"}, + {file = "scipy-1.14.0-cp312-cp312-win_amd64.whl", hash = "sha256:4c4161597c75043f7154238ef419c29a64ac4a7c889d588ea77690ac4d0d9b20"}, + {file = "scipy-1.14.0.tar.gz", hash = "sha256:b5923f48cb840380f9854339176ef21763118a7300a88203ccd0bdd26e58527b"}, ] [package.dependencies] -numpy = ">=1.22.4,<2.3" +numpy = ">=1.23.5,<2.3" [package.extras] -dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] -doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.12.0)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0)", "sphinx-design (>=0.4.0)"] -test = ["array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodestyle", "pydevtool", "rich-click", "ruff (>=0.0.292)", "types-psutil", "typing_extensions"] +doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.13.1)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0)", "sphinx-design (>=0.4.0)"] +test = ["Cython", "array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] [[package]] name = "shellingham" @@ -2521,24 +2531,27 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "validators" -version = "0.28.3" +version = "0.31.0" description = "Python Data Validation for Humans™" optional = false python-versions = ">=3.8" files = [ - {file = "validators-0.28.3-py3-none-any.whl", hash = "sha256:53cafa854f13850156259d9cc479b864ee901f6a96e6b109e6fc33f98f37d99f"}, - {file = "validators-0.28.3.tar.gz", hash = "sha256:c6c79840bcde9ba77b19f6218f7738188115e27830cbaff43264bc4ed24c429d"}, + {file = "validators-0.31.0-py3-none-any.whl", hash = "sha256:e15a600d81555a4cd409b17bf55946c5edec7748e776afc85ed0a19bdee54e56"}, + {file = "validators-0.31.0.tar.gz", hash = "sha256:de7574fc56a231c788162f3e7da15bc2053c5ff9e0281d9ff1afb3a7b69498df"}, ] +[package.extras] +crypto-eth-addresses = ["eth-hash[pycryptodome] (>=0.7.0)"] + [[package]] name = "virtualenv" -version = "20.26.2" +version = "20.26.3" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.26.2-py3-none-any.whl", hash = "sha256:a624db5e94f01ad993d476b9ee5346fdf7b9de43ccaee0e0197012dc838a0e9b"}, - {file = "virtualenv-20.26.2.tar.gz", hash = "sha256:82bf0f4eebbb78d36ddaee0283d43fe5736b53880b8a8cdcd37390a07ac3741c"}, + {file = "virtualenv-20.26.3-py3-none-any.whl", hash = "sha256:8cc4a31139e796e9a7de2cd5cf2489de1217193116a8fd42328f1bd65f434589"}, + {file = "virtualenv-20.26.3.tar.gz", hash = "sha256:4c43a2a236279d9ea36a0d76f98d84bd6ca94ac4e0f4a3b9d46d05e10fea542a"}, ] [package.dependencies] From 57303215c8520595e1fddef5062a08dc4fcac524 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Tue, 9 Jul 2024 11:56:28 +0200 Subject: [PATCH 02/70] Typo and uncomment --- examples/industry/data_adapter_industry.py | 114 ++++++++++----------- 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/examples/industry/data_adapter_industry.py b/examples/industry/data_adapter_industry.py index 988a4e1..76ce36b 100644 --- a/examples/industry/data_adapter_industry.py +++ b/examples/industry/data_adapter_industry.py @@ -28,7 +28,7 @@ Download Collection Some datasets must be adjusted due to wrong formatting in comments - - x2x_hydrogen_renewable + - x2x_import_hydrogen_renewable - x2x_p2gas_aec_1 - x2x_p2gas_pemec_1 - x2x_x2gas_mpyr_1 @@ -40,62 +40,62 @@ - red marked lines in ProcessO1 (not yet uploaded or deleted data) """ -# from data_adapter.databus import download_collection -# download_collection( -# "https://databus.openenergyplatform.org/felixmaur/collections/steel_industry_test/" -# ) -# -# structure = Structure( -# "SEDOS_Modellstruktur", -# process_sheet="Processes_O1", -# parameter_sheet="Parameter_Input-Output", -# helper_sheet="Helper_O1", -# ) -# -# adapter = Adapter( -# "steel_industry_test", -# structure=structure, -# ) -# -# # create dicitonary with all found in and outputs -# process_adapter_map = pd.concat([pd.read_excel( -# io=structure.structure_file, -# sheet_name="Processes_O1", -# usecols=("process", "facade adapter (oemof)"), -# index_col="process" -# ), pd.read_excel( -# io=structure.structure_file, -# sheet_name="Helper_O1", -# usecols=("process", "facade adapter (oemof)"), -# index_col="process" -# )]).to_dict(orient="dict")["facade adapter (oemof)"] -# -# -# -# parameter_map = { -# "DEFAULT": {}, -# "StorageAdapter": { -# "capacity_potential": "expansion_limit", -# "capacity": "installed_capacity", -# "invest_relation_output_capacity": "e2p_ratio", -# "inflow_conversion_factor": "input_ratio", -# "outflow_conversion_factor": "output_ratio", -# }, -# "MIMOAdapter": { -# "capacity_cost": "cost_fix_capacity_w", -# "capacity": "capacity_w_resid", -# "expandable": "capacity_w_abs_new_max", -# }, -# "modex_tech_wind_turbine_onshore": {"profile": "onshore"}, -# } -# -# dp = DataPackage.build_datapackage( -# adapter=adapter, -# process_adapter_map=process_adapter_map, -# parameter_map=parameter_map, -# ) -# datapackage_path = pathlib.Path(__file__).parent / "datapackage" -# dp.save_datapackage_to_csv(str(datapackage_path)) +from data_adapter.databus import download_collection +download_collection( + "https://databus.openenergyplatform.org/felixmaur/collections/steel_industry_test/" + ) + +structure = Structure( + "SEDOS_Modellstruktur", + process_sheet="Processes_O1", + parameter_sheet="Parameter_Input-Output", + helper_sheet="Helper_O1", +) + +adapter = Adapter( + "steel_industry_test", + structure=structure, +) + +# create dicitonary with all found in and outputs +process_adapter_map = pd.concat([pd.read_excel( + io=structure.structure_file, + sheet_name="Processes_O1", + usecols=("process", "facade adapter (oemof)"), + index_col="process" + ), pd.read_excel( + io=structure.structure_file, + sheet_name="Helper_O1", + usecols=("process", "facade adapter (oemof)"), + index_col="process" + )]).to_dict(orient="dict")["facade adapter (oemof)"] + + + +parameter_map = { + "DEFAULT": {}, + "StorageAdapter": { + "capacity_potential": "expansion_limit", + "capacity": "installed_capacity", + "invest_relation_output_capacity": "e2p_ratio", + "inflow_conversion_factor": "input_ratio", + "outflow_conversion_factor": "output_ratio", + }, + "MIMOAdapter": { + "capacity_cost": "cost_fix_capacity_w", + "capacity": "capacity_w_resid", + "expandable": "capacity_w_abs_new_max", + }, + "modex_tech_wind_turbine_onshore": {"profile": "onshore"}, +} + +dp = DataPackage.build_datapackage( + adapter=adapter, + process_adapter_map=process_adapter_map, + parameter_map=parameter_map, +) +datapackage_path = pathlib.Path(__file__).parent / "datapackage" +dp.save_datapackage_to_csv(str(datapackage_path)) es = EnergySystem.from_datapackage(path = "datapackage/datapackage.json", From 55c37929a84b5d7df67336881e103cc3666744b5 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Tue, 9 Jul 2024 11:56:57 +0200 Subject: [PATCH 03/70] Add results processing --- examples/industry/data_adapter_industry.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/industry/data_adapter_industry.py b/examples/industry/data_adapter_industry.py index 76ce36b..71e01c8 100644 --- a/examples/industry/data_adapter_industry.py +++ b/examples/industry/data_adapter_industry.py @@ -12,7 +12,7 @@ from data_adapter_oemof.build_datapackage import DataPackage # noqa: E402 from oemof.solph._energy_system import EnergySystem -from oemof.solph import Model +from oemof.solph import Model, processing from oemof.tabular.datapackage import building # noqa F401 from oemof.tabular.datapackage.reading import deserialize_constraints, deserialize_energy_system @@ -109,5 +109,6 @@ ) m = Model(es) -m.solve() +m.solve(solver="cbc") +results = processing.convert_keys_to_strings(processing.results(m)) print(m) \ No newline at end of file From 876eed3ac2b13e62c6630299ba5fa1a899d530e6 Mon Sep 17 00:00:00 2001 From: FelixMau Date: Tue, 9 Jul 2024 12:33:12 +0200 Subject: [PATCH 04/70] Adding color logging This might help for debugging and is more friendly to new users as infos should not appear red as "Error" --- data_adapter_oemof/settings.py | 42 ++++++++++++++++++++++ examples/industry/data_adapter_industry.py | 25 ++++++++----- 2 files changed, 58 insertions(+), 9 deletions(-) diff --git a/data_adapter_oemof/settings.py b/data_adapter_oemof/settings.py index aea3add..06cb7d1 100644 --- a/data_adapter_oemof/settings.py +++ b/data_adapter_oemof/settings.py @@ -1,6 +1,8 @@ import os import pathlib from pathlib import Path +import logging + from data_adapter_oemof.utils import load_yaml @@ -36,3 +38,43 @@ Path(__file__).parent / "mappings" / "PROCESS_ADAPTER_MAP.yaml" ) BUS_MAP = load_yaml(Path(__file__).parent / "mappings" / "BUS_MAP.yaml") + +class CustomFormatter(logging.Formatter): + """Logging colored formatter, adapted from https://stackoverflow.com/a/56944256/3638629""" + + grey = '\x1b[38;21m' + blue = '\x1b[38;5;39m' + yellow = '\x1b[38;5;226m' + red = '\x1b[38;5;196m' + bold_red = '\x1b[31;1m' + reset = '\x1b[0m' + green = "'\x1b[38;5;82m'" + + def __init__(self, fmt): + super().__init__() + self.fmt = fmt + self.FORMATS = { + logging.DEBUG: self.grey + self.fmt + self.reset, + logging.INFO: self.green + self.fmt + self.reset, + logging.WARNING: self.yellow + self.fmt + self.reset, + logging.ERROR: self.red + self.fmt + self.reset, + logging.CRITICAL: self.bold_red + self.fmt + self.reset + } + + def format(self, record): + log_fmt = self.FORMATS.get(record.levelno) + formatter = logging.Formatter(log_fmt) + return formatter.format(record) + +logger = logging.getLogger() +logger.setLevel(logging.INFO) + +console_handler = logging.StreamHandler() +console_handler.setLevel(logging.INFO) + +formatter = CustomFormatter('%(levelname)s: %(message)s') +console_handler.setFormatter(formatter) + +logger.addHandler(console_handler) + +# Initialize logging configuration diff --git a/examples/industry/data_adapter_industry.py b/examples/industry/data_adapter_industry.py index 71e01c8..77300a2 100644 --- a/examples/industry/data_adapter_industry.py +++ b/examples/industry/data_adapter_industry.py @@ -2,6 +2,7 @@ import pathlib import pandas as pd +import logging os.environ["COLLECTIONS_DIR"] = "./collections/" os.environ["STRUCTURES_DIR"] = "" @@ -21,6 +22,8 @@ from oemof_industry.mimo_converter import MIMO from oemof.solph.buses import Bus +logger = logging.getLogger() + EnergySystem.from_datapackage = classmethod(deserialize_energy_system) Model.add_constraints_from_datapackage = deserialize_constraints @@ -40,11 +43,12 @@ - red marked lines in ProcessO1 (not yet uploaded or deleted data) """ -from data_adapter.databus import download_collection -download_collection( - "https://databus.openenergyplatform.org/felixmaur/collections/steel_industry_test/" - ) - +# from data_adapter.databus import download_collection +# logger.info("Starting Download") +# download_collection( +# "https://databus.openenergyplatform.org/felixmaur/collections/steel_industry_test/" +# ) +logger.info("Reading Structure") structure = Structure( "SEDOS_Modellstruktur", process_sheet="Processes_O1", @@ -57,6 +61,8 @@ structure=structure, ) +logger.info("Building Adapter Map") + # create dicitonary with all found in and outputs process_adapter_map = pd.concat([pd.read_excel( io=structure.structure_file, @@ -70,8 +76,6 @@ index_col="process" )]).to_dict(orient="dict")["facade adapter (oemof)"] - - parameter_map = { "DEFAULT": {}, "StorageAdapter": { @@ -88,7 +92,7 @@ }, "modex_tech_wind_turbine_onshore": {"profile": "onshore"}, } - +logger.info("Building datapackage...") dp = DataPackage.build_datapackage( adapter=adapter, process_adapter_map=process_adapter_map, @@ -108,7 +112,10 @@ "mimo": MIMO}, ) +logger.info("Building Model...") m = Model(es) +logger.info("Solving Model...") m.solve(solver="cbc") +logger.info("Reding Results") results = processing.convert_keys_to_strings(processing.results(m)) -print(m) \ No newline at end of file +logger.info("Writing Results and Goodbye :)") \ No newline at end of file From f63c92150ba99597219def76661dbed8d25f8f08 Mon Sep 17 00:00:00 2001 From: FelixMau Date: Tue, 9 Jul 2024 12:40:55 +0200 Subject: [PATCH 05/70] Linting and adding .env file .env contains paths to folders. .gitkeep added for folder structure and ease for new users --- data_adapter_oemof/adapters.py | 6 +- data_adapter_oemof/build_datapackage.py | 1 - data_adapter_oemof/settings.py | 21 +++---- examples/industry/.env | 2 + examples/industry/collections/.gitkeep | 0 examples/industry/data_adapter_industry.py | 68 ++++++++++++---------- examples/industry/datapackage/.gitkeep | 0 7 files changed, 53 insertions(+), 45 deletions(-) create mode 100644 examples/industry/.env create mode 100644 examples/industry/collections/.gitkeep create mode 100644 examples/industry/datapackage/.gitkeep diff --git a/data_adapter_oemof/adapters.py b/data_adapter_oemof/adapters.py index 2127486..1dd4271 100644 --- a/data_adapter_oemof/adapters.py +++ b/data_adapter_oemof/adapters.py @@ -4,7 +4,6 @@ import itertools import json import logging -import warnings from typing import Optional, Type, Union import pandas as pd @@ -237,7 +236,10 @@ def get_busses(self) -> dict: busses = struct["inputs"] if bus == "to_bus": busses = struct["outputs"] - if self.__class__.type == "storage" and struct["inputs"] == struct["outputs"]: + if ( + self.__class__.type == "storage" + and struct["inputs"] == struct["outputs"] + ): busses = struct["outputs"] if len(busses) != 1: raise MappingError( diff --git a/data_adapter_oemof/build_datapackage.py b/data_adapter_oemof/build_datapackage.py index 0adbc19..d6532b9 100644 --- a/data_adapter_oemof/build_datapackage.py +++ b/data_adapter_oemof/build_datapackage.py @@ -5,7 +5,6 @@ import numpy as np import pandas as pd -import numpy as np import tsam.timeseriesaggregation as tsam from data_adapter.preprocessing import Adapter from datapackage import Package diff --git a/data_adapter_oemof/settings.py b/data_adapter_oemof/settings.py index 06cb7d1..3f93fa2 100644 --- a/data_adapter_oemof/settings.py +++ b/data_adapter_oemof/settings.py @@ -1,8 +1,7 @@ +import logging import os import pathlib from pathlib import Path -import logging - from data_adapter_oemof.utils import load_yaml @@ -39,15 +38,16 @@ ) BUS_MAP = load_yaml(Path(__file__).parent / "mappings" / "BUS_MAP.yaml") + class CustomFormatter(logging.Formatter): """Logging colored formatter, adapted from https://stackoverflow.com/a/56944256/3638629""" - grey = '\x1b[38;21m' - blue = '\x1b[38;5;39m' - yellow = '\x1b[38;5;226m' - red = '\x1b[38;5;196m' - bold_red = '\x1b[31;1m' - reset = '\x1b[0m' + grey = "\x1b[38;21m" + blue = "\x1b[38;5;39m" + yellow = "\x1b[38;5;226m" + red = "\x1b[38;5;196m" + bold_red = "\x1b[31;1m" + reset = "\x1b[0m" green = "'\x1b[38;5;82m'" def __init__(self, fmt): @@ -58,7 +58,7 @@ def __init__(self, fmt): logging.INFO: self.green + self.fmt + self.reset, logging.WARNING: self.yellow + self.fmt + self.reset, logging.ERROR: self.red + self.fmt + self.reset, - logging.CRITICAL: self.bold_red + self.fmt + self.reset + logging.CRITICAL: self.bold_red + self.fmt + self.reset, } def format(self, record): @@ -66,13 +66,14 @@ def format(self, record): formatter = logging.Formatter(log_fmt) return formatter.format(record) + logger = logging.getLogger() logger.setLevel(logging.INFO) console_handler = logging.StreamHandler() console_handler.setLevel(logging.INFO) -formatter = CustomFormatter('%(levelname)s: %(message)s') +formatter = CustomFormatter("%(levelname)s: %(message)s") console_handler.setFormatter(formatter) logger.addHandler(console_handler) diff --git a/examples/industry/.env b/examples/industry/.env new file mode 100644 index 0000000..970ecb8 --- /dev/null +++ b/examples/industry/.env @@ -0,0 +1,2 @@ +COLLECTIONS_DIR=./collections/ +STRUCTURES_DIR= diff --git a/examples/industry/collections/.gitkeep b/examples/industry/collections/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/examples/industry/data_adapter_industry.py b/examples/industry/data_adapter_industry.py index 77300a2..adc50d2 100644 --- a/examples/industry/data_adapter_industry.py +++ b/examples/industry/data_adapter_industry.py @@ -1,26 +1,22 @@ -import os +import logging import pathlib import pandas as pd -import logging - -os.environ["COLLECTIONS_DIR"] = "./collections/" -os.environ["STRUCTURES_DIR"] = "" - from data_adapter.databus import download_collection # noqa from data_adapter.preprocessing import Adapter # noqa: E402 from data_adapter.structure import Structure # noqa: E402 -from data_adapter_oemof.build_datapackage import DataPackage # noqa: E402 - -from oemof.solph._energy_system import EnergySystem from oemof.solph import Model, processing - +from oemof.solph._energy_system import EnergySystem +from oemof.solph.buses import Bus from oemof.tabular.datapackage import building # noqa F401 -from oemof.tabular.datapackage.reading import deserialize_constraints, deserialize_energy_system - -from oemof.tabular.facades import Excess, Commodity, Conversion, Load, Volatile +from oemof.tabular.datapackage.reading import ( + deserialize_constraints, + deserialize_energy_system, +) +from oemof.tabular.facades import Commodity, Conversion, Excess, Load, Volatile from oemof_industry.mimo_converter import MIMO -from oemof.solph.buses import Bus + +from data_adapter_oemof.build_datapackage import DataPackage # noqa: E402 logger = logging.getLogger() @@ -35,11 +31,11 @@ - x2x_p2gas_aec_1 - x2x_p2gas_pemec_1 - x2x_x2gas_mpyr_1 - - + + Also adjust Modelstructure: Delete lines: - - helper sinks in HelperO1 + - helper sinks in HelperO1 - red marked lines in ProcessO1 (not yet uploaded or deleted data) """ @@ -64,17 +60,22 @@ logger.info("Building Adapter Map") # create dicitonary with all found in and outputs -process_adapter_map = pd.concat([pd.read_excel( +process_adapter_map = pd.concat( + [ + pd.read_excel( io=structure.structure_file, sheet_name="Processes_O1", usecols=("process", "facade adapter (oemof)"), - index_col="process" - ), pd.read_excel( + index_col="process", + ), + pd.read_excel( io=structure.structure_file, sheet_name="Helper_O1", usecols=("process", "facade adapter (oemof)"), - index_col="process" - )]).to_dict(orient="dict")["facade adapter (oemof)"] + index_col="process", + ), + ] +).to_dict(orient="dict")["facade adapter (oemof)"] parameter_map = { "DEFAULT": {}, @@ -102,15 +103,18 @@ dp.save_datapackage_to_csv(str(datapackage_path)) -es = EnergySystem.from_datapackage(path = "datapackage/datapackage.json", - typemap= {"bus": Bus, - "excess":Excess, - "commodity": Commodity, - "conversion": Conversion, - "load": Load, - "volatile": Volatile, - "mimo": MIMO}, - ) +es = EnergySystem.from_datapackage( + path="datapackage/datapackage.json", + typemap={ + "bus": Bus, + "excess": Excess, + "commodity": Commodity, + "conversion": Conversion, + "load": Load, + "volatile": Volatile, + "mimo": MIMO, + }, +) logger.info("Building Model...") m = Model(es) @@ -118,4 +122,4 @@ m.solve(solver="cbc") logger.info("Reding Results") results = processing.convert_keys_to_strings(processing.results(m)) -logger.info("Writing Results and Goodbye :)") \ No newline at end of file +logger.info("Writing Results and Goodbye :)") diff --git a/examples/industry/datapackage/.gitkeep b/examples/industry/datapackage/.gitkeep new file mode 100644 index 0000000..e69de29 From 866d83e162d7e7215ad0a3413b71bbf2dbc63ba4 Mon Sep 17 00:00:00 2001 From: FelixMau Date: Thu, 18 Jul 2024 11:18:57 +0200 Subject: [PATCH 06/70] Bugfix --- data_adapter_oemof/build_datapackage.py | 1 - examples/industry/data_adapter_industry.py | 7 +++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/data_adapter_oemof/build_datapackage.py b/data_adapter_oemof/build_datapackage.py index d6532b9..e0fccb0 100644 --- a/data_adapter_oemof/build_datapackage.py +++ b/data_adapter_oemof/build_datapackage.py @@ -77,7 +77,6 @@ def _listify_to_periodic(group_df) -> pd.Series: unique_values[col] = group_df[col].iat[0][0] else: unique_values[col] = group_df[col].iat[0] - unique_values["name"] = "_".join(group_df.name) unique_values.drop("year") return unique_values diff --git a/examples/industry/data_adapter_industry.py b/examples/industry/data_adapter_industry.py index adc50d2..c8efa5c 100644 --- a/examples/industry/data_adapter_industry.py +++ b/examples/industry/data_adapter_industry.py @@ -40,7 +40,6 @@ """ # from data_adapter.databus import download_collection -# logger.info("Starting Download") # download_collection( # "https://databus.openenergyplatform.org/felixmaur/collections/steel_industry_test/" # ) @@ -103,6 +102,8 @@ dp.save_datapackage_to_csv(str(datapackage_path)) +logger.info("Building EnergySystem") + es = EnergySystem.from_datapackage( path="datapackage/datapackage.json", typemap={ @@ -120,6 +121,8 @@ m = Model(es) logger.info("Solving Model...") m.solve(solver="cbc") +logger.warning(m.solver_results["Solver"][0]["Termination condition"]) +print(m.solver_results["Solver"][0]["Termination condition"]) logger.info("Reding Results") -results = processing.convert_keys_to_strings(processing.results(m)) +results = processing.results(m) logger.info("Writing Results and Goodbye :)") From b98074dd24fc07e69a994c923554589fe2309828 Mon Sep 17 00:00:00 2001 From: FelixMau Date: Tue, 30 Jul 2024 16:15:58 +0200 Subject: [PATCH 07/70] Extend `parameter_name` mapping --- examples/industry/data_adapter_industry.py | 206 ++++++++++++++++++++- 1 file changed, 198 insertions(+), 8 deletions(-) diff --git a/examples/industry/data_adapter_industry.py b/examples/industry/data_adapter_industry.py index c8efa5c..21b75d9 100644 --- a/examples/industry/data_adapter_industry.py +++ b/examples/industry/data_adapter_industry.py @@ -13,7 +13,7 @@ deserialize_constraints, deserialize_energy_system, ) -from oemof.tabular.facades import Commodity, Conversion, Excess, Load, Volatile +from oemof.tabular.facades import Commodity, Conversion, Excess, Load, Volatile, Storage from oemof_industry.mimo_converter import MIMO from data_adapter_oemof.build_datapackage import DataPackage # noqa: E402 @@ -77,7 +77,7 @@ ).to_dict(orient="dict")["facade adapter (oemof)"] parameter_map = { - "DEFAULT": {}, + "DEFAULT": {"interest_rate":"wacc"}, "StorageAdapter": { "capacity_potential": "expansion_limit", "capacity": "installed_capacity", @@ -85,12 +85,202 @@ "inflow_conversion_factor": "input_ratio", "outflow_conversion_factor": "output_ratio", }, - "MIMOAdapter": { - "capacity_cost": "cost_fix_capacity_w", - "capacity": "capacity_w_resid", - "expandable": "capacity_w_abs_new_max", + "CommodityAdapter": { }, - "modex_tech_wind_turbine_onshore": {"profile": "onshore"}, + "x2x_import_biogas":{"amount":"capacity_w_inst_0", + "marginal_cost":"cost_var_e"}, + "x2x_import_coal":{"amount":"capacity_w_inst_0", + "marginal_cost":"cost_var_e"}, + "x2x_import_hydrogen_renewable":{"amount":"capacity_w_inst_0", + "marginal_cost":"cost_var_e"}, + "x2x_other_biogas_treatment":{"marginal_cost":"cost_var_e"}, + + + + + "ind_source_steel_scrap_iron":{"amount":"capacity_w_inst_0"}, + "ind_steel_sinter_0": {"capacity":"capacity_w_inst_0"}, + "ind_steel_coke_plant_0": {"capacity":"capacity_e_inst_0"}, + "ind_steel_blafu_0": {"capacity":"capacity_w_inst_0"}, + "ind_steel_oxyfu_0": {"capacity":"capacity_w_inst_0"}, + "ind_steel_casting_0": {"capacity":"capacity_w_inst_0"}, + "ind_steel_elefu_0": {"capacity":"capacity_w_inst_0"}, + "x2x_delivery_methane_pipeline_0": { + "capacity":"capacity_p_max", + "marginal_cost":"cost_var_p", + }, + "x2x_x2gas_sr_syngas_0": {"capacity":"capacity_p_inst", + "capacity_cost": "cost_inv_p", + "fixed_costs":"cost_fix_p", + }, + + + "ind_steel_coke_plant_1": {"capacity_potential":"capacity_e_abs_new_max", + "capacity_cost": "cost_inv_e", + "fixed_costs":"cost_fix_e", + "marginal_cost":"cost_var_e" + }, + "ind_steel_sinter_1": {"capacity_potential":"capacity_w_abs_new_max", + "capacity_cost": "cost_inv_w", + "fixed_costs":"cost_fix_w", + "marginal_cost":"cost_var_w" + }, + "ind_steel_blafu_1": {"capacity_potential":"capacity_w_abs_new_max", + "capacity_cost": "cost_inv_w", + "fixed_costs":"cost_fix_w", + "marginal_cost":"cost_var_w" + }, + "ind_steel_blafu_cc_1": {"capacity_potential":"capacity_w_abs_new_max", + "capacity_cost": "cost_inv_w", + "fixed_costs":"cost_fix_w", + "marginal_cost":"cost_var_w" + }, + "ind_steel_oxyfu_1": {"capacity_potential":"capacity_w_abs_new_max", + "capacity_cost": "cost_inv_w", + "fixed_costs":"cost_fix_w", + "marginal_cost":"cost_var_w", + #"max":"availability_constant" + }, + "ind_steel_casting_1": {"capacity_potential":"capacity_w_abs_new_max", + "capacity_cost": "cost_inv_w", + "fixed_costs":"cost_fix_w", + "marginal_cost":"cost_var_w", + #"max":"availability_constant" + }, + "ind_steel_elefu_1": {"capacity_potential":"capacity_w_abs_new_max", + "capacity_cost": "cost_inv_w", + "fixed_costs":"cost_fix_w", + "marginal_cost":"cost_var_w", + #"max":"availability_constant" + }, + "ind_steel_dirred_1": {"capacity_potential":"capacity_w_abs_new_max", + "capacity_cost": "cost_inv_w", + "fixed_costs":"cost_fix_w", + "marginal_cost":"cost_var_w", + #"max":"availability_constant" + }, + "ind_steel_sponge_1": {"capacity_potential":"capacity_w_abs_new_max", + "capacity_cost": "cost_inv_w", + "fixed_costs":"cost_fix_w", + "marginal_cost":"cost_var_w", + #"max":"availability_constant" + }, + "ind_steel_pellet_1": {"capacity_potential":"capacity_w_abs_new_max", + "capacity_cost": "cost_inv_w", + "fixed_costs":"cost_fix_w", + "marginal_cost":"cost_var_w", + #"max":"availability_constant" + }, + "ind_steel_hyddri_1": {"capacity_potential":"capacity_w_abs_new_max", + "capacity_cost": "cost_inv_w", + "fixed_costs":"cost_fix_w", + "marginal_cost":"cost_var_w", + #"max":"availability_constant" + }, + "x2x_delivery_hydrogen_pipeline_retrofit_1": {"capacity_potential":"capacity_p_max", + "capacity_cost": "cost_inv_p", + "fixed_costs":"cost_fix_p", + "marginal_cost":"cost_var_p", + }, + "x2x_delivery_hydrogen_pipeline_new_1": { + "capacity_cost": "cost_inv_p", + "fixed_costs":"cost_fix_p", + }, + "x2x_g2p_pemfc_ls_1": { + "capacity_cost": "cost_inv_p", + "fixed_costs":"cost_fix_p", + }, + "x2x_g2p_sofc_ls_1": { + "capacity_cost": "cost_inv_p", + "fixed_costs":"cost_fix_p", + }, + "x2x_other_dac_ht_1": { "marginal_cost":"cost_var_w", + "capacity_cost": "cost_inv_w", + "fixed_costs":"cost_fix_w", + }, + "x2x_other_dac_lt_1": { + "capacity_cost": "cost_inv_w", + "fixed_costs":"cost_fix_w", + }, + "x2x_p2gas_aec_1": { + "capacity_cost": "cost_inv_w", + "fixed_costs":"cost_fix_w", + }, + "x2x_p2gas_biom_1": { + "capacity_cost": "cost_inv_w", + "fixed_costs":"cost_fix_w", + }, + "x2x_p2gas_pemec_1": { + "capacity_cost": "cost_inv_w", + "fixed_costs":"cost_fix_w", + }, + "x2x_p2gas_biom_1": { + "capacity_cost": "cost_inv_w", + "fixed_costs":"cost_fix_w", + }, + "x2x_p2gas_pemec_1": { + "capacity_cost": "cost_inv_w", + "fixed_costs":"cost_fix_w", + }, + "x2x_p2gas_sabm_1": { + "capacity_cost": "cost_inv_w", + "fixed_costs":"cost_fix_w", + }, + "x2x_p2gas_soec_1": { + "capacity_cost": "cost_inv_w", + "fixed_costs":"cost_fix_w", + }, + "x2x_x2gas_mpyr_1": { + "capacity_cost": "cost_inv_p", + "fixed_costs":"cost_fix_p", + "marginal_cost":"cost_var_e" + }, + "x2x_x2gas_sr_syngas_1": { + "capacity_cost": "cost_inv_p", + "fixed_costs":"cost_fix_p", + }, + + + "x2x_storage_hydrogen_lohc_1": { + "efficiency": "efficiency_sto_in", + "fixed_costs":"cost_fix_w", + "loss_rate":"sto_self_discharge", + "storage_capacity_cost":"cost_inv_e", + "fixed_costs":"cost_fix_p", + "marginal_cost":"cost_var_e" + }, + "x2x_storage_hydrogen_new_1": { + "efficiency": "efficiency_sto_in", + "fixed_costs":"cost_fix_w", + "loss_rate":"sto_self_discharge", + "storage_capacity_cost":"cost_inv_e", + "fixed_costs":"cost_fix_p", + "marginal_cost":"cost_var_e", + "capacity_capacity_potential":"capacity_e_max" + }, + "x2x_storage_hydrogen_retrofit_1": { + "efficiency": "efficiency_sto_in", + "fixed_costs":"cost_fix_p", + "loss_rate":"sto_self_discharge", + "storage_capacity_cost":"cost_inv_e", + "fixed_costs":"cost_fix_p", + "marginal_cost":"cost_var_e", + "capacity_capacity_potential":"capacity_e_max", + "storage_capacity":"capacity_e_inst" + }, + "x2x_storage_methane_0": { + "efficiency": "efficiency_sto_in", + "fixed_costs":"cost_fix_p", + "loss_rate":"sto_self_discharge", + "storage_capacity_cost":"cost_inv_e", + "fixed_costs":"cost_fix_p", + "marginal_cost":"cost_var_e", + "capacity_capacity_potential":"capacity_e_max", + "storage_capacity":"capacity_e_inst" + }, + + + } logger.info("Building datapackage...") dp = DataPackage.build_datapackage( @@ -103,7 +293,6 @@ logger.info("Building EnergySystem") - es = EnergySystem.from_datapackage( path="datapackage/datapackage.json", typemap={ @@ -114,6 +303,7 @@ "load": Load, "volatile": Volatile, "mimo": MIMO, + "storage":Storage }, ) From 59f71d00479a9a9e5af73fc9262f9971c22d1852 Mon Sep 17 00:00:00 2001 From: FelixMau Date: Tue, 30 Jul 2024 16:16:14 +0200 Subject: [PATCH 08/70] Better warning --- data_adapter_oemof/adapters.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/data_adapter_oemof/adapters.py b/data_adapter_oemof/adapters.py index 1dd4271..6bfe40f 100644 --- a/data_adapter_oemof/adapters.py +++ b/data_adapter_oemof/adapters.py @@ -158,7 +158,8 @@ def get_data(self, key, field_type: Optional[Type] = None): f"Using existing timeseries column '{timeseries_key}'." ) return timeseries_key - logger.warning(f"Could not find timeseries entry for mapped key '{key}'") + logger.warning(f"For Process {self.process_name}" + f"Could not find timeseries entry for mapped key '{key}'") return None # 2 Use defaults @@ -491,6 +492,7 @@ class MIMOAdapter(Adapter): Field(name="region", type=str), Field(name="year", type=int), Field(name="groups", type=dict), + Field(name="lifetime", type=float), Field(name="capacity_cost", type=float), Field(name="capacity", type=float), Field(name="expandable", type=bool), From 547e963af32a7faf8c01e8aae2ffae997cab766b Mon Sep 17 00:00:00 2001 From: FelixMau Date: Tue, 30 Jul 2024 16:16:28 +0200 Subject: [PATCH 09/70] Better loggin in builder --- data_adapter_oemof/build_datapackage.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/data_adapter_oemof/build_datapackage.py b/data_adapter_oemof/build_datapackage.py index 62ddd70..ac9df10 100644 --- a/data_adapter_oemof/build_datapackage.py +++ b/data_adapter_oemof/build_datapackage.py @@ -2,6 +2,7 @@ import os import warnings from typing import Optional, Type +import logging import numpy as np import pandas as pd @@ -15,6 +16,7 @@ from data_adapter_oemof.settings import BUS_MAP, PARAMETER_MAP, PROCESS_ADAPTER_MAP from data_adapter_oemof.utils import convert_mixed_types_to_same_length +logger = logging.getLogger() # Define a function to aggregate differing values into a list def _listify_to_periodic(group_df) -> pd.Series: @@ -494,6 +496,7 @@ def _reduce_lists(x): + _reduce_lists(timeseries.columns.get_level_values(1)) ) facade_adapter_name: str = process_adapter_map[process_name] + logger.info(f"Adaptering process {process_name} into adapter {facade_adapter_name}") facade_adapter: Type[FacadeAdapter] = FACADE_ADAPTERS[facade_adapter_name] component_adapter: Optional[FacadeAdapter] = None components = [] From 525bde60dacee330f4e9cb70e1ce0e584ff23055 Mon Sep 17 00:00:00 2001 From: FelixMau Date: Tue, 30 Jul 2024 16:16:36 +0200 Subject: [PATCH 10/70] Update dependencies --- poetry.lock | 139 ++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 68 insertions(+), 73 deletions(-) diff --git a/poetry.lock b/poetry.lock index 26d8edf..6529c9f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -32,38 +32,38 @@ tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "p [[package]] name = "bcrypt" -version = "4.1.3" +version = "4.2.0" description = "Modern password hashing for your software and your servers" optional = false python-versions = ">=3.7" files = [ - {file = "bcrypt-4.1.3-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:48429c83292b57bf4af6ab75809f8f4daf52aa5d480632e53707805cc1ce9b74"}, - {file = "bcrypt-4.1.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a8bea4c152b91fd8319fef4c6a790da5c07840421c2b785084989bf8bbb7455"}, - {file = "bcrypt-4.1.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d3b317050a9a711a5c7214bf04e28333cf528e0ed0ec9a4e55ba628d0f07c1a"}, - {file = "bcrypt-4.1.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:094fd31e08c2b102a14880ee5b3d09913ecf334cd604af27e1013c76831f7b05"}, - {file = "bcrypt-4.1.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:4fb253d65da30d9269e0a6f4b0de32bd657a0208a6f4e43d3e645774fb5457f3"}, - {file = "bcrypt-4.1.3-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:193bb49eeeb9c1e2db9ba65d09dc6384edd5608d9d672b4125e9320af9153a15"}, - {file = "bcrypt-4.1.3-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:8cbb119267068c2581ae38790e0d1fbae65d0725247a930fc9900c285d95725d"}, - {file = "bcrypt-4.1.3-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:6cac78a8d42f9d120b3987f82252bdbeb7e6e900a5e1ba37f6be6fe4e3848286"}, - {file = "bcrypt-4.1.3-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:01746eb2c4299dd0ae1670234bf77704f581dd72cc180f444bfe74eb80495b64"}, - {file = "bcrypt-4.1.3-cp37-abi3-win32.whl", hash = "sha256:037c5bf7c196a63dcce75545c8874610c600809d5d82c305dd327cd4969995bf"}, - {file = "bcrypt-4.1.3-cp37-abi3-win_amd64.whl", hash = "sha256:8a893d192dfb7c8e883c4576813bf18bb9d59e2cfd88b68b725990f033f1b978"}, - {file = "bcrypt-4.1.3-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:0d4cf6ef1525f79255ef048b3489602868c47aea61f375377f0d00514fe4a78c"}, - {file = "bcrypt-4.1.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f5698ce5292a4e4b9e5861f7e53b1d89242ad39d54c3da451a93cac17b61921a"}, - {file = "bcrypt-4.1.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec3c2e1ca3e5c4b9edb94290b356d082b721f3f50758bce7cce11d8a7c89ce84"}, - {file = "bcrypt-4.1.3-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:3a5be252fef513363fe281bafc596c31b552cf81d04c5085bc5dac29670faa08"}, - {file = "bcrypt-4.1.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:5f7cd3399fbc4ec290378b541b0cf3d4398e4737a65d0f938c7c0f9d5e686611"}, - {file = "bcrypt-4.1.3-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:c4c8d9b3e97209dd7111bf726e79f638ad9224b4691d1c7cfefa571a09b1b2d6"}, - {file = "bcrypt-4.1.3-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:31adb9cbb8737a581a843e13df22ffb7c84638342de3708a98d5c986770f2834"}, - {file = "bcrypt-4.1.3-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:551b320396e1d05e49cc18dd77d970accd52b322441628aca04801bbd1d52a73"}, - {file = "bcrypt-4.1.3-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6717543d2c110a155e6821ce5670c1f512f602eabb77dba95717ca76af79867d"}, - {file = "bcrypt-4.1.3-cp39-abi3-win32.whl", hash = "sha256:6004f5229b50f8493c49232b8e75726b568535fd300e5039e255d919fc3a07f2"}, - {file = "bcrypt-4.1.3-cp39-abi3-win_amd64.whl", hash = "sha256:2505b54afb074627111b5a8dc9b6ae69d0f01fea65c2fcaea403448c503d3991"}, - {file = "bcrypt-4.1.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:cb9c707c10bddaf9e5ba7cdb769f3e889e60b7d4fea22834b261f51ca2b89fed"}, - {file = "bcrypt-4.1.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9f8ea645eb94fb6e7bea0cf4ba121c07a3a182ac52876493870033141aa687bc"}, - {file = "bcrypt-4.1.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:f44a97780677e7ac0ca393bd7982b19dbbd8d7228c1afe10b128fd9550eef5f1"}, - {file = "bcrypt-4.1.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d84702adb8f2798d813b17d8187d27076cca3cd52fe3686bb07a9083930ce650"}, - {file = "bcrypt-4.1.3.tar.gz", hash = "sha256:2ee15dd749f5952fe3f0430d0ff6b74082e159c50332a1413d51b5689cf06623"}, + {file = "bcrypt-4.2.0-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:096a15d26ed6ce37a14c1ac1e48119660f21b24cba457f160a4b830f3fe6b5cb"}, + {file = "bcrypt-4.2.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c02d944ca89d9b1922ceb8a46460dd17df1ba37ab66feac4870f6862a1533c00"}, + {file = "bcrypt-4.2.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d84cf6d877918620b687b8fd1bf7781d11e8a0998f576c7aa939776b512b98d"}, + {file = "bcrypt-4.2.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:1bb429fedbe0249465cdd85a58e8376f31bb315e484f16e68ca4c786dcc04291"}, + {file = "bcrypt-4.2.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:655ea221910bcac76ea08aaa76df427ef8625f92e55a8ee44fbf7753dbabb328"}, + {file = "bcrypt-4.2.0-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:1ee38e858bf5d0287c39b7a1fc59eec64bbf880c7d504d3a06a96c16e14058e7"}, + {file = "bcrypt-4.2.0-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:0da52759f7f30e83f1e30a888d9163a81353ef224d82dc58eb5bb52efcabc399"}, + {file = "bcrypt-4.2.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3698393a1b1f1fd5714524193849d0c6d524d33523acca37cd28f02899285060"}, + {file = "bcrypt-4.2.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:762a2c5fb35f89606a9fde5e51392dad0cd1ab7ae64149a8b935fe8d79dd5ed7"}, + {file = "bcrypt-4.2.0-cp37-abi3-win32.whl", hash = "sha256:5a1e8aa9b28ae28020a3ac4b053117fb51c57a010b9f969603ed885f23841458"}, + {file = "bcrypt-4.2.0-cp37-abi3-win_amd64.whl", hash = "sha256:8f6ede91359e5df88d1f5c1ef47428a4420136f3ce97763e31b86dd8280fbdf5"}, + {file = "bcrypt-4.2.0-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:c52aac18ea1f4a4f65963ea4f9530c306b56ccd0c6f8c8da0c06976e34a6e841"}, + {file = "bcrypt-4.2.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3bbbfb2734f0e4f37c5136130405332640a1e46e6b23e000eeff2ba8d005da68"}, + {file = "bcrypt-4.2.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3413bd60460f76097ee2e0a493ccebe4a7601918219c02f503984f0a7ee0aebe"}, + {file = "bcrypt-4.2.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:8d7bb9c42801035e61c109c345a28ed7e84426ae4865511eb82e913df18f58c2"}, + {file = "bcrypt-4.2.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3d3a6d28cb2305b43feac298774b997e372e56c7c7afd90a12b3dc49b189151c"}, + {file = "bcrypt-4.2.0-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:9c1c4ad86351339c5f320ca372dfba6cb6beb25e8efc659bedd918d921956bae"}, + {file = "bcrypt-4.2.0-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:27fe0f57bb5573104b5a6de5e4153c60814c711b29364c10a75a54bb6d7ff48d"}, + {file = "bcrypt-4.2.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:8ac68872c82f1add6a20bd489870c71b00ebacd2e9134a8aa3f98a0052ab4b0e"}, + {file = "bcrypt-4.2.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:cb2a8ec2bc07d3553ccebf0746bbf3d19426d1c6d1adbd4fa48925f66af7b9e8"}, + {file = "bcrypt-4.2.0-cp39-abi3-win32.whl", hash = "sha256:77800b7147c9dc905db1cba26abe31e504d8247ac73580b4aa179f98e6608f34"}, + {file = "bcrypt-4.2.0-cp39-abi3-win_amd64.whl", hash = "sha256:61ed14326ee023917ecd093ee6ef422a72f3aec6f07e21ea5f10622b735538a9"}, + {file = "bcrypt-4.2.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:39e1d30c7233cfc54f5c3f2c825156fe044efdd3e0b9d309512cc514a263ec2a"}, + {file = "bcrypt-4.2.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f4f4acf526fcd1c34e7ce851147deedd4e26e6402369304220250598b26448db"}, + {file = "bcrypt-4.2.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:1ff39b78a52cf03fdf902635e4c81e544714861ba3f0efc56558979dd4f09170"}, + {file = "bcrypt-4.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:373db9abe198e8e2c70d12b479464e0d5092cc122b20ec504097b5f2297ed184"}, + {file = "bcrypt-4.2.0.tar.gz", hash = "sha256:cf69eaf5185fd58f268f805b505ce31f9b9fc2d64b376642164e9244540c1221"}, ] [package.extras] @@ -463,43 +463,38 @@ toml = ["tomli"] [[package]] name = "cryptography" -version = "42.0.8" +version = "43.0.0" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" files = [ - {file = "cryptography-42.0.8-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:81d8a521705787afe7a18d5bfb47ea9d9cc068206270aad0b96a725022e18d2e"}, - {file = "cryptography-42.0.8-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:961e61cefdcb06e0c6d7e3a1b22ebe8b996eb2bf50614e89384be54c48c6b63d"}, - {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3ec3672626e1b9e55afd0df6d774ff0e953452886e06e0f1eb7eb0c832e8902"}, - {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e599b53fd95357d92304510fb7bda8523ed1f79ca98dce2f43c115950aa78801"}, - {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:5226d5d21ab681f432a9c1cf8b658c0cb02533eece706b155e5fbd8a0cdd3949"}, - {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:6b7c4f03ce01afd3b76cf69a5455caa9cfa3de8c8f493e0d3ab7d20611c8dae9"}, - {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:2346b911eb349ab547076f47f2e035fc8ff2c02380a7cbbf8d87114fa0f1c583"}, - {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:ad803773e9df0b92e0a817d22fd8a3675493f690b96130a5e24f1b8fabbea9c7"}, - {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2f66d9cd9147ee495a8374a45ca445819f8929a3efcd2e3df6428e46c3cbb10b"}, - {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d45b940883a03e19e944456a558b67a41160e367a719833c53de6911cabba2b7"}, - {file = "cryptography-42.0.8-cp37-abi3-win32.whl", hash = "sha256:a0c5b2b0585b6af82d7e385f55a8bc568abff8923af147ee3c07bd8b42cda8b2"}, - {file = "cryptography-42.0.8-cp37-abi3-win_amd64.whl", hash = "sha256:57080dee41209e556a9a4ce60d229244f7a66ef52750f813bfbe18959770cfba"}, - {file = "cryptography-42.0.8-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:dea567d1b0e8bc5764b9443858b673b734100c2871dc93163f58c46a97a83d28"}, - {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4783183f7cb757b73b2ae9aed6599b96338eb957233c58ca8f49a49cc32fd5e"}, - {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0608251135d0e03111152e41f0cc2392d1e74e35703960d4190b2e0f4ca9c70"}, - {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:dc0fdf6787f37b1c6b08e6dfc892d9d068b5bdb671198c72072828b80bd5fe4c"}, - {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:9c0c1716c8447ee7dbf08d6db2e5c41c688544c61074b54fc4564196f55c25a7"}, - {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fff12c88a672ab9c9c1cf7b0c80e3ad9e2ebd9d828d955c126be4fd3e5578c9e"}, - {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:cafb92b2bc622cd1aa6a1dce4b93307792633f4c5fe1f46c6b97cf67073ec961"}, - {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:31f721658a29331f895a5a54e7e82075554ccfb8b163a18719d342f5ffe5ecb1"}, - {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b297f90c5723d04bcc8265fc2a0f86d4ea2e0f7ab4b6994459548d3a6b992a14"}, - {file = "cryptography-42.0.8-cp39-abi3-win32.whl", hash = "sha256:2f88d197e66c65be5e42cd72e5c18afbfae3f741742070e3019ac8f4ac57262c"}, - {file = "cryptography-42.0.8-cp39-abi3-win_amd64.whl", hash = "sha256:fa76fbb7596cc5839320000cdd5d0955313696d9511debab7ee7278fc8b5c84a"}, - {file = "cryptography-42.0.8-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ba4f0a211697362e89ad822e667d8d340b4d8d55fae72cdd619389fb5912eefe"}, - {file = "cryptography-42.0.8-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:81884c4d096c272f00aeb1f11cf62ccd39763581645b0812e99a91505fa48e0c"}, - {file = "cryptography-42.0.8-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c9bb2ae11bfbab395bdd072985abde58ea9860ed84e59dbc0463a5d0159f5b71"}, - {file = "cryptography-42.0.8-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7016f837e15b0a1c119d27ecd89b3515f01f90a8615ed5e9427e30d9cdbfed3d"}, - {file = "cryptography-42.0.8-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5a94eccb2a81a309806027e1670a358b99b8fe8bfe9f8d329f27d72c094dde8c"}, - {file = "cryptography-42.0.8-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dec9b018df185f08483f294cae6ccac29e7a6e0678996587363dc352dc65c842"}, - {file = "cryptography-42.0.8-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:343728aac38decfdeecf55ecab3264b015be68fc2816ca800db649607aeee648"}, - {file = "cryptography-42.0.8-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:013629ae70b40af70c9a7a5db40abe5d9054e6f4380e50ce769947b73bf3caad"}, - {file = "cryptography-42.0.8.tar.gz", hash = "sha256:8d09d05439ce7baa8e9e95b07ec5b6c886f548deb7e0f69ef25f64b3bce842f2"}, + {file = "cryptography-43.0.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:64c3f16e2a4fc51c0d06af28441881f98c5d91009b8caaff40cf3548089e9c74"}, + {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3dcdedae5c7710b9f97ac6bba7e1052b95c7083c9d0e9df96e02a1932e777895"}, + {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d9a1eca329405219b605fac09ecfc09ac09e595d6def650a437523fcd08dd22"}, + {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ea9e57f8ea880eeea38ab5abf9fbe39f923544d7884228ec67d666abd60f5a47"}, + {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:9a8d6802e0825767476f62aafed40532bd435e8a5f7d23bd8b4f5fd04cc80ecf"}, + {file = "cryptography-43.0.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:cc70b4b581f28d0a254d006f26949245e3657d40d8857066c2ae22a61222ef55"}, + {file = "cryptography-43.0.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:4a997df8c1c2aae1e1e5ac49c2e4f610ad037fc5a3aadc7b64e39dea42249431"}, + {file = "cryptography-43.0.0-cp37-abi3-win32.whl", hash = "sha256:6e2b11c55d260d03a8cf29ac9b5e0608d35f08077d8c087be96287f43af3ccdc"}, + {file = "cryptography-43.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:31e44a986ceccec3d0498e16f3d27b2ee5fdf69ce2ab89b52eaad1d2f33d8778"}, + {file = "cryptography-43.0.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:7b3f5fe74a5ca32d4d0f302ffe6680fcc5c28f8ef0dc0ae8f40c0f3a1b4fca66"}, + {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac1955ce000cb29ab40def14fd1bbfa7af2017cca696ee696925615cafd0dce5"}, + {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:299d3da8e00b7e2b54bb02ef58d73cd5f55fb31f33ebbf33bd00d9aa6807df7e"}, + {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ee0c405832ade84d4de74b9029bedb7b31200600fa524d218fc29bfa371e97f5"}, + {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:cb013933d4c127349b3948aa8aaf2f12c0353ad0eccd715ca789c8a0f671646f"}, + {file = "cryptography-43.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fdcb265de28585de5b859ae13e3846a8e805268a823a12a4da2597f1f5afc9f0"}, + {file = "cryptography-43.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2905ccf93a8a2a416f3ec01b1a7911c3fe4073ef35640e7ee5296754e30b762b"}, + {file = "cryptography-43.0.0-cp39-abi3-win32.whl", hash = "sha256:47ca71115e545954e6c1d207dd13461ab81f4eccfcb1345eac874828b5e3eaaf"}, + {file = "cryptography-43.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:0663585d02f76929792470451a5ba64424acc3cd5227b03921dab0e2f27b1709"}, + {file = "cryptography-43.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2c6d112bf61c5ef44042c253e4859b3cbbb50df2f78fa8fae6747a7814484a70"}, + {file = "cryptography-43.0.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:844b6d608374e7d08f4f6e6f9f7b951f9256db41421917dfb2d003dde4cd6b66"}, + {file = "cryptography-43.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:51956cf8730665e2bdf8ddb8da0056f699c1a5715648c1b0144670c1ba00b48f"}, + {file = "cryptography-43.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:aae4d918f6b180a8ab8bf6511a419473d107df4dbb4225c7b48c5c9602c38c7f"}, + {file = "cryptography-43.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:232ce02943a579095a339ac4b390fbbe97f5b5d5d107f8a08260ea2768be8cc2"}, + {file = "cryptography-43.0.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5bcb8a5620008a8034d39bce21dc3e23735dfdb6a33a06974739bfa04f853947"}, + {file = "cryptography-43.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:08a24a7070b2b6804c1940ff0f910ff728932a9d0e80e7814234269f9d46d069"}, + {file = "cryptography-43.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e9c5266c432a1e23738d178e51c2c7a5e2ddf790f248be939448c0ba2021f9d1"}, + {file = "cryptography-43.0.0.tar.gz", hash = "sha256:b88075ada2d51aa9f18283532c9f60e72170041bba88d7f37e49cbb10275299e"}, ] [package.dependencies] @@ -512,12 +507,12 @@ nox = ["nox"] pep8test = ["check-sdist", "click", "mypy", "ruff"] sdist = ["build"] ssh = ["bcrypt (>=3.1.5)"] -test = ["certifi", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test = ["certifi", "cryptography-vectors (==43.0.0)", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] test-randomorder = ["pytest-randomly"] [[package]] name = "data-adapter" -version = "0.22.0" +version = "0.21.0" description = "Provides general functionality for other data adapters" optional = false python-versions = ">=3.8.1,<4.0.0" @@ -536,8 +531,8 @@ units = "^0.7" [package.source] type = "git" url = "https://git@github.com/sedos-project/data_adapter" -reference = "main" -resolved_reference = "6c2dc303b9f4fb5d79a38f856e50950ee6df100a" +reference = "dev" +resolved_reference = "661818f3bfd8cd5bca822fd794b183a40b638640" [[package]] name = "datapackage" @@ -603,13 +598,13 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.2.1" +version = "1.2.2" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"}, - {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"}, + {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, + {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, ] [package.extras] @@ -2531,13 +2526,13 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "validators" -version = "0.31.0" +version = "0.33.0" description = "Python Data Validation for Humans™" optional = false python-versions = ">=3.8" files = [ - {file = "validators-0.31.0-py3-none-any.whl", hash = "sha256:e15a600d81555a4cd409b17bf55946c5edec7748e776afc85ed0a19bdee54e56"}, - {file = "validators-0.31.0.tar.gz", hash = "sha256:de7574fc56a231c788162f3e7da15bc2053c5ff9e0281d9ff1afb3a7b69498df"}, + {file = "validators-0.33.0-py3-none-any.whl", hash = "sha256:134b586a98894f8139865953899fc2daeb3d0c35569552c5518f089ae43ed075"}, + {file = "validators-0.33.0.tar.gz", hash = "sha256:535867e9617f0100e676a1257ba1e206b9bfd847ddc171e4d44811f07ff0bfbf"}, ] [package.extras] @@ -2585,4 +2580,4 @@ docs = [] [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.11" -content-hash = "c20e8c1b158f2417d6e37b7708a4fea2a222fa1f3545062c651d0e9b685dd27c" +content-hash = "fb6e2ecd10b63c067be3d7d8b63bfc062be95479af3f6f4ebf515f710fd1627e" diff --git a/pyproject.toml b/pyproject.toml index fdf574a..68b4c1a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,7 +19,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry.dependencies] python = ">=3.10,<3.11" -data_adapter = { git = "https://git@github.com/sedos-project/data_adapter", branch = "main"} +data_adapter = { git = "https://git@github.com/sedos-project/data_adapter", branch = "dev"} oemof-tabular = { git = "https://git@github.com/oemof/oemof-tabular", branch = "dev"} oemof-industry = { git = "https://github.com/sedos-project/oemof.industry.git", branch = "main"} boto3 = "1.26.125" # fix boto3 to fasten up dependency resolution From 80bf167d3b7fd51fd6c24b823b186d478bb8148f Mon Sep 17 00:00:00 2001 From: FelixMau Date: Wed, 31 Jul 2024 13:20:25 +0200 Subject: [PATCH 11/70] pre commit --- data_adapter_oemof/adapters.py | 6 +- data_adapter_oemof/build_datapackage.py | 7 +- data_adapter_oemof/calculations.py | 6 +- examples/industry/data_adapter_industry.py | 337 ++++++++++----------- 4 files changed, 179 insertions(+), 177 deletions(-) diff --git a/data_adapter_oemof/adapters.py b/data_adapter_oemof/adapters.py index 6bfe40f..eb16f12 100644 --- a/data_adapter_oemof/adapters.py +++ b/data_adapter_oemof/adapters.py @@ -158,8 +158,10 @@ def get_data(self, key, field_type: Optional[Type] = None): f"Using existing timeseries column '{timeseries_key}'." ) return timeseries_key - logger.warning(f"For Process {self.process_name}" - f"Could not find timeseries entry for mapped key '{key}'") + logger.warning( + f"For Process {self.process_name}" + f"Could not find timeseries entry for mapped key '{key}'" + ) return None # 2 Use defaults diff --git a/data_adapter_oemof/build_datapackage.py b/data_adapter_oemof/build_datapackage.py index ac9df10..91ca898 100644 --- a/data_adapter_oemof/build_datapackage.py +++ b/data_adapter_oemof/build_datapackage.py @@ -1,8 +1,8 @@ import dataclasses +import logging import os import warnings from typing import Optional, Type -import logging import numpy as np import pandas as pd @@ -18,6 +18,7 @@ logger = logging.getLogger() + # Define a function to aggregate differing values into a list def _listify_to_periodic(group_df) -> pd.Series: """ @@ -496,7 +497,9 @@ def _reduce_lists(x): + _reduce_lists(timeseries.columns.get_level_values(1)) ) facade_adapter_name: str = process_adapter_map[process_name] - logger.info(f"Adaptering process {process_name} into adapter {facade_adapter_name}") + logger.info( + f"Adaptering process {process_name} into adapter {facade_adapter_name}" + ) facade_adapter: Type[FacadeAdapter] = FACADE_ADAPTERS[facade_adapter_name] component_adapter: Optional[FacadeAdapter] = None components = [] diff --git a/data_adapter_oemof/calculations.py b/data_adapter_oemof/calculations.py index c190b60..8ba9a9f 100644 --- a/data_adapter_oemof/calculations.py +++ b/data_adapter_oemof/calculations.py @@ -95,14 +95,14 @@ def decommission(process_name, adapter_dict: dict) -> dict: if max_column not in adapter_dict["output_parameters"].keys(): adapter_dict["output_parameters"][max_column] = adapter_dict[ capacity_column - ] / np.max(adapter_dict[capacity_column]) + ] / np.nanmax(adapter_dict[capacity_column]) # II: else: adapter_dict["output_parameters"][max_column] = multiply_two_lists( adapter_dict["output_parameters"][max_column], adapter_dict[capacity_column] - ) / np.max(adapter_dict[capacity_column]) + ) / np.nanmax(adapter_dict[capacity_column]) - adapter_dict[capacity_column] = np.max(adapter_dict[capacity_column]) + adapter_dict[capacity_column] = np.nanmax(adapter_dict[capacity_column]) return adapter_dict diff --git a/examples/industry/data_adapter_industry.py b/examples/industry/data_adapter_industry.py index 21b75d9..5d4979f 100644 --- a/examples/industry/data_adapter_industry.py +++ b/examples/industry/data_adapter_industry.py @@ -13,7 +13,7 @@ deserialize_constraints, deserialize_energy_system, ) -from oemof.tabular.facades import Commodity, Conversion, Excess, Load, Volatile, Storage +from oemof.tabular.facades import Commodity, Conversion, Excess, Load, Storage, Volatile from oemof_industry.mimo_converter import MIMO from data_adapter_oemof.build_datapackage import DataPackage # noqa: E402 @@ -39,10 +39,12 @@ - red marked lines in ProcessO1 (not yet uploaded or deleted data) """ -# from data_adapter.databus import download_collection -# download_collection( -# "https://databus.openenergyplatform.org/felixmaur/collections/steel_industry_test/" -# ) +from data_adapter.databus import download_collection + +download_collection( + "https://databus.openenergyplatform.org/felixmaur/collections/steel_industry_test/" +) + logger.info("Reading Structure") structure = Structure( "SEDOS_Modellstruktur", @@ -77,7 +79,7 @@ ).to_dict(orient="dict")["facade adapter (oemof)"] parameter_map = { - "DEFAULT": {"interest_rate":"wacc"}, + "DEFAULT": {"interest_rate": "wacc"}, "StorageAdapter": { "capacity_potential": "expansion_limit", "capacity": "installed_capacity", @@ -85,202 +87,197 @@ "inflow_conversion_factor": "input_ratio", "outflow_conversion_factor": "output_ratio", }, - "CommodityAdapter": { - }, - "x2x_import_biogas":{"amount":"capacity_w_inst_0", - "marginal_cost":"cost_var_e"}, - "x2x_import_coal":{"amount":"capacity_w_inst_0", - "marginal_cost":"cost_var_e"}, - "x2x_import_hydrogen_renewable":{"amount":"capacity_w_inst_0", - "marginal_cost":"cost_var_e"}, - "x2x_other_biogas_treatment":{"marginal_cost":"cost_var_e"}, - - - - - "ind_source_steel_scrap_iron":{"amount":"capacity_w_inst_0"}, - "ind_steel_sinter_0": {"capacity":"capacity_w_inst_0"}, - "ind_steel_coke_plant_0": {"capacity":"capacity_e_inst_0"}, - "ind_steel_blafu_0": {"capacity":"capacity_w_inst_0"}, - "ind_steel_oxyfu_0": {"capacity":"capacity_w_inst_0"}, - "ind_steel_casting_0": {"capacity":"capacity_w_inst_0"}, - "ind_steel_elefu_0": {"capacity":"capacity_w_inst_0"}, + "CommodityAdapter": {}, + "x2x_import_biogas": {"amount": "capacity_w_inst_0", "marginal_cost": "cost_var_e"}, + "x2x_import_coal": {"amount": "capacity_w_inst_0", "marginal_cost": "cost_var_e"}, + "x2x_import_hydrogen_renewable": { + "amount": "capacity_w_inst_0", + "marginal_cost": "cost_var_e", + }, + "x2x_other_biogas_treatment": {"marginal_cost": "cost_var_e"}, + "ind_source_steel_scrap_iron": {"amount": "capacity_w_inst_0"}, + "ind_steel_sinter_0": {"capacity": "capacity_w_inst_0"}, + "ind_steel_coke_plant_0": {"capacity": "capacity_e_inst_0"}, + "ind_steel_blafu_0": {"capacity": "capacity_w_inst_0"}, + "ind_steel_oxyfu_0": {"capacity": "capacity_w_inst_0"}, + "ind_steel_casting_0": {"capacity": "capacity_w_inst_0"}, + "ind_steel_elefu_0": {"capacity": "capacity_w_inst_0"}, "x2x_delivery_methane_pipeline_0": { - "capacity":"capacity_p_max", - "marginal_cost":"cost_var_p", - }, - "x2x_x2gas_sr_syngas_0": {"capacity":"capacity_p_inst", - "capacity_cost": "cost_inv_p", - "fixed_costs":"cost_fix_p", - }, - - - "ind_steel_coke_plant_1": {"capacity_potential":"capacity_e_abs_new_max", - "capacity_cost": "cost_inv_e", - "fixed_costs":"cost_fix_e", - "marginal_cost":"cost_var_e" - }, - "ind_steel_sinter_1": {"capacity_potential":"capacity_w_abs_new_max", - "capacity_cost": "cost_inv_w", - "fixed_costs":"cost_fix_w", - "marginal_cost":"cost_var_w" - }, - "ind_steel_blafu_1": {"capacity_potential":"capacity_w_abs_new_max", - "capacity_cost": "cost_inv_w", - "fixed_costs":"cost_fix_w", - "marginal_cost":"cost_var_w" - }, - "ind_steel_blafu_cc_1": {"capacity_potential":"capacity_w_abs_new_max", - "capacity_cost": "cost_inv_w", - "fixed_costs":"cost_fix_w", - "marginal_cost":"cost_var_w" - }, - "ind_steel_oxyfu_1": {"capacity_potential":"capacity_w_abs_new_max", - "capacity_cost": "cost_inv_w", - "fixed_costs":"cost_fix_w", - "marginal_cost":"cost_var_w", - #"max":"availability_constant" - }, - "ind_steel_casting_1": {"capacity_potential":"capacity_w_abs_new_max", - "capacity_cost": "cost_inv_w", - "fixed_costs":"cost_fix_w", - "marginal_cost":"cost_var_w", - #"max":"availability_constant" - }, - "ind_steel_elefu_1": {"capacity_potential":"capacity_w_abs_new_max", - "capacity_cost": "cost_inv_w", - "fixed_costs":"cost_fix_w", - "marginal_cost":"cost_var_w", - #"max":"availability_constant" - }, - "ind_steel_dirred_1": {"capacity_potential":"capacity_w_abs_new_max", - "capacity_cost": "cost_inv_w", - "fixed_costs":"cost_fix_w", - "marginal_cost":"cost_var_w", - #"max":"availability_constant" - }, - "ind_steel_sponge_1": {"capacity_potential":"capacity_w_abs_new_max", - "capacity_cost": "cost_inv_w", - "fixed_costs":"cost_fix_w", - "marginal_cost":"cost_var_w", - #"max":"availability_constant" - }, - "ind_steel_pellet_1": {"capacity_potential":"capacity_w_abs_new_max", - "capacity_cost": "cost_inv_w", - "fixed_costs":"cost_fix_w", - "marginal_cost":"cost_var_w", - #"max":"availability_constant" - }, - "ind_steel_hyddri_1": {"capacity_potential":"capacity_w_abs_new_max", - "capacity_cost": "cost_inv_w", - "fixed_costs":"cost_fix_w", - "marginal_cost":"cost_var_w", - #"max":"availability_constant" - }, - "x2x_delivery_hydrogen_pipeline_retrofit_1": {"capacity_potential":"capacity_p_max", - "capacity_cost": "cost_inv_p", - "fixed_costs":"cost_fix_p", - "marginal_cost":"cost_var_p", + "capacity": "capacity_p_max", + "marginal_cost": "cost_var_p", + }, + "x2x_x2gas_sr_syngas_0": { + "capacity": "capacity_p_inst", + "capacity_cost": "cost_inv_p", + "fixed_costs": "cost_fix_p", + }, + "ind_steel_coke_plant_1": { + "capacity_potential": "capacity_e_abs_new_max", + "capacity_cost": "cost_inv_e", + "fixed_costs": "cost_fix_e", + "marginal_cost": "cost_var_e", + }, + "ind_steel_sinter_1": { + "capacity_potential": "capacity_w_abs_new_max", + "capacity_cost": "cost_inv_w", + "fixed_costs": "cost_fix_w", + "marginal_cost": "cost_var_w", + }, + "ind_steel_blafu_1": { + "capacity_potential": "capacity_w_abs_new_max", + "capacity_cost": "cost_inv_w", + "fixed_costs": "cost_fix_w", + "marginal_cost": "cost_var_w", + }, + "ind_steel_blafu_cc_1": { + "capacity_potential": "capacity_w_abs_new_max", + "capacity_cost": "cost_inv_w", + "fixed_costs": "cost_fix_w", + "marginal_cost": "cost_var_w", + }, + "ind_steel_oxyfu_1": { + "capacity_potential": "capacity_w_abs_new_max", + "capacity_cost": "cost_inv_w", + "fixed_costs": "cost_fix_w", + "marginal_cost": "cost_var_w", + # "max":"availability_constant" + }, + "ind_steel_casting_1": { + "capacity_potential": "capacity_w_abs_new_max", + "capacity_cost": "cost_inv_w", + "fixed_costs": "cost_fix_w", + "marginal_cost": "cost_var_w", + # "max":"availability_constant" + }, + "ind_steel_elefu_1": { + "capacity_potential": "capacity_w_abs_new_max", + "capacity_cost": "cost_inv_w", + "fixed_costs": "cost_fix_w", + "marginal_cost": "cost_var_w", + # "max":"availability_constant" + }, + "ind_steel_dirred_1": { + "capacity_potential": "capacity_w_abs_new_max", + "capacity_cost": "cost_inv_w", + "fixed_costs": "cost_fix_w", + "marginal_cost": "cost_var_w", + # "max":"availability_constant" + }, + "ind_steel_sponge_1": { + "capacity_potential": "capacity_w_abs_new_max", + "capacity_cost": "cost_inv_w", + "fixed_costs": "cost_fix_w", + "marginal_cost": "cost_var_w", + # "max":"availability_constant" + }, + "ind_steel_pellet_1": { + "capacity_potential": "capacity_w_abs_new_max", + "capacity_cost": "cost_inv_w", + "fixed_costs": "cost_fix_w", + "marginal_cost": "cost_var_w", + # "max":"availability_constant" + }, + "ind_steel_hyddri_1": { + "capacity_potential": "capacity_w_abs_new_max", + "capacity_cost": "cost_inv_w", + "fixed_costs": "cost_fix_w", + "marginal_cost": "cost_var_w", + # "max":"availability_constant" + }, + "x2x_delivery_hydrogen_pipeline_retrofit_1": { + "capacity_potential": "capacity_p_max", + "capacity_cost": "cost_inv_p", + "fixed_costs": "cost_fix_p", + "marginal_cost": "cost_var_p", }, "x2x_delivery_hydrogen_pipeline_new_1": { - "capacity_cost": "cost_inv_p", - "fixed_costs":"cost_fix_p", + "capacity_cost": "cost_inv_p", + "fixed_costs": "cost_fix_p", }, "x2x_g2p_pemfc_ls_1": { - "capacity_cost": "cost_inv_p", - "fixed_costs":"cost_fix_p", + "capacity_cost": "cost_inv_p", + "fixed_costs": "cost_fix_p", }, "x2x_g2p_sofc_ls_1": { - "capacity_cost": "cost_inv_p", - "fixed_costs":"cost_fix_p", + "capacity_cost": "cost_inv_p", + "fixed_costs": "cost_fix_p", }, - "x2x_other_dac_ht_1": { "marginal_cost":"cost_var_w", - "capacity_cost": "cost_inv_w", - "fixed_costs":"cost_fix_w", + "x2x_other_dac_ht_1": { + "marginal_cost": "cost_var_w", + "capacity_cost": "cost_inv_w", + "fixed_costs": "cost_fix_w", }, "x2x_other_dac_lt_1": { - "capacity_cost": "cost_inv_w", - "fixed_costs":"cost_fix_w", + "capacity_cost": "cost_inv_w", + "fixed_costs": "cost_fix_w", }, "x2x_p2gas_aec_1": { - "capacity_cost": "cost_inv_w", - "fixed_costs":"cost_fix_w", - }, - "x2x_p2gas_biom_1": { - "capacity_cost": "cost_inv_w", - "fixed_costs":"cost_fix_w", + "capacity_cost": "cost_inv_w", + "fixed_costs": "cost_fix_w", }, "x2x_p2gas_pemec_1": { - "capacity_cost": "cost_inv_w", - "fixed_costs":"cost_fix_w", + "capacity_cost": "cost_inv_w", + "fixed_costs": "cost_fix_w", }, "x2x_p2gas_biom_1": { - "capacity_cost": "cost_inv_w", - "fixed_costs":"cost_fix_w", - }, - "x2x_p2gas_pemec_1": { - "capacity_cost": "cost_inv_w", - "fixed_costs":"cost_fix_w", + "capacity_cost": "cost_inv_w", + "fixed_costs": "cost_fix_w", }, "x2x_p2gas_sabm_1": { - "capacity_cost": "cost_inv_w", - "fixed_costs":"cost_fix_w", + "capacity_cost": "cost_inv_w", + "fixed_costs": "cost_fix_w", }, "x2x_p2gas_soec_1": { - "capacity_cost": "cost_inv_w", - "fixed_costs":"cost_fix_w", + "capacity_cost": "cost_inv_w", + "fixed_costs": "cost_fix_w", }, "x2x_x2gas_mpyr_1": { - "capacity_cost": "cost_inv_p", - "fixed_costs":"cost_fix_p", - "marginal_cost":"cost_var_e" + "capacity_cost": "cost_inv_p", + "fixed_costs": "cost_fix_p", + "marginal_cost": "cost_var_e", }, "x2x_x2gas_sr_syngas_1": { - "capacity_cost": "cost_inv_p", - "fixed_costs":"cost_fix_p", + "capacity_cost": "cost_inv_p", + "fixed_costs": "cost_fix_p", }, - - "x2x_storage_hydrogen_lohc_1": { - "efficiency": "efficiency_sto_in", - "fixed_costs":"cost_fix_w", - "loss_rate":"sto_self_discharge", - "storage_capacity_cost":"cost_inv_e", - "fixed_costs":"cost_fix_p", - "marginal_cost":"cost_var_e" + "efficiency": "efficiency_sto_in", + "loss_rate": "sto_self_discharge", + "storage_capacity_cost": "cost_inv_e", + "fixed_costs": "cost_fix_p", + "marginal_cost": "cost_var_e", }, "x2x_storage_hydrogen_new_1": { - "efficiency": "efficiency_sto_in", - "fixed_costs":"cost_fix_w", - "loss_rate":"sto_self_discharge", - "storage_capacity_cost":"cost_inv_e", - "fixed_costs":"cost_fix_p", - "marginal_cost":"cost_var_e", - "capacity_capacity_potential":"capacity_e_max" + "efficiency": "efficiency_sto_in", + "loss_rate": "sto_self_discharge", + "storage_capacity_cost": "cost_inv_e", + "fixed_costs": "cost_fix_p", + "marginal_cost": "cost_var_e", + "capacity_capacity_potential": "capacity_e_max", }, "x2x_storage_hydrogen_retrofit_1": { - "efficiency": "efficiency_sto_in", - "fixed_costs":"cost_fix_p", - "loss_rate":"sto_self_discharge", - "storage_capacity_cost":"cost_inv_e", - "fixed_costs":"cost_fix_p", - "marginal_cost":"cost_var_e", - "capacity_capacity_potential":"capacity_e_max", - "storage_capacity":"capacity_e_inst" + "efficiency": "efficiency_sto_in", + "fixed_costs": "cost_fix_p", + "loss_rate": "sto_self_discharge", + "storage_capacity_cost": "cost_inv_e", + "marginal_cost": "cost_var_e", + "capacity_capacity_potential": "capacity_e_max", + "storage_capacity": "capacity_e_inst", }, "x2x_storage_methane_0": { - "efficiency": "efficiency_sto_in", - "fixed_costs":"cost_fix_p", - "loss_rate":"sto_self_discharge", - "storage_capacity_cost":"cost_inv_e", - "fixed_costs":"cost_fix_p", - "marginal_cost":"cost_var_e", - "capacity_capacity_potential":"capacity_e_max", - "storage_capacity":"capacity_e_inst" + "efficiency": "efficiency_sto_in", + "fixed_costs": "cost_fix_p", + "loss_rate": "sto_self_discharge", + "storage_capacity_cost": "cost_inv_e", + "fixed_costs": "cost_fix_p", + "marginal_cost": "cost_var_e", + "capacity_capacity_potential": "capacity_e_max", + "storage_capacity": "capacity_e_inst", + }, + "helper_sink_exo_steel": { + "profile": "demand_timeseries_fixed", + "amount": "demand_annual", }, - - - } logger.info("Building datapackage...") dp = DataPackage.build_datapackage( @@ -303,7 +300,7 @@ "load": Load, "volatile": Volatile, "mimo": MIMO, - "storage":Storage + "storage": Storage, }, ) From c4cd98ad70d645fa380cfefdb325cd8778d18309 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Tue, 20 Aug 2024 15:25:34 +0200 Subject: [PATCH 12/70] Start adapters for GHG facades --- data_adapter_oemof/adapters.py | 24 ++++++++++++++++++++++ examples/industry/data_adapter_industry.py | 6 ++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/data_adapter_oemof/adapters.py b/data_adapter_oemof/adapters.py index 6bfe40f..37c7164 100644 --- a/data_adapter_oemof/adapters.py +++ b/data_adapter_oemof/adapters.py @@ -428,6 +428,19 @@ def get_default_parameters( return defaults +class CommodityGHGAdapter(CommodityAdapter): + """ + CommodityGHGAdapter + """ + + type = "commodity_ghg" + facade = facades.CommodityGHG + + def get_busses(self) -> dict: + bus_dict = {"emission_bus_x": bus.label} + return bus_dict + # todo emission buses and emission factors + class ConversionAdapter(Adapter): """ @@ -439,6 +452,17 @@ class ConversionAdapter(Adapter): facade = facades.Conversion +class ConversionGHGAdapter(Adapter): + """ + ConversionGHGAdapter + """ + + type = "conversion_ghg" + facade = facades.ConversionGHG + + # todo emission buses and emission factors + + class LoadAdapter(Adapter): """ LoadAdapter diff --git a/examples/industry/data_adapter_industry.py b/examples/industry/data_adapter_industry.py index 21b75d9..e661300 100644 --- a/examples/industry/data_adapter_industry.py +++ b/examples/industry/data_adapter_industry.py @@ -13,7 +13,7 @@ deserialize_constraints, deserialize_energy_system, ) -from oemof.tabular.facades import Commodity, Conversion, Excess, Load, Volatile, Storage +from oemof.tabular.facades import Commodity, Conversion, Excess, Load, Volatile, Storage, ConversionGHG, CommodityGHG from oemof_industry.mimo_converter import MIMO from data_adapter_oemof.build_datapackage import DataPackage # noqa: E402 @@ -303,7 +303,9 @@ "load": Load, "volatile": Volatile, "mimo": MIMO, - "storage":Storage + "storage": Storage, + "conversion_ghg": ConversionGHG, + "commodity_ghg": CommodityGHG, }, ) From 06fa64dff8053724954a100330285fc6dd470bc3 Mon Sep 17 00:00:00 2001 From: FelixMau Date: Wed, 21 Aug 2024 10:00:09 +0200 Subject: [PATCH 13/70] Recalculate amount like capacity --- data_adapter_oemof/adapters.py | 9 ++++++++- data_adapter_oemof/calculations.py | 20 ++++++++++---------- examples/industry/data_adapter_industry.py | 10 +++++----- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/data_adapter_oemof/adapters.py b/data_adapter_oemof/adapters.py index eb16f12..7851ffe 100644 --- a/data_adapter_oemof/adapters.py +++ b/data_adapter_oemof/adapters.py @@ -349,7 +349,14 @@ def default_post_mapping_calculations(self, mapped_defaults): # I: if self.process_name[-1] == "0": mapped_defaults = calculations.decommission( - process_name=self.process_name, adapter_dict=mapped_defaults + process_name=self.process_name, + adapter_dict=mapped_defaults, + column="capacity", + ) + mapped_defaults = calculations.decommission( + process_name=self.process_name, + adapter_dict=mapped_defaults, + column="amount", ) # II: diff --git a/data_adapter_oemof/calculations.py b/data_adapter_oemof/calculations.py index 8ba9a9f..ba9393f 100644 --- a/data_adapter_oemof/calculations.py +++ b/data_adapter_oemof/calculations.py @@ -44,7 +44,9 @@ def get_capacity_cost(overnight_cost, fixed_cost, lifetime, wacc): return annuity(overnight_cost, lifetime, wacc) + fixed_cost -def decommission(process_name, adapter_dict: dict) -> dict: +def decommission( + process_name, adapter_dict: dict, column: str = "capacity", max_column: str = "max" +) -> dict: """ Takes adapter dictionary from adapters.py with mapped values. @@ -74,17 +76,15 @@ def decommission(process_name, adapter_dict: dict) -> dict: ------- """ - capacity_column = "capacity" - max_column = "max" # check if capacity column is there and if it has to be decommissioned - if capacity_column not in adapter_dict.keys(): + if column not in adapter_dict.keys(): logging.info( f"Capacity missing for decommissioning " f"of Process `{process_name}`" ) return adapter_dict - if not isinstance(adapter_dict[capacity_column], list): + if not isinstance(adapter_dict[column], list): logging.info( f"No capacity fading out that can be decommissioned" f" for Process `{process_name}`." @@ -94,15 +94,15 @@ def decommission(process_name, adapter_dict: dict) -> dict: # I: if max_column not in adapter_dict["output_parameters"].keys(): adapter_dict["output_parameters"][max_column] = adapter_dict[ - capacity_column - ] / np.nanmax(adapter_dict[capacity_column]) + column + ] / np.nanmax(adapter_dict[column]) # II: else: adapter_dict["output_parameters"][max_column] = multiply_two_lists( - adapter_dict["output_parameters"][max_column], adapter_dict[capacity_column] - ) / np.nanmax(adapter_dict[capacity_column]) + adapter_dict["output_parameters"][max_column], adapter_dict[column] + ) / np.nanmax(adapter_dict[column]) - adapter_dict[capacity_column] = np.nanmax(adapter_dict[capacity_column]) + adapter_dict[column] = np.nanmax(adapter_dict[column]) return adapter_dict diff --git a/examples/industry/data_adapter_industry.py b/examples/industry/data_adapter_industry.py index 5d4979f..176370f 100644 --- a/examples/industry/data_adapter_industry.py +++ b/examples/industry/data_adapter_industry.py @@ -39,11 +39,11 @@ - red marked lines in ProcessO1 (not yet uploaded or deleted data) """ -from data_adapter.databus import download_collection - -download_collection( - "https://databus.openenergyplatform.org/felixmaur/collections/steel_industry_test/" -) +# from data_adapter.databus import download_collection +# +# download_collection( +# "https://databus.openenergyplatform.org/felixmaur/collections/steel_industry_test/" +# ) logger.info("Reading Structure") structure = Structure( From 5ece64102169f586def40b7e1b25943ea7d15e70 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Thu, 22 Aug 2024 11:27:18 +0200 Subject: [PATCH 14/70] Write adapters for GHG facades --- data_adapter_oemof/adapters.py | 43 +++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/data_adapter_oemof/adapters.py b/data_adapter_oemof/adapters.py index 37c7164..19b1482 100644 --- a/data_adapter_oemof/adapters.py +++ b/data_adapter_oemof/adapters.py @@ -437,9 +437,24 @@ class CommodityGHGAdapter(CommodityAdapter): facade = facades.CommodityGHG def get_busses(self) -> dict: - bus_dict = {"emission_bus_x": bus.label} + bus_list = self.structure["outputs"] + bus_dict = {} + counter = 0 + for bus in bus_list: + if not bus.startswith("emi"): + bus_dict["bus"] = bus + elif bus.startswith("emi"): + bus_dict[f"emission_bus_{counter}"] = bus + counter += 1 + return bus_dict # todo emission buses and emission factors + def get_default_parameters(self) -> dict: + defaults = super().get_default_parameters() + for key, value in self.data.items(): + if key.startswith("ef"): + defaults[key.replace("ef", "emission_factor")] = value + return defaults class ConversionAdapter(Adapter): @@ -461,6 +476,32 @@ class ConversionGHGAdapter(Adapter): facade = facades.ConversionGHG # todo emission buses and emission factors + def get_busses(self) -> dict: + def get_bus_from_struct(bus_list: list, bus_key: str) -> dict: + bus_dict = {} + counter = 0 + for bus in bus_list: + if not bus.startswith("emi"): + bus_dict[f"{bus_key}"] = bus + elif bus.startswith("emi"): + bus_dict[f"emission_bus_{counter}"] = bus + counter += 1 + return bus_dict + + return_bus_dict = get_bus_from_struct( + self.structure["inputs"], bus_key="from_bus" + ) | get_bus_from_struct(self.structure["outputs"], bus_key="to_bus") + + + return return_bus_dict + + + def get_default_parameters(self) -> dict: + defaults = super().get_default_parameters() + for key, value in self.data.items(): + if key.startswith("ef"): + defaults[key.replace("ef", "emission_factor")] = value + return defaults class LoadAdapter(Adapter): From 47f554e4fa4ea344f3a19466fe607d56c2ddae83 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Thu, 22 Aug 2024 11:27:34 +0200 Subject: [PATCH 15/70] Check that needed buses are defined --- data_adapter_oemof/adapters.py | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/data_adapter_oemof/adapters.py b/data_adapter_oemof/adapters.py index 19b1482..a0aaaf3 100644 --- a/data_adapter_oemof/adapters.py +++ b/data_adapter_oemof/adapters.py @@ -447,8 +447,17 @@ def get_busses(self) -> dict: bus_dict[f"emission_bus_{counter}"] = bus counter += 1 + # check that bus is defined + if bus_dict.get("bus") is None: + raise KeyError(f"{self.process_name} is missing 'bus', the input.") + # emission_buses = [key for key in bus_dict.keys() if key.startswith("emission_bus")] + # if len(emission_buses) == 0: + # logging.INFO(f"{self.process_name} is missing emission bus. This is" + # f" no problem, but you could use `ConversionAdapter`" + # f" instead of `ConversionGHGAdapter`.") + return bus_dict - # todo emission buses and emission factors + def get_default_parameters(self) -> dict: defaults = super().get_default_parameters() for key, value in self.data.items(): @@ -475,7 +484,6 @@ class ConversionGHGAdapter(Adapter): type = "conversion_ghg" facade = facades.ConversionGHG - # todo emission buses and emission factors def get_busses(self) -> dict: def get_bus_from_struct(bus_list: list, bus_key: str) -> dict: bus_dict = {} @@ -492,6 +500,15 @@ def get_bus_from_struct(bus_list: list, bus_key: str) -> dict: self.structure["inputs"], bus_key="from_bus" ) | get_bus_from_struct(self.structure["outputs"], bus_key="to_bus") + # check that from_bus and to_bus is defined + for key in ["from_bus", "to_bus"]: + if return_bus_dict.get(key) is None: + raise KeyError(f"{self.process_name} is missing {key}.") + # emission_buses = [key for key in return_bus_dict.keys() if key.startswith("emission_bus")] + # if len(emission_buses) == 0: + # logging.INFO(f"{self.process_name} is missing emission bus. This is" + # f" no problem, but you could use `ConversionAdapter`" + # f" instead of `ConversionGHGAdapter`.") return return_bus_dict From 816fc4281a9af214a50751733e17757b30abb0e4 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Thu, 22 Aug 2024 11:27:56 +0200 Subject: [PATCH 16/70] Rename emission_factors from ef_.. in MimoAdapter --- data_adapter_oemof/adapters.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/data_adapter_oemof/adapters.py b/data_adapter_oemof/adapters.py index a0aaaf3..3db03d7 100644 --- a/data_adapter_oemof/adapters.py +++ b/data_adapter_oemof/adapters.py @@ -601,10 +601,13 @@ def get_default_parameters(self) -> dict: "emissions_factor_", "conversion_factor_", "flow_share_", + "ef_", ) for key, value in self.data.items(): for keyword in keywords: if key.startswith(keyword): + if key.startswith("ef"): + key = key.replace("ef", "emission_factor") defaults[key] = value return defaults From c99086754cc94477af7354e259b21bd91f80b6e4 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Thu, 22 Aug 2024 11:28:33 +0200 Subject: [PATCH 17/70] Add Modelstruktur.xlsx with GHG Adapters --- .../SEDOS_Modellstruktur_sh_test.xlsx | Bin 0 -> 538046 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100755 examples/industry/structures/SEDOS_Modellstruktur_sh_test.xlsx diff --git a/examples/industry/structures/SEDOS_Modellstruktur_sh_test.xlsx b/examples/industry/structures/SEDOS_Modellstruktur_sh_test.xlsx new file mode 100755 index 0000000000000000000000000000000000000000..c3d8367a2e5925663efbe0e7deed2a764858d3fe GIT binary patch literal 538046 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

aqf_#XbD?9?`E4Ed-S@t!Lk`+ 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 z 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 z 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

=Dn8P1Ssw+Xh&5lwiy-KuhSg2C@BOT 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


>M;t0OE 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 gmsb%6GE_BxuI7@JxP=JaFADq>0M2 Date: Thu, 22 Aug 2024 12:23:54 +0200 Subject: [PATCH 18/70] Apply black --- data_adapter_oemof/adapters.py | 2 +- examples/industry/data_adapter_industry.py | 20 ++++++++++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/data_adapter_oemof/adapters.py b/data_adapter_oemof/adapters.py index c6327c4..81db853 100644 --- a/data_adapter_oemof/adapters.py +++ b/data_adapter_oemof/adapters.py @@ -430,6 +430,7 @@ def get_default_parameters( return defaults + class CommodityGHGAdapter(CommodityAdapter): """ CommodityGHGAdapter @@ -514,7 +515,6 @@ def get_bus_from_struct(bus_list: list, bus_key: str) -> dict: return return_bus_dict - def get_default_parameters(self) -> dict: defaults = super().get_default_parameters() for key, value in self.data.items(): diff --git a/examples/industry/data_adapter_industry.py b/examples/industry/data_adapter_industry.py index 36e6a0d..f2eb0e1 100644 --- a/examples/industry/data_adapter_industry.py +++ b/examples/industry/data_adapter_industry.py @@ -13,7 +13,16 @@ deserialize_constraints, deserialize_energy_system, ) -from oemof.tabular.facades import Commodity, Conversion, Excess, Load, Volatile, Storage, ConversionGHG, CommodityGHG +from oemof.tabular.facades import ( + Commodity, + Conversion, + Excess, + Load, + Volatile, + Storage, + ConversionGHG, + CommodityGHG, +) from oemof_industry.mimo_converter import MIMO from data_adapter_oemof.build_datapackage import DataPackage # noqa: E402 @@ -87,8 +96,7 @@ "inflow_conversion_factor": "input_ratio", "outflow_conversion_factor": "output_ratio", }, - "CommodityAdapter": { - }, + "CommodityAdapter": {}, "x2x_import_biogas": {"amount": "capacity_w_inst_0", "marginal_cost": "cost_var_e"}, "x2x_import_coal": {"amount": "capacity_w_inst_0", "marginal_cost": "cost_var_e"}, "x2x_import_hydrogen_renewable": { @@ -243,7 +251,7 @@ }, "x2x_storage_hydrogen_lohc_1": { "efficiency": "efficiency_sto_in", - "fixed_costs":"cost_fix_w", + "fixed_costs": "cost_fix_w", "loss_rate": "sto_self_discharge", "storage_capacity_cost": "cost_inv_e", "fixed_costs": "cost_fix_p", @@ -253,7 +261,7 @@ "efficiency": "efficiency_sto_in", "loss_rate": "sto_self_discharge", "storage_capacity_cost": "cost_inv_e", - "fixed_costs":"cost_fix_w", + "fixed_costs": "cost_fix_w", "fixed_costs": "cost_fix_p", "marginal_cost": "cost_var_e", "capacity_capacity_potential": "capacity_e_max", @@ -263,7 +271,7 @@ "fixed_costs": "cost_fix_p", "loss_rate": "sto_self_discharge", "storage_capacity_cost": "cost_inv_e", - "fixed_costs":"cost_fix_p", + "fixed_costs": "cost_fix_p", "marginal_cost": "cost_var_e", "capacity_capacity_potential": "capacity_e_max", "storage_capacity": "capacity_e_inst", From 9a03cf9186739e4b33748ddc4ec51a53a242d80a Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Mon, 26 Aug 2024 17:07:35 +0200 Subject: [PATCH 19/70] Add debug mode with 5 time steps per period --- data_adapter_oemof/build_datapackage.py | 15 +++++++++++++++ examples/industry/data_adapter_industry.py | 4 ++++ 2 files changed, 19 insertions(+) diff --git a/data_adapter_oemof/build_datapackage.py b/data_adapter_oemof/build_datapackage.py index 91ca898..2500285 100644 --- a/data_adapter_oemof/build_datapackage.py +++ b/data_adapter_oemof/build_datapackage.py @@ -452,6 +452,7 @@ def build_datapackage( parameter_map: Optional[dict] = PARAMETER_MAP, bus_map: Optional[dict] = BUS_MAP, location_to_save_to: str = None, + debug=False, ): """ Creating a Datapackage from the oemof_data_adapter that fits oemof.tabular Datapackages. @@ -545,6 +546,20 @@ def _reduce_lists(x): ) periods = cls.get_periods_from_parametrized_sequences(parametrized_sequences) + def reduce_data_frame(data_frame, steps=4): + """reduces `df` to 5 time steps per period""" + df = data_frame.copy() + df["ind"] = df.index + df["ind"] = df["ind"].apply(lambda x: True if x.month == 1 and x.day == 1 and x.hour <= 4 else False) + df_reduced = df.loc[df["ind"] == 1].drop(columns=["ind"]) + return df_reduced + + if debug: + periods = reduce_data_frame(data_frame=periods) + for key, value in parametrized_sequences.items(): + df_short = reduce_data_frame(data_frame=value) + parametrized_elements.update({key: df_short}) + return cls( parametrized_elements=parametrized_elements, parametrized_sequences=parametrized_sequences, diff --git a/examples/industry/data_adapter_industry.py b/examples/industry/data_adapter_industry.py index f2eb0e1..6f93ff5 100644 --- a/examples/industry/data_adapter_industry.py +++ b/examples/industry/data_adapter_industry.py @@ -32,6 +32,9 @@ EnergySystem.from_datapackage = classmethod(deserialize_energy_system) Model.add_constraints_from_datapackage = deserialize_constraints + +DEBUG = True # set to False for full run. DEBUG reduces to 5 time steps per period + """ Download Collection @@ -296,6 +299,7 @@ adapter=adapter, process_adapter_map=process_adapter_map, parameter_map=parameter_map, + debug=DEBUG, # set DEBUG to False for full run. DEBUG reduces to 5 time steps per period ) datapackage_path = pathlib.Path(__file__).parent / "datapackage" dp.save_datapackage_to_csv(str(datapackage_path)) From 7fa288c29445aac1db2c90892a5916e9bb2d4ad2 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Mon, 26 Aug 2024 17:10:14 +0200 Subject: [PATCH 20/70] apply black --- data_adapter_oemof/build_datapackage.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/data_adapter_oemof/build_datapackage.py b/data_adapter_oemof/build_datapackage.py index 2500285..aec255d 100644 --- a/data_adapter_oemof/build_datapackage.py +++ b/data_adapter_oemof/build_datapackage.py @@ -550,7 +550,9 @@ def reduce_data_frame(data_frame, steps=4): """reduces `df` to 5 time steps per period""" df = data_frame.copy() df["ind"] = df.index - df["ind"] = df["ind"].apply(lambda x: True if x.month == 1 and x.day == 1 and x.hour <= 4 else False) + df["ind"] = df["ind"].apply( + lambda x: True if x.month == 1 and x.day == 1 and x.hour <= 4 else False + ) df_reduced = df.loc[df["ind"] == 1].drop(columns=["ind"]) return df_reduced From 1a51d3c906051b109a5ab61c8f84bf8ae908b55c Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Mon, 26 Aug 2024 17:15:01 +0200 Subject: [PATCH 21/70] Remove check that does not work --- data_adapter_oemof/adapters.py | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/data_adapter_oemof/adapters.py b/data_adapter_oemof/adapters.py index 81db853..0746c6d 100644 --- a/data_adapter_oemof/adapters.py +++ b/data_adapter_oemof/adapters.py @@ -453,12 +453,6 @@ def get_busses(self) -> dict: # check that bus is defined if bus_dict.get("bus") is None: raise KeyError(f"{self.process_name} is missing 'bus', the input.") - # emission_buses = [key for key in bus_dict.keys() if key.startswith("emission_bus")] - # if len(emission_buses) == 0: - # logging.INFO(f"{self.process_name} is missing emission bus. This is" - # f" no problem, but you could use `ConversionAdapter`" - # f" instead of `ConversionGHGAdapter`.") - return bus_dict def get_default_parameters(self) -> dict: @@ -507,12 +501,6 @@ def get_bus_from_struct(bus_list: list, bus_key: str) -> dict: for key in ["from_bus", "to_bus"]: if return_bus_dict.get(key) is None: raise KeyError(f"{self.process_name} is missing {key}.") - # emission_buses = [key for key in return_bus_dict.keys() if key.startswith("emission_bus")] - # if len(emission_buses) == 0: - # logging.INFO(f"{self.process_name} is missing emission bus. This is" - # f" no problem, but you could use `ConversionAdapter`" - # f" instead of `ConversionGHGAdapter`.") - return return_bus_dict def get_default_parameters(self) -> dict: From 277503446154e75543be3c32ccaee76e462b290d Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Wed, 4 Sep 2024 14:37:51 +0200 Subject: [PATCH 22/70] Add to .gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index f63add8..54d8aa3 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,6 @@ __pycache__/ /tests/_files/tabular_datapackage_hack_a_thon/data/ /tests/_files/tabular_datapackage_hack_a_thon/datapackage.json /tests/_files/tabular_datapackage_mininmal_example/ +/tests/_files/tsam/* +/examples/industry/collections/* +/examples/industry/datapackage/* From 345f2dc9c19286206173916a4821c7d0c5f62458 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Wed, 4 Sep 2024 14:38:19 +0200 Subject: [PATCH 23/70] Remove hard coded number --- data_adapter_oemof/build_datapackage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data_adapter_oemof/build_datapackage.py b/data_adapter_oemof/build_datapackage.py index aec255d..ae584f8 100644 --- a/data_adapter_oemof/build_datapackage.py +++ b/data_adapter_oemof/build_datapackage.py @@ -551,7 +551,7 @@ def reduce_data_frame(data_frame, steps=4): df = data_frame.copy() df["ind"] = df.index df["ind"] = df["ind"].apply( - lambda x: True if x.month == 1 and x.day == 1 and x.hour <= 4 else False + lambda x: True if x.month == 1 and x.day == 1 and x.hour <= steps else False ) df_reduced = df.loc[df["ind"] == 1].drop(columns=["ind"]) return df_reduced From a1daa7316baf93656e464b70295624fb1d242a95 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Thu, 10 Oct 2024 17:02:08 +0200 Subject: [PATCH 24/70] Bugfix in debug mode --- data_adapter_oemof/build_datapackage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data_adapter_oemof/build_datapackage.py b/data_adapter_oemof/build_datapackage.py index ae584f8..e5449c0 100644 --- a/data_adapter_oemof/build_datapackage.py +++ b/data_adapter_oemof/build_datapackage.py @@ -560,7 +560,7 @@ def reduce_data_frame(data_frame, steps=4): periods = reduce_data_frame(data_frame=periods) for key, value in parametrized_sequences.items(): df_short = reduce_data_frame(data_frame=value) - parametrized_elements.update({key: df_short}) + parametrized_sequences.update({key: df_short}) return cls( parametrized_elements=parametrized_elements, From be539f11473894009bc1ec829a67ad2c555a2074 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Mon, 14 Oct 2024 11:14:10 +0200 Subject: [PATCH 25/70] Add 'infite' amount 9999999999999 to commodities that are missing amount --- data_adapter_oemof/adapters.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/data_adapter_oemof/adapters.py b/data_adapter_oemof/adapters.py index 0746c6d..1b5ea87 100644 --- a/data_adapter_oemof/adapters.py +++ b/data_adapter_oemof/adapters.py @@ -428,6 +428,17 @@ def get_default_parameters( if self.get("carrier") == "carrier": defaults["carrier"] = self.get_busses()["bus"] + if self.get("amount") == None: + amount = 9999999999999 + logger.warning( + f"Adding parameter 'amount' with value {amount} to commodity " + f"{self.process_name}. \n " + f"This is beneficial if your commodity is functioning as " + f"shortage or unlimited import/source. " + f"Otherwise please add 'amount' to your commodity!" + ) + defaults["amount"] = amount + return defaults From c065665b1421fe62d2211423b47a1973001ae220 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Mon, 14 Oct 2024 15:37:40 +0200 Subject: [PATCH 26/70] Adapt emission factors to naming convention of oemof.tabular --- data_adapter_oemof/adapters.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/data_adapter_oemof/adapters.py b/data_adapter_oemof/adapters.py index 1b5ea87..940a907 100644 --- a/data_adapter_oemof/adapters.py +++ b/data_adapter_oemof/adapters.py @@ -470,7 +470,15 @@ def get_default_parameters(self) -> dict: defaults = super().get_default_parameters() for key, value in self.data.items(): if key.startswith("ef"): - defaults[key.replace("ef", "emission_factor")] = value + # adapt to the naming convention in oemof.tabular commodityGHG facade: emission_factor_ + target_label = None + emission_bus_labels = [key for item, key in defaults.items() if item.startswith("emission_bus")] + for label in emission_bus_labels: + if label in key: + target_label = label + if target_label == None: + raise ValueError(f"Emission factor of {self.process_name} is named {key} but None of the emission buses matches: {emission_bus_labels}.") + defaults[f"emission_factor_{target_label}"] = value return defaults From 670bf265c0b9f43c939c4737eaf0312ecea16d55 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Mon, 28 Oct 2024 14:41:18 +0100 Subject: [PATCH 27/70] Fix use of decomission() for 'amount' --- data_adapter_oemof/adapters.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/data_adapter_oemof/adapters.py b/data_adapter_oemof/adapters.py index d1b4c60..5d898fe 100644 --- a/data_adapter_oemof/adapters.py +++ b/data_adapter_oemof/adapters.py @@ -340,7 +340,8 @@ def default_post_mapping_calculations(self, mapped_defaults): Does default calculations# I. Decommissioning of existing Capacities - II. Rounding lifetime down to integers + II. Reformatting of amount in case amount is not a number + III. Rounding lifetime down to integers Returns ------- @@ -353,13 +354,16 @@ def default_post_mapping_calculations(self, mapped_defaults): adapter_dict=mapped_defaults, column="capacity", ) + + # II: + if "amount" in mapped_defaults.keys(): mapped_defaults = calculations.decommission( process_name=self.process_name, adapter_dict=mapped_defaults, column="amount", ) - # II: + # III: if "lifetime" in mapped_defaults.keys(): mapped_defaults = calculations.floor_lifetime(mapped_defaults) From b37c5339881c9ce2c0f6a7f80ea2f2645e0fca90 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Tue, 29 Oct 2024 11:21:58 +0100 Subject: [PATCH 28/70] Convert dict with array to str for type guessing to work --- data_adapter_oemof/calculations.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/data_adapter_oemof/calculations.py b/data_adapter_oemof/calculations.py index ba9393f..779f577 100644 --- a/data_adapter_oemof/calculations.py +++ b/data_adapter_oemof/calculations.py @@ -96,12 +96,17 @@ def decommission( adapter_dict["output_parameters"][max_column] = adapter_dict[ column ] / np.nanmax(adapter_dict[column]) + # II: else: adapter_dict["output_parameters"][max_column] = multiply_two_lists( adapter_dict["output_parameters"][max_column], adapter_dict[column] ) / np.nanmax(adapter_dict[column]) + # convert to string. this is needed for datapackage to detect this as object + adapter_dict[input_output_parameters] = json.dumps( + adapter_dict[input_output_parameters]) + adapter_dict[column] = np.nanmax(adapter_dict[column]) return adapter_dict From db1ba4c178cfe3191caf0cd556f6d0768777c440 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Tue, 29 Oct 2024 11:24:01 +0100 Subject: [PATCH 29/70] import json --- data_adapter_oemof/calculations.py | 1 + 1 file changed, 1 insertion(+) diff --git a/data_adapter_oemof/calculations.py b/data_adapter_oemof/calculations.py index 779f577..916383e 100644 --- a/data_adapter_oemof/calculations.py +++ b/data_adapter_oemof/calculations.py @@ -1,6 +1,7 @@ import collections import logging import warnings +import json import numpy as np import pandas as pd From 982dbeb75722eea78bb2426dab9aeb3d66ab3f69 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Tue, 29 Oct 2024 11:35:50 +0100 Subject: [PATCH 30/70] add missing changes due to transfer --- data_adapter_oemof/calculations.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/data_adapter_oemof/calculations.py b/data_adapter_oemof/calculations.py index 916383e..212fd58 100644 --- a/data_adapter_oemof/calculations.py +++ b/data_adapter_oemof/calculations.py @@ -92,17 +92,22 @@ def decommission( ) return adapter_dict + input_output_parameters = "output_parameters" + # I: - if max_column not in adapter_dict["output_parameters"].keys(): - adapter_dict["output_parameters"][max_column] = adapter_dict[ - column - ] / np.nanmax(adapter_dict[column]) + if max_column not in adapter_dict[input_output_parameters].keys(): + adapter_dict[input_output_parameters][max_column] = list(adapter_dict[ + column + ] / np.nanmax( + adapter_dict[column])) # II: else: - adapter_dict["output_parameters"][max_column] = multiply_two_lists( - adapter_dict["output_parameters"][max_column], adapter_dict[column] - ) / np.nanmax(adapter_dict[column]) + adapter_dict[input_output_parameters][max_column] = list( + multiply_two_lists( + adapter_dict[input_output_parameters][max_column], + adapter_dict[column] + ) / np.nanmax(adapter_dict[column])) # convert to string. this is needed for datapackage to detect this as object adapter_dict[input_output_parameters] = json.dumps( From 3c323a0559a4bc643a1064a2df57d747831a83ed Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Tue, 29 Oct 2024 13:52:00 +0100 Subject: [PATCH 31/70] Prevent error in case of empty bus_map --- data_adapter_oemof/adapters.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/data_adapter_oemof/adapters.py b/data_adapter_oemof/adapters.py index 5d898fe..f7024ec 100644 --- a/data_adapter_oemof/adapters.py +++ b/data_adapter_oemof/adapters.py @@ -216,11 +216,12 @@ def get_busses(self) -> dict: bus_dict = {} for bus in bus_occurrences_in_fields: # emission_bus # 1. Check for existing mappings - try: - bus_dict[bus] = self.bus_map[self.__class__.__name__][bus] - continue - except KeyError: - pass + if self.bus_map: + try: + bus_dict[bus] = self.bus_map[self.__class__.__name__][bus] + continue + except KeyError: + pass # TODO: Make use of Parameter [stuct.csv]? # Do we need parameter specific Bus structure? Maybe for multiple in/output? From 61062561aa88447109209aa3cabab844a933869c Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Tue, 29 Oct 2024 13:57:52 +0100 Subject: [PATCH 32/70] Change input parameters in case of no outputs --- data_adapter_oemof/adapters.py | 6 ++++++ data_adapter_oemof/calculations.py | 4 +--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/data_adapter_oemof/adapters.py b/data_adapter_oemof/adapters.py index f7024ec..f866c01 100644 --- a/data_adapter_oemof/adapters.py +++ b/data_adapter_oemof/adapters.py @@ -348,12 +348,17 @@ def default_post_mapping_calculations(self, mapped_defaults): ------- """ + if len(self.structure["outputs"]) == 0: + change_parameter = "input_parameters" + else: + change_parameter = "output_parameters" # I: if self.process_name[-1] == "0": mapped_defaults = calculations.decommission( process_name=self.process_name, adapter_dict=mapped_defaults, column="capacity", + input_output_parameters=change_parameter, ) # II: @@ -362,6 +367,7 @@ def default_post_mapping_calculations(self, mapped_defaults): process_name=self.process_name, adapter_dict=mapped_defaults, column="amount", + input_output_parameters=change_parameter, ) # III: diff --git a/data_adapter_oemof/calculations.py b/data_adapter_oemof/calculations.py index 212fd58..a2c0c9b 100644 --- a/data_adapter_oemof/calculations.py +++ b/data_adapter_oemof/calculations.py @@ -46,7 +46,7 @@ def get_capacity_cost(overnight_cost, fixed_cost, lifetime, wacc): def decommission( - process_name, adapter_dict: dict, column: str = "capacity", max_column: str = "max" + process_name, adapter_dict: dict, column: str = "capacity", max_column: str = "max", input_output_parameters: str = "output_parameters", ) -> dict: """ @@ -92,8 +92,6 @@ def decommission( ) return adapter_dict - input_output_parameters = "output_parameters" - # I: if max_column not in adapter_dict[input_output_parameters].keys(): adapter_dict[input_output_parameters][max_column] = list(adapter_dict[ From 425dbb8ab05807083a9cf70fe93bcf1987a1a11b Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Wed, 30 Oct 2024 14:03:24 +0100 Subject: [PATCH 33/70] Adapt profile in case of amount changing over years Instead of adapting or adding the parameter max, in case of a profile (fix) the profile has to be adapted. Amount is set to 1 then. --- data_adapter_oemof/adapters.py | 24 ++++++++++++++++++------ data_adapter_oemof/calculations.py | 16 ++++++++++++++++ 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/data_adapter_oemof/adapters.py b/data_adapter_oemof/adapters.py index f866c01..f4beb07 100644 --- a/data_adapter_oemof/adapters.py +++ b/data_adapter_oemof/adapters.py @@ -342,6 +342,8 @@ def default_post_mapping_calculations(self, mapped_defaults): I. Decommissioning of existing Capacities II. Reformatting of amount in case amount is not a number + a) Multiply timeseries by the repeoctiv yearly amount + b) Analogous to decommissioning of capacities III. Rounding lifetime down to integers Returns @@ -363,12 +365,22 @@ def default_post_mapping_calculations(self, mapped_defaults): # II: if "amount" in mapped_defaults.keys(): - mapped_defaults = calculations.decommission( - process_name=self.process_name, - adapter_dict=mapped_defaults, - column="amount", - input_output_parameters=change_parameter, - ) + # a) + if "profile" in mapped_defaults.keys(): + self.timeseries = calculations.adapt_profile_with_changing_amount( + profile=self.timeseries, + amount=mapped_defaults["amount"] + ) + mapped_defaults["amount"] = 1 + + # b) + else: + mapped_defaults = calculations.decommission( + process_name=self.process_name, + adapter_dict=mapped_defaults, + column="amount", + input_output_parameters=change_parameter, + ) # III: if "lifetime" in mapped_defaults.keys(): diff --git a/data_adapter_oemof/calculations.py b/data_adapter_oemof/calculations.py index a2c0c9b..ae3dcef 100644 --- a/data_adapter_oemof/calculations.py +++ b/data_adapter_oemof/calculations.py @@ -115,6 +115,22 @@ def decommission( return adapter_dict +def adapt_profile_with_changing_amount(profile, amount): + + # Map amount to years + years = sorted(profile.index.year.unique()) + yearly_amount = dict(zip(years, amount)) + + profile["amount"] = profile.index.year.map(yearly_amount) + + # Multiply profile with amount + col_name = profile.columns[0] + profile["adjusted_ts"] = (profile[col_name] * profile["amount"]) + profile.drop(columns=[col_name, "amount"], inplace=True) + profile.rename(columns={"adjusted_ts": col_name}, inplace=True) + + return profile + def normalize_activity_bonds(adapter): """ Normalizes activity bonds in order to be used as min/max values From 39a85e21a9b8711e39718b1a4984cd5e6d1d3607 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Wed, 30 Oct 2024 14:52:42 +0100 Subject: [PATCH 34/70] Install bug fix with data_adapter --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 68b4c1a..3cc3a0b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,7 +19,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry.dependencies] python = ">=3.10,<3.11" -data_adapter = { git = "https://git@github.com/sedos-project/data_adapter", branch = "dev"} +data_adapter = { git = "https://git@github.com/sedos-project/data_adapter", branch = "bug_fix/drop_comment_column"} oemof-tabular = { git = "https://git@github.com/oemof/oemof-tabular", branch = "dev"} oemof-industry = { git = "https://github.com/sedos-project/oemof.industry.git", branch = "main"} boto3 = "1.26.125" # fix boto3 to fasten up dependency resolution From 88fb00b1f2c2ff646ff0c3e538878c465bf043c4 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Tue, 5 Nov 2024 15:55:08 +0100 Subject: [PATCH 35/70] Make function name more generic --- data_adapter_oemof/adapters.py | 4 ++-- data_adapter_oemof/calculations.py | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/data_adapter_oemof/adapters.py b/data_adapter_oemof/adapters.py index f4beb07..745e3ab 100644 --- a/data_adapter_oemof/adapters.py +++ b/data_adapter_oemof/adapters.py @@ -367,9 +367,9 @@ def default_post_mapping_calculations(self, mapped_defaults): if "amount" in mapped_defaults.keys(): # a) if "profile" in mapped_defaults.keys(): - self.timeseries = calculations.adapt_profile_with_changing_amount( + self.timeseries = calculations.adapt_profile_with_yearly_value( profile=self.timeseries, - amount=mapped_defaults["amount"] + value=mapped_defaults["amount"] ) mapped_defaults["amount"] = 1 diff --git a/data_adapter_oemof/calculations.py b/data_adapter_oemof/calculations.py index ae3dcef..df839dc 100644 --- a/data_adapter_oemof/calculations.py +++ b/data_adapter_oemof/calculations.py @@ -115,18 +115,18 @@ def decommission( return adapter_dict -def adapt_profile_with_changing_amount(profile, amount): +def adapt_profile_with_yearly_value(profile, value): # Map amount to years years = sorted(profile.index.year.unique()) - yearly_amount = dict(zip(years, amount)) + values_mapped_to_years = dict(zip(years, value)) - profile["amount"] = profile.index.year.map(yearly_amount) + profile["value"] = profile.index.year.map(values_mapped_to_years) - # Multiply profile with amount + # Multiply profile with value col_name = profile.columns[0] - profile["adjusted_ts"] = (profile[col_name] * profile["amount"]) - profile.drop(columns=[col_name, "amount"], inplace=True) + profile["adjusted_ts"] = (profile[col_name] * profile["value"]) + profile.drop(columns=[col_name, "value"], inplace=True) profile.rename(columns={"adjusted_ts": col_name}, inplace=True) return profile From c09022e66adafdd97d50900e453c31086cacfa92 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Tue, 5 Nov 2024 15:55:47 +0100 Subject: [PATCH 36/70] Extend max to time series over all time steps of each period --- data_adapter_oemof/adapters.py | 3 +++ data_adapter_oemof/build_datapackage.py | 8 +++++++- data_adapter_oemof/calculations.py | 23 ++++++++++++++--------- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/data_adapter_oemof/adapters.py b/data_adapter_oemof/adapters.py index 745e3ab..95d0f50 100644 --- a/data_adapter_oemof/adapters.py +++ b/data_adapter_oemof/adapters.py @@ -77,6 +77,9 @@ def get_default_parameters(self) -> dict: ) defaults = self.default_post_mapping_calculations(defaults) + if "max_profile" in defaults: + self.timeseries = defaults["max_profile"] + defaults["profile"] = defaults["max_profile"].columns[0] if not defaults["input_parameters"]: defaults.pop("input_parameters") if not defaults["output_parameters"]: diff --git a/data_adapter_oemof/build_datapackage.py b/data_adapter_oemof/build_datapackage.py index e5449c0..b4a5370 100644 --- a/data_adapter_oemof/build_datapackage.py +++ b/data_adapter_oemof/build_datapackage.py @@ -490,7 +490,7 @@ def _reduce_lists(x): # Iterate Elements for process_name, struct in adapter.structure.processes.items(): process_data = adapter.get_process(process_name) - timeseries = process_data.timeseries + timeseries = process_data.timeseries # might also be set below if 'max_profile' exists if isinstance(timeseries.columns, pd.MultiIndex): timeseries.columns = ( _reduce_lists(timeseries.columns.get_level_values(0)) @@ -534,6 +534,12 @@ def _reduce_lists(x): ) parametrized_elements[process_name] = pd.DataFrame(components) + + # if 'max_profile' exists the time series is added in `timeseries` and removed from `parametrized_elements` + # todo un-hard-code --> max_profile is set in calculations.decommission() which is called by Adapter.default_post_mapping_calculations() + if "max_profile" in parametrized_elements[process_name]: + timeseries = parametrized_elements[process_name]["max_profile"][0] + parametrized_elements[process_name].drop(columns=["max_profile"], inplace=True) if not timeseries.empty: parametrized_sequences.update({process_name: timeseries}) # Create Bus Element from all unique `busses` found in elements diff --git a/data_adapter_oemof/calculations.py b/data_adapter_oemof/calculations.py index df839dc..b930cd1 100644 --- a/data_adapter_oemof/calculations.py +++ b/data_adapter_oemof/calculations.py @@ -94,23 +94,28 @@ def decommission( # I: if max_column not in adapter_dict[input_output_parameters].keys(): - adapter_dict[input_output_parameters][max_column] = list(adapter_dict[ - column - ] / np.nanmax( - adapter_dict[column])) + max = list(adapter_dict[column] / np.nanmax(adapter_dict[column])) # II: else: - adapter_dict[input_output_parameters][max_column] = list( - multiply_two_lists( + max = list(multiply_two_lists( adapter_dict[input_output_parameters][max_column], adapter_dict[column] ) / np.nanmax(adapter_dict[column])) - # convert to string. this is needed for datapackage to detect this as object - adapter_dict[input_output_parameters] = json.dumps( - adapter_dict[input_output_parameters]) + # max must be extended to time series over all time steps of each period + column_name = ["max_timeseries"] + timeseries = pd.DataFrame(columns=column_name) + for y in adapter_dict["year"]: + ts = pd.DataFrame(data=[1 for i in range(8760)], columns=column_name, + index=pd.date_range(f"1/1/{y}", periods=8760, freq="h"), + dtype="float64") + timeseries = pd.concat([timeseries, ts]) + max_time_series = adapt_profile_with_yearly_value(profile=timeseries, value=max) + adapter_dict["max_profile"] = max_time_series + + # set `column` value to maximum value adapter_dict[column] = np.nanmax(adapter_dict[column]) return adapter_dict From 775a234593106815cb9213cadff1c47c5e05ac17 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Tue, 5 Nov 2024 16:04:13 +0100 Subject: [PATCH 37/70] Answer FutureWarning of DataFrame concatenation --- data_adapter_oemof/calculations.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data_adapter_oemof/calculations.py b/data_adapter_oemof/calculations.py index b930cd1..5a3c706 100644 --- a/data_adapter_oemof/calculations.py +++ b/data_adapter_oemof/calculations.py @@ -110,7 +110,7 @@ def decommission( ts = pd.DataFrame(data=[1 for i in range(8760)], columns=column_name, index=pd.date_range(f"1/1/{y}", periods=8760, freq="h"), dtype="float64") - timeseries = pd.concat([timeseries, ts]) + timeseries = ts.copy() if timeseries.empty else pd.concat([timeseries, ts]) max_time_series = adapt_profile_with_yearly_value(profile=timeseries, value=max) adapter_dict["max_profile"] = max_time_series From bc635be212c1e02316d330699b9c2f0b47c347da Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Tue, 5 Nov 2024 16:13:41 +0100 Subject: [PATCH 38/70] Remove unnecessary parameter --- data_adapter_oemof/adapters.py | 6 ------ data_adapter_oemof/calculations.py | 6 +++--- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/data_adapter_oemof/adapters.py b/data_adapter_oemof/adapters.py index 95d0f50..75cab94 100644 --- a/data_adapter_oemof/adapters.py +++ b/data_adapter_oemof/adapters.py @@ -353,17 +353,12 @@ def default_post_mapping_calculations(self, mapped_defaults): ------- """ - if len(self.structure["outputs"]) == 0: - change_parameter = "input_parameters" - else: - change_parameter = "output_parameters" # I: if self.process_name[-1] == "0": mapped_defaults = calculations.decommission( process_name=self.process_name, adapter_dict=mapped_defaults, column="capacity", - input_output_parameters=change_parameter, ) # II: @@ -382,7 +377,6 @@ def default_post_mapping_calculations(self, mapped_defaults): process_name=self.process_name, adapter_dict=mapped_defaults, column="amount", - input_output_parameters=change_parameter, ) # III: diff --git a/data_adapter_oemof/calculations.py b/data_adapter_oemof/calculations.py index 5a3c706..b729675 100644 --- a/data_adapter_oemof/calculations.py +++ b/data_adapter_oemof/calculations.py @@ -46,7 +46,7 @@ def get_capacity_cost(overnight_cost, fixed_cost, lifetime, wacc): def decommission( - process_name, adapter_dict: dict, column: str = "capacity", max_column: str = "max", input_output_parameters: str = "output_parameters", + process_name, adapter_dict: dict, column: str = "capacity", max_column: str = "max", ) -> dict: """ @@ -93,13 +93,13 @@ def decommission( return adapter_dict # I: - if max_column not in adapter_dict[input_output_parameters].keys(): + if max_column not in adapter_dict["output_parameters"].keys(): max = list(adapter_dict[column] / np.nanmax(adapter_dict[column])) # II: else: max = list(multiply_two_lists( - adapter_dict[input_output_parameters][max_column], + adapter_dict["output_parameters"][max_column], adapter_dict[column] ) / np.nanmax(adapter_dict[column])) From ffe8ad32fee4d17c203674c57c41c7acad66c85c Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Tue, 5 Nov 2024 16:14:33 +0100 Subject: [PATCH 39/70] Correct logging info for better understanding --- data_adapter_oemof/calculations.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data_adapter_oemof/calculations.py b/data_adapter_oemof/calculations.py index b729675..ecab206 100644 --- a/data_adapter_oemof/calculations.py +++ b/data_adapter_oemof/calculations.py @@ -81,13 +81,13 @@ def decommission( # check if capacity column is there and if it has to be decommissioned if column not in adapter_dict.keys(): logging.info( - f"Capacity missing for decommissioning " f"of Process `{process_name}`" + f"{column} missing for decommissioning " f"of Process `{process_name}`" ) return adapter_dict if not isinstance(adapter_dict[column], list): logging.info( - f"No capacity fading out that can be decommissioned" + f"No {column} fading out that can be decommissioned" f" for Process `{process_name}`." ) return adapter_dict From 6ca11c2f8dbb27adaa13d4c3b3e4905be27bed52 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Thu, 7 Nov 2024 15:56:13 +0100 Subject: [PATCH 40/70] Initialize EmissionConstraintAdapter --- data_adapter_oemof/adapters.py | 11 +++++++++++ data_adapter_oemof/build_datapackage.py | 6 ++++++ 2 files changed, 17 insertions(+) diff --git a/data_adapter_oemof/adapters.py b/data_adapter_oemof/adapters.py index 75cab94..28ab9fc 100644 --- a/data_adapter_oemof/adapters.py +++ b/data_adapter_oemof/adapters.py @@ -10,6 +10,7 @@ from oemof.tabular import facades from oemof.tabular._facade import Facade from oemof_industry.mimo_converter import MIMO +from oemof_industry.emission_constraint import CO2EmissionLimit from data_adapter_oemof import calculations @@ -598,6 +599,16 @@ class VolatileAdapter(Adapter): facade = facades.Volatile +class EmissionConstraintAdapter(Adapter): + """ + LoadAdapter + """ + + type = "co2_emission_limit" + facade = CO2EmissionLimit # oemof.industry facade - might be moved to oemof.tabular + + pass + class MIMOAdapter(Adapter): """ MIMOAdapter diff --git a/data_adapter_oemof/build_datapackage.py b/data_adapter_oemof/build_datapackage.py index b4a5370..4bf385b 100644 --- a/data_adapter_oemof/build_datapackage.py +++ b/data_adapter_oemof/build_datapackage.py @@ -97,6 +97,7 @@ class DataPackage: periods: pd.DataFrame() location_to_save_to: str = None tsa_parameters: pd.DataFrame = None + constraint_parameters: pd.DataFrame = None @staticmethod def __split_timeseries_into_years(parametrized_sequences): @@ -249,12 +250,17 @@ def save_datapackage_to_csv( sequences_path = os.path.join(location_to_save_to, "data", "sequences") periods_path = os.path.join(location_to_save_to, "data", "periods") tsam_path = os.path.join(location_to_save_to, "data", "tsam") + constraint_path = os.path.join(location_to_save_to, "data", "constraints") os.makedirs(elements_path, exist_ok=True) os.makedirs(sequences_path, exist_ok=True) os.makedirs(periods_path, exist_ok=True) os.makedirs(tsam_path, exist_ok=True) + + if self.constraint_parameters: + os.makedirs(constraint_path, exist_ok=True) + if not self.periods.empty: self.periods.to_csv( os.path.join( From 76116021b0909c6aa4ee319340882c5675716b78 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Mon, 11 Nov 2024 15:26:33 +0100 Subject: [PATCH 41/70] Remove line, max time series is added in build_datapackage --- data_adapter_oemof/adapters.py | 1 - 1 file changed, 1 deletion(-) diff --git a/data_adapter_oemof/adapters.py b/data_adapter_oemof/adapters.py index 75cab94..2150a81 100644 --- a/data_adapter_oemof/adapters.py +++ b/data_adapter_oemof/adapters.py @@ -78,7 +78,6 @@ def get_default_parameters(self) -> dict: defaults = self.default_post_mapping_calculations(defaults) if "max_profile" in defaults: - self.timeseries = defaults["max_profile"] defaults["profile"] = defaults["max_profile"].columns[0] if not defaults["input_parameters"]: defaults.pop("input_parameters") From 96a18c7ea3052d9623efca344ea1d675e7e8a138 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Mon, 11 Nov 2024 15:52:30 +0100 Subject: [PATCH 42/70] Convert availablity_constant to full_load_time_max --- data_adapter_oemof/adapters.py | 3 +++ data_adapter_oemof/calculations.py | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/data_adapter_oemof/adapters.py b/data_adapter_oemof/adapters.py index 2150a81..25774f7 100644 --- a/data_adapter_oemof/adapters.py +++ b/data_adapter_oemof/adapters.py @@ -35,6 +35,7 @@ class Adapter: Field(name="name", type=str), Field(name="region", type=str), Field(name="year", type=int), + Field(name="full_load_time_max", type=float), ) output_parameters = (Field(name="max", type=float), Field(name="min", type=float)) input_parameters = () @@ -337,6 +338,7 @@ def default_pre_mapping_calculations(self): """ calculations.normalize_activity_bonds(self) + calculations.process_availability_constant_to_full_load_time_max(self) def default_post_mapping_calculations(self, mapped_defaults): """ @@ -608,6 +610,7 @@ class MIMOAdapter(Adapter): Field(name="name", type=str), Field(name="region", type=str), Field(name="year", type=int), + Field(name="full_load_time_max", type=float), Field(name="groups", type=dict), Field(name="lifetime", type=float), Field(name="capacity_cost", type=float), diff --git a/data_adapter_oemof/calculations.py b/data_adapter_oemof/calculations.py index ecab206..dfb971f 100644 --- a/data_adapter_oemof/calculations.py +++ b/data_adapter_oemof/calculations.py @@ -167,6 +167,15 @@ def normalize_activity_bonds(adapter): return adapter +def process_availability_constant_to_full_load_time_max(adapter): + """ Calculate full load time max from availability constant.""" + if "availability_constant" in adapter.data.keys(): + availability_constant = adapter.data["availability_constant"] + if availability_constant > 1: # assumption: then the unit is % + availability_constant = availability_constant / 100 + adapter.data["full_load_time_max"] = 8760 * availability_constant + + def floor_lifetime(mapped_defaults): """ From bea8f1de12a28db170fe7317b6a73d430c204c30 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Mon, 11 Nov 2024 16:00:12 +0100 Subject: [PATCH 43/70] Add author and fix typo --- examples/industry/data_adapter_industry.py | 2 +- pyproject.toml | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/industry/data_adapter_industry.py b/examples/industry/data_adapter_industry.py index 64ef658..39b3f9d 100644 --- a/examples/industry/data_adapter_industry.py +++ b/examples/industry/data_adapter_industry.py @@ -72,7 +72,7 @@ logger.info("Building Adapter Map") -# create dicitonary with all found in and outputs +# create dictionary with all found in- and outputs process_adapter_map = pd.concat( [ pd.read_excel( diff --git a/pyproject.toml b/pyproject.toml index 3cc3a0b..6f5c655 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,8 @@ authors = [ "Sarah Berendes ", "Julian Endres ", "Felix Maurer ", - "Hendrik Huyskens " + "Hendrik Huyskens ", + "Sabine Haas " ] [tool.poetry.group.dev.dependencies] From 92bf37b1daabdd96eadb9a0ba2f93b509e54c903 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Mon, 11 Nov 2024 16:04:40 +0100 Subject: [PATCH 44/70] Remove empty default_pre_mapping_calculations from mimo adapter to make use of availability constant --- data_adapter_oemof/adapters.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/data_adapter_oemof/adapters.py b/data_adapter_oemof/adapters.py index 25774f7..bccf563 100644 --- a/data_adapter_oemof/adapters.py +++ b/data_adapter_oemof/adapters.py @@ -622,15 +622,6 @@ class MIMOAdapter(Adapter): ) output_parameters = () - def default_pre_mapping_calculations(self): - """ - Mimo adapter specific pre calculations - Returns - ------- - - """ - pass - def get_default_parameters(self) -> dict: defaults = super().get_default_parameters() defaults["groups"] = self.get_groups() From e487795dc51cf5f499d56a4495afcd691849dacf Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Thu, 14 Nov 2024 15:49:52 +0100 Subject: [PATCH 45/70] Adding expandable parameter to investment processes --- data_adapter_oemof/adapters.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/data_adapter_oemof/adapters.py b/data_adapter_oemof/adapters.py index bccf563..3e4cd5b 100644 --- a/data_adapter_oemof/adapters.py +++ b/data_adapter_oemof/adapters.py @@ -344,7 +344,8 @@ def default_post_mapping_calculations(self, mapped_defaults): """ Does default calculations# - I. Decommissioning of existing Capacities + I. Decommissioning of existing Capacities (processes _0) and add + `expandable = True` if process is expandable (_1, _2, not _0) II. Reformatting of amount in case amount is not a number a) Multiply timeseries by the repeoctiv yearly amount b) Analogous to decommissioning of capacities @@ -361,6 +362,8 @@ def default_post_mapping_calculations(self, mapped_defaults): adapter_dict=mapped_defaults, column="capacity", ) + elif self.process_name[-1] == "1" or self.process_name[-1] == "2": + mapped_defaults["expandable"] = True # II: if "amount" in mapped_defaults.keys(): From bf3aa4f9020e9b1e3563b1bb7baf8e260aede5ad Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Thu, 14 Nov 2024 15:50:03 +0100 Subject: [PATCH 46/70] Add bug fix for biogas treatment --- data_adapter_oemof/adapters.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/data_adapter_oemof/adapters.py b/data_adapter_oemof/adapters.py index 3e4cd5b..57dcc4b 100644 --- a/data_adapter_oemof/adapters.py +++ b/data_adapter_oemof/adapters.py @@ -364,6 +364,12 @@ def default_post_mapping_calculations(self, mapped_defaults): ) elif self.process_name[-1] == "1" or self.process_name[-1] == "2": mapped_defaults["expandable"] = True + elif "x2x_other_biogas_treatment" in self.process_name: + mapped_defaults["expandable"] = True + logging.warning( + "Setting capacity cost of x2x_other_biogas_treatment to 0 as " + "it is missing in the data.") + mapped_defaults["capacity_cost"] = 0 # II: if "amount" in mapped_defaults.keys(): From a0f7819852579fe4a481e73315a08659d15c09f4 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Thu, 14 Nov 2024 16:41:43 +0100 Subject: [PATCH 47/70] Add parameter primary in mimo adapter and drop 'primary' from foreign keys in datapackage --- data_adapter_oemof/adapters.py | 3 +++ data_adapter_oemof/build_datapackage.py | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/data_adapter_oemof/adapters.py b/data_adapter_oemof/adapters.py index 57dcc4b..aa7db67 100644 --- a/data_adapter_oemof/adapters.py +++ b/data_adapter_oemof/adapters.py @@ -628,6 +628,7 @@ class MIMOAdapter(Adapter): Field(name="activity_bound_min", type=float), Field(name="activity_bound_max", type=float), Field(name="activity_bound_fix", type=float), + Field(name="primary", type=str), ) output_parameters = () @@ -654,6 +655,8 @@ def get_bus_from_struct(bus_list: list, prefix: str) -> dict: buses = {} counter = 0 for bus_group in bus_list: + if prefix == "to_bus_" and counter == 0: + buses["primary"] = bus_group if isinstance(bus_group, str): buses[f"{prefix}{counter}"] = bus_group counter += 1 diff --git a/data_adapter_oemof/build_datapackage.py b/data_adapter_oemof/build_datapackage.py index b4a5370..7531604 100644 --- a/data_adapter_oemof/build_datapackage.py +++ b/data_adapter_oemof/build_datapackage.py @@ -297,6 +297,12 @@ def save_datapackage_to_csv( field_names = [field["name"] for field in resource["schema"]["fields"]] resource["dialect"] = {"delimiter": ";"} if resource["name"] in self.foreign_keys.keys(): + # drop "primary", see mimo converter of oemof.industry for more information + self.foreign_keys[resource["name"]] = [ + item for item in self.foreign_keys[resource["name"]] if + item["fields"] != "primary" + ] + # update schema resource["schema"].update( {"foreignKeys": self.foreign_keys[resource["name"]]} ) From 58b27f76740e5a15f23664f7326ed7bf41f0bb43 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Thu, 14 Nov 2024 17:37:20 +0100 Subject: [PATCH 48/70] Update oemof industry installation branch --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 6f5c655..2bb3665 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,7 +22,7 @@ build-backend = "poetry.core.masonry.api" python = ">=3.10,<3.11" data_adapter = { git = "https://git@github.com/sedos-project/data_adapter", branch = "bug_fix/drop_comment_column"} oemof-tabular = { git = "https://git@github.com/oemof/oemof-tabular", branch = "dev"} -oemof-industry = { git = "https://github.com/sedos-project/oemof.industry.git", branch = "main"} +oemof-industry = { git = "https://github.com/sedos-project/oemof.industry.git", branch = "fix/facade_params"} boto3 = "1.26.125" # fix boto3 to fasten up dependency resolution python-dotenv = "^0.21.0" tsam = "^2.3.1" From 3f3c11d018fd1cd8d047dd5b7a6fa8710e660a24 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Thu, 14 Nov 2024 17:45:57 +0100 Subject: [PATCH 49/70] Bugfix add lifetime to x2x_other_biogas_treatment --- data_adapter_oemof/adapters.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/data_adapter_oemof/adapters.py b/data_adapter_oemof/adapters.py index aa7db67..f12554f 100644 --- a/data_adapter_oemof/adapters.py +++ b/data_adapter_oemof/adapters.py @@ -367,9 +367,10 @@ def default_post_mapping_calculations(self, mapped_defaults): elif "x2x_other_biogas_treatment" in self.process_name: mapped_defaults["expandable"] = True logging.warning( - "Setting capacity cost of x2x_other_biogas_treatment to 0 as " - "it is missing in the data.") + "Setting capacity cost of x2x_other_biogas_treatment to 0 and " + "life time to 20 as this is missing in the data.") mapped_defaults["capacity_cost"] = 0 + mapped_defaults["lifetime"] = 20 # II: if "amount" in mapped_defaults.keys(): From 237ec6f8d2849450416d0e4f512844375c141cc5 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Fri, 15 Nov 2024 12:57:33 +0100 Subject: [PATCH 50/70] Install main branch of data_adapter --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 2bb3665..95b7958 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,7 +20,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry.dependencies] python = ">=3.10,<3.11" -data_adapter = { git = "https://git@github.com/sedos-project/data_adapter", branch = "bug_fix/drop_comment_column"} +data_adapter = { git = "https://git@github.com/sedos-project/data_adapter", branch = "main"} oemof-tabular = { git = "https://git@github.com/oemof/oemof-tabular", branch = "dev"} oemof-industry = { git = "https://github.com/sedos-project/oemof.industry.git", branch = "fix/facade_params"} boto3 = "1.26.125" # fix boto3 to fasten up dependency resolution From bc0dae60eb363b41d38c86730aed5cef81dadb77 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Mon, 18 Nov 2024 08:53:19 +0100 Subject: [PATCH 51/70] Update pyproject.toml --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 95b7958..8a09e1f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,7 +22,7 @@ build-backend = "poetry.core.masonry.api" python = ">=3.10,<3.11" data_adapter = { git = "https://git@github.com/sedos-project/data_adapter", branch = "main"} oemof-tabular = { git = "https://git@github.com/oemof/oemof-tabular", branch = "dev"} -oemof-industry = { git = "https://github.com/sedos-project/oemof.industry.git", branch = "fix/facade_params"} +oemof-industry = { git = "https://github.com/sedos-project/oemof.industry.git", branch = "main"} boto3 = "1.26.125" # fix boto3 to fasten up dependency resolution python-dotenv = "^0.21.0" tsam = "^2.3.1" From 5b0d97eac3e0f5a277ddb0b392bc6bf8d9458d1d Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Mon, 18 Nov 2024 16:09:38 +0100 Subject: [PATCH 52/70] Adapt oemof-tabular installation --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 8a09e1f..322c294 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,7 +21,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry.dependencies] python = ">=3.10,<3.11" data_adapter = { git = "https://git@github.com/sedos-project/data_adapter", branch = "main"} -oemof-tabular = { git = "https://git@github.com/oemof/oemof-tabular", branch = "dev"} +oemof-tabular = { git = "https://git@github.com/oemof/oemof-tabular", branch = "feature/multi-period-results "} oemof-industry = { git = "https://github.com/sedos-project/oemof.industry.git", branch = "main"} boto3 = "1.26.125" # fix boto3 to fasten up dependency resolution python-dotenv = "^0.21.0" From 28999d75be6a396c24478df0400bdc93f949f7ef Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Mon, 18 Nov 2024 16:10:20 +0100 Subject: [PATCH 53/70] Correct error --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 322c294..954befd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,7 +21,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry.dependencies] python = ">=3.10,<3.11" data_adapter = { git = "https://git@github.com/sedos-project/data_adapter", branch = "main"} -oemof-tabular = { git = "https://git@github.com/oemof/oemof-tabular", branch = "feature/multi-period-results "} +oemof-tabular = { git = "https://git@github.com/oemof/oemof-tabular", branch = "feature/multi-period-results"} oemof-industry = { git = "https://github.com/sedos-project/oemof.industry.git", branch = "main"} boto3 = "1.26.125" # fix boto3 to fasten up dependency resolution python-dotenv = "^0.21.0" From 6a09abf723c016fddae009adaa9e414957be576a Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Mon, 2 Dec 2024 16:37:47 +0100 Subject: [PATCH 54/70] Fill EmissionConstraintAdapter and add constraint to dp --- data_adapter_oemof/adapters.py | 35 ++++++++++++++++++++----- data_adapter_oemof/build_datapackage.py | 30 ++++++++++++++------- 2 files changed, 49 insertions(+), 16 deletions(-) diff --git a/data_adapter_oemof/adapters.py b/data_adapter_oemof/adapters.py index a59a446..f310c06 100644 --- a/data_adapter_oemof/adapters.py +++ b/data_adapter_oemof/adapters.py @@ -499,10 +499,6 @@ def get_busses(self) -> dict: elif bus.startswith("emi"): bus_dict[f"emission_bus_{counter}"] = bus counter += 1 - - # check that bus is defined - if bus_dict.get("bus") is None: - raise KeyError(f"{self.process_name} is missing 'bus', the input.") return bus_dict def get_default_parameters(self) -> dict: @@ -612,13 +608,40 @@ class VolatileAdapter(Adapter): class EmissionConstraintAdapter(Adapter): """ - LoadAdapter + EmissionConstraintAdapter """ type = "co2_emission_limit" facade = CO2EmissionLimit # oemof.industry facade - might be moved to oemof.tabular + extra_fields = Adapter.extra_fields + ( + Field(name="commodities", type=float), + ) + + def get_default_parameters(self) -> dict: + defaults = super().get_default_parameters() + del defaults["region"] + del defaults["name"] + del defaults["year"] + # reduce co2 limit by share of steel industry + defaults["co2_limit"] = [limit * self.data["steel_emission_share"] for + limit in defaults["co2_limit"]] + + # categorize commodities + commodities = {"co2_commodities": [], "ch4_commodities": [], + "n2o_commodities": [], "negative_co2_commodities": []} + inputs = self.structure["inputs"] + for i in inputs: + if "neg" in i and "co2" in i: + commodities["negative_co2_commodities"].append(i) + elif "co2" in i: + commodities["co2_commodities"].append(i) + elif "ch4" in i: + commodities["ch4_commodities"].append(i) + elif "n2o" in i: + commodities["n2o_commodities"].append(i) + defaults["commodities"] = json.dumps(commodities).replace('"', "") + return defaults - pass class MIMOAdapter(Adapter): """ diff --git a/data_adapter_oemof/build_datapackage.py b/data_adapter_oemof/build_datapackage.py index 1a2e862..a8c7ec7 100644 --- a/data_adapter_oemof/build_datapackage.py +++ b/data_adapter_oemof/build_datapackage.py @@ -258,8 +258,13 @@ def save_datapackage_to_csv( os.makedirs(tsam_path, exist_ok=True) - if self.constraint_parameters: + if self.constraint_parameters is not None: os.makedirs(constraint_path, exist_ok=True) + self.constraint_parameters.to_csv( + os.path.join(constraint_path, "emission_constraint.csv"), + index=False, + sep=";", + ) if not self.periods.empty: self.periods.to_csv( @@ -499,6 +504,7 @@ def _reduce_lists(x): parametrized_elements = {"bus": []} parametrized_sequences = {} foreign_keys = {} + constraint_parameters = None # Iterate Elements for process_name, struct in adapter.structure.processes.items(): process_data = adapter.get_process(process_name) @@ -545,15 +551,18 @@ def _reduce_lists(x): component_adapter, components ) - parametrized_elements[process_name] = pd.DataFrame(components) - - # if 'max_profile' exists the time series is added in `timeseries` and removed from `parametrized_elements` - # todo un-hard-code --> max_profile is set in calculations.decommission() which is called by Adapter.default_post_mapping_calculations() - if "max_profile" in parametrized_elements[process_name]: - timeseries = parametrized_elements[process_name]["max_profile"][0] - parametrized_elements[process_name].drop(columns=["max_profile"], inplace=True) - if not timeseries.empty: - parametrized_sequences.update({process_name: timeseries}) + if "constraint" in process_name: + constraint_parameters = pd.DataFrame(components) + else: + parametrized_elements[process_name] = pd.DataFrame(components) + + # if 'max_profile' exists the time series is added in `timeseries` and removed from `parametrized_elements` + # todo un-hard-code --> max_profile is set in calculations.decommission() which is called by Adapter.default_post_mapping_calculations() + if "max_profile" in parametrized_elements[process_name]: + timeseries = parametrized_elements[process_name]["max_profile"][0] + parametrized_elements[process_name].drop(columns=["max_profile"], inplace=True) + if not timeseries.empty: + parametrized_sequences.update({process_name: timeseries}) # Create Bus Element from all unique `busses` found in elements parametrized_elements["bus"] = pd.DataFrame( { @@ -587,4 +596,5 @@ def reduce_data_frame(data_frame, steps=4): foreign_keys=foreign_keys, periods=periods, location_to_save_to=location_to_save_to, + constraint_parameters=constraint_parameters, ) From 7515780514ed0b795a253b36a66647f279487195 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Mon, 2 Dec 2024 16:46:48 +0100 Subject: [PATCH 55/70] replace quotes with # to make a json.loads easier later --- data_adapter_oemof/adapters.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/data_adapter_oemof/adapters.py b/data_adapter_oemof/adapters.py index f310c06..30dd030 100644 --- a/data_adapter_oemof/adapters.py +++ b/data_adapter_oemof/adapters.py @@ -639,7 +639,8 @@ def get_default_parameters(self) -> dict: commodities["ch4_commodities"].append(i) elif "n2o" in i: commodities["n2o_commodities"].append(i) - defaults["commodities"] = json.dumps(commodities).replace('"', "") + # replace quotes with # to make a json.loads easier later + defaults["commodities"] = json.dumps(commodities).replace('"', "#") return defaults From 2752e9a5f08e8b1961aa2c8a730da21b5d9689e2 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Tue, 3 Dec 2024 11:37:06 +0100 Subject: [PATCH 56/70] Get process units --- data_adapter_oemof/build_datapackage.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/data_adapter_oemof/build_datapackage.py b/data_adapter_oemof/build_datapackage.py index 7531604..e4528c5 100644 --- a/data_adapter_oemof/build_datapackage.py +++ b/data_adapter_oemof/build_datapackage.py @@ -482,6 +482,9 @@ def build_datapackage( ------- DataPackage + units : dict + keys: process names, values: dict containing parameters for + optimization as keys and units as values. """ def _reduce_lists(x): @@ -496,6 +499,7 @@ def _reduce_lists(x): # Iterate Elements for process_name, struct in adapter.structure.processes.items(): process_data = adapter.get_process(process_name) + units[process_name] = process_data.units timeseries = process_data.timeseries # might also be set below if 'max_profile' exists if isinstance(timeseries.columns, pd.MultiIndex): timeseries.columns = ( @@ -581,4 +585,4 @@ def reduce_data_frame(data_frame, steps=4): foreign_keys=foreign_keys, periods=periods, location_to_save_to=location_to_save_to, - ) + ), units From 14dedb4e201147bf33e90d4c3630c7455db5d6d3 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Tue, 3 Dec 2024 14:46:37 +0100 Subject: [PATCH 57/70] Update oemof industry installation --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 954befd..ccdd083 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,7 +22,7 @@ build-backend = "poetry.core.masonry.api" python = ">=3.10,<3.11" data_adapter = { git = "https://git@github.com/sedos-project/data_adapter", branch = "main"} oemof-tabular = { git = "https://git@github.com/oemof/oemof-tabular", branch = "feature/multi-period-results"} -oemof-industry = { git = "https://github.com/sedos-project/oemof.industry.git", branch = "main"} +oemof-industry = { git = "https://github.com/sedos-project/oemof.industry.git", branch = "feature/multi_period_emi_constraint"} boto3 = "1.26.125" # fix boto3 to fasten up dependency resolution python-dotenv = "^0.21.0" tsam = "^2.3.1" From b303bff8f8c459e981ed5e7acd4f578733e130b5 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Tue, 10 Dec 2024 14:17:09 +0100 Subject: [PATCH 58/70] Commit missin intiizalization of units dict --- data_adapter_oemof/build_datapackage.py | 1 + 1 file changed, 1 insertion(+) diff --git a/data_adapter_oemof/build_datapackage.py b/data_adapter_oemof/build_datapackage.py index f8c6d4b..6044593 100644 --- a/data_adapter_oemof/build_datapackage.py +++ b/data_adapter_oemof/build_datapackage.py @@ -508,6 +508,7 @@ def _reduce_lists(x): parametrized_sequences = {} foreign_keys = {} constraint_parameters = None + units = {} # Iterate Elements for process_name, struct in adapter.structure.processes.items(): process_data = adapter.get_process(process_name) From 813babd070536e57afa5efbece1f3a71ceb6591c Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Tue, 10 Dec 2024 14:18:10 +0100 Subject: [PATCH 59/70] Put max parameter back to output_parameters --- data_adapter_oemof/adapters.py | 9 +++++++-- data_adapter_oemof/build_datapackage.py | 6 ------ data_adapter_oemof/calculations.py | 10 ++++++---- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/data_adapter_oemof/adapters.py b/data_adapter_oemof/adapters.py index 30dd030..2a5bf95 100644 --- a/data_adapter_oemof/adapters.py +++ b/data_adapter_oemof/adapters.py @@ -79,8 +79,6 @@ def get_default_parameters(self) -> dict: ) defaults = self.default_post_mapping_calculations(defaults) - if "max_profile" in defaults: - defaults["profile"] = defaults["max_profile"].columns[0] if not defaults["input_parameters"]: defaults.pop("input_parameters") if not defaults["output_parameters"]: @@ -356,12 +354,18 @@ def default_post_mapping_calculations(self, mapped_defaults): ------- """ + if len(self.structure["outputs"]) == 0: + change_parameter = "input_parameters" + else: + change_parameter = "output_parameters" + # I: if self.process_name[-1] == "0": mapped_defaults = calculations.decommission( process_name=self.process_name, adapter_dict=mapped_defaults, column="capacity", + input_output_parameters=change_parameter, ) elif self.process_name[-1] == "1" or self.process_name[-1] == "2": mapped_defaults["expandable"] = True @@ -389,6 +393,7 @@ def default_post_mapping_calculations(self, mapped_defaults): process_name=self.process_name, adapter_dict=mapped_defaults, column="amount", + input_output_parameters=change_parameter, ) # III: diff --git a/data_adapter_oemof/build_datapackage.py b/data_adapter_oemof/build_datapackage.py index 6044593..020f62f 100644 --- a/data_adapter_oemof/build_datapackage.py +++ b/data_adapter_oemof/build_datapackage.py @@ -560,12 +560,6 @@ def _reduce_lists(x): constraint_parameters = pd.DataFrame(components) else: parametrized_elements[process_name] = pd.DataFrame(components) - - # if 'max_profile' exists the time series is added in `timeseries` and removed from `parametrized_elements` - # todo un-hard-code --> max_profile is set in calculations.decommission() which is called by Adapter.default_post_mapping_calculations() - if "max_profile" in parametrized_elements[process_name]: - timeseries = parametrized_elements[process_name]["max_profile"][0] - parametrized_elements[process_name].drop(columns=["max_profile"], inplace=True) if not timeseries.empty: parametrized_sequences.update({process_name: timeseries}) # Create Bus Element from all unique `busses` found in elements diff --git a/data_adapter_oemof/calculations.py b/data_adapter_oemof/calculations.py index dfb971f..9073faf 100644 --- a/data_adapter_oemof/calculations.py +++ b/data_adapter_oemof/calculations.py @@ -46,7 +46,7 @@ def get_capacity_cost(overnight_cost, fixed_cost, lifetime, wacc): def decommission( - process_name, adapter_dict: dict, column: str = "capacity", max_column: str = "max", + process_name, adapter_dict: dict, column: str = "capacity", max_column: str = "max", input_output_parameters: str = "output_parameters", ) -> dict: """ @@ -93,18 +93,18 @@ def decommission( return adapter_dict # I: - if max_column not in adapter_dict["output_parameters"].keys(): + if max_column not in adapter_dict[input_output_parameters].keys(): max = list(adapter_dict[column] / np.nanmax(adapter_dict[column])) # II: else: max = list(multiply_two_lists( - adapter_dict["output_parameters"][max_column], + adapter_dict[input_output_parameters][max_column], adapter_dict[column] ) / np.nanmax(adapter_dict[column])) # max must be extended to time series over all time steps of each period - column_name = ["max_timeseries"] + column_name = [f"max_timeseries_{process_name}"] timeseries = pd.DataFrame(columns=column_name) for y in adapter_dict["year"]: ts = pd.DataFrame(data=[1 for i in range(8760)], columns=column_name, @@ -114,6 +114,8 @@ def decommission( max_time_series = adapt_profile_with_yearly_value(profile=timeseries, value=max) adapter_dict["max_profile"] = max_time_series + adapter_dict[input_output_parameters][max_column] = list(max_time_series[column_name[0]].values) + adapter_dict[input_output_parameters] = json.dumps(adapter_dict[input_output_parameters]) # set `column` value to maximum value adapter_dict[column] = np.nanmax(adapter_dict[column]) From a319912775b13bc62337f352142d182561833ed9 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Tue, 10 Dec 2024 14:18:35 +0100 Subject: [PATCH 60/70] Debug mode has 24 steps by default --- data_adapter_oemof/build_datapackage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data_adapter_oemof/build_datapackage.py b/data_adapter_oemof/build_datapackage.py index 020f62f..0d8b8df 100644 --- a/data_adapter_oemof/build_datapackage.py +++ b/data_adapter_oemof/build_datapackage.py @@ -572,7 +572,7 @@ def _reduce_lists(x): ) periods = cls.get_periods_from_parametrized_sequences(parametrized_sequences) - def reduce_data_frame(data_frame, steps=4): + def reduce_data_frame(data_frame, steps=24): """reduces `df` to 5 time steps per period""" df = data_frame.copy() df["ind"] = df.index From 26c513e8a75d3cb8d9e5637acd8466557d1db2c9 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Thu, 12 Dec 2024 11:01:26 +0100 Subject: [PATCH 61/70] Move function to calculations --- data_adapter_oemof/build_datapackage.py | 14 ++------------ data_adapter_oemof/calculations.py | 12 ++++++++++++ 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/data_adapter_oemof/build_datapackage.py b/data_adapter_oemof/build_datapackage.py index 0d8b8df..4d7d0e3 100644 --- a/data_adapter_oemof/build_datapackage.py +++ b/data_adapter_oemof/build_datapackage.py @@ -12,7 +12,7 @@ from data_adapter_oemof.adapters import FACADE_ADAPTERS from data_adapter_oemof.adapters import Adapter as FacadeAdapter -from data_adapter_oemof.calculations import handle_nans +from data_adapter_oemof.calculations import handle_nans, reduce_data_frame from data_adapter_oemof.settings import BUS_MAP, PARAMETER_MAP, PROCESS_ADAPTER_MAP from data_adapter_oemof.utils import convert_mixed_types_to_same_length @@ -513,7 +513,7 @@ def _reduce_lists(x): for process_name, struct in adapter.structure.processes.items(): process_data = adapter.get_process(process_name) units[process_name] = process_data.units - timeseries = process_data.timeseries # might also be set below if 'max_profile' exists + timeseries = process_data.timeseries if isinstance(timeseries.columns, pd.MultiIndex): timeseries.columns = ( _reduce_lists(timeseries.columns.get_level_values(0)) @@ -572,16 +572,6 @@ def _reduce_lists(x): ) periods = cls.get_periods_from_parametrized_sequences(parametrized_sequences) - def reduce_data_frame(data_frame, steps=24): - """reduces `df` to 5 time steps per period""" - df = data_frame.copy() - df["ind"] = df.index - df["ind"] = df["ind"].apply( - lambda x: True if x.month == 1 and x.day == 1 and x.hour <= steps else False - ) - df_reduced = df.loc[df["ind"] == 1].drop(columns=["ind"]) - return df_reduced - if debug: periods = reduce_data_frame(data_frame=periods) for key, value in parametrized_sequences.items(): diff --git a/data_adapter_oemof/calculations.py b/data_adapter_oemof/calculations.py index 9073faf..efe5d67 100644 --- a/data_adapter_oemof/calculations.py +++ b/data_adapter_oemof/calculations.py @@ -358,3 +358,15 @@ def find_and_replace_irrelevant_data(group_df: pd.DataFrame) -> pd.DataFrame: group_df = handle_min_max(group_df) return find_and_replace_irrelevant_data(group_df) + + +def reduce_data_frame(data_frame, steps=4): + """reduces `df` to less time steps per period""" + df = data_frame.copy() + df["ind"] = df.index + df["ind"] = df["ind"].apply( + lambda + x: True if x.month == 1 and x.day == 1 and x.hour <= steps else False + ) + df_reduced = df.loc[df["ind"] == 1].drop(columns=["ind"]) + return df_reduced \ No newline at end of file From 61b20e6219b9ceea9dc168b6d25bc93c05502727 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Thu, 12 Dec 2024 11:04:53 +0100 Subject: [PATCH 62/70] parameter changed by decommission() depending on --- data_adapter_oemof/adapters.py | 12 +++++++----- data_adapter_oemof/calculations.py | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/data_adapter_oemof/adapters.py b/data_adapter_oemof/adapters.py index 2a5bf95..4c1e7b7 100644 --- a/data_adapter_oemof/adapters.py +++ b/data_adapter_oemof/adapters.py @@ -354,10 +354,12 @@ def default_post_mapping_calculations(self, mapped_defaults): ------- """ - if len(self.structure["outputs"]) == 0: - change_parameter = "input_parameters" + if mapped_defaults["type"] == "mimo": + parameter_name = f"flow_share_max_{mapped_defaults['primary']}" + elif len(self.structure["outputs"]) == 0: + parameter_name = "input_parameters" else: - change_parameter = "output_parameters" + parameter_name = "output_parameters" # I: if self.process_name[-1] == "0": @@ -365,7 +367,7 @@ def default_post_mapping_calculations(self, mapped_defaults): process_name=self.process_name, adapter_dict=mapped_defaults, column="capacity", - input_output_parameters=change_parameter, + change_parameter=parameter_name, ) elif self.process_name[-1] == "1" or self.process_name[-1] == "2": mapped_defaults["expandable"] = True @@ -393,7 +395,7 @@ def default_post_mapping_calculations(self, mapped_defaults): process_name=self.process_name, adapter_dict=mapped_defaults, column="amount", - input_output_parameters=change_parameter, + change_parameter=parameter_name, ) # III: diff --git a/data_adapter_oemof/calculations.py b/data_adapter_oemof/calculations.py index efe5d67..fdeb441 100644 --- a/data_adapter_oemof/calculations.py +++ b/data_adapter_oemof/calculations.py @@ -46,7 +46,7 @@ def get_capacity_cost(overnight_cost, fixed_cost, lifetime, wacc): def decommission( - process_name, adapter_dict: dict, column: str = "capacity", max_column: str = "max", input_output_parameters: str = "output_parameters", + process_name, adapter_dict: dict, column: str = "capacity", max_column: str = "max", change_parameter: str = "output_parameters", ) -> dict: """ From feb2856755f587633fc4f4b59e90d6d3ab5d088f Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Thu, 12 Dec 2024 11:05:18 +0100 Subject: [PATCH 63/70] decomissioning via flow shares for mimo --- data_adapter_oemof/calculations.py | 48 ++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/data_adapter_oemof/calculations.py b/data_adapter_oemof/calculations.py index fdeb441..3b37d6d 100644 --- a/data_adapter_oemof/calculations.py +++ b/data_adapter_oemof/calculations.py @@ -93,29 +93,47 @@ def decommission( return adapter_dict # I: - if max_column not in adapter_dict[input_output_parameters].keys(): + if change_parameter not in ["input_parameters", "output_parameters"]: + # this occurs e.g. for flow_share_max of mimo + # still max might be set in parameters + parameter = "output_parameters" + else: + parameter = change_parameter + if max_column not in adapter_dict[parameter].keys(): max = list(adapter_dict[column] / np.nanmax(adapter_dict[column])) # II: else: max = list(multiply_two_lists( - adapter_dict[input_output_parameters][max_column], + adapter_dict[parameter][max_column], adapter_dict[column] ) / np.nanmax(adapter_dict[column])) + if change_parameter != parameter: + # drop max output_parameters, as max_column is saved in `change_parameter` + del adapter_dict[parameter][max_column] - # max must be extended to time series over all time steps of each period - column_name = [f"max_timeseries_{process_name}"] - timeseries = pd.DataFrame(columns=column_name) - for y in adapter_dict["year"]: - ts = pd.DataFrame(data=[1 for i in range(8760)], columns=column_name, - index=pd.date_range(f"1/1/{y}", periods=8760, freq="h"), - dtype="float64") - timeseries = ts.copy() if timeseries.empty else pd.concat([timeseries, ts]) - max_time_series = adapt_profile_with_yearly_value(profile=timeseries, value=max) - - adapter_dict["max_profile"] = max_time_series - adapter_dict[input_output_parameters][max_column] = list(max_time_series[column_name[0]].values) - adapter_dict[input_output_parameters] = json.dumps(adapter_dict[input_output_parameters]) + if change_parameter != parameter: + # e.g. flow_share_max_ + adapter_dict[change_parameter] = max + else: + # max must be extended to time series over all time steps of each + # period as output_parameters are not extended in oemof.tabular + column_name = [f"max_timeseries_{process_name}"] + timeseries = pd.DataFrame(columns=column_name) + for y in adapter_dict["year"]: + ts = pd.DataFrame(data=[1 for i in range(8760)], + columns=column_name, + index=pd.date_range(f"1/1/{y}", periods=8760, + freq="h"), + dtype="float64") + timeseries = ts.copy() if timeseries.empty else pd.concat( + [timeseries, ts]) + max_time_series = adapt_profile_with_yearly_value(profile=timeseries, + value=max) + + max_time_series = reduce_data_frame(max_time_series) # todo delete + adapter_dict[change_parameter][max_column] = list(max_time_series[column_name[0]].values) + adapter_dict[change_parameter] = json.dumps(adapter_dict[change_parameter]) # set `column` value to maximum value adapter_dict[column] = np.nanmax(adapter_dict[column]) From 473e519b67ad7e76b4278af5c75661a4f0b6eb0d Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Thu, 12 Dec 2024 11:08:43 +0100 Subject: [PATCH 64/70] Remove line --- data_adapter_oemof/calculations.py | 1 - 1 file changed, 1 deletion(-) diff --git a/data_adapter_oemof/calculations.py b/data_adapter_oemof/calculations.py index 3b37d6d..79a404d 100644 --- a/data_adapter_oemof/calculations.py +++ b/data_adapter_oemof/calculations.py @@ -131,7 +131,6 @@ def decommission( max_time_series = adapt_profile_with_yearly_value(profile=timeseries, value=max) - max_time_series = reduce_data_frame(max_time_series) # todo delete adapter_dict[change_parameter][max_column] = list(max_time_series[column_name[0]].values) adapter_dict[change_parameter] = json.dumps(adapter_dict[change_parameter]) From a64e494d4db29536a498d692327c71d915e3e632 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Thu, 12 Dec 2024 11:13:18 +0100 Subject: [PATCH 65/70] Move reduce_data_frame func --- data_adapter_oemof/build_datapackage.py | 14 ++------------ data_adapter_oemof/calculations.py | 12 ++++++++++++ 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/data_adapter_oemof/build_datapackage.py b/data_adapter_oemof/build_datapackage.py index 0d8b8df..4d7d0e3 100644 --- a/data_adapter_oemof/build_datapackage.py +++ b/data_adapter_oemof/build_datapackage.py @@ -12,7 +12,7 @@ from data_adapter_oemof.adapters import FACADE_ADAPTERS from data_adapter_oemof.adapters import Adapter as FacadeAdapter -from data_adapter_oemof.calculations import handle_nans +from data_adapter_oemof.calculations import handle_nans, reduce_data_frame from data_adapter_oemof.settings import BUS_MAP, PARAMETER_MAP, PROCESS_ADAPTER_MAP from data_adapter_oemof.utils import convert_mixed_types_to_same_length @@ -513,7 +513,7 @@ def _reduce_lists(x): for process_name, struct in adapter.structure.processes.items(): process_data = adapter.get_process(process_name) units[process_name] = process_data.units - timeseries = process_data.timeseries # might also be set below if 'max_profile' exists + timeseries = process_data.timeseries if isinstance(timeseries.columns, pd.MultiIndex): timeseries.columns = ( _reduce_lists(timeseries.columns.get_level_values(0)) @@ -572,16 +572,6 @@ def _reduce_lists(x): ) periods = cls.get_periods_from_parametrized_sequences(parametrized_sequences) - def reduce_data_frame(data_frame, steps=24): - """reduces `df` to 5 time steps per period""" - df = data_frame.copy() - df["ind"] = df.index - df["ind"] = df["ind"].apply( - lambda x: True if x.month == 1 and x.day == 1 and x.hour <= steps else False - ) - df_reduced = df.loc[df["ind"] == 1].drop(columns=["ind"]) - return df_reduced - if debug: periods = reduce_data_frame(data_frame=periods) for key, value in parametrized_sequences.items(): diff --git a/data_adapter_oemof/calculations.py b/data_adapter_oemof/calculations.py index 9073faf..efe5d67 100644 --- a/data_adapter_oemof/calculations.py +++ b/data_adapter_oemof/calculations.py @@ -358,3 +358,15 @@ def find_and_replace_irrelevant_data(group_df: pd.DataFrame) -> pd.DataFrame: group_df = handle_min_max(group_df) return find_and_replace_irrelevant_data(group_df) + + +def reduce_data_frame(data_frame, steps=4): + """reduces `df` to less time steps per period""" + df = data_frame.copy() + df["ind"] = df.index + df["ind"] = df["ind"].apply( + lambda + x: True if x.month == 1 and x.day == 1 and x.hour <= steps else False + ) + df_reduced = df.loc[df["ind"] == 1].drop(columns=["ind"]) + return df_reduced \ No newline at end of file From d812bdf7c292dd3e5ccf8a01b06d85945c307716 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Thu, 12 Dec 2024 11:15:27 +0100 Subject: [PATCH 66/70] reduce max_time_series as debugging mode is used in sedos --- data_adapter_oemof/calculations.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/data_adapter_oemof/calculations.py b/data_adapter_oemof/calculations.py index efe5d67..26acbbb 100644 --- a/data_adapter_oemof/calculations.py +++ b/data_adapter_oemof/calculations.py @@ -113,6 +113,8 @@ def decommission( timeseries = ts.copy() if timeseries.empty else pd.concat([timeseries, ts]) max_time_series = adapt_profile_with_yearly_value(profile=timeseries, value=max) + max_time_series = reduce_data_frame(max_time_series) + adapter_dict["max_profile"] = max_time_series adapter_dict[input_output_parameters][max_column] = list(max_time_series[column_name[0]].values) adapter_dict[input_output_parameters] = json.dumps(adapter_dict[input_output_parameters]) From 2f1ef834bd6c07bfb589e7af73468a3038f50cdb Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Thu, 12 Dec 2024 11:16:07 +0100 Subject: [PATCH 67/70] Set debug mode to 24 time steps per period --- data_adapter_oemof/calculations.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data_adapter_oemof/calculations.py b/data_adapter_oemof/calculations.py index 26acbbb..a303687 100644 --- a/data_adapter_oemof/calculations.py +++ b/data_adapter_oemof/calculations.py @@ -362,7 +362,7 @@ def find_and_replace_irrelevant_data(group_df: pd.DataFrame) -> pd.DataFrame: return find_and_replace_irrelevant_data(group_df) -def reduce_data_frame(data_frame, steps=4): +def reduce_data_frame(data_frame, steps=24): """reduces `df` to less time steps per period""" df = data_frame.copy() df["ind"] = df.index From f986f23441fc154ddf49b9e156306fa7051efea1 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Thu, 12 Dec 2024 16:46:49 +0100 Subject: [PATCH 68/70] Corrections --- data_adapter_oemof/calculations.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/data_adapter_oemof/calculations.py b/data_adapter_oemof/calculations.py index a303687..4308bd3 100644 --- a/data_adapter_oemof/calculations.py +++ b/data_adapter_oemof/calculations.py @@ -115,7 +115,6 @@ def decommission( max_time_series = reduce_data_frame(max_time_series) - adapter_dict["max_profile"] = max_time_series adapter_dict[input_output_parameters][max_column] = list(max_time_series[column_name[0]].values) adapter_dict[input_output_parameters] = json.dumps(adapter_dict[input_output_parameters]) @@ -362,7 +361,7 @@ def find_and_replace_irrelevant_data(group_df: pd.DataFrame) -> pd.DataFrame: return find_and_replace_irrelevant_data(group_df) -def reduce_data_frame(data_frame, steps=24): +def reduce_data_frame(data_frame, steps=23): """reduces `df` to less time steps per period""" df = data_frame.copy() df["ind"] = df.index From 5818f7d787defebaf8fb23ab487379488738d180 Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Thu, 12 Dec 2024 17:16:21 +0100 Subject: [PATCH 69/70] Correct indent --- data_adapter_oemof/calculations.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data_adapter_oemof/calculations.py b/data_adapter_oemof/calculations.py index f751b3f..5a69e2f 100644 --- a/data_adapter_oemof/calculations.py +++ b/data_adapter_oemof/calculations.py @@ -131,7 +131,7 @@ def decommission( max_time_series = adapt_profile_with_yearly_value(profile=timeseries, value=max) - max_time_series = reduce_data_frame(max_time_series) + max_time_series = reduce_data_frame(max_time_series) adapter_dict[change_parameter][max_column] = list(max_time_series[column_name[0]].values) adapter_dict[change_parameter] = json.dumps(adapter_dict[change_parameter]) From cd150ba8c48118ba931d32deabaa98a7e56ea97c Mon Sep 17 00:00:00 2001 From: SabineHaas Date: Thu, 12 Dec 2024 18:20:52 +0100 Subject: [PATCH 70/70] Stepsize is 23 in debug mode --- data_adapter_oemof/calculations.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data_adapter_oemof/calculations.py b/data_adapter_oemof/calculations.py index 5a69e2f..3b3e7d3 100644 --- a/data_adapter_oemof/calculations.py +++ b/data_adapter_oemof/calculations.py @@ -379,7 +379,7 @@ def find_and_replace_irrelevant_data(group_df: pd.DataFrame) -> pd.DataFrame: return find_and_replace_irrelevant_data(group_df) -def reduce_data_frame(data_frame, steps=4): +def reduce_data_frame(data_frame, steps=23): """reduces `df` to less time steps per period""" df = data_frame.copy() df["ind"] = df.index