X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=conversion_utils.py;h=68292caccbc692570010ab5ed98c10cbcc05d9c7;hb=532df2c5b57c7517dfb3dddd8c1358fbadf8baf3;hp=43268400021443344809b59dd8ced0fb91b9de18;hpb=36fea7f15ed17150691b5b3ead75450e575229ef;p=python_utils.git diff --git a/conversion_utils.py b/conversion_utils.py index 4326840..68292ca 100644 --- a/conversion_utils.py +++ b/conversion_utils.py @@ -1,7 +1,11 @@ #!/usr/bin/env python3 +# -*- coding: utf-8 -*- -from numbers import Number -from typing import Callable +# © Copyright 2021-2022, Scott Gasch + +"""Utilities involving converting between different units.""" + +from typing import Callable, SupportsFloat import constants @@ -38,10 +42,10 @@ class Converter(object): self.from_canonical_f = from_canonical self.unit = unit - def to_canonical(self, n: Number) -> Number: + def to_canonical(self, n: SupportsFloat) -> SupportsFloat: return self.to_canonical_f(n) - def from_canonical(self, n: Number) -> Number: + def from_canonical(self, n: SupportsFloat) -> SupportsFloat: return self.from_canonical_f(n) def unit_suffix(self) -> str: @@ -86,9 +90,7 @@ conversion_catalog = { lambda c: c * 1.8 + 32.0, "°F", ), - "Celsius": Converter( - "Celsius", "temperature", lambda c: c, lambda c: c, "°C" - ), + "Celsius": Converter("Celsius", "temperature", lambda c: c, lambda c: c, "°C"), "Kelvin": Converter( "Kelvin", "temperature", @@ -99,7 +101,7 @@ conversion_catalog = { } -def convert(magnitude: Number, from_thing: str, to_thing: str) -> float: +def convert(magnitude: SupportsFloat, from_thing: str, to_thing: str) -> float: src = conversion_catalog.get(from_thing, None) dst = conversion_catalog.get(to_thing, None) if src is None or dst is None: @@ -109,9 +111,7 @@ def convert(magnitude: Number, from_thing: str, to_thing: str) -> float: return _convert(magnitude, src, dst) -def _convert( - magnitude: Number, from_unit: Converter, to_unit: Converter -) -> float: +def _convert(magnitude: SupportsFloat, from_unit: Converter, to_unit: Converter) -> float: canonical = from_unit.to_canonical(magnitude) converted = to_unit.from_canonical(canonical) return float(converted)