示例#1
0
    def _get_root_units(self, input_units, check_nonmult=True):
        if not input_units:
            return Decimal('1'), UnitsContainer()

        # The cache is only done for check_nonmult=True
        if check_nonmult and input_units in self._root_units_cache:
            return self._root_units_cache[input_units]

        accumulators = [Decimal('1'), defaultdict(Decimal)]
        self._get_root_units_recurse(input_units, Decimal('1'), accumulators)

        factor = accumulators[0]
        units = UnitsContainer(dict(
            (k, v) for k, v in accumulators[1].items() if v != Decimal('0')))

        if check_nonmult:
            for unit in units.keys():
                if not self._units[unit].converter.is_multiplicative:
                    return None, units

        if check_nonmult:
            self._root_units_cache[input_units] = factor, units

        return factor, units
示例#2
0
    def test_unitcontainer_arithmetic(self):
        x = UnitsContainer(meter=1)
        y = UnitsContainer(second=1)
        z = UnitsContainer(meter=1, second=-2)

        self._test_not_inplace(op.mul, x, y, UnitsContainer(meter=1, second=1))
        self._test_not_inplace(op.truediv, x, y,
                               UnitsContainer(meter=1, second=-1))
        self._test_not_inplace(op.pow, z, 2, UnitsContainer(meter=2,
                                                            second=-4))
        self._test_not_inplace(op.pow, z, -2, UnitsContainer(meter=-2,
                                                             second=4))

        self._test_inplace(op.imul, x, y, UnitsContainer(meter=1, second=1))
        self._test_inplace(op.itruediv, x, y, UnitsContainer(meter=1,
                                                             second=-1))
        self._test_inplace(op.ipow, z, 2, UnitsContainer(meter=2, second=-4))
        self._test_inplace(op.ipow, z, -2, UnitsContainer(meter=-2, second=4))
示例#3
0
 def test_dict_conversion(self):
     assert to_units_container(dict(m=1)) == UnitsContainer(m=1)
示例#4
0
    def test_quantity_conversion(self):
        from pint.registry import UnitRegistry

        ureg = UnitRegistry()
        assert to_units_container(ureg.Quantity(
            1, UnitsContainer(m=1))) == UnitsContainer(m=1)
示例#5
0
 def test_str_conversion(self):
     assert to_units_container("m") == UnitsContainer(m=1)
示例#6
0
 def test_baseunit_definition(self):
     x = Definition.from_string("meter = [length]")
     self.assertIsInstance(x, UnitDefinition)
     self.assertTrue(x.is_base)
     self.assertEqual(x.reference, UnitsContainer({"[length]": 1}))
示例#7
0
 def test_convert_parse_str(self):
     ureg = self.ureg
     self.assertEqual(
         ureg.convert(1, 'meter', 'inch'),
         ureg.convert(1, UnitsContainer(meter=1), UnitsContainer(inch=1)))
示例#8
0
 def test_unit_repr(self):
     x = self.U_(UnitsContainer(meter=1))
     self.assertEqual(str(x), 'meter')
     self.assertEqual(repr(x), "<Unit('meter')>")
示例#9
0
 def test_parse_single(self):
     self.assertEqual(self.ureg.parse_expression("meter"),
                      self.Q_(1, UnitsContainer(meter=1.0)))
     self.assertEqual(self.ureg.parse_expression("second"),
                      self.Q_(1, UnitsContainer(second=1.0)))
示例#10
0
    def test_dimensionality(self):

        x = self.U_("m")
        self.assertEqual(x.dimensionality, UnitsContainer({"[length]": 1}))
示例#11
0
 def test_parse_mul_div(self):
     self.assertEqual(self.ureg.parse_expression('meter*meter'), self.Q_(1, UnitsContainer(meter=2.)))
     self.assertEqual(self.ureg.parse_expression('meter**2'), self.Q_(1, UnitsContainer(meter=2.)))
     self.assertEqual(self.ureg.parse_expression('meter*second'), self.Q_(1, UnitsContainer(meter=1., second=1)))
     self.assertEqual(self.ureg.parse_expression('meter/second'), self.Q_(1, UnitsContainer(meter=1., second=-1)))
     self.assertEqual(self.ureg.parse_expression('meter/second**2'), self.Q_(1, UnitsContainer(meter=1., second=-2)))
示例#12
0
 def test_convert_parse_str(self):
     ureg = self.ureg
     assert ureg.convert(1, "meter", "inch") == ureg.convert(
         1, UnitsContainer(meter=1), UnitsContainer(inch=1)
     )
示例#13
0
 def test_unit_repr(self):
     x = self.U_(UnitsContainer(meter=1))
     assert str(x) == "meter"
     assert repr(x) == "<Unit('meter')>"
示例#14
0
 def test_parse_prefix(self):
     assert self.ureg.parse_expression("kilometer") == self.Q_(
         1, UnitsContainer(kilometer=1.0)
     )
示例#15
0
 def test_parse_plural(self):
     assert self.ureg.parse_expression("meters") == self.Q_(
         1, UnitsContainer(meter=1.0)
     )
示例#16
0
 def test_parse_complex(self):
     self.assertEqual(self.ureg.parse_expression('kilometre'),
                      self.Q_(1, UnitsContainer(kilometer=1.)))
     self.assertEqual(self.ureg.parse_expression('kilometres'),
                      self.Q_(1, UnitsContainer(kilometer=1.)))
示例#17
0
 def test_parse_alias(self):
     self.assertEqual(self.ureg.parse_expression("metre"),
                      self.Q_(1, UnitsContainer(meter=1.0)))
示例#18
0
 def test_parse_factor(self):
     self.assertEqual(self.ureg.parse_expression('42*meter'),
                      self.Q_(42, UnitsContainer(meter=1.)))
     self.assertEqual(self.ureg.parse_expression('meter*42'),
                      self.Q_(42, UnitsContainer(meter=1.)))
示例#19
0
 def test_convert_parse_str(self):
     ureg = self.ureg
     self.assertEqual(
         ureg.convert(1, "meter", "inch"),
         ureg.convert(1, UnitsContainer(meter=1), UnitsContainer(inch=1)),
     )
示例#20
0
 def test_baseunit_definition(self):
     x = Definition.from_string("meter = [length]")
     assert isinstance(x, UnitDefinition)
     assert x.is_base
     assert x.reference == UnitsContainer({"[length]": 1})
示例#21
0
    def test_dimensionality(self):

        x = self.U_('m')
        self.assertEqual(x.dimensionality, UnitsContainer({'[length]': 1}))
示例#22
0
 def test_invalid(self):
     with pytest.raises(TypeError):
         UnitsContainer({1: 2})
     with pytest.raises(TypeError):
         UnitsContainer({"1": "2"})
     d = UnitsContainer()
     with pytest.raises(TypeError):
         d.__mul__(list())
     with pytest.raises(TypeError):
         d.__pow__(list())
     with pytest.raises(TypeError):
         d.__truediv__(list())
     with pytest.raises(TypeError):
         d.__rtruediv__(list())
示例#23
0
 def test_creation(self):
     for arg in ('meter', UnitsContainer(meter=1), self.U_('m')):
         self.assertEqual(self.U_(arg)._units, UnitsContainer(meter=1))
     self.assertRaises(TypeError, self.U_, 1)
示例#24
0
 def test_uc_conversion(self):
     a = UnitsContainer(m=1)
     assert to_units_container(a) is a
示例#25
0
 def test_deepcopy(self):
     x = self.U_(UnitsContainer(meter=1))
     self.assertEqual(x, copy.deepcopy(x))
示例#26
0
    def test_unit_conversion(self):
        from pint import Unit

        assert to_units_container(Unit(
            UnitsContainer(m=1))) == UnitsContainer(m=1)
示例#27
0
 def test_parse_single(self):
     self.assertEqual(self.ureg.parse_expression('meter'),
                      self.Q_(1, UnitsContainer(meter=1.)))
     self.assertEqual(self.ureg.parse_expression('second'),
                      self.Q_(1, UnitsContainer(second=1.)))
示例#28
0
 def test_unitcontainer_bool(self):
     assert UnitsContainer(meter=1, second=2)
     assert not UnitsContainer()
示例#29
0
 def test_parse_plural(self):
     self.assertEqual(self.ureg.parse_expression('meters'),
                      self.Q_(1, UnitsContainer(meter=1.)))
示例#30
0
 def test_parse_prefix(self):
     self.assertEqual(self.ureg.parse_expression('kilometer'),
                      self.Q_(1, UnitsContainer(kilometer=1.)))
示例#31
0
 def test_parse_alias(self):
     assert self.ureg.parse_expression("metre") == self.Q_(
         1, UnitsContainer(meter=1.0)
     )