Skip to content

Commit 5dba9f2

Browse files
committed
Check whether utilization factors are below minimums
1 parent 9f14629 commit 5dba9f2

2 files changed

Lines changed: 32 additions & 1 deletion

File tree

src/muse/readers/csv.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -934,6 +934,7 @@ def check_utilization_and_minimum_service_factors(data, filename):
934934

935935
if "minimum_service_factor" in data.columns:
936936
_check_minimum_service_factors_in_range(data, filename)
937+
_check_utilization_not_below_minimum(data, filename)
937938

938939

939940
def _check_utilization_not_all_zero(data, filename):
@@ -955,6 +956,13 @@ def _check_utilization_in_range(data, filename):
955956
)
956957

957958

959+
def _check_utilization_not_below_minimum(data, filename):
960+
if (data["utilization_factor"] < data["minimum_service_factor"]).any():
961+
raise ValueError(f"""Utilization factors must all be greater than or equal to
962+
their corresponding minimum service factors. Please check
963+
{filename}.""")
964+
965+
958966
def _check_minimum_service_factors_in_range(data, filename):
959967
min_service_factor = data["minimum_service_factor"]
960968

tests/test_readers.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,25 @@ def test_check_utilization_in_range_fail(values):
449449
_check_utilization_in_range(df, "file.csv")
450450

451451

452+
def test_check_utilization_not_below_minimum_success():
453+
import pandas as pd
454+
from muse.readers.csv import _check_utilization_not_below_minimum
455+
456+
df = pd.DataFrame({"utilization_factor": (0, 1), "minimum_service_factor": (0, 0)})
457+
_check_utilization_not_below_minimum(df, "file.csv")
458+
459+
460+
def test_check_utilization_not_below_minimum_fail():
461+
import pandas as pd
462+
from muse.readers.csv import _check_utilization_not_below_minimum
463+
464+
df = pd.DataFrame(
465+
{"utilization_factor": (0, 1), "minimum_service_factor": (0.1, 0)}
466+
)
467+
with raises(ValueError):
468+
_check_utilization_not_below_minimum(df, "file.csv")
469+
470+
452471
def test_check_utilization_not_all_zero_fail_all_zero():
453472
import pandas as pd
454473
from muse.readers.csv import _check_utilization_not_all_zero
@@ -489,6 +508,7 @@ def test_check_minimum_service_factors_in_range_fail(values):
489508

490509
@patch("muse.readers.csv._check_utilization_in_range")
491510
@patch("muse.readers.csv._check_utilization_not_all_zero")
511+
@patch("muse.readers.csv._check_utilization_not_below_minimum")
492512
@patch("muse.readers.csv._check_minimum_service_factors_in_range")
493513
def test_check_utilization_and_minimum_service_factors(*mocks):
494514
import pandas as pd
@@ -504,9 +524,10 @@ def test_check_utilization_and_minimum_service_factors(*mocks):
504524

505525
@patch("muse.readers.csv._check_utilization_in_range")
506526
@patch("muse.readers.csv._check_utilization_not_all_zero")
527+
@patch("muse.readers.csv._check_utilization_not_below_minimum")
507528
@patch("muse.readers.csv._check_minimum_service_factors_in_range")
508529
def test_check_utilization_and_minimum_service_factors_no_min(
509-
min_service_factor_mock, *mocks
530+
min_service_factor_mock, utilization_below_min_mock, *mocks
510531
):
511532
import pandas as pd
512533
from muse.readers.csv import check_utilization_and_minimum_service_factors
@@ -516,10 +537,12 @@ def test_check_utilization_and_minimum_service_factors_no_min(
516537
for mock in mocks:
517538
mock.assert_called_once_with(df, "file.csv")
518539
min_service_factor_mock.assert_not_called()
540+
utilization_below_min_mock.assert_not_called()
519541

520542

521543
@patch("muse.readers.csv._check_utilization_in_range")
522544
@patch("muse.readers.csv._check_utilization_not_all_zero")
545+
@patch("muse.readers.csv._check_utilization_not_below_minimum")
523546
@patch("muse.readers.csv._check_minimum_service_factors_in_range")
524547
def test_check_utilization_and_minimum_service_factors_fail_missing_utilization(*mocks):
525548
import pandas as pd

0 commit comments

Comments
 (0)