From 56c57e3b99739a9cdf0470b936980aa75c7d6fdd Mon Sep 17 00:00:00 2001 From: lance-pyles Date: Mon, 27 Jul 2020 15:05:45 -0700 Subject: [PATCH 1/3] initial commit of prefix-conversions --- conversions/prefix_conversions.py | 111 ++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 conversions/prefix_conversions.py diff --git a/conversions/prefix_conversions.py b/conversions/prefix_conversions.py new file mode 100644 index 000000000000..4341a946ba67 --- /dev/null +++ b/conversions/prefix_conversions.py @@ -0,0 +1,111 @@ +""" +Convert SI and Binary prefixes +""" + +from enum import Enum +from typing import Union + + +class SI_Unit(Enum): + + yotta = 24 + zetta = 21 + exa = 18 + peta = 15 + tera = 12 + giga = 9 + mega = 6 + kilo = 3 + hecto = 2 + deca = 1 + deci = -1 + centi = -2 + milli = -3 + micro = -6 + nano = -9 + pico = -12 + femto = -15 + atto = -18 + zepto = -21 + yocto = -24 + + +class Binary_Unit(Enum): + + yotta = 8 + zetta = 7 + exa = 6 + peta = 5 + tera = 4 + giga = 3 + mega = 2 + kilo = 1 + + +def convert_si_prefix( + known_amount: float, + known_prefix: Union[str, SI_Unit], + unknown_prefix: Union[str, SI_Unit], +) -> float: + """ + Wikipedia reference: https://en.wikipedia.org/wiki/Binary_prefix + >>> convert_si_prefix(1, SI_Unit.giga, SI_Unit.mega) + 1000 + >>> convert_si_prefix(1, SI_Unit.mega, SI_Unit.giga) + 0.001 + >>> convert_si_prefix(1, SI_Unit.kilo, SI_Unit.kilo) + 1 + >>> convert_si_prefix(1, 'giga', 'mega') + 1000 + """ + + if type(known_prefix) is str: + + known_prefix: SI_Unit = SI_Unit[known_prefix] + + if type(unknown_prefix) is str: + + unknown_prefix: SI_Unit = SI_Unit[unknown_prefix] + + unknown_amount = known_amount * (10 ** (known_prefix.value - unknown_prefix.value)) + + return unknown_amount + + +def convert_binary_prefix( + known_amount: float, + known_prefix: Union[str, Binary_Unit], + unknown_prefix: Union[str, Binary_Unit], +) -> float: + """ + Wikipedia reference: https://en.wikipedia.org/wiki/Metric_prefix + >>> convert_binary_prefix(1, Binary_Unit.giga, Binary_Unit.mega) + 1024 + >>> convert_binary_prefix(1, Binary_Unit.mega, Binary_Unit.giga) + 0.0009765625 + >>> convert_binary_prefix(1, Binary_Unit.kilo, Binary_Unit.kilo) + 1 + >>> convert_binary_prefix(1, 'giga', 'mega') + 1024 + """ + + if type(known_prefix) is str: + + known_prefix: Binary_Unit = Binary_Unit[known_prefix] + + if type(unknown_prefix) is str: + + unknown_prefix: Binary_Unit = Binary_Unit[unknown_prefix] + + unknown_amount = known_amount * ( + 2 ** ((known_prefix.value - unknown_prefix.value) * 10) + ) + + return unknown_amount + + +if __name__ == "__main__": + + import doctest + + doctest.testmod() From 336d966e6aef205fadf4ca95b78b123cb6924b91 Mon Sep 17 00:00:00 2001 From: lance-pyles Date: Tue, 28 Jul 2020 14:37:56 -0700 Subject: [PATCH 2/3] minor tweaks; --- conversions/prefix_conversions.py | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/conversions/prefix_conversions.py b/conversions/prefix_conversions.py index 4341a946ba67..7237f8f3d102 100644 --- a/conversions/prefix_conversions.py +++ b/conversions/prefix_conversions.py @@ -1,5 +1,5 @@ """ -Convert SI and Binary prefixes +Convert International System of Units (SI) and Binary prefixes """ from enum import Enum @@ -49,6 +49,7 @@ def convert_si_prefix( ) -> float: """ Wikipedia reference: https://en.wikipedia.org/wiki/Binary_prefix + Wikipedia reference: https://en.wikipedia.org/wiki/International_System_of_Units >>> convert_si_prefix(1, SI_Unit.giga, SI_Unit.mega) 1000 >>> convert_si_prefix(1, SI_Unit.mega, SI_Unit.giga) @@ -57,15 +58,14 @@ def convert_si_prefix( 1 >>> convert_si_prefix(1, 'giga', 'mega') 1000 + >>> convert_si_prefix(1, 'gIGa', 'mEGa') + 1000 """ + if isinstance(known_prefix, str): + known_prefix: SI_Unit = SI_Unit[known_prefix.lower()] - if type(known_prefix) is str: - - known_prefix: SI_Unit = SI_Unit[known_prefix] - - if type(unknown_prefix) is str: - - unknown_prefix: SI_Unit = SI_Unit[unknown_prefix] + if isinstance(unknown_prefix, str): + unknown_prefix: SI_Unit = SI_Unit[unknown_prefix.lower()] unknown_amount = known_amount * (10 ** (known_prefix.value - unknown_prefix.value)) @@ -87,15 +87,14 @@ def convert_binary_prefix( 1 >>> convert_binary_prefix(1, 'giga', 'mega') 1024 + >>> convert_binary_prefix(1, 'gIGa', 'mEGa') + 1024 """ + if isinstance(known_prefix, str): + known_prefix: Binary_Unit = Binary_Unit[known_prefix.lower()] - if type(known_prefix) is str: - - known_prefix: Binary_Unit = Binary_Unit[known_prefix] - - if type(unknown_prefix) is str: - - unknown_prefix: Binary_Unit = Binary_Unit[unknown_prefix] + if isinstance(unknown_prefix, str): + unknown_prefix: Binary_Unit = Binary_Unit[unknown_prefix.lower()] unknown_amount = known_amount * ( 2 ** ((known_prefix.value - unknown_prefix.value) * 10) From b9e69d72343070d8a97bdc76ccfa9341683a2899 Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Wed, 29 Jul 2020 00:02:59 +0200 Subject: [PATCH 3/3] Lose the blank lines --- conversions/prefix_conversions.py | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/conversions/prefix_conversions.py b/conversions/prefix_conversions.py index 7237f8f3d102..c2440d1cf886 100644 --- a/conversions/prefix_conversions.py +++ b/conversions/prefix_conversions.py @@ -1,13 +1,11 @@ """ Convert International System of Units (SI) and Binary prefixes """ - from enum import Enum from typing import Union class SI_Unit(Enum): - yotta = 24 zetta = 21 exa = 18 @@ -31,7 +29,6 @@ class SI_Unit(Enum): class Binary_Unit(Enum): - yotta = 8 zetta = 7 exa = 6 @@ -63,12 +60,9 @@ def convert_si_prefix( """ if isinstance(known_prefix, str): known_prefix: SI_Unit = SI_Unit[known_prefix.lower()] - if isinstance(unknown_prefix, str): unknown_prefix: SI_Unit = SI_Unit[unknown_prefix.lower()] - unknown_amount = known_amount * (10 ** (known_prefix.value - unknown_prefix.value)) - return unknown_amount @@ -92,19 +86,15 @@ def convert_binary_prefix( """ if isinstance(known_prefix, str): known_prefix: Binary_Unit = Binary_Unit[known_prefix.lower()] - if isinstance(unknown_prefix, str): unknown_prefix: Binary_Unit = Binary_Unit[unknown_prefix.lower()] - unknown_amount = known_amount * ( 2 ** ((known_prefix.value - unknown_prefix.value) * 10) ) - return unknown_amount if __name__ == "__main__": - import doctest doctest.testmod()