From aeb51e89c1103836b2fd991a0ac789354465b55e Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Fri, 22 Sep 2017 08:15:28 +0200 Subject: o Properly implementing EeVal as a value parser. Still missing units. --- src/ee/__init__.py | 25 ++++++++++++++++--------- src/ee/formatting/__init__.py | 2 +- 2 files changed, 17 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/ee/__init__.py b/src/ee/__init__.py index bb45ce6..b4da410 100644 --- a/src/ee/__init__.py +++ b/src/ee/__init__.py @@ -1,6 +1,8 @@ +import math import numpy as np import re from functools import total_ordering +from ee.formatting import eng_str __all__ = [ "EeException", @@ -21,17 +23,18 @@ class EeVal(object): raise EeException("Could not parse value: " + str(s)) gs = m.groups() exp = gs[1].strip() - self._value = gs[0] - self._exp = EeVal.exponents.get(gs[1], 0) - self._unit = gs[2] + unit = gs[2] + self._value = int(gs[0]) + self._exp = EeVal.exponents.get(exp, 0) + self._unit = unit if len(unit) > 0 else None @property def value(self): - return self._value + return self.__float__() @property def unit(self): - return self._exp + return self._unit def __eq__(self, other): return ((self._value, self._unit) == (other._value, other._unit)) @@ -40,13 +43,17 @@ class EeVal(object): return ((self._value, self._unit) < (other._value, other._unit)) def __str__(self): - return str(self._value) + (" " + str(self._unit) if self._unit else "") +# return str(self._value) + (" " + str(self._unit) if self._unit else "") + return eng_str(self.__float__(), self._unit) + + def __float__(self): + return self._value * math.pow(10, self._exp) EeVal.exponents = { - 'f': -12, - 'p': -9, - 'n': -6, + 'f': -15, + 'p': -12, + 'n': -9, 'u': -6, '\u00B5': -6, # The micro symbol 'm': -3, diff --git a/src/ee/formatting/__init__.py b/src/ee/formatting/__init__.py index c2b5688..4527a96 100644 --- a/src/ee/formatting/__init__.py +++ b/src/ee/formatting/__init__.py @@ -72,7 +72,7 @@ def eng_str(value, unit=None): s = '0' + (' ' + unit if unit is not None else '') else: big = ['k', 'M', 'G', 'T'] - small = ['m', 'u', 'p'] + small = ['m', 'u', 'n', 'p'] if unit is not None: big = [' ' + unit] + [' ' + x + unit for x in big] -- cgit v1.2.3