Skip to content

Conversation

@FBumann
Copy link
Member

@FBumann FBumann commented Nov 19, 2025

Description

Brief description of the changes in this PR.

Type of Change

  • Bug fix
  • New feature
  • Documentation update
  • Code refactoring

Related Issues

Closes #(issue number)

Testing

  • I have tested my changes
  • Existing tests still pass

Checklist

  • My code follows the project style
  • I have updated documentation if needed
  • I have added tests for new functionality (if applicable)

Summary by CodeRabbit

Release Notes

  • Refactor

    • Removed deprecated property aliases and keyword arguments across components and converters; users must transition to current property names (e.g., outputs instead of source, thermal_efficiency instead of eta, cop instead of COP).
    • Eliminated backward-compatibility mappings and associated deprecation warnings; parameter names like agg_group and agg_weight are no longer supported.
    • Bumped minimum version requirement to v6.0.0.
  • Tests

    • Removed deprecation test suite.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 19, 2025

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Walkthrough

This 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

Cohort / File(s) Summary
Deprecation Infrastructure Cleanup
flixopt/components.py, flixopt/core.py, flixopt/effects.py, flixopt/elements.py, flixopt/interface.py, flixopt/linear_converters.py
Removed DEPRECATION_REMOVAL_VERSION import and related deprecation warning infrastructure from all affected modules.
SourceAndSink Component Deprecations
flixopt/components.py
Removed deprecated **kwargs parameter from SourceAndSink, Source, and Sink constructors; removed deprecated property aliases (source, sink, prevent_simultaneous_sink_and_source).
TimeSeriesData Deprecations
flixopt/core.py
Removed agg_group and agg_weight constructor parameters and properties from TimeSeriesData; deprecated handling for these aliases eliminated.
Effect Component Deprecations
flixopt/effects.py
Removed **kwargs from Effect.init; eliminated 8 deprecated property aliases (minimum_operation, maximum_operation, minimum_invest, maximum_invest, minimum_operation_per_hour, maximum_operation_per_hour, minimum_total_per_period, maximum_total_per_period).
Flow Component Deprecations
flixopt/elements.py
Removed **kwargs from Flow.init; eliminated backward-compat mapping for deprecated flow_hours keyword names; removed flow_hours_total_max/min deprecated properties.
InvestParameters & OnOffParameters Deprecations
flixopt/interface.py
Removed **kwargs from InvestParameters and OnOffParameters constructors; eliminated deprecated property aliases (optional, fix_effects, specific_effects, divest_effects, piecewise_effects, on_hours_total_min/max, switch_on_total_max).
Linear Converter Deprecations
flixopt/linear_converters.py
Removed **kwargs from 6 converter constructors (Boiler, Power2Heat, HeatPump, CoolingTower, CHP, HeatPumpWithSource); eliminated 11 deprecated property aliases (eta, Q_fu, Q_th, COP, P_el, Q_ab, etc.).
Test Suite Removal
test_deprecations.py
Deleted entire test file containing parameterized deprecation warning validation suite for v5.0.0 removal messages.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

  • Verify completeness of removals: Ensure all deprecated kwargs mappings and property aliases are fully removed across all six production files and that no stale deprecation warnings remain in code paths.
  • Check for orphaned references: Confirm that DEPRECATION_REMOVAL_VERSION is not referenced elsewhere in the codebase and that all import statements have been updated correctly.
  • Validate constructor signatures: Cross-check that the removal of **kwargs from constructors does not inadvertently break internal call sites that may still pass unexpected arguments.
  • Linear converters scope: The linear_converters.py file has the highest density of changes (6 classes with multiple property removals each); pay close attention to consistency of removal patterns.

Possibly related PRs

Poem

🐰 Deprecated code, oh what a sight,
Aliases stripped, properties gone tight,
Kwargs removed, the API so clean,
No more warnings clutter the scene,
Version 6 arrives, fresh and bright!

Pre-merge checks and finishing touches

❌ Failed checks (3 warnings)
Check name Status Explanation Resolution
Title check ⚠️ Warning The title references 'v5' but the summary shows changes for deprecation removal targeting v6.0.0, creating a mismatch between the stated version and actual implementation. Update the title to reflect v6.0.0 as the target version, for example: 'Remove deprecated parameters for v6.0.0 release' or 'Clean up deprecated APIs ahead of v6 release'.
Description check ⚠️ Warning The description is a placeholder template with unchecked testing boxes, missing actual details about the deprecated parameter removals, affected classes, and migration guidance for users. Fill in the description with concrete details: list key changes (deprecated params removed from 8+ classes), explain the v5→v6 version change, confirm testing status, and provide migration guidance for users.
Docstring Coverage ⚠️ Warning Docstring coverage is 16.67% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@FBumann
Copy link
Member Author

FBumann commented Nov 19, 2025

@coderabbitai review

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 19, 2025

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

# 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants