feat: Update to main - #769
Merged
Merged
Conversation
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
| Case | Layout |
|------------------|-------------------------------------------------------------------------|
| Simple (no dims) | Single heatmap |
| Periods only | Vertical stack (1 column) |
| Scenarios only | Horizontal layout |
| Both | Grid (periods as rows, scenarios as columns via facet_cols=n_scenarios) |
| File | Issue | Fix |
|-------------------------------------------------|-----------------------------------------------------------|-----------------------------------------------------|
| docs/notebooks/03-investment-optimization.ipynb | Division by zero when solar_size = 0 | Added guard: if solar_size > 0 else float('nan') |
| flixopt/clustering/base.py:181-235 | ClusterStructure.plot() crashes for multi-period/scenario | Added NotImplementedError with helpful message |
| flixopt/components.py:1256-1265 | Obsolete linopy LP writer bug workaround | Removed + 0.0 workaround (fixed in linopy >= 0.5.1) |
| flixopt/dataset_plot_accessor.py:742-780 | to_duration_curve crashes on variables without time dim | Added guard to skip non-time variables |
| flixopt/features.py:234-236 | Critical: Startup count ignores cluster weighting | Now multiplies by cluster_weight before summing |
| flixopt/structure.py:268-281 | scenario_weights docstring misleading | Updated docstring to accurately describe behavior |
Nitpick Fixes
| File | Fix |
|----------------------------------------------------|-------------------------------------------------------------------------------------------|
| docs/notebooks/data/generate_example_systems.py | Fixed type hint pd.DataFrame → pd.Series for _elec_prices, added timezone guard |
| flixopt/statistics_accessor.py:2103-2132 | Added detailed comment explaining secondary y-axis offset strategy |
| tests/test_cluster_reduce_expand.py | Moved import xarray as xr to top of file |
| docs/notebooks/data/generate_realistic_profiles.py | Clarified warnings.resetwarnings() comment |
| flixopt/transform_accessor.py | Removed unused cluster_coords and time_coords params from _combine_slices_to_dataarray_2d |
| flixopt/comparison.py | Added error handling to _concat_property for FlowSystems lacking optimization data |
feat: clustering of time series data
Adds support for controlling status behavior at cluster boundaries: - 'relaxed' (default): No constraint at cluster boundaries, prevents phantom startups - 'cyclic': Each cluster's final status equals its initial status 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…key changes: Changes Made | Change | Lines Saved | Description | |------------------------------------------------|-------------|-------------------------------------------------| | Added _select_dims() helper | +8 lines | Reusable helper for period/scenario selection | | Simplified get_cluster_order_for_slice() | -6 lines | Reduced from 7 lines to 1 line | | Simplified get_cluster_occurrences_for_slice() | -5 lines | Reduced from 7 lines to 2 lines | | Simplified get_timestep_mapping_for_slice() | -6 lines | Reduced from 7 lines to 1 line | | Refactored expand_data() | -20 lines | Extracted _expand_slice helper, unified logic | | Simplified heatmap() | -40 lines | Replaced manual loops with vectorized np.repeat |
…ues for their previous_* parameters, causing TypeError: unsupported operand type(s) for -/+: '...' and 'NoneType'.
Fixes applied:
1. BoundingPatterns.state_transition_bounds (line 574-630):
- Updated type hint: previous_state: float | xr.DataArray | None = 0
- Made the initial constraint conditional: skip when previous_state is None (relaxed)
2. ModelingPrimitives.consecutive_duration_tracking (line 244-357):
- Updated type hint: previous_duration: xr.DataArray | None = 0
- Fixed big-M calculation to use 0 when previous_duration is None
- Made both initial and initial_lb constraints conditional
These None values come from features.py:218 and features.py:251 when there's no previous status/duration data, indicating a "relaxed" initial state with no constraint at t=0.
1. Fixed consecutive_duration_tracking type hint: previous_duration: xr.DataArray | float | int | None = None 2. Updated docstring to clarify which constraint keys are present based on parameters 3. Updated state_transition_bounds docstring to note initial_constraint is None when previous_state is None clustering/base.py: 1. Added guard in get_cluster_occurrences_for_slice - raises ValueError if period/scenario dims exist but weren't selected 2. Added length assertion in heatmap expansion - validates len(original_time) == expanded_values.shape[0] 3. Added dimension validation in expand_data._expand_slice - validates data slice only has expected dimensions before fancy indexing
Feature/minor improvements
1. flixopt/transform_accessor.py:1352 - Fixed boolean check on xarray DataArray in _apply_soc_decay: # Before: if not (loss_value > 0).any(): # Returns DataArray, not bool # After: if not np.any(loss_value.values > 0): # Returns Python bool 2. flixopt/flow_system.py:2100 - Fixed boolean check in scenario_weights setter: # Before: if np.isclose(norm, 0.0).any(): # Returns DataArray # After: if np.isclose(norm, 0.0).any().item(): # Returns Python bool 3. flixopt/clustering/base.py:134, 342 - Fixed mutation of self.n_clusters and self.n_representatives during serialization: # Before: self.n_clusters = self.n_clusters.rename(n_clusters_name) # Mutates self # After: n_clusters_da = self.n_clusters.rename(n_clusters_name) # Local variable 4. flixopt/clustering/intercluster_helpers.py:87 - Fixed documentation inconsistency: # Docstring now correctly says 1e6 to match DEFAULT_UNBOUNDED_CAPACITY constant
…d PV capacity scaling (Major issue):
# Before: system_efficiency = 0.15 * 0.85 # Only ~12.75% output
# After: performance_ratio = 0.85 # Standard kWp scaling with losses
1. Now correctly treats capacity_kw as installed DC capacity (kWp).
2. flixopt/optimization.py:110-120 - Added missing deprecation warning for normalize_weights:
if normalize_weights is not None:
warnings.warn(
f'\n\nnormalize_weights parameter is deprecated...',
DeprecationWarning, stacklevel=3
)
3. docs/notebooks/08a-aggregation.ipynb (cell 7) - Fixed comment about resolution:
# Before: "Resample from 15-min to 4h resolution"
# After: "Resample from 1h to 4h resolution"
4. docs/design/cluster_architecture.md - File doesn't exist (skipped)
Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@v6...v7) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…ffects (#719) (#720) * fix(stats): apply threshold along breakdown dimension in plot.effects `stats.plot.effects(by='component'|'contributor')` lays entities out along a coordinate of a single variable (e.g. `costs`) rather than as separate data variables. The threshold filter only dropped whole data variables, so non-invested components with a ~0 contribution were still shown (#719). Generalize the filter to also drop small entries along the breakdown dimension, split it into named helpers, and rename it `_drop_small` since it no longer filters variables only. Adds a parametrized regression test. Fixes #719 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * style: apply ruff format Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(stats): drop empty breakdown instead of falling back to full dataset When every entry along the breakdown dimension is below threshold, _drop_small_along_dim returned the unfiltered dataset, silently ignoring the user's threshold (an all-below-threshold effects breakdown showed everything). Return the empty selection instead. The full effects render handles the empty dataset without crashing (verified across all aspects / by / effect combos). Scope: only the new dim-path helper is changed. The pre-existing _drop_small_data_vars fallback shared by 8 other plot methods is left as-is. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Bumps [dash](https://github.com/plotly/dash) from 3.3.0 to 4.4.0. - [Release notes](https://github.com/plotly/dash/releases) - [Changelog](https://github.com/plotly/dash/blob/dev/CHANGELOG.md) - [Commits](plotly/dash@v3.3.0...v4.4.0) --- updated-dependencies: - dependency-name: dash dependency-version: 4.4.0 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: flixopt-release-bot[bot] <246706635+flixopt-release-bot[bot]@users.noreply.github.com>
Bumps [dependabot/fetch-metadata](https://github.com/dependabot/fetch-metadata) from 2 to 3. - [Release notes](https://github.com/dependabot/fetch-metadata/releases) - [Commits](dependabot/fetch-metadata@v2...v3) --- updated-dependencies: - dependency-name: dependabot/fetch-metadata dependency-version: '3' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Speed up ci by only ranning fast tests on drafts * Remove deprecated from drafts * Improve test selection * Make docs match this pattern * Add include paths to workflows: - flixopt/** (source code) - tests/** (test files) - pyproject.toml (config/dependencies) * Added .github/workflows/** to both tests and docs workflows. Now CI config changes will trigger both. * Retrigger CI * Ensure workflows are triggered on ready_for_review
…739) tsam-xarray 0.6.4 makes output dimension names configurable through DimNames. Pass DimNames(period='original_cluster') to aggregate() so the original-period axis no longer collides with a real 'period' slice dim. This removes the entire rename/unrename adapter that existed only to work around the fixed 'period'/'cluster' output names: - cluster()/apply_clustering() no longer rename period->_period etc. in and back out, and apply_clustering() applies the stored ClusteringResult directly instead of rebuilding one with renamed slice dims. - _ReducedFlowSystemBuilder and Clustering lose _unrename_map/_unrename. The only renames left are the honest tsam<->flixopt boundary translations timestep->time / timestep->segment. Bumps the tsam_xarray pin to 0.6.4. All public clustering outputs (cluster_assignments, cluster_occurrences, original/reconstructed/residuals/accuracy, dim_names, disaggregate, the reduced FlowSystem's (cluster, time) vars and cluster_weight) keep identical dim names, shapes and values in single- and multi-period systems. BREAKING CHANGE: the serialized clustering format changed - slice dims are now stored as 'period' (was '_period') plus a new 'dim_names' key. Clustering artifacts saved to JSON/netCDF by an older flixopt no longer load for apply_clustering()/expand() in this version; re-run transform.cluster() to regenerate them. Fresh clustering and same-version round-trips are unaffected. Also raises the minimum tsam_xarray to 0.6.4. Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
…fs (#742) Files written before flixopt 7.0 stored clustering.original_data and clustering._metrics as ':::original_data|...' / ':::metrics|...' references in the clustering attrs JSON. The target arrays are no longer serialized (they only fed the removed plot.compare()), and the current Clustering constructor rejects the _original_data_refs / _metrics_refs keys outright. As a result, FlowSystem.from_netcdf() on any such file raised "Referenced DataArray 'original_data|...' not found in dataset". Drop the two legacy keys in _restore_clustering before resolving so old files remain loadable. 7.2.x files themselves are unaffected (they write no such references). Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
* fix: dimension-aware effect-total consistency check The post-solve validation in _create_effects_dataset compared ds[effect].sum(...) against solution[label] via np.allclose on the raw .values. When the two arrays carry the same dims in a different order -- e.g. a clustered system expanded back yields (scenario, period) while the computed total is (period, scenario) -- numpy cannot broadcast (3,2) against (2,3) and raises ValueError, turning a soft warning into a hard crash. Align the two label-aware before comparing: warn on a genuine dimension-set mismatch, otherwise transpose solution[label] to the computed dim order. Applies to both copies of the check (StatisticsAccessor and Results). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * test: clustered FlowSystem save/load/expand round-trip matrix Curated from property-based fuzzing that ran save -> load -> expand over random combinations of periods (0-3), scenarios (0-3), storage (all initial-charge modes), converters and optimize on/off, same-version and cross-version (7.0.0/7.1.0 -> 7.2.3). No round-trip failures were found; these 24 cases pin the representative dimension layouts so the path stays intact, and assert the effect-total validation does not crash on any layout. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
The lint job ran `uvx ruff` unpinned, so it silently tracked the latest release while the repo pins ruff==0.15.21 in [dev]. Ruff 0.16.0 began formatting Python code blocks inside Markdown, which flags 26 docs files and fails lint on every open PR regardless of its contents. Pinning to the same version pre-commit uses makes CI reproducible and puts ruff upgrades back under dependabot's control, where the docs reformat can land as a reviewed change alongside the bump. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: support linopy 0.9.0 by routing constraint mutation through update() linopy 0.8 added Constraint.update() and 0.9 deprecates assignment to Constraint.lhs. flixopt escalates DeprecationWarning from its own package to an error, so every effect-bearing model failed to build on linopy 0.9. Add modeling._set_constraint_lhs(), which dispatches to Constraint.update() where it exists and to the .lhs setter on linopy < 0.8, and route the six in-place LHS mutations (share accumulators, bus imbalance, transmission absolute losses) through it. Term order is unchanged on every version. Widen the linopy pin to >=0.5.1,<0.10. * test: assert determinate quantities in two degenerate clustering tests Both tests pinned one arbitrary vertex of a degenerate optimal face, so they flipped when linopy 0.9 changed internal ordering and HiGHS landed on the mirrored optimum. The objective and all flow rates were unchanged. test_storage_cyclic_charge_discharge_pattern: the two clusters carry identical data, so which one gets which absolute SOC offset is arbitrary (any level in [50, 100] is optimal). Assert the SOC deltas and the cyclic wrap instead. test_expanded_storage: gas price and boiler efficiency are flat, so storage earns nothing and every cycling depth -- including none -- is optimal. The old `nansum(charge_state) > 0` passed on linopy 0.7 only on ~1e-5 noise.
* fix: load clustered NetCDF files written before flixopt 7.0
Files written before 7.0 serialize the clustering under a `results` key
holding {'dim_names': [...], 'results': {key: tsam_blob}}, where each key
is the slice coordinates joined into a string ('2030|low', or
'__single__' when the clustering is undivided). Clustering now expects a
`clustering_result` matching tsam_xarray's ClusteringResult.from_dict,
which takes a list of {'key': [...], 'clustering': tsam_blob} entries, so
loading any pre-7.0 clustered file fails with:
Failed to create instance of Clustering:
Clustering.__init__() got unexpected keyword arguments: {'results'}
The per-slice tsam blobs are byte-identical between the two layouts, so
only the surrounding structure is rewritten. Two details matter:
- Legacy keys are strings, but the current schema indexes clusterings by
the coordinate values, so '2030' has to become the integer 2030 or
every lookup misses. The value is recovered by matching against the
restored coordinate rather than by guessing a type, so scenario labels
that merely look numeric survive unchanged.
- Slice dims are stored under their pre-rename spelling, so 'period'
becomes '_period' to match what tsam_xarray is handed today.
Verified against files generated by flixopt 6.1.0 and 6.2.1 — plain,
solved, multi-period, and period+scenario. Cluster assignments compare
equal per slice, and an expanded solved file reproduces each original
cluster from its typical cluster.
The multi-dim fixture moves to module scope so the new tests can reuse
its deliberately-different per-slice assignments, which is what catches
keys landing on the wrong slice.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* refactor: fold legacy clustering key restoration into one pass
The key restoration was a second method scanning the coordinate index once
per key part. Building a stringified lookup per slice dim up front collapses
it into the migration itself, at the same cost.
Behaviour is unchanged: 291 clustering tests pass, and files generated by
flixopt 6.1.0 and 6.2.1 (plain, solved, multi-period, period+scenario) still
load with assignments equal per slice.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Updates the requirements on [xarray](https://github.com/pydata/xarray) to permit the latest version. - [Release notes](https://github.com/pydata/xarray/releases) - [Commits](pydata/xarray@v2024.02.0...v2026.07.0) --- updated-dependencies: - dependency-name: xarray dependency-version: 2026.7.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* ci: always report lint and test on pull requests The ruleset on main requires lint and test (3.11-3.14). #562 added a paths filter to the pull_request trigger, and a workflow that never triggers never reports its checks, so any PR touching only files outside flixopt/, tests/, pyproject.toml or .github/workflows/ is permanently blocked. Release PRs change exactly CHANGELOG.md, .release-please-manifest.json and CITATION.cff, so #740 cannot merge; #737 predates the filter and ran normally. The filter moves into a `changes` job that reads the PR's file list, and the install and pytest steps become conditional on it. The jobs still run and still report, but a docs-only PR costs a runner start instead of a full matrix. Detection failures fall back to running the tests, so a bad lookup wastes CI rather than skipping a real test run. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * ci: fall back to running tests when PR file lookup fails Steps run under `bash -e`, so `paths=$(gh pr view ...)` aborted the step on a failed lookup rather than falling through to the empty-listing fallback. The changes job would fail, test would be skipped via needs, and the required checks would go unreported - the same block this workflow exists to prevent. Guarding the assignment lets the intended fallback run. Also declares least-privilege permissions for the workflow, matching release.yaml and dependabot-auto-merge.yaml; pull-requests: read is what the file-list lookup needs. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: flixopt-release-bot[bot] <246706635+flixopt-release-bot[bot]@users.noreply.github.com>
8.0.0 shipped with a breaking-change notice describing a clustering format change that is not in the release. #739 introduced it and #746 reverted it before release, but release-please does not pair a revert with its original, so the BREAKING CHANGE footer both drove the major bump and rendered into the notes. Replaces the notice with a note explaining why the major carries no breaking change, and moves #739 from Code Refactoring to Reverts. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
tsam_xarray 0.6.5 renamed AggregationResult.cluster_weights to cluster_counts, keeping the old name as a deprecated property. The `full` extra allows >= 0.6.1, so a fresh install resolves to 0.6.5 and every cluster() call emits a FutureWarning -- and fails outright under -W error, which is how the test suite runs: 254 of 286 clustering tests failed on 0.6.5 before this change. cluster_counts does not exist before 0.6.5, so the floor moves with the rename rather than merely allowing the new version. This shipped in neither 8.0.0 nor its predecessor: #755 carried the same change but was retargeted onto an intermediate branch that merged into main first, so it landed on that branch instead of main. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: flixopt-release-bot[bot] <246706635+flixopt-release-bot[bot]@users.noreply.github.com>
Bumps [tsam-xarray](https://github.com/FBumann/tsam_xarray) from 0.6.5 to 0.6.6. - [Release notes](https://github.com/FBumann/tsam_xarray/releases) - [Changelog](https://github.com/FBumann/tsam_xarray/blob/main/CHANGELOG.md) - [Commits](FBumann/tsam_xarray@v0.6.5...v0.6.6) --- updated-dependencies: - dependency-name: tsam-xarray dependency-version: 0.6.6 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 4.6.0 to 4.6.1. - [Release notes](https://github.com/pre-commit/pre-commit/releases) - [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md) - [Commits](pre-commit/pre-commit@v4.6.0...v4.6.1) --- updated-dependencies: - dependency-name: pre-commit dependency-version: 4.6.1 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.15.21 to 0.16.0. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](astral-sh/ruff@0.15.21...0.16.0) --- updated-dependencies: - dependency-name: ruff dependency-version: 0.16.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [nbformat](https://github.com/jupyter/nbformat) from 5.10.4 to 5.11.0. - [Release notes](https://github.com/jupyter/nbformat/releases) - [Changelog](https://github.com/jupyter/nbformat/blob/main/CHANGELOG.md) - [Commits](jupyter/nbformat@v5.10.4...v5.11.0) --- updated-dependencies: - dependency-name: nbformat dependency-version: 5.11.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 4.6.1 to 4.6.2. - [Release notes](https://github.com/pre-commit/pre-commit/releases) - [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md) - [Commits](pre-commit/pre-commit@v4.6.1...v4.6.2) --- updated-dependencies: - dependency-name: pre-commit dependency-version: 4.6.2 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Contributor
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Brief description of the changes in this PR.
Type of Change
Related Issues
Closes #(issue number)
Testing
Checklist