def test_to_common(self): ureg = UnitRegistry() data = [ ureg.parse_expression(q) for q in '3 cm', '2.4 in', '9.1 cm', '0.04 ft'] result = to_common(data) self.assertEqual(result, [ ureg.parse_expression(q) for q in '3 cm', '6.096 cm', '9.1 cm', '1.2192 cm'])
def test_load(self): import pkg_resources from pint import unit data = pkg_resources.resource_filename(unit.__name__, 'default_en.txt') ureg1 = UnitRegistry() ureg2 = UnitRegistry(data) self.assertEqual(dir(ureg1), dir(ureg2)) self.assertRaises(ValueError, UnitRegistry(None).load_definitions, 'notexisting')
def test_default_format(self): ureg = UnitRegistry() q = ureg.meter s1 = '{0}'.format(q) s2 = '{0:~}'.format(q) ureg.default_format = '~' s3 = '{0}'.format(q) self.assertEqual(s2, s3) self.assertNotEqual(s1, s3) self.assertEqual(ureg.default_format, '~')
def test_default_format(self): ureg = UnitRegistry() q = ureg.meter s1 = "{0}".format(q) s2 = "{0:~}".format(q) ureg.default_format = "~" s3 = "{0}".format(q) self.assertEqual(s2, s3) self.assertNotEqual(s1, s3) self.assertEqual(ureg.default_format, "~")
def test_unit_default_formatting(self): ureg = UnitRegistry() x = ureg.Unit(UnitsContainer(meter=2, kilogram=1, second=-1)) for spec, result in (('L', r'\frac{kilogram \cdot meter^{2}}{second}'), ('P', 'kilogram·meter²/second'), ('H', 'kilogram meter<sup>2</sup>/second'), ('C', 'kilogram*meter**2/second'), ('~', 'kg * m ** 2 / s'), ('L~', r'\frac{kg \cdot m^{2}}{s}'), ('P~', 'kg·m²/s'), ('H~', 'kg m<sup>2</sup>/s'), ('C~', 'kg*m**2/s'), ): ureg.default_format = spec self.assertEqual('{0}'.format(x), result, 'Failed for {0}, {1}'.format(spec, result))
def test_unit_default_formatting(self): ureg = UnitRegistry() x = ureg.Unit(UnitsContainer(meter=2, kilogram=1, second=-1)) for spec, result in ( ("L", r"\frac{kilogram \cdot meter^{2}}{second}"), ("P", "kilogram·meter²/second"), ("H", "kilogram meter<sup>2</sup>/second"), ("C", "kilogram*meter**2/second"), ("~", "kg * m ** 2 / s"), ("L~", r"\frac{kg \cdot m^{2}}{s}"), ("P~", "kg·m²/s"), ("H~", "kg m<sup>2</sup>/s"), ("C~", "kg*m**2/s"), ): ureg.default_format = spec self.assertEqual("{0}".format(x), result, "Failed for {0}, {1}".format(spec, result))
def test_redefinition(self): d = UnitRegistry().define with self.capture_log() as buffer: d('meter = [fruits]') d('kilo- = 1000') d('[speed] = [vegetables]') # aliases d('bla = 3.2 meter = inch') d('myk- = 1000 = kilo-') self.assertEqual(len(buffer), 5)
:Author: Tomas Chor :Date of start: 2015-08-15 """ import os vfile = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'version') __version__ = open(vfile, 'rt').read().strip() #--------- # Here we create a "global" unitregistry for pymicra try: from pint.unit import UnitRegistry import os abspath = os.path.dirname(os.path.abspath(__file__)) ureg = UnitRegistry() ureg.load_definitions(os.path.join(abspath, 'pymicra.pint')) Q_ = ureg.Quantity except ImportError: print('No pint installed yet. Install pint!') #--------- from . import decorators from .io import * from .util import * from .micro import * from .signal import * from .core import * from . import io from . import physics
def test_base(self): ureg = UnitRegistry(None) ureg.define('meter = [length]') self.assertRaises(ValueError, ureg.define, 'meter = [length]') self.assertRaises(TypeError, ureg.define, list()) x = ureg.define('degC = kelvin; offset: 273.15')
def test_get_compatible_units(self): ureg = UnitRegistry() self.assertEqual(ureg.get_compatible_units(''), frozenset()) self.assertEqual(ureg.get_compatible_units('meter'), ureg.get_compatible_units(ParserHelper(meter=1)))
def test_get_base_units(self): ureg = UnitRegistry() self.assertEqual(ureg.get_base_units(''), (1, ureg.Unit(''))) self.assertEqual(ureg.get_base_units('meter'), ureg.get_base_units(ParserHelper(meter=1)))
def convert_unit(unit_type, from_unit, from_value, to_unit): """Converts value/unit found in params to the given to_unit. It validates the input parameters to ensure that they contain the expected types of data. Then, it converts the given unit value to the requested to_unit. And it returns the converted result. Parameters ---------- unit_type: UNIT_TYPES_ENUM (required) It is a valid pint unit type from_unit: str (required) It is a valid pint unit to be converted from. from_value: float (required) It is a number corresponding to the from_unit to be converted from. to_unit : str (required) It is a valid pint unit to be converted to. Returns ------- float: the converted unit value. """ if not unit_type: raise IllegalArgumentException("unit_type is required.") if not isinstance(unit_type, UNIT_TYPES_ENUM): raise IllegalArgumentException("unit_type is not UNIT_TYPES_ENUM.") if is_blank(from_unit): raise IllegalArgumentException("from_unit is required.") if not from_value : raise IllegalArgumentException("from_value is required.") if not is_number(from_value): raise IllegalArgumentException("from_value [{0}] is not a number." .format(from_value)) if is_blank(to_unit): raise IllegalArgumentException("to_unit is required.") # pint unit_reg unit converter object unit_reg = UnitRegistry(autoconvert_offset_to_baseunit=True) # an exception is raised if the to_unit is not valid to_unit_name = unit_reg.get_name(to_unit) to_unit_dimension = unit_reg.get_dimensionality(to_unit_name) if to_unit_dimension != UnitsContainer({"[" + unit_type.name + "]": 1}): raise IllegalArgumentException( ("Parameter to_unit=[{0}] not valid. [{1}] unit required.") .format(to_unit, unit_type.name)) # an exception is raised if the from_unit is not valid from_unit_name = unit_reg.get_name(from_unit) from_unit_dimension = unit_reg.get_dimensionality(from_unit_name) if from_unit_dimension != UnitsContainer({"[" + unit_type.name + "]": 1}): raise IllegalArgumentException( ("Parameter from_unit=[{0}] not valid. [{1}] unit required.") .format(from_unit, unit_type.name)) logging.debug("converting [{0} {1}] to [{2}]" .format(from_value, from_unit_name, to_unit_name)) from_value_float = float(from_value) from_value_quantity = from_value_float * unit_reg(from_unit_name) to_value_quantity = from_value_quantity.to(unit_reg(to_unit_name)) result = to_value_quantity.magnitude decimals = decimal_places(to_value_quantity.magnitude) final_result = result # restrict results to 2 decimal places. if(decimals > 2): final_result = round(result, 2) if final_result == 0: # do not return 0 (zero) when rounding gives 0 value. final_result = result logging.debug("input [{0} {1}] result [{2} {3}]" .format(from_value, from_unit_name, result, to_unit_name)) return final_result
def test_get_compatible_units(self): ureg = UnitRegistry() self.assertEqual(ureg.get_compatible_units(""), (1, UnitsContainer())) self.assertEqual(ureg.get_compatible_units("meter"), ureg.get_compatible_units(ParserHelper(meter=1)))
def test_quantity_conversion(self): from pint.unit import UnitRegistry ureg = UnitRegistry() self.assertEqual( to_units_container(ureg.Quantity(1, UnitsContainer(m=1))), UnitsContainer(m=1))
:Author: Tomas Chor :Date of start: 2015-08-15 """ import os vfile = os.path.join(os.path.dirname(os.path.realpath(__file__)),'version') __version__ = open(vfile, 'rt').read().strip() #--------- # Here we create a "global" unitregistry for pymicra try: from pint.unit import UnitRegistry import os abspath = os.path.dirname(os.path.abspath(__file__)) ureg = UnitRegistry() ureg.load_definitions(os.path.join(abspath,'pymicra.pint')) Q_ = ureg.Quantity except ImportError: print('No pint installed yet. Install pint!') #--------- import decorators from io import * from util import * from micro import * from signal import * from core import * import io import physics
def test_define(self): ureg = UnitRegistry(None) self.assertIsInstance(dir(ureg), list) self.assertGreater(len(dir(ureg)), 0)