Coverage for backend/django/Economics/costing/cost_curves/unit_options.py: 100%

17 statements  

« prev     ^ index     » next       coverage.py v7.10.7, created at 2026-06-23 21:51 +0000

1from Economics.shared.unit_options import ( 

2 UnitOption, 

3 dedupe_unit_options, 

4 infer_physical_unit_type, 

5 unit_options_for_unit_type, 

6 with_current_unit, 

7) 

8 

9COMMON_DRIVER_UNITS = ( 

10 "dimensionless", 

11 "m", 

12 "m^2", 

13 "m^3", 

14 "m^3/h", 

15 "kg/s", 

16 "kW", 

17 "bar", 

18 "count", 

19) 

20 

21 

22def cost_curve_input_unit_options(input_unit: str) -> list[UnitOption]: 

23 current = (input_unit or "").strip() 

24 inferred_type = infer_physical_unit_type(current) 

25 return with_current_unit(unit_options_for_unit_type(inferred_type) if inferred_type else [], current) 

26 

27 

28def cost_curve_common_driver_unit_options() -> list[UnitOption]: 

29 options = [] 

30 for unit in COMMON_DRIVER_UNITS: 

31 inferred_type = infer_physical_unit_type(unit) 

32 compatible_options = unit_options_for_unit_type(inferred_type) if inferred_type else [] 

33 options.append( 

34 next( 

35 (option for option in compatible_options if option["value"] == unit), 

36 {"value": unit, "label": unit}, 

37 ) 

38 ) 

39 return dedupe_unit_options(options) 

40 

41 

42def cost_curve_output_unit_options(output_unit: str, *, currency: str = "NZD") -> list[UnitOption]: 

43 current = (output_unit or "").strip() 

44 options = ( 

45 {"value": currency, "label": currency}, 

46 {"value": f"M{currency}", "label": f"M{currency}"}, 

47 ) 

48 return with_current_unit(options, current)