Main branch for v5 with removed deprecated params#479
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.
|
* 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