-
Notifications
You must be signed in to change notification settings - Fork 9
Main branch for v5 with removed deprecated params #479
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the You can disable this status message by setting the WalkthroughThis PR systematically removes deprecated backward-compatibility code across the flixopt codebase, including deprecated kwargs, property aliases, and deprecation warnings from six production files. The deprecation test suite is deleted, and the DEPRECATION_REMOVAL_VERSION import is removed from the public API. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes
Possibly related PRs
Poem
Pre-merge checks and finishing touches❌ Failed checks (3 warnings)
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.
|
# Conflicts: # flixopt/core.py # flixopt/interface.py # test_deprecations.py
# Conflicts: # flixopt/core.py # flixopt/effects.py # test_deprecations.py # tests/test_invest_parameters_deprecation.py
# Conflicts: # flixopt/core.py # flixopt/effects.py # test_deprecations.py # tests/test_invest_parameters_deprecation.py
# Conflicts: # flixopt/core.py # flixopt/effects.py # test_deprecations.py # tests/test_invest_parameters_deprecation.py
* Perfect! Here's the **final complete renaming table with Option A**:
## Parameters Class (`OnOffParameters` → `StatusParameters`)
| Current Name | Recommended Name | Rationale |
|--------------|------------------|-----------|
| `OnOffParameters` | **`StatusParameters`** | Aligns with PyPSA, clearer semantics |
| `effects_per_switch_on` | **`effects_per_startup`** | Standard UC terminology |
| `effects_per_running_hour` | **`effects_per_active_hour`** | Clear, concise, matches "active" state |
| `on_hours_total_min` | **`active_hours_min`** | Total (not consecutive) active hours |
| `on_hours_total_max` | **`active_hours_max`** | Total (not consecutive) active hours |
| `consecutive_on_hours_min` | **`min_uptime`** | Standard UC term (consecutive) |
| `consecutive_on_hours_max` | **`max_uptime`** | Standard UC term (consecutive) |
| `consecutive_off_hours_min` | **`min_downtime`** | Standard UC term (consecutive) |
| `consecutive_off_hours_max` | **`max_downtime`** | Standard UC term (consecutive) |
| `switch_on_total_max` | **`startup_limit`** | Clearer intent, matches "startup" |
| `force_switch_on` | **`force_startup_tracking`** | More explicit about what is forced |
## Model Class (`OnOffModel` → `StatusModel`)
### Class Name
| Current Name | Recommended Name |
|--------------|------------------|
| `OnOffModel` | **`StatusModel`** |
### Constructor Parameters
| Current Name | Recommended Name | Rationale |
|--------------|------------------|-----------|
| `on_variable` | **`status`** | Aligns with PyPSA and literature |
| `previous_states` | **`previous_status`** | Consistency with status variable |
### Variables (short_name in add_variables/expression_tracking_variable)
| Current Name | Recommended Name | Type | Notes |
|--------------|------------------|------|-------|
| `self.on` | **`self.status`** | Input variable | Main binary state variable |
| `'off'` | **Remove variable** | Binary variable | Replace with expression `1 - status` |
| `'switch\|on'` | **`'startup'`** | Binary variable | Startup event indicator |
| `'switch\|off'` | **`'shutdown'`** | Binary variable | Shutdown event indicator |
| `'switch\|count'` | **`'startup_count'`** | Integer variable | Number of startups |
| `'on_hours_total'` | **`'active_hours'`** | Continuous variable | Total active duration |
| `'consecutive_on_hours'` | **`'uptime'`** | Continuous variable | Consecutive active hours |
| `'consecutive_off_hours'` | **`'downtime'`** | Continuous variable | Consecutive inactive hours |
### Properties
| Current Name | Recommended Name | Returns | Meaning |
|--------------|------------------|---------|---------|
| `on_hours_total` | **`active_hours`** | `linopy.Variable` | Total active hours |
| `off` | **Remove property** | — | Use `1 - status` expression |
| `switch_on` | **`startup`** | `linopy.Variable \| None` | Startup events |
| `switch_off` | **`shutdown`** | `linopy.Variable \| None` | Shutdown events |
| `switch_on_nr` | **`startup_count`** | `linopy.Variable \| None` | Number of startups |
| `consecutive_on_hours` | **`uptime`** | `linopy.Variable \| None` | Consecutive active hours |
| `consecutive_off_hours` | **`downtime`** | `linopy.Variable \| None` | Consecutive inactive hours |
### Internal Methods
| Current Name | Recommended Name |
|--------------|------------------|
| `_get_previous_on_duration()` | **`_get_previous_uptime()`** |
| `_get_previous_off_duration()` | **`_get_previous_downtime()`** |
### Internal Properties/Flags (in parameters)
| Current Name | Recommended Name |
|--------------|------------------|
| `use_off` | **Remove** (use expression instead) |
| `use_switch_on` | **`use_startup_tracking`** |
| `use_consecutive_on_hours` | **`use_uptime_tracking`** |
| `use_consecutive_off_hours` | **`use_downtime_tracking`** |
## Constraint Names (short_name in add_constraints)
| Current Name | Recommended Name |
|--------------|------------------|
| `'complementary'` | **Remove** (no off variable) |
| `'on_hours_total'` | **`'active_hours'`** |
| `'switch\|on'`, `'switch\|off'` | **`'startup'`, `'shutdown'`** |
| `'switch\|count'` | **`'startup_count'`** |
| `'consecutive_on_hours'` | **`'uptime'`** |
| `'consecutive_off_hours'` | **`'downtime'`** |
## Complete Terminology Summary (Option A)
**State:**
- `status` (binary): 1 = active, 0 = inactive
**Events:**
- `startup` (binary): transition from inactive to active
- `shutdown` (binary): transition from active to inactive
**Durations:**
- `active_hours` (continuous): **total** hours in active state across time horizon
- `uptime` (continuous): **consecutive** hours currently active (UC standard)
- `downtime` (continuous): **consecutive** hours currently inactive (UC standard)
**Parameter Bounds:**
- `active_hours_min/max`: limits on **total** active hours
- `min_uptime/max_uptime`: limits on **consecutive** active hours (UC standard)
- `min_downtime/max_downtime`: limits on **consecutive** inactive hours (UC standard)
- `startup_limit`: maximum number of startup events
**Effects:**
- `effects_per_startup`: costs/impacts per startup event
- `effects_per_active_hour`: costs/impacts per active hour
This aligns perfectly with PyPSA and the unit commitment literature! 🎯
* Refactor tests and examples
* Refactor tests and examples
* Update CHANGELOG.md
* Python Docstrings Updated:
1. interface.py - Module docstring now references "Status decisions"
2. components.py - Updated all docstrings:
- status_parameters parameter descriptions
- Example code updated with new parameter names (effects_per_startup, min_uptime, startup_limit)
- Fixed incorrect "OnOff feature" docstring to "Investment feature"
- Updated TODO comment to reference StatusParameters
3. linear_converters.py - All docstrings updated:
- Import statement updated to StatusParameters
- All parameter descriptions updated
- All example code updated with new terminology
4. flow_system.py - Updated references from "consecutive_on_hours" to "uptime and downtime" and on_off_parameters to status_parameters
5. modeling.py - Updated docstring from "switch-on/off variables" to "state transition constraints for binary switching variables"
Documentation Markdown Files Updated:
1. Flow.md - All references updated:
- Links to StatusParameters
- "on/off state" → "active/inactive state"
- Parameter names updated
2. StatusParameters.md (renamed from OnOffParameters.md) - Comprehensive updates:
- Title changed to "StatusParameters"
- All terminology updated: on/off → active/inactive
- Mathematical notation updated: s^on/s^off → s^startup/s^shutdown
- Duration variables: d^on/d^off → d^uptime/d^downtime
- Parameter names updated in all examples
- All Python code examples updated with new API
3. Other modeling pattern docs - Updated all references to StatusParameters and active/inactive terminology
4. mkdocs.yml - Navigation updated to reference StatusParameters.md
All docstrings and documentation now consistently use the new Status terminology aligned with PyPSA and unit commitment standards!
* Update remaining mentions of old parameters
* ⏺ Perfect! I've addressed all the actionable review comments:
Changes Made:
1. Fixed error message in modeling.py
- Corrected ModelingPrimitives.state_transition_bounds() → BoundingPatterns.state_transition_bounds() in error message (flixopt/modeling.py:591)
2. Fixed Transmission type hint (flixopt/components.py:667)
- Changed status_parameters: StatusParameters = None → status_parameters: StatusParameters | None = None
3. Fixed absolute_losses=0 edge case (flixopt/components.py:768)
- Added np.any(self.element.absolute_losses != 0) check in create_transmission_equation to match the initialization logic
- This prevents AttributeError when absolute_losses is explicitly set to 0
4. Updated test assertion messages (tests/test_component.py)
- Changed "On does not work properly" → "Status does not work properly"
5. Fixed effects_per_startup type (examples/02_Complex/complex_example.py)
- Changed scalar effects_per_startup=0.01 → dict effects_per_startup={Costs.label: 0.01} in all 3 occurrences
- Now consistent with the StatusParameters API which expects a dict mapping effect names to values
6. Updated test_functional.py docstring
- Removed reference to non-existent TestStatus class
- Updated to accurately describe the status-related test functions
7. Consistent unbounded upper bounds (flixopt/features.py:191)
- Changed np.inf → None for unbounded active_hours_max
- Now consistent with FlowModel's total_flow_hours pattern
All changes maintain backward compatibility and align with the codebase's existing patterns. The documentation in index.md was already correct (BoundingPatterns is
the right class for state_transition_bounds).
* Changes Made:
1. CHANGELOG.md - Fixed parameter rename documentation (lines 89-90)
- Changed incorrect status_parameters → status_parameters
- To correct: on_off_parameters → status_parameters
2. CHANGELOG.md - Removed duplicate logger warning (line 803 in v2.1.0)
- Removed duplicate entry that was already documented in v2.0.1
- Fixed v2.0.1 entry to say on_off_parameters (the name at that time)
3. StatusParameters.md - Aligned flow bounds formulation (line 229)
- Updated summary to include max(ε, rel_lower) like the main text
- Now consistent: s(t) · P · max(ε, rel_lower) ≤ p(t) ≤ s(t) · P · rel_upper
4. features.py - Narrowed previous_status type hint (line 155)
- Changed from Numeric_TPS | None to xr.DataArray | None
- Added import xarray as xr (line 12)
- This accurately reflects that _get_previous_uptime() and _get_previous_downtime() use xarray APIs
All changes are verified to compile correctly and maintain consistency with the codebase patterns!
* Fixed Issues
1. Constraint naming in tests (tests/test_component.py:126-127, 158, 168,
338, 348):
- Updated test expectations from 'TestComponent|on|lb' and
'TestComponent|on|ub' to 'TestComponent|status|lb' and
'TestComponent|status|ub' to match the actual constraint names
2. Added 'off' property to StatusModel (flixopt/features.py:284-287):
- Added a new property that returns 1 - self.status for backward
compatibility with tests expecting an off attribute
3. Fixed deprecated parameter name (tests/test_functional.py:435):
- Changed force_switch_on=True to force_startup_tracking=True in
StatusParameters
4. Fixed property name (tests/test_functional.py:466):
- Changed switch_off to shutdown to match the actual property name in
StatusModel
* Delete mistakingly added files
* Delete mistakingly added files
* Final touches
* Final touches
* Replace off with inactive
* Rename low level parameetrs as well:
switch_on -> activate
switch_off -> deactivate
* Rename low level parameetrs as well:
switch_on -> activate
switch_off -> deactivate
state_variable -> state
* Rename low level parameetrs as well:
switch_on -> activate
switch_off -> deactivate
state_variable -> state
* Docstring Improvements Summary
✅ All Parameters Now Documented
Each primitive now has complete parameter documentation with:
- Clear description of what each parameter does
- Type expectations
- Default values where applicable
✅ Focused on Math & Parameters
Removed:
- Excessive examples at low level
- Use case lists that belong at higher levels
Enhanced:
- Mathematical formulations (using proper · symbol for multiplication)
- Clear behavior descriptions
- Precise return value documentation
Updated Functions:
ModelingPrimitives:
1. expression_tracking_variable
- All 6 parameters documented
- Clear math formulation
2. consecutive_duration_tracking
- All 9 parameters documented
- Explained Big-M value
- Clear what constraints are returned
3. mutual_exclusivity_constraint
- All 4 parameters documented
- Simplified, focused on math
BoundingPatterns:
4. basic_bounds
- All 4 parameters documented
- Concise formulation
5. bounds_with_state
- All 5 parameters documented
- Explained epsilon (ε) usage
6. scaled_bounds
- All 5 parameters documented
- Clear scaling relationship
7. scaled_bounds_with_state
- All 7 parameters documented
- Explained Big-M formulation
8. state_transition_bounds
- All 7 parameters documented
- Removed verbose examples, kept math focus
9. continuous_transition_bounds
- All 8 parameters documented
- Clear Big-M constraint explanation
Result
✅ All parameters documented
✅ Math-focused docstrings
✅ Consistent format across all primitives
✅ Tests still passing
The modeling primitives now have professional, complete documentation!
* Update docs
* Add missing type hints
* Fix bullet points
* Fix bullet points
* Re-apply changes from main
* Bugfix: Usage of old on_off_parameters
* Update CHANGELOG.md
* Update CHANGELOG.md
* Update CHANGELOG.md
* Fix typos
* Improve flagging of wether to create inactive varaible
* Improve default upper bound of active_hours
* Bugfix self._model.hours_per_step.sum('time').item() with scenarios/periods
* Fix test
* FIx names
* pdate the test assertions to expect upper=total_hours instead of upper=inf when active_hours_max is not
specified
* Empty
* Trigger CI
* Fix test
* Triggger CI
* Summary of Fixes
1. Return type annotation for consecutive_duration_tracking (flixopt/modeling.py:255):
- Changed from tuple[linopy.Variable, tuple[linopy.Constraint, linopy.Constraint, linopy.Constraint]]
- To tuple[dict[str, linopy.Variable], dict[str, linopy.Constraint]] to match the actual return value
2. Clarified inactive property docstring (flixopt/features.py:284-291):
- Replaced the confusing "deprecated" note with a clear explanation that:
- The variable is only created when downtime tracking is enabled
- Users should prefer 1 - status expression for general use
3. Fixed _get_previous_uptime docstring (flixopt/features.py:318-322):
- Clarified that it returns 0 when no previous status is provided (assumes previously inactive)
4. Fixed _get_previous_downtime docstring (flixopt/features.py:329-333):
- Clarified that it returns one timestep duration when no previous status is provided (assumes previously inactive)
5. No action needed for effects_per_startup without use_startup_tracking:
- Verified that use_startup_tracking already returns True when effects_per_startup has values (line 1258 in interface.py), so this is already
handled correctly
6. Test fixes (tests/test_flow.py):
- Updated three test assertions to use model.hours_per_step.sum('time') as the expected upper bound for active_hours when active_hours_max is
not specified
* Trigger CI
…s done: Summary of Changes for v5.0.0 Removed Modules - calculation.py: Entire module deleted (contained deprecated Calculation, FullCalculation, AggregatedCalculation, SegmentedCalculation classes) Removed from clustering.py - Aggregation class alias → Use Clustering - AggregationParameters class alias → Use ClusteringParameters - AggregationModel class alias → Use ClusteringModel Removed from core.py - aggregation_group parameter in TimeSeriesData.from_dataarray() → Use clustering_group - aggregation_weight parameter in TimeSeriesData.from_dataarray() → Use clustering_weight Removed from optimization.py - active_timesteps parameter and property from all optimization classes → Use flow_system.sel(time=...) or flow_system.isel(time=...) - _perform_aggregation() method → Use _perform_clustering() - calculate_aggregation_weights() method → Use calculate_clustering_weights() - Backward compatibility for aggregation_group/aggregation_weight attrs in calculate_clustering_weights() Removed from config.py - change_logging_level() function → Use CONFIG.Logging.enable_console() - DEPRECATION_REMOVAL_VERSION constant (no longer needed) Removed from flow_system.py - .all_elements property → Use dict-like interface - .weights property (getter/setter) → Use .scenario_weights - weights kwarg in __init__ → Use scenario_weights Removed from elements.py and flow_system.py - Support for passing Bus objects directly to Flow → Pass bus label string instead Removed from results.py - CalculationResults class → Use Results - SegmentedCalculationResults class → Use SegmentedResults - flow_system parameter in Results.__init__ → Use flow_system_data - indexer parameter in multiple methods → Use select - heatmap_timeframes, heatmap_timesteps_per_frame parameters → Use reshape_time - color_map parameter → Use colors Removed from effects.py - Support for Effect objects in EffectValues → Use effect label strings Removed from structure.py - _handle_deprecated_kwarg() helper method (no longer needed) Removed from __init__.py - Exports for deprecated classes (FullCalculation, AggregatedCalculation, SegmentedCalculation, AggregationParameters, change_logging_level)
* | File | Changes |
|-------------------------|----------------------------------------------------------------------------------|
| flixopt/elements.py | Renamed attributes excess_input → virtual_supply, excess_output → virtual_demand |
| flixopt/optimization.py | Updated attribute access and result keys |
| tests/test_bus.py | Updated variable name strings in assertions |
| docs/.../Bus.md | Updated description of φ symbols |
The variable names in the optimization model are now:
- {BusName}|virtual_supply (was excess_input)
- {BusName}|virtual_demand (was excess_output)
* Renamed excess_penalty_per_flow_hour → imbalance_penalty_per_flow_hour
* rename excess_penalty to imbalance_penalty
* Change default to None
* Added self._validate_kwargs(kwargs) to catch typos and unexpected arguments
* Renamed with_excess → allows_imbalance
* Fix docstring
* 1. docs/user-guide/mathematical-notation/elements/Bus.md - Fixed three typos:
- "a imbalance_penalty_per_flow_hour" → "an imbalance_penalty_per_flow_hour"
- "usefull" → "useful"
- "ifeasiblity" → "infeasibility"
2. tests/test_bus.py - Updated comments to use the new imbalance terminology instead of the old "excess" terminology
3. flixopt/elements.py (BusModel) - Improved code clarity:
- Changed eq_bus_balance.lhs -= -self.virtual_supply + self.virtual_demand to the more readable eq_bus_balance.lhs += self.virtual_supply -
self.virtual_demand
- Added a comment explaining the equation: # Σ(inflows) + virtual_supply = Σ(outflows) + virtual_demand
- Combined the two separate add_share_to_effects calls into a single call with the combined expression (self.virtual_supply +
self.virtual_demand) * imbalance_penalty
All 12 bus tests pass with these changes.
* Flow.md - Fully restructured with:
- Tab-based organization (Core / Advanced / Patterns / Examples)
- Collapsible definition blocks
- Links to both Flow and FlowModel classes
- Updated docstrings with absolute URLs
2. Bus.md - Restructured with tab organization and dual class linking
3. Storage.md - Restructured with comprehensive examples and dual class linking
4. LinearConverter.md - Restructured with detailed examples including specialized converters
5. InvestParameters.md - Restructured with clear separation of core vs. advanced features
* Improve organization
* Improve organization
* Improve organization by using tables
* Improve organization by using tables and use eqref
* Add symbol to parameter mapping
* Changed to inline math
* Use propre constraints with numbering
* Move parameters into separate tab
* Reorder parameters
* : Use the columns "symbol" and "python name" in the variables tab
* Update Bus, Storage, and LinearConverter.md
* Update InvestParameters and OnOffParameters.md
* Update Piecewise.md
* Compact effects-penalty-objective.md
* Allow toc level 3
* Add toc to homepage
* Replace ustom css with mkdocs material stuff
* Revert some
* Revert some
* Remove layout css rule
* Show toc on homepage
* FIx broken link
* Add edit uri
* Hide bottom part
* Hide bottom part
* Restructure docs
* Show navigation in home
* Add Changelog fromating
* THighten CHANGELOG.md
* Simplify users.md
* Simplify models.md
* Shorten citing.md
* Shorten support.md
* Update CHANGELOG.md
* Simplify installation.md
* Simplify quick-start.md
* Updated FullCalculation → Optimization in documentation
Fixed mkdocs.yml navigation
Fixed broken link in support.md
* Fixed solver calls in docs
* Move files and restructure
* Delete old docs script
* Improve docs structure
* Imrpove Optimization Modes
* Imrpove Optimization Modes
* Rewrite the core concepts to be user facing
* Reorganize Mathematical Notation
* 1. Minimal variable names — Changed from words to symbols:
- penalty_rate → $c_\phi$
- relative_min → $p_{rel}^{min}$
- flow_hours → $h_f$
- loss → $\dot{c}_{loss}$
- etc.
2. Tabs for conditional constraints — Used === "Tab Name" syntax for:
- Bus.md: "Without Excess (Strict)" vs "With Excess (Soft)"
- Flow.md: "Standard (No On/Off)" vs "With On/Off" vs "Fixed Profile"
- Storage.md: "Fixed Initial" vs "Cyclic" vs "Final Bounds"
- LinearConverter.md: "Single Input/Output" vs "Multiple Outputs" vs "COP > 1" vs "Time-Varying"
- Effects.md: "Temporal (Operational)" vs "Periodic (Investment)" vs "Total"
3. Corrected Flow constraints — Clarified that:
- Without on/off parameters: flow cannot be zero if relative_minimum > 0
- With on/off parameters: flow can be zero (when off) OR within bounds (when on)
4. Cleaner structure — Removed redundant content, focused on essential formulas and examples
* The Flow.md now has four tabs for capacity bounds:
1. Fixed Size — Standard bounds without on/off
2. Fixed Size + On/Off — Can be zero when off
3. Variable Size — Investment decision on capacity
4. Variable Size + On/Off — Both investment and on/off, with big-M linearization for the bilinear term $s(t) \cdot P$
* InvestParameters.md:
- Story-driven intro with real-world examples
- Core concept: "Size as a Variable"
- Tabs for: Binary (Fixed Size) | Continuous (Size Range) | Mandatory
- Tabs for effects: Fixed | Specific | Retirement | Piecewise
- Minimal variable names: $P$, $s_{inv}$, $c_{fix}$, $c_{spec}$, etc.
- Cost annualization formula
OnOffParameters.md:
- Story-driven intro with real-world examples
- Core concept: "Binary State" with flow bound modification
- Tabs for state transitions: Switch Detection | Startup Costs | Running Costs
- Tabs for duration constraints: Min Run Time | Min Off Time | Max Run Time | Total Hours | Max Startups
- Minimal variable names: $s(t)$, $s^{on}(t)$, $s^{off}(t)$, $T_{on}^{min}$, etc.
Piecewise.md:
- Story-driven intro with ASCII diagram
- Core concept: Linear segments with weighted combinations
- Tabs for constraints: Single Piece Active | With Zero Point
- Tabs for piece patterns: Continuous (Touching) | Gap (Forbidden Region) | Zero Point
- Minimal variable names: $\beta_k$, $\lambda_0$, $\lambda_1$, etc.
- Practical examples for heat pumps, boilers, and investment
* Make OnOffParameters better
* Piecewise.md:
- Replaced the useless ASCII diagram with a more informative one showing:
- Actual axis labels (input/output)
- Numeric values on axes
- Two pieces with their connection point labeled
- Clear visual of how pieces connect at (50, 45)
- Shows the start/end points notation
* Add plotly chart
* Add custom javascript
* Remove charts plugin
* Add missing docs file
* Fix quick start
* Delete model.md
* Update citation
* Update license.md
* Simplify faq, support and troubleshooting.md
* Remove old workflow
* 1. Renamed OnOffParameters.md → StatusParameters.md
2. Updated all terminology:
- on_off_parameters → status_parameters
- OnOffParameters → StatusParameters
- effects_per_switch_on → effects_per_startup
- effects_per_running_hour → effects_per_active_hour
- consecutive_on_hours_min → min_uptime
- consecutive_on_hours_max → max_uptime
- consecutive_off_hours_min → min_downtime
- on_hours_min/max → active_hours_min/max
- switch_on_max → startup_limit
- switch_on/switch_off → startup/shutdown
- "on/off" language → "active/inactive" language
3. Updated references in Flow.md, LinearConverter.md, and effects-penalty-objective.md
* Remove Modeling patterns from docs
* Simplify docs
* Improve LinearConverter.md
* Improve Flow.md
* Improve effects-penalty-objective.md
* Improve InvestParameters.md
* Add durtaion constraints
* Update Piecewise stuff
* Update Piecewise stuff
* Update Piecewise stuff
* Combine effects and dimensions into one tab
* The dimension examples now correctly show how to assign them to FlowSystem using pd.Index:
* Update effects-and-dimensions.md
* Update effects-and-dimensions.md
* updated all reference tables across all Mathematical Notation pages to be consistent
* updated all reference tables across all Mathematical Notation pages to be consistent
* updated all reference tables across all Mathematical Notation pages to be consistent
Description
Brief description of the changes in this PR.
Type of Change
Related Issues
Closes #(issue number)
Testing
Checklist
Summary by CodeRabbit
Release Notes
Refactor
outputsinstead ofsource,thermal_efficiencyinstead ofeta,copinstead ofCOP).agg_groupandagg_weightare no longer supported.Tests