Skip to content

Commit 593a43b

Browse files
committed
Check that utilisation factors are in range
1 parent f4199af commit 593a43b

2 files changed

Lines changed: 32 additions & 0 deletions

File tree

src/muse/readers/csv.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -930,6 +930,7 @@ def check_utilization_and_minimum_service_factors(data, filename):
930930
)
931931

932932
_check_utilization_not_all_zero(data, filename)
933+
_check_utilization_in_range(data, filename)
933934
_check_minimum_service_factors_in_range(data, filename)
934935

935936

@@ -943,6 +944,15 @@ def _check_utilization_not_all_zero(data, filename):
943944
)
944945

945946

947+
def _check_utilization_in_range(data, filename):
948+
utilization = data["utilization_factor"]
949+
if not np.all((0 <= utilization) & (utilization <= 1)):
950+
raise ValueError(
951+
f"""Utilization factor values must all be between 0 and 1 inclusive.
952+
Please check file {filename}."""
953+
)
954+
955+
946956
def _check_minimum_service_factors_in_range(data, filename):
947957
try:
948958
min_service_factor = data["minimum_service_factor"]

tests/test_readers.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,26 @@ def test_check_utilization_not_all_zero_success():
429429
_check_utilization_not_all_zero(df, "file.csv")
430430

431431

432+
def test_check_utilization_in_range_success():
433+
import pandas as pd
434+
from muse.readers.csv import _check_utilization_in_range
435+
436+
df = pd.DataFrame({"utilization_factor": (0, 1)})
437+
_check_utilization_in_range(df, "file.csv")
438+
439+
440+
@mark.parametrize(
441+
"values", chain.from_iterable(permutations((0, bad)) for bad in (-1, 2))
442+
)
443+
def test_check_utilization_in_range_fail(values):
444+
import pandas as pd
445+
from muse.readers.csv import _check_utilization_in_range
446+
447+
df = pd.DataFrame({"utilization_factor": values})
448+
with raises(ValueError):
449+
_check_utilization_in_range(df, "file.csv")
450+
451+
432452
def test_check_utilization_not_all_zero_fail_all_zero():
433453
import pandas as pd
434454
from muse.readers.csv import _check_utilization_not_all_zero
@@ -478,6 +498,7 @@ def test_check_minimum_service_factors_in_range_fail(values):
478498

479499

480500
@patch("muse.readers.csv._check_minimum_service_factors_in_range")
501+
@patch("muse.readers.csv._check_utilization_in_range")
481502
@patch("muse.readers.csv._check_utilization_not_all_zero")
482503
def test_check_utilization_and_minimum_service_factors(*mocks):
483504
import pandas as pd
@@ -490,6 +511,7 @@ def test_check_utilization_and_minimum_service_factors(*mocks):
490511

491512

492513
@patch("muse.readers.csv._check_minimum_service_factors_in_range")
514+
@patch("muse.readers.csv._check_utilization_in_range")
493515
@patch("muse.readers.csv._check_utilization_not_all_zero")
494516
def test_check_utilization_and_minimum_service_factors_missing_column(*mocks):
495517
import pandas as pd

0 commit comments

Comments
 (0)