oemof.solph 0.5.2.dev0__tar.gz → 0.5.2.dev2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/.bumpversion.cfg +1 -1
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/.readthedocs.yaml +3 -1
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/MANIFEST.in +0 -1
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/PKG-INFO +21 -6
- oemof.solph-0.5.2.dev2/VERSION +1 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/conf.py +1 -1
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/index.rst +0 -1
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/usage.rst +26 -21
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-5-1.rst +2 -2
- oemof.solph-0.5.2.dev2/docs/whatsnew/v0-5-2.rst +52 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/pyproject.toml +1 -1
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/setup.cfg +1 -1
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/setup.py +1 -1
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/__init__.py +1 -1
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/_energy_system.py +66 -34
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/_models.py +17 -9
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/_options.py +21 -26
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/_plumbing.py +2 -2
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/buses/_bus.py +22 -5
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/buses/experimental/_electrical_bus.py +20 -5
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/components/_converter.py +7 -7
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/components/_generic_chp.py +2 -2
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/components/_generic_storage.py +246 -68
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/components/_link.py +12 -9
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/components/_offset_converter.py +2 -2
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/components/_sink.py +2 -2
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/components/_source.py +2 -2
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/components/experimental/_generic_caes.py +27 -13
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/components/experimental/_piecewise_linear_converter.py +22 -7
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/components/experimental/_sink_dsm.py +491 -88
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/constraints/equate_variables.py +7 -4
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/constraints/integral_limit.py +5 -2
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/constraints/investment_limit.py +7 -4
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/constraints/shared_limit.py +5 -2
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/flows/_flow.py +7 -5
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/flows/_investment_flow_block.py +224 -39
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/flows/_non_convex_flow_block.py +47 -27
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/flows/_simple_flow_block.py +33 -20
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/views.py +15 -12
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof.solph.egg-info/PKG-INFO +21 -6
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof.solph.egg-info/SOURCES.txt +10 -1
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof.solph.egg-info/entry_points.txt +0 -1
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/constraint_tests.py +71 -58
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/connect_investment_multi_period.lp +147 -147
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/converter_invest_multi_period.lp +51 -51
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/converter_invest_with_existing_multi_period.lp +81 -81
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_DIW_invest_multi_period.lp +4 -4
- oemof.solph-0.5.2.dev2/tests/lp_files/dsm_module_DIW_invest_multi_period_remaining_value.lp +487 -0
- oemof.solph-0.5.2.dev2/tests/lp_files/dsm_module_DLR_invest_multi_period.lp +824 -0
- oemof.solph-0.5.2.dev0/tests/lp_files/dsm_module_DLR_invest_multi_period.lp → oemof.solph-0.5.2.dev2/tests/lp_files/dsm_module_DLR_invest_multi_period_remaining_value.lp +6 -6
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_oemof_extended.lp +1 -1
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_oemof_invest_multi_period.lp +4 -4
- oemof.solph-0.5.2.dev2/tests/lp_files/dsm_module_oemof_invest_multi_period_remaining_value.lp +301 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/fixed_costs_sources.lp +1 -1
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/fixed_source_invest_sink_multi_period.lp +3 -3
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/flow_invest_with_offset_multi_period.lp +3 -3
- oemof.solph-0.5.2.dev2/tests/lp_files/flow_invest_with_offset_multi_period_remaining_value.lp +206 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/flow_invest_with_offset_no_minimum_multi_period.lp +3 -3
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/flow_invest_without_offset_multi_period.lp +3 -3
- oemof.solph-0.5.2.dev2/tests/lp_files/flow_invest_without_offset_multi_period_remaining_value.lp +203 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/invest_source_fixed_sink_multi_period.lp +3 -3
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/linear_converter_chp_invest_multi_period.lp +33 -33
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/linear_converter_invest_multi_period.lp +27 -27
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/linear_converter_invest_multi_period_old.lp +27 -27
- oemof.solph-0.5.2.dev2/tests/lp_files/linear_converter_invest_multi_period_remaining_value.lp +230 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/min_max_runtime.lp +6 -44
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/min_max_runtime_multi_period.lp +23 -60
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/multi_period_period_length.lp +337 -337
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/periodical_investment_limit.lp +115 -115
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/periodical_investment_limit_with_dsm_DIW.lp +12 -12
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/periodical_investment_limit_with_dsm_DLR.lp +12 -12
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/periodical_investment_limit_with_dsm_oemof.lp +12 -12
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_1_fixed_losses.lp +1 -1
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_1_multi_period.lp +3 -3
- oemof.solph-0.5.2.dev2/tests/lp_files/storage_invest_1_multi_period_remaining_value.lp +505 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_2_multi_period.lp +94 -94
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_3_multi_period.lp +6 -6
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_4_multi_period.lp +3 -3
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_5_multi_period.lp +89 -89
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_6_multi_period.lp +6 -6
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_all_nonconvex_multi_period.lp +124 -124
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_minimum_multi_period.lp +3 -3
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_multi_period.lp +3 -3
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_with_offset_multi_period.lp +88 -88
- oemof.solph-0.5.2.dev2/tests/lp_files/storage_invest_with_offset_multi_period_remaining_value.lp +529 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_without_offset_multi_period.lp +88 -88
- oemof.solph-0.5.2.dev2/tests/lp_files/storage_invest_without_offset_multi_period_remaining_value.lp +526 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/multi_period_constraint_tests.py +392 -60
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/regression_tests.py +1 -1
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_components.py +28 -10
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_constraints_module.py +9 -4
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_energy_system.py +18 -1
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_grouping.py +1 -1
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_models.py +20 -23
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_non_equidistant_time_index.py +21 -18
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_options.py +3 -1
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_outputlib/__init__.py +1 -1
- oemof.solph-0.5.2.dev2/tests/test_plumbing.py +39 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_processing.py +22 -13
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_connect_invest/test_connect_invest.py +20 -17
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_flexible_modelling/test_add_constraints.py +4 -1
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_generic_caes/test_generic_caes.py +3 -3
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_generic_chp/test_generic_chp.py +3 -2
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_invest_fix_flow/test_simple_invest_fixed.py +4 -2
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_lopf/test_lopf.py +38 -34
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_multi_period_model/test_multi_period_dispatch_model.py +8 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_multi_period_model/test_multi_period_investment_model.py +15 -7
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_options/test_non_convex.py +0 -21
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_piecewiselineartransformer/test_piecewiselineartransformer.py +3 -3
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_simple_model/test_simple_dispatch.py +5 -2
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_simple_model/test_simple_dispatch_one.py +4 -2
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_simple_model/test_simple_dispatch_one_explicit_timemode.py +4 -2
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_simple_model/test_simple_invest.py +7 -4
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_storage_investment/test_invest_storage_regression.py +10 -3
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_storage_investment/test_storage_investment.py +11 -4
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_storage_investment/test_storage_with_tuple_label.py +12 -6
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_variable_chp/test_variable_chp.py +11 -6
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_solph_network_classes.py +17 -9
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_time_index.py +12 -4
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_warnings.py +6 -17
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tox.ini +1 -1
- oemof.solph-0.5.2.dev0/VERSION +0 -1
- oemof.solph-0.5.2.dev0/docs/examples/electrical.lopf.rst +0 -7
- oemof.solph-0.5.2.dev0/docs/whatsnew/v0-5-2.rst +0 -27
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/.coveragerc +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/.editorconfig +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/.pep8speaks.yml +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/.prospector.yml +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/AUTHORS.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/CITATION.cff +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/CODE_OF_CONDUCT.md +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/CONTRIBUTING.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/LICENSE +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/README.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/ci/appveyor-with-compiler.cmd +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/ci/bootstrap.py +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/ci/requirements.txt +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/ci/templates/.appveyor.yml +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/ci/templates/.travis.yml +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/ci/templates/tox.ini +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/ExtractionTurbine_range_of_operation.svg +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/GenericCHP.svg +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/OffsetConverter_efficiency.svg +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/OffsetConverter_power_relation.svg +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/Plot_delay_2013-01-01.svg +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/diesel_genset_investment_flow.svg +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/diesel_genset_nonconvex_flow.svg +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/diesel_genset_nonconvex_invest_flow.svg +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/example_figures.png +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/example_network.svg +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/example_variable_chp.svg +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/framework_concept.svg +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/nonconvex_invest_investcosts_power.svg +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/nonconvex_invest_specific_costs.svg +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/oemof_solph_example.svg +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/pahesmf_init.py +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/variable_chp_plot.svg +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_logo/README.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_logo/editable_fonts/logo_oemof_solph_COMPACT_editable_fonts.svg +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_logo/editable_fonts/logo_oemof_solph_FULL_editable_fonts.svg +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_logo/editable_fonts/logo_oemof_solph_ICON_editable_fonts.svg +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_logo/editable_fonts/logo_oemof_solph_NOTEXT_editable_fonts.svg +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_logo/logo_oemof_solph_COMPACT.svg +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_logo/logo_oemof_solph_COMPACT_bg.svg +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_logo/logo_oemof_solph_FULL.svg +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_logo/logo_oemof_solph_ICON.svg +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_logo/logo_oemof_solph_NOTEXT.svg +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/authors.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/changelog.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/contributing.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/docutils.conf +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/activity_costs.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/basic_example.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/cellular.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/custom_constraints.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/electrical.transshipment.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/emission_constraint.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/excel_reader.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/flow_count_limit.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/flow_gradient.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/invest_nonconvex.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/min_max_runtimes.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/minimal_investment.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/nametuple.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/offset_converter.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/shared_invest_limit.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/simple_dispatch.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/startup_costs.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/storage_costs.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/storage_investment.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/storage_level_constraint.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/time_index.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/unbalanced_storage.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/variable_chp.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/index.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/readme.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/reference/index.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/reference/oemof.solph.busses.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/reference/oemof.solph.components.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/reference/oemof.solph.console_scripts.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/reference/oemof.solph.constraints.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/reference/oemof.solph.energy_system.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/reference/oemof.solph.flow.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/reference/oemof.solph.groupings.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/reference/oemof.solph.helpers.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/reference/oemof.solph.models.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/reference/oemof.solph.options.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/reference/oemof.solph.plumbing.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/reference/oemof.solph.processing.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/reference/oemof.solph.views.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/requirements.txt +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/spelling_wordlist.txt +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-0-1.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-0-2.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-0-3.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-0-4.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-0-5.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-0-6.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-0-7.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-1-0.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-1-1.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-1-2.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-1-4.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-2-0.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-2-1.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-2-2.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-2-3.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-3-0.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-3-1.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-3-2.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-4-0.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-4-1.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-4-2.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-4-4.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-4-5.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-5-0.rst +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/examples/basic_example/basic_example.csv +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/examples/excel_reader/scenario.xlsx +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/examples/invest_nonconvex_flow_examples/solar_generation.csv +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/examples/offset_converter_example/diesel_genset_data.csv +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/examples/simple_dispatch/input_data.csv +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/examples/storage_investment/storage_investment.csv +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/examples/tuple_as_labels/tuple_as_label.csv +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/examples/variable_chp/variable_chp.csv +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/_console_scripts.py +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/_groupings.py +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/_helpers.py +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/buses/__init__.py +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/buses/experimental/__init__.py +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/components/__init__.py +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/components/_extraction_turbine_chp.py +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/components/experimental/__init__.py +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/constraints/__init__.py +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/constraints/equate_flows.py +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/constraints/flow_count_limit.py +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/constraints/storage_level.py +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/flows/__init__.py +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/flows/_invest_non_convex_flow_block.py +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/flows/experimental/__init__.py +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/flows/experimental/_electrical_line.py +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/helpers.py +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/processing.py +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof.solph.egg-info/dependency_links.txt +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof.solph.egg-info/not-zip-safe +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof.solph.egg-info/requires.txt +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof.solph.egg-info/top_level.txt +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/flow_tests.py +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/activity_costs.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/activity_costs_multi_period.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/connect_investment.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/converter.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/converter_invest.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/converter_invest_with_existing.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/converter_multi_period.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_DIW.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_DIW_extended.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_DIW_extended_multi_period.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_DIW_invest.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_DIW_multi_period.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_DLR.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_DLR_delay_time.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_DLR_extended.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_DLR_extended_multi_period.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_DLR_invest.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_DLR_multi_period.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_oemof.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_oemof_extended_multi_period.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_oemof_invest.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_oemof_multi_period.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/emission_budget_limit.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/emission_limit.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/emission_limit_no_error.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/equate_flows.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/fixed_source_invest_sink.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/fixed_source_variable_sink.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/fixed_source_variable_sink_multi_period.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/flow_count_limit.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/flow_count_limit_multi_period.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/flow_invest_with_offset.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/flow_invest_with_offset_no_minimum.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/flow_invest_without_offset.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/flow_nonconvex_invest_bounded_converter.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/flow_reaching_lifetime.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/flow_reaching_lifetime_initial_age.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/generic_invest_limit.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/inactivity_costs.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/inactivity_costs_multi_period.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/integer_source.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/invest_non_convex_flow.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/invest_source_fixed_sink.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/investment_limit.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/investment_limit_with_dsm_DIW.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/investment_limit_with_dsm_DLR.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/investment_limit_with_dsm_oemof.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/linear_converter.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/linear_converter_chp.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/linear_converter_chp_invest.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/linear_converter_chp_multi_period.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/linear_converter_invest.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/linear_converter_multi_period.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/link.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/max_source_min_sink.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/max_source_min_sink_multi_period.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/maximum_shutdowns.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/maximum_shutdowns_multi_period.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/maximum_startups.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/maximum_startups_multi_period.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/nominal_value_to_zero.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/nominal_value_to_zero_multi_period.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/nonequidistant_timeindex.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/offsetconverter.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/offsetconverter_multi_period.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/offsetconverter_nonconvex.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/offsetconverter_nonconvex_investment.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/periodical_emission_limit.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/piecewise_linear_converter_cc.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/piecewise_linear_converter_cc_multi_period.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/piecewise_linear_converter_dcc.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/piecewise_linear_converter_dcc_multi_period.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/shared_limit.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/shared_limit_multi_period.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/source_with_gradient.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/source_with_gradient_multi_period.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/source_with_nonconvex_gradient.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/source_with_nonconvex_gradient_multi_period.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_fixed_losses.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_fixed_losses_multi_period.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_1.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_2.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_3.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_4.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_5.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_6.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_all_nonconvex.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_minimum.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_unbalanced.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_with_offset.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_without_offset.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_level_constraint.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_multi_period.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_unbalanced.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_unbalanced_multi_period.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/summed_min_source.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/summed_min_source_multi_period.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/variable_chp.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/variable_chp_multi_period.lp +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_console_scripts.py +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_helpers.py +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_oemof_installation_test.py +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_outputlib/input_data.csv +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_outputlib/test_views.py +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_connect_invest/connect_invest.csv +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_generic_caes/generic_caes.csv +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_generic_chp/ccet.csv +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_invest_fix_flow/input_data.csv +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_simple_model/input_data.csv +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_storage_investment/storage_investment.csv +0 -0
- {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_variable_chp/variable_chp.csv +0 -0
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
|
2
2
|
version: 2
|
|
3
3
|
build:
|
|
4
|
+
os: ubuntu-22.04
|
|
5
|
+
tools:
|
|
6
|
+
python: "3.8"
|
|
4
7
|
apt_packages:
|
|
5
8
|
- coinor-cbc
|
|
6
9
|
sphinx:
|
|
7
10
|
configuration: docs/conf.py
|
|
8
11
|
formats: []
|
|
9
12
|
python:
|
|
10
|
-
version: "3.8"
|
|
11
13
|
install:
|
|
12
14
|
- requirements: docs/requirements.txt
|
|
13
15
|
- method: pip
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: oemof.solph
|
|
3
|
-
Version: 0.5.2.
|
|
3
|
+
Version: 0.5.2.dev2
|
|
4
4
|
Summary: A model generator for energy system modelling and optimisation.
|
|
5
5
|
Home-page: https://oemof.org
|
|
6
6
|
Author: oemof developer group
|
|
@@ -9,7 +9,6 @@ License: MIT
|
|
|
9
9
|
Project-URL: Documentation, https://oemof-solph.readthedocs.io/
|
|
10
10
|
Project-URL: Changelog, https://oemof-solph.readthedocs.io/en/latest/changelog.html
|
|
11
11
|
Project-URL: Issue Tracker, https://github.com/oemof/oemof-solph/issues
|
|
12
|
-
Platform: UNKNOWN
|
|
13
12
|
Classifier: Development Status :: 5 - Production/Stable
|
|
14
13
|
Classifier: Intended Audience :: Developers
|
|
15
14
|
Classifier: Intended Audience :: Science/Research
|
|
@@ -28,11 +27,29 @@ Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
|
28
27
|
Classifier: Topic :: Utilities
|
|
29
28
|
Requires-Python: >=3.8
|
|
30
29
|
Description-Content-Type: text/x-rst
|
|
30
|
+
License-File: LICENSE
|
|
31
|
+
License-File: AUTHORS.rst
|
|
32
|
+
Requires-Dist: blinker
|
|
33
|
+
Requires-Dist: dill
|
|
34
|
+
Requires-Dist: numpy
|
|
35
|
+
Requires-Dist: pandas>=1.5.3
|
|
36
|
+
Requires-Dist: pyomo<7.0,>=6.6.0
|
|
37
|
+
Requires-Dist: networkx
|
|
38
|
+
Requires-Dist: oemof.tools>=0.4.2
|
|
39
|
+
Requires-Dist: oemof.network>=0.5.0a1
|
|
31
40
|
Provides-Extra: dev
|
|
41
|
+
Requires-Dist: matplotlib; extra == "dev"
|
|
42
|
+
Requires-Dist: nbformat; extra == "dev"
|
|
43
|
+
Requires-Dist: pytest; extra == "dev"
|
|
44
|
+
Requires-Dist: sphinx; extra == "dev"
|
|
45
|
+
Requires-Dist: sphinx_rtd_theme; extra == "dev"
|
|
46
|
+
Requires-Dist: sphinx-copybutton; extra == "dev"
|
|
47
|
+
Requires-Dist: sphinx-design; extra == "dev"
|
|
48
|
+
Requires-Dist: termcolor; extra == "dev"
|
|
32
49
|
Provides-Extra: examples
|
|
50
|
+
Requires-Dist: matplotlib; extra == "examples"
|
|
33
51
|
Provides-Extra: dummy
|
|
34
|
-
|
|
35
|
-
License-File: AUTHORS.rst
|
|
52
|
+
Requires-Dist: oemof; extra == "dummy"
|
|
36
53
|
|
|
37
54
|
|
|
38
55
|
|tox-pytest| |tox-checks| |appveyor| |coveralls| |codecov|
|
|
@@ -327,5 +344,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
327
344
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
328
345
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
329
346
|
SOFTWARE.
|
|
330
|
-
|
|
331
|
-
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.5.2.dev2"
|
|
@@ -643,8 +643,8 @@ The following example pictures a Pumped Hydroelectric Energy Storage (PHES). Bot
|
|
|
643
643
|
|
|
644
644
|
solph.components.GenericStorage(
|
|
645
645
|
label='PHES',
|
|
646
|
-
inputs={b_el: solph.flows.Flow(
|
|
647
|
-
outputs={b_el: solph.flows.Flow(
|
|
646
|
+
inputs={b_el: solph.flows.Flow(nominal_value=solph.Investment(ep_costs=500))},
|
|
647
|
+
outputs={b_el: solph.flows.Flow(nominal_value=solph.Investment(ep_costs=500)},
|
|
648
648
|
loss_rate=0.001,
|
|
649
649
|
inflow_conversion_factor=0.98, outflow_conversion_factor=0.8),
|
|
650
650
|
investment = solph.Investment(ep_costs=40))
|
|
@@ -912,7 +912,7 @@ turbines.
|
|
|
912
912
|
|
|
913
913
|
solph.components.Source(label='new_wind_pp', outputs={electricity: solph.flows.Flow(
|
|
914
914
|
fix=wind_power_time_series,
|
|
915
|
-
|
|
915
|
+
nominal_value=solph.Investment(ep_costs=epc, maximum=50000))})
|
|
916
916
|
|
|
917
917
|
Let's slightly alter the case and consider for already existing wind power
|
|
918
918
|
capacity of 20,000 kW. We're still expecting the total wind power capacity, thus we
|
|
@@ -922,7 +922,7 @@ allow for 30,000 kW of new installations and formulate as follows.
|
|
|
922
922
|
|
|
923
923
|
solph.components.Source(label='new_wind_pp', outputs={electricity: solph.flows.Flow(
|
|
924
924
|
fix=wind_power_time_series,
|
|
925
|
-
|
|
925
|
+
nominal_value=solph.Investment(ep_costs=epc,
|
|
926
926
|
maximum=30000,
|
|
927
927
|
existing=20000))})
|
|
928
928
|
|
|
@@ -957,7 +957,7 @@ example of a converter:
|
|
|
957
957
|
label='converter_nonconvex',
|
|
958
958
|
inputs={bus_0: solph.flows.Flow()},
|
|
959
959
|
outputs={bus_1: solph.flows.Flow(
|
|
960
|
-
|
|
960
|
+
nominal_value=solph.Investment(
|
|
961
961
|
ep_costs=4,
|
|
962
962
|
maximum=100,
|
|
963
963
|
minimum=20,
|
|
@@ -1004,8 +1004,8 @@ mathematical background, like variables and constraints, which are used.
|
|
|
1004
1004
|
|
|
1005
1005
|
.. _multi_period_mode_label:
|
|
1006
1006
|
|
|
1007
|
-
|
|
1008
|
-
|
|
1007
|
+
Multi-period (investment) mode (experimental)
|
|
1008
|
+
---------------------------------------------
|
|
1009
1009
|
Sometimes you might be interested in how energy systems could evolve in the longer-term, e.g. until 2045 or 2050 to meet some
|
|
1010
1010
|
carbon neutrality and climate protection or RES and energy efficiency targets.
|
|
1011
1011
|
|
|
@@ -1020,7 +1020,7 @@ only unfolds if you look at long-term investments. Let's see how.
|
|
|
1020
1020
|
First, you start by defining your energy system as you might have done before, but you
|
|
1021
1021
|
|
|
1022
1022
|
* choose a longer-term time horizon (spanning multiple years, i.e. multiple periods) and
|
|
1023
|
-
* explicitly define the `periods` attribute of your energy system which
|
|
1023
|
+
* explicitly define the `periods` attribute of your energy system which lists the time steps for each period.
|
|
1024
1024
|
|
|
1025
1025
|
.. code-block:: python
|
|
1026
1026
|
|
|
@@ -1028,10 +1028,10 @@ First, you start by defining your energy system as you might have done before, b
|
|
|
1028
1028
|
import oemof.solph as solph
|
|
1029
1029
|
|
|
1030
1030
|
my_index = pd.date_range('1/1/2013', periods=17520, freq='H')
|
|
1031
|
-
periods =
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1031
|
+
periods = [
|
|
1032
|
+
pd.date_range('1/1/2013', periods=8760, freq='H'),
|
|
1033
|
+
pd.date_range('1/1/2014', periods=8760, freq='H'),
|
|
1034
|
+
]
|
|
1035
1035
|
my_energysystem = solph.EnergySystem(timeindex=my_index, periods=periods)
|
|
1036
1036
|
|
|
1037
1037
|
If you want to use a multi-period model you have define periods of your energy system explicitly. This way,
|
|
@@ -1057,17 +1057,16 @@ and adjust to your needs:
|
|
|
1057
1057
|
|
|
1058
1058
|
Returns
|
|
1059
1059
|
-------
|
|
1060
|
-
periods :
|
|
1061
|
-
|
|
1062
|
-
starting with period 0
|
|
1060
|
+
periods : list
|
|
1061
|
+
periods for the optimization run
|
|
1063
1062
|
"""
|
|
1064
1063
|
years = sorted(list(set(getattr(datetimeindex, "year"))))
|
|
1065
|
-
periods =
|
|
1064
|
+
periods = []
|
|
1066
1065
|
filter_series = datetimeindex.to_series()
|
|
1067
1066
|
for number, year in enumerate(years):
|
|
1068
1067
|
start = filter_series.loc[filter_series.index.year == year].min()
|
|
1069
1068
|
end = filter_series.loc[filter_series.index.year == year].max()
|
|
1070
|
-
periods
|
|
1069
|
+
periods.append(pd.date_range(start, end, freq=datetimeindex.freq))
|
|
1071
1070
|
|
|
1072
1071
|
return periods
|
|
1073
1072
|
|
|
@@ -1144,7 +1143,7 @@ Here is an example
|
|
|
1144
1143
|
inputs={hydrogen_bus: solph.flows.Flow()},
|
|
1145
1144
|
outputs={
|
|
1146
1145
|
electricity_bus: solph.flows.Flow(
|
|
1147
|
-
|
|
1146
|
+
nominal_value=solph.Investment(
|
|
1148
1147
|
maximum=1000,
|
|
1149
1148
|
ep_costs=1e6,
|
|
1150
1149
|
lifetime=30,
|
|
@@ -1178,7 +1177,7 @@ This would mean that for investments in the particular period, these values woul
|
|
|
1178
1177
|
inputs={hydrogen_bus: solph.flows.Flow()},
|
|
1179
1178
|
outputs={
|
|
1180
1179
|
electricity_bus: solph.flows.Flow(
|
|
1181
|
-
|
|
1180
|
+
nominal_value=solph.Investment(
|
|
1182
1181
|
maximum=1000,
|
|
1183
1182
|
ep_costs=[1e6, 1.1e6],
|
|
1184
1183
|
lifetime=30,
|
|
@@ -1269,6 +1268,13 @@ Besides the `invest` variable, new variables are introduced as well. These are:
|
|
|
1269
1268
|
* You can specify periods of different lengths, but the frequency of your timeindex needs to be consistent. Also,
|
|
1270
1269
|
you could use the `timeincrement` attribute of the energy system to model different weightings. Be aware that this
|
|
1271
1270
|
has not yet been tested.
|
|
1271
|
+
* For now, both, the `timeindex` as well as the `timeincrement` of an energy system have to be defined since they
|
|
1272
|
+
have to be of the same length for a multi-period model.
|
|
1273
|
+
* You can choose whether to re-evaluate assets at the end of the optimization horizon. If you set attribute
|
|
1274
|
+
`use_remaining_value` of the energy system to True (defaults to False), this leads to the model evaluating the
|
|
1275
|
+
difference in the asset value at the end of the optimization horizon vs. at the time the investment was made.
|
|
1276
|
+
The difference in value is added to or subtracted from the respective investment costs increment,
|
|
1277
|
+
assuming assets are to be liquidated / re-evaluated at the end of the optimization horizon.
|
|
1272
1278
|
* Also please be aware, that periods correspond to years by default. You could also choose
|
|
1273
1279
|
monthly periods, but you would need to be very careful in parameterizing your energy system and your model and also,
|
|
1274
1280
|
this would mean monthly discounting (if applicable) as well as specifying your plants lifetimes in months.
|
|
@@ -1466,12 +1472,11 @@ This nonlinearity is linearised in the
|
|
|
1466
1472
|
inputs={b_diesel: solph.flows.Flow()},
|
|
1467
1473
|
outputs={
|
|
1468
1474
|
b_el: solph.flows.Flow(
|
|
1469
|
-
nominal_value=None,
|
|
1470
1475
|
variable_costs=0.04,
|
|
1471
1476
|
min=0.2,
|
|
1472
1477
|
max=1,
|
|
1473
1478
|
nonconvex=solph.NonConvex(),
|
|
1474
|
-
|
|
1479
|
+
nominal_value=solph.Investment(
|
|
1475
1480
|
ep_costs=90,
|
|
1476
1481
|
maximum=150, # required for the linearization
|
|
1477
1482
|
),
|
|
@@ -23,8 +23,8 @@ New features
|
|
|
23
23
|
|
|
24
24
|
* Add option to run multi-period (dynamic) investment models with oemof.solph as an experimental feature:
|
|
25
25
|
* You can change from standard model to multi-period model by defining the newly introduced `periods`
|
|
26
|
-
attribute of your energy system. Be aware that it is experimental as of now. `periods` is a
|
|
27
|
-
|
|
26
|
+
attribute of your energy system. Be aware that it is experimental as of now. `periods` is a list
|
|
27
|
+
of the periods you want to model (usually years) given as pandas.date_range objects.
|
|
28
28
|
* Add attributes `periods` to :class:`oemof.solph._energy_system.EnergySystem`.
|
|
29
29
|
* Introduce new Pyomo Sets `PERIODS` and `TIMEINDEX` in :class:`oemof.solph.models.Model`.
|
|
30
30
|
* Index all investment-related variables with `PERIODS` and flow variable with `TIMEINDEX`, which
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
v0.5.2 (????)
|
|
2
|
+
-------------
|
|
3
|
+
|
|
4
|
+
API changes
|
|
5
|
+
###########
|
|
6
|
+
|
|
7
|
+
* New bool attribute `use_remaining_value` of `oemof.solph.EnergySystem`
|
|
8
|
+
* Use list for period definition in multi-period investment optimization.
|
|
9
|
+
|
|
10
|
+
New features
|
|
11
|
+
############
|
|
12
|
+
|
|
13
|
+
* Allow for evaluating differences in the remaining vs. the original value
|
|
14
|
+
for multi-period investments.
|
|
15
|
+
* Allow to define minimum up- and down-time per time step
|
|
16
|
+
|
|
17
|
+
Documentation
|
|
18
|
+
#############
|
|
19
|
+
|
|
20
|
+
Bug fixes
|
|
21
|
+
#########
|
|
22
|
+
|
|
23
|
+
* Fix handling of investment annuities and fixed costs for multi-period models:
|
|
24
|
+
Limit to costs that occur within the optimization horizon to prevent a
|
|
25
|
+
bias towards investments happening earlier in the optimization horizon.
|
|
26
|
+
* Fix bugs in multi-period documentation.
|
|
27
|
+
* Fix y intersect of OffsetConverter
|
|
28
|
+
* Fix minimum uptime being relevant for initial downtime (and vice versa).
|
|
29
|
+
* Fix duplicated discounting of fixed costs for multi-period investment
|
|
30
|
+
|
|
31
|
+
Testing
|
|
32
|
+
#######
|
|
33
|
+
|
|
34
|
+
Other changes
|
|
35
|
+
#############
|
|
36
|
+
|
|
37
|
+
* Improved compatibility with upcoming oemof.network
|
|
38
|
+
|
|
39
|
+
Known issues
|
|
40
|
+
############
|
|
41
|
+
|
|
42
|
+
* Documentation, example and API of OffsetConverter are inconsistent
|
|
43
|
+
and might not work as expected.
|
|
44
|
+
|
|
45
|
+
Contributors
|
|
46
|
+
############
|
|
47
|
+
|
|
48
|
+
* Patrik Schönfeldt
|
|
49
|
+
* Johannes Kochems
|
|
50
|
+
* Julian Endres
|
|
51
|
+
* Hendrik Huyskens
|
|
52
|
+
* Raul Ciria Aylagas
|
|
@@ -62,6 +62,10 @@ class EnergySystem(es.EnergySystem):
|
|
|
62
62
|
For a standard model, periods are not (to be) declared, i.e. None.
|
|
63
63
|
A list with one entry is derived, i.e. [0].
|
|
64
64
|
|
|
65
|
+
use_remaining_value : bool
|
|
66
|
+
If True, compare the remaining value of an investment to the
|
|
67
|
+
original value (only applicable for multi-period models)
|
|
68
|
+
|
|
65
69
|
kwargs
|
|
66
70
|
"""
|
|
67
71
|
|
|
@@ -71,14 +75,17 @@ class EnergySystem(es.EnergySystem):
|
|
|
71
75
|
timeincrement=None,
|
|
72
76
|
infer_last_interval=None,
|
|
73
77
|
periods=None,
|
|
74
|
-
|
|
78
|
+
use_remaining_value=False,
|
|
79
|
+
groupings=None,
|
|
75
80
|
):
|
|
76
81
|
# Doing imports at runtime is generally frowned upon, but should work
|
|
77
82
|
# for now. See the TODO in :func:`constraint_grouping
|
|
78
83
|
# <oemof.solph.groupings.constraint_grouping>` for more information.
|
|
79
84
|
from oemof.solph import GROUPINGS
|
|
80
85
|
|
|
81
|
-
|
|
86
|
+
if groupings is None:
|
|
87
|
+
groupings = []
|
|
88
|
+
groupings = GROUPINGS + groupings
|
|
82
89
|
|
|
83
90
|
if not (
|
|
84
91
|
isinstance(timeindex, pd.DatetimeIndex)
|
|
@@ -133,10 +140,9 @@ class EnergySystem(es.EnergySystem):
|
|
|
133
140
|
else:
|
|
134
141
|
msg = (
|
|
135
142
|
"Ensure that your timeindex and timeincrement are "
|
|
136
|
-
"consistent
|
|
137
|
-
"timeindices, consider only specifying a timeindex."
|
|
143
|
+
"consistent."
|
|
138
144
|
)
|
|
139
|
-
warnings.warn(msg, debugging.
|
|
145
|
+
warnings.warn(msg, debugging.ExperimentalFeatureWarning)
|
|
140
146
|
|
|
141
147
|
elif timeindex is not None and timeincrement is None:
|
|
142
148
|
df = pd.DataFrame(timeindex)
|
|
@@ -151,16 +157,19 @@ class EnergySystem(es.EnergySystem):
|
|
|
151
157
|
if timeincrement is not None and (pd.Series(timeincrement) <= 0).any():
|
|
152
158
|
msg = (
|
|
153
159
|
"The time increment is inconsistent. Negative values and zero "
|
|
154
|
-
"
|
|
160
|
+
"are not allowed.\nThis is caused by a inconsistent "
|
|
155
161
|
"timeincrement parameter or an incorrect timeindex."
|
|
156
162
|
)
|
|
157
163
|
raise TypeError(msg)
|
|
158
164
|
|
|
159
165
|
super().__init__(
|
|
160
|
-
|
|
166
|
+
groupings=groupings,
|
|
167
|
+
timeindex=timeindex,
|
|
168
|
+
timeincrement=timeincrement,
|
|
161
169
|
)
|
|
162
170
|
|
|
163
|
-
|
|
171
|
+
self.periods = periods
|
|
172
|
+
if self.periods is not None:
|
|
164
173
|
msg = (
|
|
165
174
|
"CAUTION! You specified the 'periods' attribute for your "
|
|
166
175
|
"energy system.\n This will lead to creating "
|
|
@@ -170,48 +179,71 @@ class EnergySystem(es.EnergySystem):
|
|
|
170
179
|
"now. If you find anything suspicious or any bugs, "
|
|
171
180
|
"please report them."
|
|
172
181
|
)
|
|
173
|
-
warnings.warn(msg, debugging.
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
182
|
+
warnings.warn(msg, debugging.ExperimentalFeatureWarning)
|
|
183
|
+
self._extract_periods_years()
|
|
184
|
+
self._extract_periods_matrix()
|
|
185
|
+
self._extract_end_year_of_optimization()
|
|
186
|
+
self.use_remaining_value = use_remaining_value
|
|
177
187
|
|
|
178
188
|
def _extract_periods_years(self):
|
|
179
|
-
"""Map
|
|
189
|
+
"""Map years in optimization to respective period based on time indices
|
|
180
190
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
the simulation year of the start of each a period,
|
|
185
|
-
relative to the start of the optimization run and starting with 0
|
|
191
|
+
Attribute `periods_years` of type list is set. It contains
|
|
192
|
+
the year of the start of each period, relative to the
|
|
193
|
+
start of the optimization run and starting with 0.
|
|
186
194
|
"""
|
|
187
195
|
periods_years = [0]
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
periods_years.append(v.min().year - start_year)
|
|
196
|
+
start_year = self.periods[0].min().year
|
|
197
|
+
for k, v in enumerate(self.periods):
|
|
198
|
+
if k >= 1:
|
|
199
|
+
periods_years.append(v.min().year - start_year)
|
|
193
200
|
|
|
194
|
-
|
|
201
|
+
self.periods_years = periods_years
|
|
195
202
|
|
|
196
203
|
def _extract_periods_matrix(self):
|
|
197
204
|
"""Determines a matrix describing the temporal distance to each period.
|
|
205
|
+
|
|
206
|
+
Attribute `periods_matrix` of type list np.array is set.
|
|
198
207
|
Rows represent investment/commissioning periods, columns represent
|
|
199
208
|
decommissioning periods. The values describe the temporal distance
|
|
200
209
|
between each investment period to each decommissioning period.
|
|
210
|
+
"""
|
|
211
|
+
periods_matrix = []
|
|
212
|
+
period_years = np.array(self.periods_years)
|
|
213
|
+
for v in period_years:
|
|
214
|
+
row = period_years - v
|
|
215
|
+
row = np.where(row < 0, 0, row)
|
|
216
|
+
periods_matrix.append(row)
|
|
217
|
+
self.periods_matrix = np.array(periods_matrix)
|
|
218
|
+
|
|
219
|
+
def _extract_end_year_of_optimization(self):
|
|
220
|
+
"""Extract the end of the optimization in years
|
|
221
|
+
|
|
222
|
+
Attribute `end_year_of_optimization` of int is set.
|
|
223
|
+
"""
|
|
224
|
+
duration_last_period = self.get_period_duration(-1)
|
|
225
|
+
self.end_year_of_optimization = (
|
|
226
|
+
self.periods_years[-1] + duration_last_period
|
|
227
|
+
)
|
|
228
|
+
|
|
229
|
+
def get_period_duration(self, period):
|
|
230
|
+
"""Get duration of a period in full years
|
|
231
|
+
|
|
232
|
+
Parameters
|
|
233
|
+
----------
|
|
234
|
+
period : int
|
|
235
|
+
Period for which the duration in years shall be obtained
|
|
201
236
|
|
|
202
237
|
Returns
|
|
203
238
|
-------
|
|
204
|
-
|
|
205
|
-
|
|
239
|
+
int
|
|
240
|
+
Duration of the period
|
|
206
241
|
"""
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
row = np.where(row < 0, 0, row)
|
|
213
|
-
periods_matrix.append(row)
|
|
214
|
-
self.periods_matrix = np.array(periods_matrix)
|
|
242
|
+
return (
|
|
243
|
+
self.periods[period].max().year
|
|
244
|
+
- self.periods[period].min().year
|
|
245
|
+
+ 1
|
|
246
|
+
)
|
|
215
247
|
|
|
216
248
|
|
|
217
249
|
def create_time_index(
|
|
@@ -132,12 +132,21 @@ class BaseModel(po.ConcreteModel):
|
|
|
132
132
|
"constraint_groups", []
|
|
133
133
|
)
|
|
134
134
|
|
|
135
|
-
self.
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
135
|
+
if self.is_cellular:
|
|
136
|
+
for es in energysystem:
|
|
137
|
+
self._constraint_groups += [
|
|
138
|
+
i
|
|
139
|
+
for i in es.groups
|
|
140
|
+
if hasattr(i, "CONSTRAINT_GROUP")
|
|
141
|
+
and i not in self._constraint_groups
|
|
142
|
+
]
|
|
143
|
+
else:
|
|
144
|
+
self._constraint_groups += [
|
|
145
|
+
i
|
|
146
|
+
for i in self.es.groups
|
|
147
|
+
if hasattr(i, "CONSTRAINT_GROUP")
|
|
148
|
+
and i not in self._constraint_groups
|
|
149
|
+
]
|
|
141
150
|
|
|
142
151
|
self.flows = self.es.flows()
|
|
143
152
|
if self.is_cellular:
|
|
@@ -393,12 +402,11 @@ class Model(BaseModel):
|
|
|
393
402
|
"""Add all basic sets to the model, i.e. NODES, TIMESTEPS and FLOWS.
|
|
394
403
|
Also create sets PERIODS and TIMEINDEX used for multi-period models.
|
|
395
404
|
"""
|
|
396
|
-
self.nodes = self.es.nodes
|
|
405
|
+
self.nodes = list(self.es.nodes)
|
|
397
406
|
if self.is_cellular:
|
|
398
407
|
# collect all nodes from the child cells
|
|
399
408
|
for cell in self.ec:
|
|
400
|
-
|
|
401
|
-
self.nodes.append(node)
|
|
409
|
+
self.nodes.extend(cell.nodes)
|
|
402
410
|
# create set with all nodes
|
|
403
411
|
self.NODES = po.Set(initialize=[n for n in self.nodes])
|
|
404
412
|
|
|
@@ -13,7 +13,6 @@ SPDX-FileCopyrightText: Johannes Kochems
|
|
|
13
13
|
SPDX-License-Identifier: MIT
|
|
14
14
|
|
|
15
15
|
"""
|
|
16
|
-
|
|
17
16
|
from oemof.solph._plumbing import sequence
|
|
18
17
|
|
|
19
18
|
|
|
@@ -62,7 +61,7 @@ class Investment:
|
|
|
62
61
|
Units lifetime, given in years; only applicable for multi-period
|
|
63
62
|
models
|
|
64
63
|
age : int, :math:`a`
|
|
65
|
-
Units start age, given in years at the beginning of the
|
|
64
|
+
Units start age, given in years at the beginning of the optimization;
|
|
66
65
|
only applicable for multi-period models
|
|
67
66
|
interest_rate : float, :math:`ir`
|
|
68
67
|
Interest rate for calculating annuities when investing in a particular
|
|
@@ -184,14 +183,14 @@ class NonConvex:
|
|
|
184
183
|
from the actual output.
|
|
185
184
|
inactivity_costs : numeric (iterable or scalar)
|
|
186
185
|
Costs associated with not operating the flow.
|
|
187
|
-
minimum_uptime : numeric (1 or positive integer)
|
|
188
|
-
Minimum time that a flow must be greater then its
|
|
189
|
-
startup. Be aware that minimum up and downtimes
|
|
190
|
-
other and may lead to infeasible problems.
|
|
191
|
-
minimum_downtime : numeric (1 or positive integer)
|
|
192
|
-
Minimum time a flow is forced to zero after
|
|
193
|
-
Be aware that minimum up and downtimes can
|
|
194
|
-
other and may to infeasible problems.
|
|
186
|
+
minimum_uptime : numeric or list of numeric (1 or positive integer)
|
|
187
|
+
Minimum number of time steps that a flow must be greater then its
|
|
188
|
+
minimum flow after startup. Be aware that minimum up and downtimes
|
|
189
|
+
can contradict each other and may lead to infeasible problems.
|
|
190
|
+
minimum_downtime : numeric or list of numeric (1 or positive integer)
|
|
191
|
+
Minimum number of time steps a flow is forced to zero after
|
|
192
|
+
shutting down. Be aware that minimum up and downtimes can
|
|
193
|
+
contradict each other and may to infeasible problems.
|
|
195
194
|
maximum_startups : numeric (0 or positive integer)
|
|
196
195
|
Maximum number of start-ups in the optimization timeframe.
|
|
197
196
|
maximum_shutdowns : numeric (0 or positive integer)
|
|
@@ -199,12 +198,12 @@ class NonConvex:
|
|
|
199
198
|
initial_status : numeric (0 or 1)
|
|
200
199
|
Integer value indicating the status of the flow in the first time step
|
|
201
200
|
(0 = off, 1 = on). For minimum up and downtimes, the initial status
|
|
202
|
-
is set for the respective values in the
|
|
203
|
-
minimum uptime of four timesteps is defined
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
the
|
|
207
|
-
|
|
201
|
+
is set for the respective values in the beginning e.g. if a
|
|
202
|
+
minimum uptime of four timesteps is defined and the initial status is
|
|
203
|
+
set to one, the initial status is fixed for the four first timesteps
|
|
204
|
+
of the optimization period. Otherwise if the initial status is set to
|
|
205
|
+
zero and the first timesteps are fixed for the number of minimum
|
|
206
|
+
downtime steps.
|
|
208
207
|
negative_gradient_limit : numeric (iterable, scalar or None)
|
|
209
208
|
the normed *upper bound* on the positive difference
|
|
210
209
|
(`flow[t-1] < flow[t]`) of two consecutive flow values.
|
|
@@ -232,8 +231,8 @@ class NonConvex:
|
|
|
232
231
|
custom_attributes = {}
|
|
233
232
|
|
|
234
233
|
self.initial_status = initial_status
|
|
235
|
-
self.minimum_uptime = minimum_uptime
|
|
236
|
-
self.minimum_downtime = minimum_downtime
|
|
234
|
+
self.minimum_uptime = sequence(minimum_uptime)
|
|
235
|
+
self.minimum_downtime = sequence(minimum_downtime)
|
|
237
236
|
self.maximum_startups = maximum_startups
|
|
238
237
|
self.maximum_shutdowns = maximum_shutdowns
|
|
239
238
|
|
|
@@ -247,11 +246,7 @@ class NonConvex:
|
|
|
247
246
|
for attribute, value in custom_attributes.items():
|
|
248
247
|
setattr(self, attribute, value)
|
|
249
248
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
The maximum of both is used to set the initial status for this
|
|
255
|
-
number of time steps within the edge regions.
|
|
256
|
-
"""
|
|
257
|
-
return max(self.minimum_uptime, self.minimum_downtime)
|
|
249
|
+
if initial_status == 0:
|
|
250
|
+
self.first_flexible_timestep = self.minimum_downtime[0]
|
|
251
|
+
else:
|
|
252
|
+
self.first_flexible_timestep = self.minimum_uptime[0]
|
|
@@ -61,7 +61,7 @@ class _Sequence(UserList):
|
|
|
61
61
|
--------
|
|
62
62
|
>>> s = _Sequence(default=42)
|
|
63
63
|
>>> len(s)
|
|
64
|
-
|
|
64
|
+
1
|
|
65
65
|
>>> s[1]
|
|
66
66
|
42
|
|
67
67
|
>>> s[2]
|
|
@@ -79,7 +79,7 @@ class _Sequence(UserList):
|
|
|
79
79
|
def __init__(self, *args, **kwargs):
|
|
80
80
|
self.default = kwargs["default"]
|
|
81
81
|
self.default_changed = False
|
|
82
|
-
self.highest_index =
|
|
82
|
+
self.highest_index = 0
|
|
83
83
|
super().__init__(*args)
|
|
84
84
|
|
|
85
85
|
def __getitem__(self, key):
|