Skip to content

Commit

Permalink
fix(cluster): forbid null durations (#16)
Browse files Browse the repository at this point in the history
  • Loading branch information
MartinBelthle authored Oct 22, 2024
1 parent 5756352 commit c211c93
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/antares/tsgen/ts_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,10 +88,10 @@ def _check_cluster(cluster: ThermalCluster) -> None:

_check_array(cluster.fo_rate < 0, "Forced failure rate is negative on following days")
_check_array(cluster.fo_rate > 1, "Forced failure rate is greater than 1 on following days")
_check_array(cluster.fo_duration < 0, "Forced outage duration is negative on following days")
_check_array(cluster.fo_duration <= 0, "Forced outage duration is null or negative on following days")
_check_array(cluster.po_rate < 0, "Planned failure rate is negative on following days")
_check_array(cluster.po_rate > 1, "Planned failure rate is greater than 1 on following days")
_check_array(cluster.po_duration < 0, "Planned outage duration is negative on following days")
_check_array(cluster.po_duration <= 0, "Planned outage duration is null or negative on following days")
_check_array(cluster.modulation < 0, "Hourly modulation is negative on following hours")

lengths = {
Expand Down
23 changes: 23 additions & 0 deletions tests/test_unit.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,29 @@ def base_cluster_365_days():
)


def test_cluster_with_null_duration(rng):
days = 365
args = {
"unit_count": 10,
"nominal_power": 100,
"modulation": np.ones(dtype=float, shape=8760),
"fo_law": ProbabilityLaw.UNIFORM,
"fo_volatility": 0,
"po_law": ProbabilityLaw.UNIFORM,
"po_volatility": 0,
"fo_duration": 10 * np.ones(dtype=int, shape=days),
"fo_rate": 0.2 * np.zeros(dtype=float, shape=days),
"po_duration": 10 * np.ones(dtype=int, shape=days),
"po_rate": np.zeros(dtype=float, shape=days),
"npo_min": np.zeros(dtype=int, shape=days),
"npo_max": 10 * np.zeros(dtype=int, shape=days),
}
for duration_type in ["po_duration", "fo_duration"]:
args[duration_type] = 10 * np.zeros(dtype=int, shape=days)
with pytest.raises(ValueError, match="outage duration is null or negative on following days"):
ThermalCluster(**args)


def test_invalid_fo_rates(rng, base_cluster_365_days):
days = 365
cluster = base_cluster_365_days
Expand Down

0 comments on commit c211c93

Please sign in to comment.