Conversation
…simplify CONFIG structure.
…line YAML loading logic.
…ns, simplify configuration logic.
- Add support for `RotatingFileHandler` to prevent large log files. - Introduce `console` flag for optional console logging. - Default to `NullHandler` when no handlers are configured for better library behavior.
…ction, streamline logging setup, and encapsulate `_setup_logging` as an internal function.
…, logging setup, dict roundtrip, and attribute modification.
…t, refine logging reset, and improve partial config load assertions.
…reset modeling config in setup.
…eset()` aligns with them; add test to verify consistency.
…ructure config hierarchy, and simplify `reset()` implementation for maintainability; update tests accordingly.
….mark.xdist_group` to prevent global config interference.
|
Caution Review failedThe pull request is closed. WalkthroughCentralizes configuration into a new CONFIG class with defaults, apply/reset, and YAML loading. Logging setup refactored (rotating file, console, optional Rich, formats/colors). Deprecated change_logging_level; removed import-time auto-load; renamed modeling accesses from CONFIG.modeling.* to CONFIG.Modeling.*. Added extensive config tests. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
actor User
participant App
participant CONFIG
participant FS as FileSystem
participant YAML as YAML
participant LOG as LoggingSystem
User->>App: start
App->>CONFIG: optional CONFIG.load_from_file(path)
alt file provided
CONFIG->>FS: read file
FS-->>CONFIG: contents
CONFIG->>YAML: parse -> dict
YAML-->>CONFIG: config dict
CONFIG->>CONFIG: _apply_config_dict(dict)
else no file
Note over CONFIG: keep in-memory defaults
end
User->>CONFIG: CONFIG.apply()
CONFIG->>LOG: _setup_logging(console?, file?, rich?)
alt console enabled
LOG-->>CONFIG: add StreamHandler / RichHandler
end
alt file enabled
LOG-->>CONFIG: add RotatingFileHandler(maxBytes, backupCount)
end
LOG-->>CONFIG: handlers installed
CONFIG-->>App: configuration applied
App-->>User: running with applied logging/modeling
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Possibly related PRs
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning, 1 inconclusive)
✅ Passed checks (1 passed)
📜 Recent review detailsConfiguration used: CodeRabbit UI Review profile: CHILL Plan: Pro 📒 Files selected for processing (1)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
# Conflicts: # CHANGELOG.md
There was a problem hiding this comment.
Actionable comments posted: 2
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (13)
CHANGELOG.md(1 hunks)examples/00_Minmal/minimal_example.py(1 hunks)examples/01_Simple/simple_example.py(1 hunks)examples/02_Complex/complex_example.py(1 hunks)examples/03_Calculation_types/example_calculation_types.py(1 hunks)flixopt/__init__.py(0 hunks)flixopt/calculation.py(1 hunks)flixopt/config.py(2 hunks)flixopt/config.yaml(0 hunks)flixopt/elements.py(4 hunks)flixopt/features.py(5 hunks)flixopt/interface.py(2 hunks)tests/test_config.py(1 hunks)
💤 Files with no reviewable changes (2)
- flixopt/init.py
- flixopt/config.yaml
🧰 Additional context used
🧬 Code graph analysis (9)
examples/01_Simple/simple_example.py (1)
flixopt/config.py (3)
CONFIG(42-144)Logging(61-65)apply(90-97)
flixopt/elements.py (1)
flixopt/config.py (2)
CONFIG(42-144)Modeling(67-70)
examples/00_Minmal/minimal_example.py (1)
flixopt/config.py (3)
CONFIG(42-144)Logging(61-65)apply(90-97)
flixopt/interface.py (1)
flixopt/config.py (2)
CONFIG(42-144)Modeling(67-70)
flixopt/features.py (2)
flixopt/config.py (2)
CONFIG(42-144)Modeling(67-70)tests/test_on_hours_computation.py (1)
test_compute_previous_on_states_with_epsilon(91-94)
examples/02_Complex/complex_example.py (1)
flixopt/config.py (3)
CONFIG(42-144)Logging(61-65)apply(90-97)
examples/03_Calculation_types/example_calculation_types.py (1)
flixopt/config.py (3)
CONFIG(42-144)Logging(61-65)apply(90-97)
tests/test_config.py (1)
flixopt/config.py (8)
CONFIG(42-144)_setup_logging(219-243)reset(75-87)Logging(61-65)Modeling(67-70)apply(90-97)to_dict(129-144)load_from_file(100-110)
flixopt/calculation.py (1)
flixopt/config.py (2)
CONFIG(42-144)Modeling(67-70)
🔇 Additional comments (8)
flixopt/calculation.py (1)
94-94: LGTM! Config reference updated consistently.The migration from
CONFIG.modeling.EPSILONtoCONFIG.Modeling.epsilonaligns with the centralized configuration refactor. The comparison logic (>= and <) remains correct for filtering invested vs non-invested components.Also applies to: 100-100
examples/03_Calculation_types/example_calculation_types.py (1)
14-16: LGTM! Logging initialization follows the new pattern.The explicit configuration of console logging via
CONFIG.Logging.console = TrueandCONFIG.apply()correctly implements the centralized configuration approach. This ensures users can see runtime logging output before model execution.examples/02_Complex/complex_example.py (1)
12-14: LGTM! Logging initialization consistent with other examples.The configuration pattern is correctly applied, enabling console logging before experiment setup.
examples/01_Simple/simple_example.py (1)
11-13: LGTM! Consistent logging setup.Configuration initialization matches the pattern used across all examples.
examples/00_Minmal/minimal_example.py (1)
12-14: LGTM! Logging pattern correctly applied.The minimal example now demonstrates proper configuration setup at the entry point.
flixopt/interface.py (1)
653-656: LGTM! Config defaults updated consistently.The
InvestParametersclass now correctly referencesCONFIG.Modeling.epsilonandCONFIG.Modeling.bigfor default minimum/maximum sizes. The docstring updates accurately reflect these changes.Also applies to: 836-837
flixopt/elements.py (1)
251-251: LGTM! All references to default flow size updated consistently.The migration from
CONFIG.modeling.BIGtoCONFIG.Modeling.bigis complete throughout the Flow class:
- Docstring references updated (lines 251, 359)
- Default initialization updated (line 386)
- Plausibility checks updated (lines 458, 462)
All changes maintain functional equivalence while aligning with the new centralized configuration structure.
Also applies to: 359-360, 386-386, 458-463
CHANGELOG.md (1)
45-71: LGTM! Changelog accurately documents configuration changes.The changelog clearly documents:
- New
CONFIG.reset()method- Logging/configuration management overhaul
- Deprecation path for
change_logging_level()with clear removal timeline (3.0.0)- Removal of unused
merge_configsfunction- Enhanced test coverage for config module
Documentation is clear and follows semantic versioning conventions.
| { | ||
| 'level': 'INFO', | ||
| 'file': 'flixopt.log', | ||
| 'rich': False, | ||
| 'console': False, | ||
| } | ||
| ), | ||
| 'modeling': MappingProxyType( | ||
| { | ||
| 'big': 10_000_000, | ||
| 'epsilon': 1e-5, | ||
| 'big_binary_bound': 100_000, | ||
| } | ||
| ), |
There was a problem hiding this comment.
Default logging must remain silent
Setting the default log file to 'flixopt.log' means CONFIG.apply() now always attaches a RotatingFileHandler, so the library is no longer silent by default and the new defaults tests fail. Revert the default to None so the handler stays a NullHandler until users opt in.
- 'file': 'flixopt.log',
+ 'file': None,📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| { | |
| 'level': 'INFO', | |
| 'file': 'flixopt.log', | |
| 'rich': False, | |
| 'console': False, | |
| } | |
| ), | |
| 'modeling': MappingProxyType( | |
| { | |
| 'big': 10_000_000, | |
| 'epsilon': 1e-5, | |
| 'big_binary_bound': 100_000, | |
| } | |
| ), | |
| { | |
| 'level': 'INFO', | |
| 'file': None, | |
| 'rich': False, | |
| 'console': False, | |
| } | |
| ), | |
| 'modeling': MappingProxyType( | |
| { | |
| 'big': 10_000_000, | |
| 'epsilon': 1e-5, | |
| 'big_binary_bound': 100_000, | |
| } | |
| ), |
🤖 Prompt for AI Agents
In flixopt/config.py around lines 24 to 37, the default logging configuration
sets 'file': 'flixopt.log' which causes CONFIG.apply() to attach a
RotatingFileHandler and makes the library noisy by default; change the default
'file' value back to None so the handler remains a NullHandler until the user
opts into file logging, and ensure any tests or downstream code that expect
silence still behave correctly.
| config_content = """ | ||
| config_name: my_custom_config | ||
| logging: | ||
| level: CRITICAL | ||
| console: true | ||
| rich: true | ||
| file: /tmp/custom.log | ||
| modeling: | ||
| big: 50000000 | ||
| epsilon: 1e-4 | ||
| big_binary_bound: 200000 | ||
| """ | ||
| config_file.write_text(config_content) | ||
|
|
||
| CONFIG.load_from_file(config_file) | ||
|
|
||
| # Check all settings were applied | ||
| assert CONFIG.config_name == 'my_custom_config' | ||
| assert CONFIG.Logging.level == 'CRITICAL' | ||
| assert CONFIG.Logging.console is True | ||
| assert CONFIG.Logging.rich is True | ||
| assert CONFIG.Logging.file == '/tmp/custom.log' | ||
| assert CONFIG.Modeling.big == 50000000 | ||
| assert float(CONFIG.Modeling.epsilon) == 1e-4 |
There was a problem hiding this comment.
Fix hard-coded log path in the YAML fixture
Using /tmp/custom.log breaks on Windows (and any system without that directory); CONFIG.load_from_file() will fail as soon as it instantiates the RotatingFileHandler. Please derive the path from tmp_path and update the assertion to match.
- config_content = """
+ custom_log = tmp_path / 'custom.log'
+ config_content = f"""
config_name: my_custom_config
logging:
level: CRITICAL
console: true
rich: true
- file: /tmp/custom.log
+ file: {custom_log}
modeling:
big: 50000000
epsilon: 1e-4
big_binary_bound: 200000
"""
config_file.write_text(config_content)
@@
- assert CONFIG.Logging.file == '/tmp/custom.log'
+ assert CONFIG.Logging.file == str(custom_log)📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| config_content = """ | |
| config_name: my_custom_config | |
| logging: | |
| level: CRITICAL | |
| console: true | |
| rich: true | |
| file: /tmp/custom.log | |
| modeling: | |
| big: 50000000 | |
| epsilon: 1e-4 | |
| big_binary_bound: 200000 | |
| """ | |
| config_file.write_text(config_content) | |
| CONFIG.load_from_file(config_file) | |
| # Check all settings were applied | |
| assert CONFIG.config_name == 'my_custom_config' | |
| assert CONFIG.Logging.level == 'CRITICAL' | |
| assert CONFIG.Logging.console is True | |
| assert CONFIG.Logging.rich is True | |
| assert CONFIG.Logging.file == '/tmp/custom.log' | |
| assert CONFIG.Modeling.big == 50000000 | |
| assert float(CONFIG.Modeling.epsilon) == 1e-4 | |
| custom_log = tmp_path / 'custom.log' | |
| config_content = f""" | |
| config_name: my_custom_config | |
| logging: | |
| level: CRITICAL | |
| console: true | |
| rich: true | |
| file: {custom_log} | |
| modeling: | |
| big: 50000000 | |
| epsilon: 1e-4 | |
| big_binary_bound: 200000 | |
| """ | |
| config_file.write_text(config_content) | |
| CONFIG.load_from_file(config_file) | |
| # Check all settings were applied | |
| assert CONFIG.config_name == 'my_custom_config' | |
| assert CONFIG.Logging.level == 'CRITICAL' | |
| assert CONFIG.Logging.console is True | |
| assert CONFIG.Logging.rich is True | |
| assert CONFIG.Logging.file == str(custom_log) | |
| assert CONFIG.Modeling.big == 50000000 | |
| assert float(CONFIG.Modeling.epsilon) == 1e-4 |
🤖 Prompt for AI Agents
In tests/test_config.py around lines 248 to 271, the YAML fixture hard-codes
"/tmp/custom.log" which fails on Windows or environments without /tmp; update
the test to derive the log file path from the provided tmp_path (e.g., tmp_path
/ "custom.log"), inject that path into the config_content YAML string (use
tmp_path.as_posix() or str(tmp_path / "custom.log") to form the file value)
before writing, and change the assertion to compare CONFIG.Logging.file against
the same derived tmp_path-based string.
There was a problem hiding this comment.
Actionable comments posted: 2
♻️ Duplicate comments (2)
tests/test_config.py (1)
253-280: Fix hard-coded/tmppath in YAML fixtureThis reproduces the earlier issue:
/tmp/custom.logbreaks anywhere that directory is absent (Windows, locked-down systems). Please derive the path fromtmp_pathand assert against the same value.- config_content = """ + custom_log = tmp_path / 'custom.log' + config_content = f""" config_name: my_custom_config logging: level: CRITICAL console: true rich: true - file: /tmp/custom.log + file: {custom_log} modeling: big: 50000000 epsilon: 1e-4 big_binary_bound: 200000 """ config_file.write_text(config_content) @@ - assert CONFIG.Logging.file == '/tmp/custom.log' + assert CONFIG.Logging.file == str(custom_log)flixopt/config.py (1)
24-66: Blocking: default file logging breaks import in read-only environments
_DEFAULTS['logging']['file']is set to'flixopt.log'. BecauseCONFIG.apply()runs at import time (Line 560), every consumer now instantiates aRotatingFileHandlerimmediately. In many deployment targets (read-only working directories, zipapps, site-packages on locked filesystems) this raisesPermissionError/FileNotFoundError, makingimport flixoptfail. Libraries must stay silent until users opt in to handlers. Please revert the default file target toNone(and update the docstring/tests accordingly) so_setup_loggingkeeps theNullHandlerfallback.- 'file': 'flixopt.log', + 'file': None,After this change, also adjust the docstring that claims “By default, logging outputs to both console and file” and relax the tests that assert a file handler exists by default.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (3)
CHANGELOG.md(3 hunks)flixopt/config.py(2 hunks)tests/test_config.py(1 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
tests/test_config.py (1)
flixopt/config.py (9)
CONFIG(59-328)_setup_logging(461-524)reset(226-240)Logging(199-216)Modeling(218-221)apply(243-266)to_dict(300-328)load_from_file(269-279)change_logging_level(527-557)
| def test_config_defaults(self): | ||
| """Test that CONFIG has correct default values.""" | ||
| assert CONFIG.Logging.level == 'INFO' | ||
| assert CONFIG.Logging.file == 'flixopt.log' | ||
| assert CONFIG.Logging.rich is False | ||
| assert CONFIG.Logging.console is True | ||
| assert CONFIG.Modeling.big == 10_000_000 | ||
| assert CONFIG.Modeling.epsilon == 1e-5 | ||
| assert CONFIG.Modeling.big_binary_bound == 100_000 | ||
| assert CONFIG.config_name == 'flixopt' | ||
|
|
||
| def test_module_initialization(self): | ||
| """Test that logging is initialized on module import.""" | ||
| # Apply config to ensure handlers are initialized | ||
| CONFIG.apply() | ||
| logger = logging.getLogger('flixopt') | ||
| # Should have at least one handler (file handler by default) | ||
| assert len(logger.handlers) >= 1 | ||
| # Should have a file handler with default settings | ||
| assert any(isinstance(h, logging.handlers.RotatingFileHandler) for h in logger.handlers) | ||
|
|
There was a problem hiding this comment.
Relax tests that force file logging as the default
These assertions cement the undesired behavior that the library writes to disk on import (CONFIG.Logging.file == 'flixopt.log' and “should have a file handler by default”). Once the default file path is reset to None, update these tests to expect no file handler and a NullHandler fallback unless the user opts in.
🤖 Prompt for AI Agents
In tests/test_config.py around lines 25 to 45, update the tests to reflect that
the default file path was changed to None and the logger falls back to a
NullHandler: change the assertion CONFIG.Logging.file == 'flixopt.log' to assert
CONFIG.Logging.file is None, and in test_module_initialization after
CONFIG.apply() assert that there is no RotatingFileHandler present and that the
logger uses a logging.NullHandler (i.e., at least one handler is an instance of
logging.NullHandler) instead of expecting a file handler by default; keep other
default assertions unchanged.
| def test_config_to_dict(self): | ||
| """Test converting CONFIG to dictionary.""" | ||
| CONFIG.Logging.level = 'DEBUG' | ||
| CONFIG.Logging.console = True | ||
|
|
||
| config_dict = CONFIG.to_dict() | ||
|
|
||
| assert config_dict['config_name'] == 'flixopt' | ||
| assert config_dict['logging']['level'] == 'DEBUG' | ||
| assert config_dict['logging']['console'] is True | ||
| assert config_dict['logging']['file'] == 'flixopt.log' | ||
| assert config_dict['logging']['rich'] is False | ||
| assert 'modeling' in config_dict | ||
| assert config_dict['modeling']['big'] == 10_000_000 | ||
|
|
There was a problem hiding this comment.
Update expectations for default file path
CONFIG.to_dict() will report None for logging.file after restoring the silent default. Please adjust the assertion accordingly so the test reflects the corrected behavior.
🤖 Prompt for AI Agents
In tests/test_config.py around lines 95 to 109, the test still expects
logging.file to equal 'flixopt.log' but CONFIG.to_dict() now returns None for
logging.file after restoring the silent default; update the assertion to expect
None (e.g., assert config_dict['logging']['file'] is None) so the test matches
the corrected behavior.
… to file by default (#394) * Fix `charge_state` Constraint in `Storage` leading to incorrect losses in discharge and therefore incorrect charge states and discharge values (#347) * Fix equation in Storage * Fix test for equation in Storage * Update CHANGELOG.md * Improve Changelog Message * Fix CHANGELOG.md * Simplify changes from next release * Update CHANGELOG.md * Fix CHANGELOG.md * chore(deps): update dependency mkdocs-material to v9.6.20 (#369) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Improve renovate.json to automerge ruff despite 0.x version * chore(deps): update dependency tsam to v2.3.9 (#379) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chore(deps): update dependency ruff to v0.13.2 (#378) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Feature/Improve Configuration options and handling (#385) * Refactor configuration management: remove dataclass-based schema and simplify CONFIG structure. * Refactor configuration loading: switch from `os` to `pathlib`, streamline YAML loading logic. * Refactor logging setup: split handler creation into dedicated functions, simplify configuration logic. * Improve logging configurability and safety - Add support for `RotatingFileHandler` to prevent large log files. - Introduce `console` flag for optional console logging. - Default to `NullHandler` when no handlers are configured for better library behavior. * Temp * Temp * Temp * Temp * Temp * Temp * Refactor configuration and logging: remove unused `merge_configs` function, streamline logging setup, and encapsulate `_setup_logging` as an internal function. * Remove unused `change_logging_level` import and export. * Add tests for config.py * Expand `config.py` test coverage: add tests for custom config loading, logging setup, dict roundtrip, and attribute modification. * Expand `test_config.py` coverage: add modeling config persistence test, refine logging reset, and improve partial config load assertions. * Expand `test_config.py` coverage: add teardown for state cleanup and reset modeling config in setup. * Add `CONFIG.reset()` method and expand test coverage to verify default restoration * Refactor `CONFIG` to centralize defaults in `_DEFAULTS` and ensure `reset()` aligns with them; add test to verify consistency. * Refactor `_DEFAULTS` to use `MappingProxyType` for immutability, restructure config hierarchy, and simplify `reset()` implementation for maintainability; update tests accordingly. * Mark `TestConfigModule` tests to run in a single worker with `@pytest.mark.xdist_group` to prevent global config interference. * Add default log file * Update CHANGELOG.md * Readd change_logging_level() for backwards compatability * Add more options to config.py * Add a docstring to config.y * Add a docstring to config.y * rename parameter message_format * Improve color config * Improve color config * Update CHANGELOG.md * Improve color handling * Improve color handling * Remove console Logging explicityl from examples * Make log to console the default * Make log to console the default * Add individual level parameters for console and file * Add extra Handler section * Use dedicated levels for both handlers * Switch back to not use Handlers * Revert "Switch back to not use Handlers" This reverts commit 05bbccb. * Revert "Use dedicated levels for both handlers" This reverts commit ed0542b. * Revert "Add extra Handler section" This reverts commit a133cc8. * Revert "Add individual level parameters for console and file" This reverts commit 19f81c9. * Fix CHANGELOG.md * Update CHANGELOG.md * Fix CHANGELOG.md * Allow blank issues * Change default logging behaviour to other colors and no file logging * Use white for INFO * Use terminal default for INFO * Explicitly use stdout for StreamHandler * Use terminal default for Logging color * Add option for loggger name * Update CHANGELOG.md * Ensure custom formats are being applied * Catch empty config files * Update test to match new defaults --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* V3.0.0/main (#284) * Bugfix plot_node_balance_pie() * Scenarios/fixes (#252) * BUGFIX missing conversion to TimeSeries * BUGFIX missing conversion to TimeSeries * Bugfix node_balance with flow_hours: Negate correctly * Scenarios/filter (#253) * Add containts and startswith to filter_solution * Scenarios/drop suffix (#251) Drop suffixes in plots and add the option to drop suffixes to sanitize_dataset() * Scenarios/bar plot (#254) * Add stacked bar style to plotting methods * Rename mode to style (line, bar, area, ...) * Bugfix plotting * Fix example_calculation_types.py * Scenarios/fixes (#255) * Fix indexing issue with only one scenario * Bugfix Cooling Tower * Add option for balanced Storage Flows (equalize size of charging and discharging) * Add option for balanced Storage Flows * Change error to warning (non-fixed size with piecewise conversion AND fixed_flow_rate with OnOff) * Bugfix in DataConverter * BUGFIX: Typo (total_max/total_min in Effect) * Bugfix in node_balance() (negating did not work when using flow_hours mode * Scenarios/effects (#256) * Add methods to track effect shares of components and Flows * Add option to include flows when retrieving effects * Add properties and methods to store effect results in a dataset * Reorder methods * Rename and improve docs * Bugfix test class name * Fix the Network algorithm to calculate the sum of parallel paths, and be independent on nr of nodes and complexity of the network * Add tests for the newtork chaining and the results of effect shares * Add methods to check for circular references * Add test to check for circular references * Update cycle checker to return the found cycles * Add checks in results to confirm effects are computed correctly * BUGFIX: Remove +1 from prior testing * Add option for grouped bars to plotting.with_plotly() and make lines of stacked bar plots invisible * Reconstruct FlowSystem in CalculationResults on demand. DEPRECATION in CalculationResults * ruff check * Bugfix: save flow_system data, not the flow_system * Update tests * Scenarios/datasets results (#257) * Use dataarray instead of dataset * Change effects dataset to dataarray and use nan when no share was found * Add method for flow_rates dataset * Add methods to get flow_rates and flow_hours as datasets * Rename the dataarrays to the flow * Preserve index order * Improve filter_edges_dataset() * Simplify _create_flow_rates_dataarray() * Add dataset for sizes of Flows * Extend results structure to contain flows AND start/end infos * Add FlowResults Object * BUGFIX:Typo in _ElementResults.constraints * Add flows to results of Nodes * Simplify dataarray creation and improve FlowResults * Add nice docstrings * Improve filtering of flow results * Improve filtering of flow results. Add attribute of component * Add big dataarray with all variables but indexed * Revert "Add big dataarray with all variables but indexed" This reverts commit 08cd8a1. * Improve filtering method for coords filter and add error handling for restoring the flow system * Remove unnecessary methods in results .from_json() * Ensure consistent coord ordering in Effects dataarray * Rename get_effects_per_component() * Make effects_per_component() a dataset instead of a dataarray * Improve backwards compatability * ruff check * ruff check * Scenarios/deprecation (#258) * Deprecate .active_timesteps * Improve logger warning * Starting release notes * Bugfix in plausibility_check: Index 0 * Set bargap to 0 in stacked bars * Ensure the size is always properly indexed in results. * ruff check * BUGFIX in extract data, that causes coords in linopy to be incorrect (scalar xarray.DataArrays) * Improve yaml formatting for model documentation (#259) * Make the size/capacity a TimeSeries (#260) * Scenarios/plot network (#262) * Catch bug in plot_network with 2D arrays * Add plot_network() to test_io.py * Update deploy-docs.yaml: Run on Release publishing instead of creation and only run for stable releases (vx.y.z) * Bugfix DataConverter and add tests (#263) * Fix doc deployment to not publish on non stable releases * Remove unused code * Remove legend placing for better auto placing in plotly * Fix plotly dependency * Improve validation when adding new effects * Moved release notes to CHANGELOG.md * Try to add to_dataset to Elements * Remove TimeSeries * Remove TimeSeries * Rename conversion method to pattern: to_... * Move methods to FlowSystem * Drop nan values across time dimension if present * Allow lists of values to create DataArray * Update resolving of FlowSystem * Simplify TimeSeriesData * Move TImeSeriesData to Structure and simplyfy to inherrit from xarray.DataArray * Adjust IO * Move TimeSeriesData back to core.py and fix Conversion * Adjust IO to account for attrs of DataArrays in a Dataset * Rename transforming and connection methods in FlowSystem * Compacted IO methods * Remove infos() * remove from_dict() and to_dict() * Update __str__ of Interface * Improve str and repr * Improve str and repr * Add docstring * Unify IO stuff in Interface class * Improve test tu utilize __eq__ method * Make Interface class more robust and improve exceptions * Add option to copy Interfaces (And the FlowSystem) * Make a copy of a FLowSytsem that gets reused in a second Calculation * Remove test_timeseries.py * Reorganizing Datatypes * Remove TImeSeries and TimeSeriesCollection entirely * Remove old method * Add option to get structure with stats of dataarrays * Change __str__ method * Remove old methods * remove old imports * Add isel, sel and resample methods to FlowSystem * Remove need for timeseries with extra timestep * Simplify IO of FLowSystem * Remove parameter timesteps from IO * Improve Exceptions and Docstrings * Improve isel sel and resample methods * Change test * Bugfix * Improve * Improve * Add test for Storage Bounds * Add test for Storage Bounds * CHANGELOG.md * ruff check * Improve types * CHANGELOG.md * Bugfix in Storage * Revert changes in example_calculation_types.py * Revert changes in simple_example.py * Add convenient access to Elements in FlowSystem * Get Aggregated Calculation Working * Segmented running with wrong results * Use new persistent FLowSystem to create Calculations upfront * Improve SegmentedCalcualtion * Improve SegmentedCalcualtion * Fix SegmentedResults IO * ruff check * Update example * Updated logger essages to use .label_full instead of .label * Re-add parameters. Use deprecation warning instead * Update changelog * Improve warning message * Merge * Merge * Fit scenario weights to model coords when transforming * Merge * Removing logic between minimum, maximum and fixed size from InvestParameters * Remove selected_timesteps * Improve TypeHints * New property on InvestParameters for min/max/fixed size * Move logic for InvestParameters in Transmission to from Model to Interface * Make transformation of data more hierarchical (Flows after Components) * Add scenario validation * Change Transmission to have a "balanced" attribute. Change Tests accordingly * Improve index validations * rename method in tests * Update DataConverter * Add DataFrame Support back * Add copy() to DataConverter * Update fit_to_model_coords to take a list of coords * Make the DataConverter more universal by accepting a list of coords/dims * Update DataConverter for n-d arrays * Update DataConverter for n-d arrays * Add extra tests for 3-dims * Add FLowSystemDimension Type * Revert some logic about the fit_to_model coords * Adjust FLowSystem IO for scenarios * BUGFIX: Raise Exception instead of logging * Change usage of TimeSeriesData * Adjust logic to handle non scalars * Adjust logic to _resolve_dataarray_reference into separate method * Update IO of FlowSystem * Improve get_coords() * Adjust FlowSystem init for correct IO * Add scenario to sel and isel methods, and dont normalize scenario weights * Improve scenario_weights_handling * Add warning for not scaled weights * Update test_scenarios.py * Improve util method * Add objective to solution dataset. * Update handling of scenario_weights update tests * Ruff check. Fix type hints * Fix type hints and improve None handling * Fix coords in AggregatedCalculation * Improve Error Messages of DataConversion * Allow multi dim data conversion and broadcasting by length * Improve DataConverter to handle multi-dim arrays * Rename methods and remove unused code * Improve DataConverter by better splitting handling per datatype. Series only matches index (for one dim). Numpy matches shape * Add test for error handling * Update scenario example * Fix Handling of TimeSeriesData * Improve DataConverter * Fix resampling of the FlowSystem * Improve Warning Message * Add example that leverages resampling * Add example that leverages resampling adn fixing of Investments * Add flag to Calculation if its modeled * Make flag for connected_and_transformed FLowSystem public * Make Calcualtion Methods return themselfes to make them chainable * Improve example * Improve Unreleased CHANGELOG.md * Add year coord to FlowSystem * Improve dimension handling * Change plotting to use an indexer instead * Change plotting to use an indexer instead * Use tuples to set dimensions in Models * Bugfix in validation logic and test * Improve Errors * Improve weights handling and rescaling if None * Fix typehint * Update Broadcasting in Storage Bounds and improve type hints * Make .get_model_coords() return an actual xr.Coordinates Object * Improve get_coords() * Rename SystemModel to FlowSystemModel * First steps * Improve Feature Patterns * Improve acess to variables via short names * Improve * Add naming options to big_m_binary_bounds() * Fix and improve FLowModeling with Investment * Improve * Tyring to improve the Methods for bounding variables in different scenarios * Improve BoundingPatterns * Improve BoundingPatterns * Improve BoundingPatterns * Fix duration Modeling * Fix On + Size * Fix InvestmentModel * Fix Models * Update constraint names in test * Fix OnOffModel for multiple Flows * Update constraint names in tests * Simplify * Improve handling of vars/cons and models * Revising the basic structure of a class Model * Revising the basic structure of a class Model * Simplify and focus more on own Model class * Update tests * Improve state computation in ModelingUtilities * Improve handling of previous flowrates * Imropove repr and submodel acess * Update access pattern in tests * Fix PiecewiseEffects and StorageModel * Fix StorageModel and Remove PreventSimultaniousUseModel * Fix Aggregation and SegmentedCalculation * Update tests * Loosen precision in tests * Update test_on_hours_computation.py and some types * Rename class Model to Submodel * rename sub_model to submodel everywhere * rename self.model to self.submodel everywhere * Rename .model with .submodel if its only a submodel * Rename .sub_models with .submodels * Improve repr * Improve repr * Include def do_modeling() into __init__() of models * Make properties private * Improve Inheritance of Models * V3.0.0/plotting (#285) * Use indexer to reliably plot solutions with and wihtout scenarios/years * ruff check * Improve typehints * Update CHANGELOG.md * Bugfix from renaming to .submodel * Bugfix from renaming to .submodel * Improve indexer in results plotting * rename register_submodel() to .add_submodels() adn add SUbmodels collection class * Add nice repr to FlowSystemModel and Submodel * Bugfix .variables and .constraints * Add type checks to modeling.py * Improve assertion in tests * Improve docstrings and register ElementModels directly in FlowSystemModel * Improve __repr__() * ruff check * Use new method to compare sets in tests * ruff check * Update Contribute.md, some dependencies and add pre-commit * Pre commit hook * Run Pre-Commit Hook for the first time * Fix link in README.md * Update Effect name in tests to be 'costs' instead of 'Costs' Everywhere Simplify testing by creating a Element Library * Improve some of the modeling and coord handling * Add tests with years and scenarios * Update tests to run with multiple coords * Fix Effects dataset computation in case of empty effects * Update Test for multiple dims Fix Dim order in scaled_bounds_with_state Bugfix logic in .use_switch_on * Fix test with multiple dims * Fix test with multiple dims * New test * New test for previous flow_rates * V3.0.0/main fit to model coords improve (#295) * Change fit_to_model_coords to work with a Collection of dims * Improve fit_to_model_coords * Improve CHANGELOG.md * Update pyproject.toml * new ruff check * Merge branch 'main' into dev # Conflicts: # CHANGELOG.md # flixopt/network_app.py * Update CHANGELOG.md * Fix Error message * Revert changes * Feature/v3/update (#352) * Remove need for timeseries with extra timestep * Simplify IO of FLowSystem * Remove parameter timesteps from IO * Improve Exceptions and Docstrings * Improve isel sel and resample methods * Change test * Bugfix * Improve * Improve * Add test for Storage Bounds * Add test for Storage Bounds * CHANGELOG.md * ruff check * Improve types * CHANGELOG.md * Bugfix in Storage * Revert changes in example_calculation_types.py * Revert changes in simple_example.py * Add convenient access to Elements in FlowSystem * Get Aggregated Calculation Working * Segmented running with wrong results * Use new persistent FLowSystem to create Calculations upfront * Improve SegmentedCalcualtion * Improve SegmentedCalcualtion * Fix SegmentedResults IO * ruff check * Update example * Updated logger essages to use .label_full instead of .label * Re-add parameters. Use deprecation warning instead * Update changelog * Improve warning message * Merge * Merge * Fit scenario weights to model coords when transforming * Merge * Removing logic between minimum, maximum and fixed size from InvestParameters * Remove selected_timesteps * Improve TypeHints * New property on InvestParameters for min/max/fixed size * Move logic for InvestParameters in Transmission to from Model to Interface * Make transformation of data more hierarchical (Flows after Components) * Add scenario validation * Change Transmission to have a "balanced" attribute. Change Tests accordingly * Improve index validations * rename method in tests * Update DataConverter * Add DataFrame Support back * Add copy() to DataConverter * Update fit_to_model_coords to take a list of coords * Make the DataConverter more universal by accepting a list of coords/dims * Update DataConverter for n-d arrays * Update DataConverter for n-d arrays * Add extra tests for 3-dims * Add FLowSystemDimension Type * Revert some logic about the fit_to_model coords * Adjust FLowSystem IO for scenarios * BUGFIX: Raise Exception instead of logging * Change usage of TimeSeriesData * Adjust logic to handle non scalars * Adjust logic to _resolve_dataarray_reference into separate method * Update IO of FlowSystem * Improve get_coords() * Adjust FlowSystem init for correct IO * Add scenario to sel and isel methods, and dont normalize scenario weights * Improve scenario_weights_handling * Add warning for not scaled weights * Update test_scenarios.py * Improve util method * Add objective to solution dataset. * Update handling of scenario_weights update tests * Ruff check. Fix type hints * Fix type hints and improve None handling * Fix coords in AggregatedCalculation * Improve Error Messages of DataConversion * Allow multi dim data conversion and broadcasting by length * Improve DataConverter to handle multi-dim arrays * Rename methods and remove unused code * Improve DataConverter by better splitting handling per datatype. Series only matches index (for one dim). Numpy matches shape * Add test for error handling * Update scenario example * Fix Handling of TimeSeriesData * Improve DataConverter * Fix resampling of the FlowSystem * Improve Warning Message * Add example that leverages resampling * Add example that leverages resampling adn fixing of Investments * Add flag to Calculation if its modeled * Make flag for connected_and_transformed FLowSystem public * Make Calcualtion Methods return themselfes to make them chainable * Improve example * Improve Unreleased CHANGELOG.md * Add year coord to FlowSystem * Improve dimension handling * Change plotting to use an indexer instead * Change plotting to use an indexer instead * Use tuples to set dimensions in Models * Bugfix in validation logic and test * Improve Errors * Improve weights handling and rescaling if None * Fix typehint * Update Broadcasting in Storage Bounds and improve type hints * Make .get_model_coords() return an actual xr.Coordinates Object * Improve get_coords() * Rename SystemModel to FlowSystemModel * First steps * Improve Feature Patterns * Improve acess to variables via short names * Improve * Add naming options to big_m_binary_bounds() * Fix and improve FLowModeling with Investment * Improve * Tyring to improve the Methods for bounding variables in different scenarios * Improve BoundingPatterns * Improve BoundingPatterns * Improve BoundingPatterns * Fix duration Modeling * Fix On + Size * Fix InvestmentModel * Fix Models * Update constraint names in test * Fix OnOffModel for multiple Flows * Update constraint names in tests * Simplify * Improve handling of vars/cons and models * Revising the basic structure of a class Model * Revising the basic structure of a class Model * Simplify and focus more on own Model class * Update tests * Improve state computation in ModelingUtilities * Improve handling of previous flowrates * Imropove repr and submodel acess * Update access pattern in tests * Fix PiecewiseEffects and StorageModel * Fix StorageModel and Remove PreventSimultaniousUseModel * Fix Aggregation and SegmentedCalculation * Update tests * Loosen precision in tests * Update test_on_hours_computation.py and some types * Rename class Model to Submodel * rename sub_model to submodel everywhere * rename self.model to self.submodel everywhere * Rename .model with .submodel if its only a submodel * Rename .sub_models with .submodels * Improve repr * Improve repr * Include def do_modeling() into __init__() of models * Make properties private * Improve Inheritance of Models * V3.0.0/plotting (#285) * Use indexer to reliably plot solutions with and wihtout scenarios/years * ruff check * Improve typehints * Update CHANGELOG.md * Bugfix from renaming to .submodel * Bugfix from renaming to .submodel * Improve indexer in results plotting * rename register_submodel() to .add_submodels() adn add SUbmodels collection class * Add nice repr to FlowSystemModel and Submodel * Bugfix .variables and .constraints * Add type checks to modeling.py * Improve assertion in tests * Improve docstrings and register ElementModels directly in FlowSystemModel * Improve __repr__() * ruff check * Use new method to compare sets in tests * ruff check * Update Contribute.md, some dependencies and add pre-commit * Pre commit hook * Run Pre-Commit Hook for the first time * Fix link in README.md * Update Effect name in tests to be 'costs' instead of 'Costs' Everywhere Simplify testing by creating a Element Library * Improve some of the modeling and coord handling * Add tests with years and scenarios * Update tests to run with multiple coords * Fix Effects dataset computation in case of empty effects * Update Test for multiple dims Fix Dim order in scaled_bounds_with_state Bugfix logic in .use_switch_on * Fix test with multiple dims * Fix test with multiple dims * New test * New test for previous flow_rates * Add Model for YearAwareInvestments * Add FlowSystem.years_per_year attribute and "years_of_last_year" parameter to FlowSystem() * Add YearAwareInvestmentModel * Add new Interface * Improve YearAwareInvestmentModel * Rename and improve * Move piecewise_effects * COmbine TImingInvestment into a single interface * Add model tests for investment * Add size_changes variables * Add size_changes variables * Improve InvestmentModel * Improve InvestmentModel * Rename parameters * remove old code * Add a duration_in_years to the InvestTimingParameters * Improve handling of fixed_duration * Improve validation and make Investment/divestment optional by default * Rename some vars and improve previous handling * Add validation for previous size * Change fit_to_model_coords to work with a Collection of dims * Improve fit_to_model_coords * Improve test * Update transform_data() * Add new "year of investment" coord to FlowSystem * Add 'year_of_investment' dimension to FlowSystem * Improve InvestmentTiming * Improve InvestmentTiming * Add specific_effect back * add effects_by_investment_year back * Add year_of_investment to FLowSystem.sel() * Improve Interface * Handle selection of years properly again * Temp * Make ModelingPrimitives.consecutive_duration_tracking() dim-agnostic * Use new lifetime variable and constraining methods * Improve Plausibility check * Improve InvestmentTImingParameters * Improve weights * Adjust test * Remove old classes * V3.0.0/main fit to model coords improve (#295) * Change fit_to_model_coords to work with a Collection of dims * Improve fit_to_model_coords * ruff format * Revert changes * Update type hints * Revert changes introduced by new Multiperiod Invest parameters * Improve CHnagelog and docstring of Storage * Improve Changelog * Improve InvestmentModel * Improve InvestmentModel to have 2 cases. One without years and one with * Improve InvestmentModel to have 2 cases. One without years and one with years. Further, remove investment_scenarios parameter * Revert some changes regarding Investments * Typo * Remove Investment test file (only local testing) * More reverted changes * More reverted changes * Add years_of_last_year to docstring * Revert change from Investment * Revert change from Investment * Remove old todos.txt file * Fix typos in CHANGELOG.md * Improve usage of name_prefix to intelligently join with the label * Ensure IO of years_of_last_year * Typo * Typo * activat tests on pulls to feature/v3 * activat tests on pulls to feature/v3/main * Feature/v3/low-impact-improvements (#355) * Fix typo * Prefer robust scalar extraction for timestep sizes in aggregation * Improve docs and error messages * Update examples * Use validated timesteps * Remove unnessesary import * Use FlowSystem.model instead of FlowSystem.submodel * Fix Error message * Improve CHANGELOG.md * Use self.standard_effect instead of provate self._standard_effect and update docstring * in calculate_all_conversion_paths, use `collections.deque` for efficiency on large graphs * Make aggregation_parameters.hours_per_period more robust by using rounding * Improve import and typos * Improve docstring * Use validated timesteps * Improve error * Improve warning * Improve type hint * Improve CHANGELOG.md: typos, wording and duplicate entries * Improve CI (#357) Separate example testing from other tests by marking them. By default, purest doesn't run the example tests * Feature/v3/data converter (#356) * Update DataConverter * Update tests of error messages * Update tests of error messages * Update Dataconverter to allow bool values * fix tests * Improve code order of prefix in transform_data() * Move pytest-xdist to dev deps * Fix transform_data to not pass a prefix to flow * Move to unreleased Add emojis to CHANGELOG.md * Feature/v3/feature/308 rename effect domains (#365) * Rename effect domains * Rename effect domains * Ensure backwards compatability * Improve * Improve * Bugfix IO with deprectaed params * Add guards for extra kwargs * Add guards for extra kwargs * centralize logic for deprectaed params * Move handlign from centralized back to classes in a dedicated method * Improce property handling * Move handling to Interface class * Getting lost * Revert "Getting lost" This reverts commit 3c0db76. * Revert "Move handling to Interface class" This reverts commit 09bdeec. * Revert "Improce property handling" This reverts commit 5fe2c64. * Revert "Move handlign from centralized back to classes in a dedicated method" This reverts commit 9f4c1f6. * Revert "centralize logic for deprectaed params" This reverts commit 4a82574. * Add "" to warnings * Revert change in examples * Improve BackwardsCompatibleDataset * Add unit tests for backwards compatability * Remove backwards compatible dataset * Renamed maximum_temporal_per_hour to maximum_per_hour and minimum_temporal_per_hour to minimum_per_hour * Add entires to CHANGELOG.md * Remove backwards compatible dataset * Remove unused imports * Move to unreleased * Catch up on missed renamings from merge * Catch up on missed renamings from merge * Typo * Typo * Several small improvements or potential future bug preventions * Feature/v3/feature/305 rename specific share to other effects to specific share from effect (#366) * Step 1 * Bugfix * Make fit_effects_to_model_coords() more flexible * Fix dims * Update conftest.py * Typos * Improve Effect examples * Add extra validation for Effect Shares * Feature/v3/feature/367 rename year dimension to period (#370) * The framework now uses "period" instead of "year" as the dimension name and "periodic" instead of "nontemporal" for the effect domain * Update CHANGELOG.md * Remove periods_of_last_period parameter and adjust weights calculation * Bugfix * Bugfix * Switch from "as_time_series": bool to "dims": [time, period, scenario] arguments * Improve normalization of weights * Update tests * Typos in docs * Improve docstrings * Improve docstrings * Update CHANGELOG.md * Improved tests: added extra time+scenarios combination * Add rename and improve CHANGELOG.md * Made CHANGELOG.md more concise * Simplify array summation and improve `np.isclose` usage in `modeling` and `aggregation` modules. * Make storage and load profile methods flexible by introducing `timesteps_length` parameter; update test configurations accordingly. * Refine error messages in `ModelingPrimitives` to correctly reference updated method names. * Enhance test fixtures by adding `ids` for parameterized tests, improve input flexibility with dynamic timestep length, and refine error message sorting logic. * Refactor variable selection and constraint logic in `aggregation.py` for handling more than only a time dimension * Adjust constraint in `aggregation.py` to enforce stricter summation limit (1 instead of 1.1) * Reverse transition constraint inequality for consistency in `modeling.py`. * Update dependency to use h5netcdf instead of netcdf4 * Feature/v3/several improvements (#372) * Update deprecated properties to use new aggregation attributes in `core.py`. * Refactor `drop_constant_arrays` in `core.py` to improve clarity, add type hints, and enhance logging for dropped variables. * Bugfix example_calculation_types.py and two_stage_optimization.py * Use time selection more explicitly * Refactor plausibility checks in `components.py` to handle string-based `initial_charge_state` more robustly and simplify capacity bounds retrieval using `InvestParameters`. * Refactor `create_transmission_equation` in `components.py` to handle `relative_losses` gracefully when unset and simplify the constraint definition. * Update pytest `addopts` formatting in `pyproject.toml` to work with both unix and windows * Refine null value handling when resolving dataarrays` to check for 'time' dimension before dropping all-null values. * Refactor flow system restoration to improve exception handling and ensure logger state resets. * Refactor imports in `elements.py` to remove unused `ModelingPrimitives` from `features` and include it from `modeling` instead. * Refactor `count_consecutive_states` in `modeling.py` to enhance documentation, improve edge case handling, and simplify array processing. * Refactor `drop_constant_arrays` to handle NaN cases with `skipna` and sort dropped variables for better logging; streamline logger state restoration in `results.py`. * Temp * Improve NAN handling in count_consecutive_states() * Refactor plausibility checks in `components.py` to prevent initial capacity from constraining investment decisions and improve error messaging. * Feature/v3/feature/no warnings in tests (#373) * Refactor examples to not use deprectaed patterns * Refactor tests to replace deprecated `sink`/`source` properties with `inputs`/`outputs` in component definitions. * Use 'h' instead of deprectaed 'H' in coordinate freq in tests; adjust `xr.concat` in `results.py` to use `join='outer'` for safer merging. * Refactor plot tests to use non-interactive backends, save plots as files, and close figures to prevent memory leaks. * Refactor plot tests to use non-interactive Plotly renderer (`json`), add cleanup with `tearDown`, and ensure compatibility with non-interactive Matplotlib backends. * Configure pytest filters to treat most warnings as errors, ignore specific third-party warnings, and display all warnings from internal code. * Revert "Configure pytest filters to treat most warnings as errors, ignore specific third-party warnings, and display all warnings from internal code." This reverts commit 0928b26. * Refactor plotting logic to prevent memory leaks, improve backend handling, and add test fixtures for cleanup and non-interactive configurations. * Update pytest filterwarnings to treat most warnings as errors, ignore specific third-party warnings, and display all internal warnings. * Suppress specific third-party warnings in `__init__.py` to reduce noise for end users. * Update pytest warning filters: treat internal warnings as errors, revert treating most third-party warnings as errors. * Suppress additional third-party warnings in `__init__.py` to minimize runtime noise. * Update pytest warning filters: suppress specific third-party warnings and add detailed context for `__init__.py` filters. * Sync and consolidate third-party warning filters in `__init__.py` and `pyproject.toml` to suppress runtime noise effectively. * Expand and clarify third-party warning filters in `__init__.py` and `pyproject.toml` for improved runtime consistency and reduced noise. * Update deprecated code in tests * Refactor backend checks in `plotting.py` and streamline test fixtures for consistency in handling non-interactive backends. * Refactor plotting logic to handle test environments explicitly, remove unused Plotly configuration, and improve figure cleanup in tests. * Add entry to CHANGELOG.md * Typos in example * Reogranize Docs (#377) * Improve effects parameter naming in InvestParameters (#389) * FIrst Try * Improve deprecation * Update usage of deprectated parameters * Improve None handling * Add extra kwargs handling * Improve deprecation * Use custom method for kwargs * Add deprecation method * Apply deprecation method to other classes * Apply to effects.py as well * Update usage of deprectaed parameters * Update CHANGELOG.md * Update Docs * Feature/v3/feature/test examples dependent (#390) * Update example test to run dependent examples in order * Update example test to run dependent examples in order * Update CHANGELOG.md * Improve test directory handling * Improve test directory handling * Typo * Feature/v3/feature/rename investparameter optional to mandatory (#392) * Change .optional to .mandatory * Change .optional to .mandatory * Remove not needed properties * Improve deprectation warnings * Improve deprectation of "optional" * Remove all usages of old "optional" parameter in code * Typo * Imrpove readability * Adjust some logging levels * Add scenarios and periods to repr and str of FlowSystem * Feature/v3/feature/386 use better default logging colors and dont log to file by default (#394) * Fix `charge_state` Constraint in `Storage` leading to incorrect losses in discharge and therefore incorrect charge states and discharge values (#347) * Fix equation in Storage * Fix test for equation in Storage * Update CHANGELOG.md * Improve Changelog Message * Fix CHANGELOG.md * Simplify changes from next release * Update CHANGELOG.md * Fix CHANGELOG.md * chore(deps): update dependency mkdocs-material to v9.6.20 (#369) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Improve renovate.json to automerge ruff despite 0.x version * chore(deps): update dependency tsam to v2.3.9 (#379) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chore(deps): update dependency ruff to v0.13.2 (#378) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Feature/Improve Configuration options and handling (#385) * Refactor configuration management: remove dataclass-based schema and simplify CONFIG structure. * Refactor configuration loading: switch from `os` to `pathlib`, streamline YAML loading logic. * Refactor logging setup: split handler creation into dedicated functions, simplify configuration logic. * Improve logging configurability and safety - Add support for `RotatingFileHandler` to prevent large log files. - Introduce `console` flag for optional console logging. - Default to `NullHandler` when no handlers are configured for better library behavior. * Temp * Temp * Temp * Temp * Temp * Temp * Refactor configuration and logging: remove unused `merge_configs` function, streamline logging setup, and encapsulate `_setup_logging` as an internal function. * Remove unused `change_logging_level` import and export. * Add tests for config.py * Expand `config.py` test coverage: add tests for custom config loading, logging setup, dict roundtrip, and attribute modification. * Expand `test_config.py` coverage: add modeling config persistence test, refine logging reset, and improve partial config load assertions. * Expand `test_config.py` coverage: add teardown for state cleanup and reset modeling config in setup. * Add `CONFIG.reset()` method and expand test coverage to verify default restoration * Refactor `CONFIG` to centralize defaults in `_DEFAULTS` and ensure `reset()` aligns with them; add test to verify consistency. * Refactor `_DEFAULTS` to use `MappingProxyType` for immutability, restructure config hierarchy, and simplify `reset()` implementation for maintainability; update tests accordingly. * Mark `TestConfigModule` tests to run in a single worker with `@pytest.mark.xdist_group` to prevent global config interference. * Add default log file * Update CHANGELOG.md * Readd change_logging_level() for backwards compatability * Add more options to config.py * Add a docstring to config.y * Add a docstring to config.y * rename parameter message_format * Improve color config * Improve color config * Update CHANGELOG.md * Improve color handling * Improve color handling * Remove console Logging explicityl from examples * Make log to console the default * Make log to console the default * Add individual level parameters for console and file * Add extra Handler section * Use dedicated levels for both handlers * Switch back to not use Handlers * Revert "Switch back to not use Handlers" This reverts commit 05bbccb. * Revert "Use dedicated levels for both handlers" This reverts commit ed0542b. * Revert "Add extra Handler section" This reverts commit a133cc8. * Revert "Add individual level parameters for console and file" This reverts commit 19f81c9. * Fix CHANGELOG.md * Update CHANGELOG.md * Fix CHANGELOG.md * Allow blank issues * Change default logging behaviour to other colors and no file logging * Use white for INFO * Use terminal default for INFO * Explicitly use stdout for StreamHandler * Use terminal default for Logging color * Add option for loggger name * Update CHANGELOG.md * Ensure custom formats are being applied * Catch empty config files * Update test to match new defaults --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Fix warnings filter * Remove config file (#391) * Remove config file * Remove yaml in MANIFEST.in * Improve config console logger: Allow stderr and improve multiline format (#395) * Add some validation to config.py * Improve file Permission handling in config.py * Remove unwanted return * Improve Docstrings in config.py * Improve Docstrings in config.py * Typo * Use code block in docstring * Allow stderr for console logging * Make docstrings more compact * Make docstrings more compact * Updated to actually use stderr * Simplify format() * Improve format * Add extra validation * Update CHANGELOG.md * Feature/v3/feature/381 feature equalize sizes and or flow rates between scenarios (#396) * First try * Centralize in FlowSystem * Add centralized handling * Logical Bug * Add to IO * Add test * Add some error handling and logging * Rename variable * Change parameter naming * Remove not needed method * Refactor to reduce duplication * Change defaults * Change defaults * Change defaults * Update docs * Update docs * Update docs * Update docs * Feature/v3/feature/Linked investments over multiple periods * Reorganize InvestmentParameters to always create the binary investment variable * Add new variable that indicates wether investment was taken, independent of period and allow linked periods * Improve Handling of linked periods * Improve Handling of linked periods * Add examples * Typos * Fix: reference invested only after it exists * Improve readbility of equation * Update from Merge * Improve InvestmentModel * Improve readability * Improve readability and reorder methods * Improve logging * Improve InvestmentModel * Rename to "invested" * Update CHANGELOG.md * Bugfix * Improve docstring * Improve InvestmentModel to be more inline with the previous Version * Improve Exceptions and add a meaningfull comment in InvestParameters * Typo * Feature/v3/feature/common resources in examples (#401) * Typo * Typos in scenario_example.py * Improve data files in examples * Improve data files in examples * Handle local install more gracefully with __version__ * Remove bad example * Increase timeout in examples * Improve test_examples.py * Improve example * Fixx Error message in test * Fix: Dependecy issue with python 3.10 * run ci on more branches if there are prs * Minor improvements and Update to the CHANGELOG.md * Feature/v3/feature/last minute improvements (#403) * Typos oin CHANGELOG.md * Add error handling in exmaple * Surface warnings during tests (avoid hiding deprecations) * Add missing docs file * Imrpve Releasnotes of v2.2.0 * Improve docs * Remove some filterwarnings from tsam --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Description
Rework configuraition management. Less complex setup. Defaults in Code. Set values through code OR config file.
Type of Change
Related Issues
Closes #(issue number)
Testing
Checklist
Summary by CodeRabbit
New Features
Changes
Deprecated
Removed
Documentation
Tests