Module peprock.models.metric_prefix
Metric prefix model.
See https://en.wikipedia.org/wiki/Metric_prefix
Examples
>>> MetricPrefix.mega.convert(5, to=MetricPrefix.kilo)
5000
>>> MetricPrefix.centi.convert(0.7, to=MetricPrefix.milli)
7.0
Classes
class MetricPrefix (*args, **kwds)-
Expand source code
class MetricPrefix(enum.IntEnum): """MetricPrefix IntEnum with symbol and conversion support.""" quetta = 30 ronna = 27 yotta = 24 zetta = 21 exa = 18 peta = 15 tera = 12 giga = 9 mega = 6 kilo = 3 hecto = 2 deca = 1 NONE = 0 deci = -1 centi = -2 milli = -3 micro = -6 nano = -9 pico = -12 femto = -15 atto = -18 zepto = -21 yocto = -24 ronto = -27 quecto = -30 @classmethod def from_symbol(cls: type[MetricPrefix], symbol: str, /) -> MetricPrefix: """Return MetricPrefix by symbol.""" return cls._by_symbol()[symbol] @functools.cached_property def symbol(self: MetricPrefix) -> str: """Metric prefix symbol, e.g. G for giga.""" return self._symbols()[self] def __str__(self: MetricPrefix) -> str: """Return symbol.""" return self.symbol @typing.overload def to( self: MetricPrefix, __other: MetricPrefix | int, /, *, number_type: type[int] = int, ) -> int | float: ... @typing.overload def to( self: MetricPrefix, __other: MetricPrefix | int, /, *, number_type: type[ComplexT], ) -> ComplexT: ... def to( self: MetricPrefix, __other: MetricPrefix | int, /, *, number_type: type[int | ComplexT] = int, ) -> int | ComplexT: """Calculate conversion factor between self and other.""" return number_type(_BASE) ** (self - __other) @typing.overload def convert( self: MetricPrefix, __value: int, /, to: MetricPrefix = NONE, # type: ignore[assignment] ) -> int | float: ... @typing.overload def convert( self: MetricPrefix, __value: ComplexT, /, to: MetricPrefix = NONE, # type: ignore[assignment] ) -> ComplexT: ... def convert( self, __value, /, to=NONE, ): """Convert value from metric prefix self to to.""" if self is to: return __value return __value * self.to(to, number_type=type(__value)) @staticmethod @functools.cache def _symbols() -> types.MappingProxyType[MetricPrefix, str]: return types.MappingProxyType( { MetricPrefix.quetta: "Q", MetricPrefix.ronna: "R", MetricPrefix.yotta: "Y", MetricPrefix.zetta: "Z", MetricPrefix.exa: "E", MetricPrefix.peta: "P", MetricPrefix.tera: "T", MetricPrefix.giga: "G", MetricPrefix.mega: "M", MetricPrefix.kilo: "k", MetricPrefix.hecto: "h", MetricPrefix.deca: "da", MetricPrefix.NONE: "", MetricPrefix.deci: "d", MetricPrefix.centi: "c", MetricPrefix.milli: "m", MetricPrefix.micro: "μ", MetricPrefix.nano: "n", MetricPrefix.pico: "p", MetricPrefix.femto: "f", MetricPrefix.atto: "a", MetricPrefix.zepto: "z", MetricPrefix.yocto: "y", MetricPrefix.ronto: "r", MetricPrefix.quecto: "q", }, ) @classmethod @functools.cache def _by_symbol( cls: type[MetricPrefix], ) -> types.MappingProxyType[str, MetricPrefix]: return types.MappingProxyType( {symbol: metric_prefix for metric_prefix, symbol in cls._symbols().items()}, )MetricPrefix IntEnum with symbol and conversion support.
Ancestors
- enum.IntEnum
- builtins.int
- enum.ReprEnum
- enum.Enum
Class variables
var NONE-
The type of the None singleton.
var atto-
The type of the None singleton.
var centi-
The type of the None singleton.
var deca-
The type of the None singleton.
var deci-
The type of the None singleton.
var exa-
The type of the None singleton.
var femto-
The type of the None singleton.
var giga-
The type of the None singleton.
var hecto-
The type of the None singleton.
var kilo-
The type of the None singleton.
var mega-
The type of the None singleton.
var micro-
The type of the None singleton.
var milli-
The type of the None singleton.
var nano-
The type of the None singleton.
var peta-
The type of the None singleton.
var pico-
The type of the None singleton.
var quecto-
The type of the None singleton.
var quetta-
The type of the None singleton.
var ronna-
The type of the None singleton.
var ronto-
The type of the None singleton.
var tera-
The type of the None singleton.
var yocto-
The type of the None singleton.
var yotta-
The type of the None singleton.
var zepto-
The type of the None singleton.
var zetta-
The type of the None singleton.
Static methods
def from_symbol(symbol: str, /) ‑> MetricPrefix-
Return MetricPrefix by symbol.
Instance variables
var symbol : str-
Expand source code
@functools.cached_property def symbol(self: MetricPrefix) -> str: """Metric prefix symbol, e.g. G for giga.""" return self._symbols()[self]Metric prefix symbol, e.g. G for giga.
Methods
def convert(self, _MetricPrefix__value, /, to=0)-
Expand source code
def convert( self, __value, /, to=NONE, ): """Convert value from metric prefix self to to.""" if self is to: return __value return __value * self.to(to, number_type=type(__value))Convert value from metric prefix self to to.
def to(self: MetricPrefix,
_MetricPrefix__other: MetricPrefix | int,
/,
*,
number_type: type[int | ComplexT] = builtins.int) ‑> int | ComplexT-
Expand source code
def to( self: MetricPrefix, __other: MetricPrefix | int, /, *, number_type: type[int | ComplexT] = int, ) -> int | ComplexT: """Calculate conversion factor between self and other.""" return number_type(_BASE) ** (self - __other)Calculate conversion factor between self and other.