diff --git a/src/antares/tsgen/ts_generator.py b/src/antares/tsgen/ts_generator.py index 14d24b6..eac381b 100644 --- a/src/antares/tsgen/ts_generator.py +++ b/src/antares/tsgen/ts_generator.py @@ -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 = { diff --git a/tests/test_unit.py b/tests/test_unit.py index 29c723d..ad538f7 100644 --- a/tests/test_unit.py +++ b/tests/test_unit.py @@ -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