Feature/v3/feature/308 rename effect domains#365
Conversation
WalkthroughRenames the Effect domains from operation/invest to temporal/nontemporal across core models, results, examples, and tests. Updates parameter names, labels, dataset keys, and plotting references. Adds deprecation handling and kwargs validation. Adjusts result aggregation paths and per-timestep naming. Documentation and tests updated accordingly. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
actor User
participant Interface as Interface.__init__
participant Validator as _validate_kwargs
participant Component as Source/Sink/SourceAndSink
User->>Component: __init__(..., **kwargs)
Component->>Validator: _validate_kwargs(kwargs, class_name)
alt unexpected kwargs
Validator-->>Component: TypeError
Component-->>User: raise
else ok
Component-->>User: constructed
end
sequenceDiagram
autonumber
participant Builder as EffectModel
participant Temporal as Submodel(temporal)
participant NonTemporal as Submodel(nontemporal)
participant Results as CalculationResults
Builder->>Temporal: build constraints (min/max, per_timestep)
Builder->>NonTemporal: build constraints (min/max)
Builder->>Builder: total = temporal.total + nontemporal.total
Results->>Temporal: fetch temporal values
Results->>NonTemporal: fetch nontemporal values
Results->>Results: compute total/merge datasets with new keys
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Possibly related issues
Possibly related PRs
Suggested reviewers
Poem
Pre-merge checks and finishing touches❌ Failed checks (3 warnings)
✨ Finishing touches
🧪 Generate unit tests
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 |
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
There was a problem hiding this comment.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
flixopt/effects.py (1)
391-426: Verify cross-effect share transformation.Line 422 appears to have an inconsistency - it uses
'operation->'as the prefix but processesspecific_share_to_other_effects_investdata. This seems like a copy-paste error that should be'nontemporal->'.Apply this fix:
self.specific_share_to_other_effects_invest = flow_system.fit_effects_to_model_coords( - f'{prefix}|operation->', + f'{prefix}|nontemporal->', self.specific_share_to_other_effects_invest, 'operation',Note: Line 424 also needs updating to use the new mode parameter:
self.specific_share_to_other_effects_invest, - 'operation', + 'nontemporal',
🧹 Nitpick comments (2)
flixopt/structure.py (1)
370-399: Tighten kwargs validation: bind to class init, avoid local import, sort keysFunctionality is good. Minor refinements for clarity and determinism:
- Bind signature to type(self).init (explicit class method).
- Use the top-level inspect import (remove local import).
- Sort unexpected keys for stable error messages.
- import inspect - - sig = inspect.signature(self.__init__) + # use top-level inspect import; bind to class for clarity + sig = inspect.signature(type(self).__init__) known_params = set(sig.parameters.keys()) - {'self', 'kwargs'} # Also filter out 'kwargs' itself which can appear during deserialization extra_kwargs = {k: v for k, v in kwargs.items() if k not in known_params and k != 'kwargs'} if extra_kwargs: class_name = class_name or self.__class__.__name__ - unexpected_params = ', '.join(f"'{param}'" for param in extra_kwargs.keys()) + unexpected_params = ', '.join(f"'{param}'" for param in sorted(extra_kwargs.keys())) raise TypeError(f'{class_name}.__init__() got unexpected keyword argument(s): {unexpected_params}')flixopt/components.py (1)
1058-1087: Document strict kwargs validation or provide legacy aliases
Callingself._validate_kwargsnow rejects unexpected kwargs; update the SourceAndSink docstring to call out this strict validation or add targeted aliases for the deprecated parameters.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (17)
CHANGELOG.md(1 hunks)examples/03_Calculation_types/example_calculation_types.py(1 hunks)examples/05_Two-stage-optimization/two_stage_optimization.py(1 hunks)flixopt/calculation.py(1 hunks)flixopt/components.py(5 hunks)flixopt/effects.py(10 hunks)flixopt/elements.py(1 hunks)flixopt/features.py(6 hunks)flixopt/results.py(9 hunks)flixopt/structure.py(1 hunks)tests/test_effect.py(6 hunks)tests/test_flow.py(6 hunks)tests/test_functional.py(2 hunks)tests/test_integration.py(4 hunks)tests/test_io.py(1 hunks)tests/test_linear_converter.py(2 hunks)tests/test_scenarios.py(3 hunks)
🔇 Additional comments (49)
flixopt/components.py (2)
1343-1353: No Sink instantiations with uncommon kwargs—strict validation safe
rg found noSink(...)calls usingon_off_parametersorprevent_simultaneous_flows.
1212-1222: No component-only kwargs used in Source instantiations
Search found no calls toSource(...)with extra kwargs; deprecation warning and kwargs validation are safe.flixopt/elements.py (1)
646-647: No action needed: add_share_to_effects supports ‘temporal’
Signature definestarget: Literal['temporal','nontemporal']and all aggregation/plots use the ‘temporal’ label.tests/test_io.py (1)
56-59: LGTM! Consistent with the temporal/nontemporal refactoring.The change from accessing aggregated costs via
costs|totaltocostsaligns with the broader repository refactoring that renamed Effect domains from operation/invest to temporal/nontemporal. Based on the flixopt documentation, the framework "abstracts costs as so called 'Effects'. This allows to model costs, CO2-emissions, primary-energy-demand or area-demand at the same time." The updated assertions correctly reflect the new public API structure.examples/03_Calculation_types/example_calculation_types.py (2)
210-210: LGTM! Updated plotting key aligns with temporal refactoring.The change from
costs(operation)|total_per_timesteptocosts(temporal)|per_timestepcorrectly reflects the domain renaming and the simplified per-timestep naming convention. This ensures plotting functionality remains consistent with the new API.
217-217: LGTM! Consistent plotting key update.Similar to the previous change, this update maintains consistency with the temporal/nontemporal refactoring across all plotting references.
flixopt/calculation.py (1)
110-111: LGTM! Effect submodel field names updated correctly.The renaming from
operationandinvesttotemporalandnontemporalprovides clearer semantic meaning for the Effect domains. Thetemporaldomain captures time-varying effects (like operational costs per timestep), whilenontemporalcaptures time-invariant effects (like investment costs). This change aligns with the broader refactoring across the codebase.tests/test_scenarios.py (3)
242-242: LGTM! Objective expression updated to use normalized variable names.The change from
costs|totaltocostsreflects the normalized variable naming in the optimization model. This maintains consistency with the broader refactoring while preserving the correct weighted objective calculation logic.
253-253: LGTM! Consistent objective expression update.This change mirrors the previous update, ensuring all scenario tests use the consistent variable naming convention.
328-328: LGTM! Test assertion updated with normalized variable names.The change from
costs|totaltocostsin the test assertion maintains consistency with the model variable renaming while preserving the test logic for objective value verification.tests/test_functional.py (3)
115-115: LGTM! Total costs assertion updated correctly.The change from
costs|totaltocostsaligns with the normalized variable naming in the solution results. This maintains test correctness while adopting the new API structure.
125-125: LGTM! Per-timestep costs variable updated appropriately.The change from
costs(operation)|total_per_timesteptocosts(temporal)|per_timestepcorrectly reflects both the domain rename (operation→temporal) and the simplified timestep naming convention. This maintains test accuracy while adopting the new terminology.
132-132: LGTM! Component-specific cost variable updated consistently.The change from
costs(operation)tocosts(temporal)for the Gas tariff cost variable maintains consistency with the temporal domain renaming across all test assertions.tests/test_linear_converter.py (2)
187-191: LGTM! Consistent test update for temporal effects.The renaming from
operationtotemporalin the constraint names is correctly applied here and maintains consistency with the domain renaming throughout the codebase.
490-495: LGTM! Temporal effects consistently updated.The constraint and variable names have been properly updated to use the new
temporaldomain terminology.tests/test_flow.py (5)
125-138: LGTM! Effects per flow hour correctly updated.The test assertions for effects per flow hour have been properly updated to use
temporaldomain terminology, maintaining consistency with the new naming scheme.
470-486: LGTM! Investment effects properly migrated.The investment effects have been correctly renamed to use
nontemporaldomain terminology, aligning with the PR's objective to renameinvesttonontemporal.
507-513: LGTM! Divestment effects consistently updated.The divestment effects constraint has been properly updated to use the
nontemporaldomain.
622-641: LGTM! Per-running-hour effects updated to temporal.The effects per running hour have been correctly renamed to use the
temporaldomain terminology.
1025-1031: LGTM! Startup cost effects properly migrated.The startup cost effects have been correctly updated to use the
temporaldomain, as these are operation-related costs.tests/test_integration.py (6)
66-71: LGTM! Top-level effect names simplified as expected.The test correctly reflects the simplified naming where
costs|totalbecomes justcostsandCO2|totalbecomes justCO2in the results.
85-98: LGTM! Per-timestep aggregation correctly renamed.The test properly updates from
costs(operation)|total_per_timesteptocosts(temporal)|per_timestep, following the new naming convention.
101-129: LGTM! Component-level temporal effects consistently updated.All component-specific cost contributions have been correctly renamed from
operationtotemporaldomain.
132-141: LGTM! Investment effects renamed to nontemporal.The investment-related costs for components have been properly updated to use the
nontemporaldomain terminology.
144-152: LGTM! Effect totals properly split between domains.The test correctly validates that CO2 emissions are split between
CO2(temporal)andCO2(nontemporal)domains.
307-316: Document segmented calculation handling difference
Aggregated models useresults.model['costs'].solution.item(), segmented models usesolution_without_overlap('costs(temporal)|per_timestep').sum()—confirm this divergence is intentional and add a brief note in the test or documentation.tests/test_effect.py (6)
26-34: LGTM! Effect variable structure properly updated.The test correctly validates the new variable structure with separate
temporalandnontemporalcomponents plus the combined total effect.
36-45: LGTM! Constraint structure matches variable structure.The constraints mirror the variable structure with proper domain separation.
59-72: LGTM! Effect composition correctly implemented.The test properly validates that the total effect equals the sum of temporal and nontemporal components.
80-88: LGTM! Effect bounds properly migrated to new parameter names.The test correctly uses the renamed parameters:
minimum/maximum_operation→minimum/maximum_temporalminimum/maximum_investment→minimum/maximum_nontemporalminimum/maximum_operation_per_hour→minimum/maximum_per_hour
244-262: LGTM! Effect share factors properly separated by domain.The test correctly validates effect share factors for both
temporalandnontemporaldomains.
283-303: LGTM! Component effect aggregation validated for all domains.The test properly validates that effects per component sum correctly for temporal, nontemporal, and total domains.
flixopt/features.py (5)
100-100: LGTM! Consistent refactoring to temporal/nontemporal terminology.The changes from
investtonontemporalin the target parameter foradd_share_to_effectscalls are consistent and align with the PR's objective to rename Effect domains. The terminology change makes the distinction between time-dependent (temporal) and time-independent (nontemporal) effects clearer.Also applies to: 110-110, 117-117
243-243: LGTM! Consistent updates in OnOffModel effects.The target parameter changes from
operationtotemporalfor the OnOff model's runtime-dependent effects are appropriate and maintain consistency with the new naming convention.Also applies to: 252-252
487-487: LGTM! PiecewiseEffectsModel updated correctly.The target parameter change to
nontemporalfor piecewise investment effects aligns with the PR objectives.
529-533: Clean refactoring of ShareAllocationModel naming.The changes improve clarity and consistency:
- Using
self.label_fulldirectly for the total variable name- Renaming
total_per_timesteptoper_timestepremoves redundancy- Consistent constraint naming throughout
These changes align with the broader temporal/nontemporal refactoring effort.
Also applies to: 540-544
591-591: Verify constraint reference update.The update from
_eq_total_per_timesteptoself._eq_total_per_timestepis correct since the constraint is now stored as an instance variable.flixopt/results.py (6)
286-286: LGTM! Effect share factors updated to new naming.The dictionary keys have been correctly updated from operation/invest to temporal/nontemporal.
359-359: LGTM! Effects dataset modes updated consistently.The loop now correctly iterates over ['temporal', 'nontemporal', 'total'] instead of the old naming.
476-491: Well-implemented backwards-compatible API update.The
get_effect_sharesmethod signature and implementation have been properly updated:
- Mode parameter now accepts 'temporal'/'nontemporal' instead of operation/invest terminology
- Documentation correctly describes the new modes
- Error message provides clear guidance on valid options
- Recursive calls use the new parameter names
Also applies to: 507-510, 515-516
544-589: Comprehensive update to _compute_effect_total method.The implementation correctly handles the new temporal/nontemporal terminology:
- Method signature updated with new mode literals
- Documentation reflects the new terminology
- Internal logic properly computes temporal and nontemporal components
- Null checking and summation logic preserved correctly
621-627: LGTM! Consistent updates to effects dataset creation.The
_create_effects_datasetmethod correctly uses the new mode terminology in both the signature and documentation.
672-674: Suffix mapping updated correctly.The suffix mapping dictionary properly maps the new mode names to their corresponding suffixes:
- 'temporal' → '(temporal)|per_timestep'
- 'nontemporal' → '(nontemporal)'
- 'total' → ''
This ensures result labels remain consistent with the new terminology.
flixopt/effects.py (6)
57-66: Well-executed deprecation handling for backwards compatibility.The implementation provides excellent backwards compatibility through:
- Clear deprecation warnings with actionable messages
- Validation to prevent conflicting parameter usage
- Comprehensive parameter mapping from old to new names
- Proper kwargs validation to catch unexpected parameters
The deprecation strategy ensures existing code continues to work while guiding users toward the new API.
Also applies to: 163-268
270-390: Clean implementation of deprecated property accessors.The deprecated properties provide a smooth migration path:
- Both getters and setters emit clear deprecation warnings
- Properties correctly proxy to the new internal attributes
- Warning messages guide users to the new property names
This approach maintains full backwards compatibility while encouraging migration.
446-481: Clean refactoring of EffectModel submodels.The EffectModel correctly:
- Renames submodels to
nontemporalandtemporal- Updates label formatting with new terminology
- Properly maps min/max parameters to the renamed attributes
- Maintains the total calculation as sum of temporal and nontemporal
576-587: Clear error messages for cycle detection.The cycle detection has been properly updated to:
- Check temporal and nontemporal shares separately
- Provide clear, specific error messages for each type of cycle
693-709: Comprehensive updates to share allocation methods.Both
add_share_to_effectsand_add_share_between_effectshave been correctly updated:
- Target parameter accepts new 'temporal'/'nontemporal' literals
- Shares are properly routed to the correct submodels
- Cross-effect shares correctly reference the renamed submodels
Also applies to: 733-746
660-676: LGTM! Effect share factor calculation updated.The
calculate_effect_share_factorsmethod now correctly:
- Returns temporal and nontemporal share dictionaries
- Processes shares with the updated attribute names
- Maintains the same calculation logic with new naming
| - Renamed `Effect` parameters: | ||
| - `minimum_investment` → `minimum_nontemporal` | ||
| - `maximum_investment` → `maximum_nontemporal` | ||
| - `minimum_operation` → `minimum_temporal` | ||
| - `maximum_operation` → `maximum_temporal` | ||
| - `minimum_operation_per_hour` → `minimum_per_hour` | ||
| - `maximum_operation_per_hour` → `maximum_per_hour` |
There was a problem hiding this comment.
🧩 Analysis chain
Confirm exact legacy parameter names ('minimum_invest' vs 'minimum_investment')
The changelog lists minimum_investment/maximum_investment; earlier notes sometimes reference minimum_invest/maximum_invest. Ensure the deprecation mapping and docs reflect the actual legacy names used in the API.
🏁 Script executed:
#!/bin/bash
# Check for occurrences of both variants to ensure consistency
rg -nP "(minimum|maximum)_(invest(ment)?|operation(_per_hour)?)" --type=py -C2
rg -nP "(minimum|maximum)_(nontemporal|temporal|per_hour)" --type=py -C2Length of output: 33793
Use correct legacy names (minimum_invest/maximum_invest) in CHANGELOG.md
Change the entries from minimum_investment/maximum_investment to minimum_invest/maximum_invest to match the actual deprecated parameters.
🤖 Prompt for AI Agents
In CHANGELOG.md around lines 111 to 117, the legacy parameter names are
incorrect: update the listed renamed Effect parameters from
`minimum_investment`/`maximum_investment` to the actual deprecated names
`minimum_invest`/`maximum_invest` so the changelog matches the real legacy
parameter names; keep the other renames unchanged and verify spelling and
backticks for consistency.
| 'costs', | ||
| 'costs(nontemporal)', | ||
| 'costs(temporal)', |
There was a problem hiding this comment.
🧩 Analysis chain
Aligns with renamed effect domains; please verify keys exist in results
The switch to 'costs', 'costs(nontemporal)', and 'costs(temporal)' matches the new terminology. Please confirm these variables are present in results for both Combined and Two-stage modes.
🏁 Script executed:
#!/bin/bash
# Inspect available data variables in both solutions to verify keys
rg -nP -C2 "results\.solution" --type=py
# Optionally print example outputs if a small fixture exists
rg -nP "costs\(temporal\)|costs\(nontemporal\)" --type=py -C2Length of output: 20492
Update temporal cost key in example Replace 'costs(temporal)' with 'costs(temporal)|per_timestep' in examples/05_Two-stage-optimization/two_stage_optimization.py to match results.solution keys.
🤖 Prompt for AI Agents
In examples/05_Two-stage-optimization/two_stage_optimization.py around lines 148
to 150, the example uses the outdated key 'costs(temporal)'; update that entry
to 'costs(temporal)|per_timestep' so it matches the keys present in
results.solution (i.e., replace 'costs(temporal)' with
'costs(temporal)|per_timestep').
* 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>
Renamed
Effectdomains:invest→nontemporaloperation→temporalFurther, rename
Effectparameters to:minimum_investment→minimum_nontemporalmaximum_investment→maximum_nontemporalminimum_operation→minimum_temporalmaximum_operation→maximum_temporalminimum_operation_per_hour→minimum_per_hourmaximum_operation_per_hour→maximum_per_hourType of Change
Related Issues
Closes #(issue number)
Testing
Checklist
Summary by CodeRabbit