From 559005bb9ef3c8f898445e6df3cd79399450b0df Mon Sep 17 00:00:00 2001 From: Svyat Plehanov Date: Tue, 9 Jul 2024 16:59:22 +0200 Subject: [PATCH] feat(FUS-1124): add new unit types --- src/corva_unit_converter/converter.py | 2 ++ .../definitions/__init__.py | 4 ++- .../definitions/density.py | 36 ++++++++++++++++--- .../definitions/gas_concentration.py | 4 ++- .../definitions/gas_volume.py | 17 +++++++-- .../definitions/length.py | 11 +++++- src/corva_unit_converter/definitions/mass.py | 3 +- .../definitions/pressure.py | 6 +++- .../definitions/temperature.py | 9 +++-- .../definitions/viscosity.py | 30 ++++++++++++++++ .../definitions/voltage.py | 11 ++++++ .../definitions/volume_flow_rate.py | 12 +++++++ tests/test_converter.py | 2 +- tests/test_density.py | 4 +++ tests/test_length.py | 2 ++ tests/test_viscosity.py | 9 +++++ tests/test_voltage.py | 9 +++++ tests/test_volume_flow_rate.py | 4 ++- 18 files changed, 159 insertions(+), 16 deletions(-) create mode 100644 src/corva_unit_converter/definitions/viscosity.py create mode 100644 tests/test_viscosity.py create mode 100644 tests/test_voltage.py diff --git a/src/corva_unit_converter/converter.py b/src/corva_unit_converter/converter.py index b32c472..f406a7c 100644 --- a/src/corva_unit_converter/converter.py +++ b/src/corva_unit_converter/converter.py @@ -34,6 +34,8 @@ "torque": definitions.torque.rule, "volume_concentration": definitions.volume_concentration.rule, "volume_flow_rate": definitions.volume_flow_rate.rule, + "voltage": definitions.voltage.rule, + "viscosity": definitions.viscosity.rule } diff --git a/src/corva_unit_converter/definitions/__init__.py b/src/corva_unit_converter/definitions/__init__.py index 805b4a2..1c12f96 100644 --- a/src/corva_unit_converter/definitions/__init__.py +++ b/src/corva_unit_converter/definitions/__init__.py @@ -34,6 +34,7 @@ voltage, volume_concentration, volume_flow_rate, + viscosity ) __all__ = [ @@ -71,5 +72,6 @@ "torque", "voltage", "volume_concentration", - "volume_flow_rate" + "volume_flow_rate", + "viscosity" ] diff --git a/src/corva_unit_converter/definitions/density.py b/src/corva_unit_converter/definitions/density.py index 399f882..35dab30 100644 --- a/src/corva_unit_converter/definitions/density.py +++ b/src/corva_unit_converter/definitions/density.py @@ -70,7 +70,19 @@ "gm/3", "gm/c" ] - } + }, + "mg/l": { + "name": { + "singular": "Milligram per Liter", + "plural": "Milligrams per Liter", + "display": "mg/l" + }, + "to_anchor": 1 / 1000000, + "aliases": [ + "mg/l", + "mg/L" + ] + }, } imperial = { @@ -82,7 +94,10 @@ }, "to_anchor": 1, "aliases": [ - "lb/gal" + "lb/gal", + "lbm/gal", + "lbm/galUS", + "lbs/galUS" ] }, # https://glossary.slb.com/en/terms/p/ppg @@ -109,7 +124,8 @@ }, "to_anchor": 1 / 1000, "aliases": [ - "lb/Mgal" + "lb/Mgal", + "lbm/Mgal" ] }, "lb/ft3": { @@ -135,7 +151,19 @@ "aliases": [ "lb/in3" ] - } + }, + "lb/bbl": { + "name": { + "singular": "Pound Per Barrel", + "plural": "Pounds Per Barrel", + "display": "lb/bbl" + }, + "to_anchor": 1 / 42, + "aliases": [ + "lb/bbl", + "lbm/bbl", + ], + }, } rule = { diff --git a/src/corva_unit_converter/definitions/gas_concentration.py b/src/corva_unit_converter/definitions/gas_concentration.py index 8c910b3..71961ec 100644 --- a/src/corva_unit_converter/definitions/gas_concentration.py +++ b/src/corva_unit_converter/definitions/gas_concentration.py @@ -52,7 +52,9 @@ }, "to_anchor": 1, "aliases": [ - "%" + "%", + "%%", + "% by vol" ] }, "ppm": { diff --git a/src/corva_unit_converter/definitions/gas_volume.py b/src/corva_unit_converter/definitions/gas_volume.py index aa9ca94..7d2be54 100644 --- a/src/corva_unit_converter/definitions/gas_volume.py +++ b/src/corva_unit_converter/definitions/gas_volume.py @@ -21,7 +21,12 @@ "plural": "Millilitres", "display": "ml" }, - "to_anchor": 1 / 1000000 + "to_anchor": 1 / 1000000, + "aliases": [ + "mL", + "ml of", + "mL of" + ] }, "cl": { "name": { @@ -177,7 +182,10 @@ "plural": "Gallons", "display": "gal" }, - "to_anchor": 0.000133 + "to_anchor": 0.000133, + "aliases": [ + "gals", + ] }, "ft3": { "name": { @@ -201,7 +209,10 @@ "plural": "Oil barrels", "display": "bbl" }, - "to_anchor": 0.0056 + "to_anchor": 0.0056, + "aliases": [ + "bbls", + ] }, "Mscf": { "name": { diff --git a/src/corva_unit_converter/definitions/length.py b/src/corva_unit_converter/definitions/length.py index 7c4d42d..192ab6d 100644 --- a/src/corva_unit_converter/definitions/length.py +++ b/src/corva_unit_converter/definitions/length.py @@ -63,7 +63,7 @@ 'display': 'ft' }, 'to_anchor': 1, - 'aliases': ['f', 'ft', "'", 'feet'], + 'aliases': ['f', 'ft', "'", 'feet', "ftUS"], }, 'mi': { 'name': { @@ -73,6 +73,15 @@ }, 'to_anchor': 5280, 'aliases': ['mi'], + }, + '32nd': { + 'name': { + 'singular': '1/32 part of an Inch', + 'plural': '32 parts of an Inch', + 'display': '¹/₃₂ part of an Inch' + }, + 'to_anchor': 1 / 384, + 'aliases': ['32nd',"32nd in", "in/32"], } } diff --git a/src/corva_unit_converter/definitions/mass.py b/src/corva_unit_converter/definitions/mass.py index 9cf0304..aa2c82d 100644 --- a/src/corva_unit_converter/definitions/mass.py +++ b/src/corva_unit_converter/definitions/mass.py @@ -76,7 +76,8 @@ }, "to_anchor": 1, "aliases": [ - "lb" + "lb", + "lbs" ] } } diff --git a/src/corva_unit_converter/definitions/pressure.py b/src/corva_unit_converter/definitions/pressure.py index 27ef508..7dc6527 100644 --- a/src/corva_unit_converter/definitions/pressure.py +++ b/src/corva_unit_converter/definitions/pressure.py @@ -153,7 +153,11 @@ }, "to_anchor": ((1 / 144) / 100000), "aliases": [ - "hsf" + "hsf", + "lbf/100 ft2", + "lbf/100ft2", + "lbf/(100·ft²)", + "lb/100ft2" ] } } diff --git a/src/corva_unit_converter/definitions/temperature.py b/src/corva_unit_converter/definitions/temperature.py index 4c6c5ec..7dc2d93 100644 --- a/src/corva_unit_converter/definitions/temperature.py +++ b/src/corva_unit_converter/definitions/temperature.py @@ -8,7 +8,9 @@ "to_anchor": 1, "anchor_shift": 0, "aliases": [ - "degc" + "degc", + "degC", + "°C" ] }, "K": { @@ -34,7 +36,10 @@ }, "to_anchor": 1, "aliases": [ - "degf" + "degf", + "degF", + "°F", + "deg/F" ] } } diff --git a/src/corva_unit_converter/definitions/viscosity.py b/src/corva_unit_converter/definitions/viscosity.py new file mode 100644 index 0000000..4b081b7 --- /dev/null +++ b/src/corva_unit_converter/definitions/viscosity.py @@ -0,0 +1,30 @@ +metric = { + "mpas": { + "name": { + "singular": "Millipascal-second", + "plural": "Millipascal-seconds", + "display": "mPa·s", + }, + "to_anchor": 1, + "aliases": ["cP", "mPa·s", "mPa.s", "mPa*s"], + }, + "pas": { + "name": { + "singular": "Pascal-second", + "plural": "Pascal-seconds", + "display": "Pa·s", + }, + "to_anchor": 1000, + "aliases": ["Pa·s", "Pa.s", "Pa*s"], + }, +} + +rule = { + "metric": metric, + "_anchors": { + "metric": { + "unit": "s", + "ratio": 1 + } + } +} diff --git a/src/corva_unit_converter/definitions/voltage.py b/src/corva_unit_converter/definitions/voltage.py index e7c9109..968307c 100644 --- a/src/corva_unit_converter/definitions/voltage.py +++ b/src/corva_unit_converter/definitions/voltage.py @@ -20,6 +20,17 @@ "aliases": [ "mV" ] + }, + "nV": { + "name": { + "singular": "Nanovolt", + "plural": "Nanovolts", + "display": "nV" + }, + "to_anchor": 1/1000000, + "aliases": [ + "nV" + ] } } diff --git a/src/corva_unit_converter/definitions/volume_flow_rate.py b/src/corva_unit_converter/definitions/volume_flow_rate.py index 1c12eb5..b5b8cad 100644 --- a/src/corva_unit_converter/definitions/volume_flow_rate.py +++ b/src/corva_unit_converter/definitions/volume_flow_rate.py @@ -163,6 +163,18 @@ "aliases": [ "km3/s" ] + }, + "ml/30min": { + "name": { + "singular": "Millilitre per 30 Minutes", + "plural": "Millilitres per 30 Minutes", + "display": "ml/30min" + }, + "to_anchor": 1/1800000, + "aliases": [ + "ml/30min", + "mL/30 min" + ] } } diff --git a/tests/test_converter.py b/tests/test_converter.py index ed038be..96554ea 100644 --- a/tests/test_converter.py +++ b/tests/test_converter.py @@ -15,7 +15,7 @@ def test_get_measures_returns_correct_keys(): "mass", "mass_flow_rate", "mpl", "porosity", "power", "pressure", "pressure_gradient", "proportion", "revolution_per_volume", "speed", "strokes_rate", "temperature", "time", "torque", - "volume_concentration", "volume_flow_rate" + "volume_concentration", "volume_flow_rate", "viscosity", "voltage" ] assert sorted(result) == sorted(expected_keys) diff --git a/tests/test_density.py b/tests/test_density.py index afccfda..e0222c4 100644 --- a/tests/test_density.py +++ b/tests/test_density.py @@ -26,6 +26,10 @@ "measure": 'density'}, {"from": "ppg", "amount": 1, "to": "lb/in3", "expected": 0.00432900442862808, "measure": 'density'}, + {"from": "mg/l", "amount": 1, "to": "lb/bbl", "expected": 0.000350507, + "measure": 'density'}, + {"from": "lb/bbl", "amount": 1, "to": "mg/l", "expected": 2853.0095238095237, + "measure": 'density'}, # {"from": "lb/Mgal", "amount": 1, "to": "kg/m3", "expected": 119826.4}, # {"from": "kg/m3", "amount": 1, "to": "lb/Mgal", "expected": 8.3454e-06} ] diff --git a/tests/test_length.py b/tests/test_length.py index 1c11276..15d7d13 100644 --- a/tests/test_length.py +++ b/tests/test_length.py @@ -11,6 +11,8 @@ {"from": "mi", "amount": 1, "to": "km", "expected": 1.609343502101154}, {"from": "in", "amount": 1, "to": "mm", "expected": 25.4}, {"from": "mm", "amount": 1, "to": "in", "expected": 0.0393701}, + {"from": "32nd", "amount": 1, "to": "mm", "expected": 0.7937499746000007}, + {"from": "mm", "amount": 1, "to": "32nd", "expected": 1.25984256}, ] diff --git a/tests/test_viscosity.py b/tests/test_viscosity.py new file mode 100644 index 0000000..77bd36c --- /dev/null +++ b/tests/test_viscosity.py @@ -0,0 +1,9 @@ +from .utils import convert_units + +cases = [ + {"from": "mpas", "amount": 1, "to": "pas", "expected": 0.001 }, + {"from": "pas", "amount": 1, "to": "mpas", "expected": 1000 }, +] + +def test(): + convert_units(cases) \ No newline at end of file diff --git a/tests/test_voltage.py b/tests/test_voltage.py new file mode 100644 index 0000000..1316870 --- /dev/null +++ b/tests/test_voltage.py @@ -0,0 +1,9 @@ +from .utils import convert_units + +cases = [ + {"from": "V", "amount": 1, "to": "nV", "expected": 1000000000 }, + {"from": "nV", "amount": 1, "to": "V", "expected": 0.000000001}, +] + +def test(): + convert_units(cases) \ No newline at end of file diff --git a/tests/test_volume_flow_rate.py b/tests/test_volume_flow_rate.py index f31694d..45e76f3 100644 --- a/tests/test_volume_flow_rate.py +++ b/tests/test_volume_flow_rate.py @@ -3,7 +3,9 @@ # test cases cases = [ {"from": "gal/min", "amount": 1, "to": "m3/min", "expected": 0.00378541}, - {"from": "m3/min", "amount": 1, "to": "gal/min", "expected": 264.172} + {"from": "m3/min", "amount": 1, "to": "gal/min", "expected": 264.172}, + {"from": "gal/min", "amount": 1, "to": "ml/30min", "expected": 113562.354}, + {"from": "ml/30min", "amount": 1, "to": "gal/min", "expected": 0.00000880573508}, ]