Example #1
0
    def test_pickle_definition_syntax_error(self):
        # OffsetUnitCalculusError raised from a custom ureg must be pickleable even if
        # the ureg is not registered as the application ureg
        ureg = UnitRegistry(filename=None)
        ureg.define("foo = [bar]")
        ureg.define("bar = 2 foo")
        q1 = ureg.Quantity("1 foo")
        q2 = ureg.Quantity("1 bar")

        for protocol in range(pickle.HIGHEST_PROTOCOL + 1):
            for ex in [
                    DefinitionSyntaxError("foo", filename="a.txt", lineno=123),
                    RedefinitionError("foo", "bar"),
                    UndefinedUnitError("meter"),
                    DimensionalityError("a", "b", "c", "d", extra_msg=": msg"),
                    OffsetUnitCalculusError(
                        Quantity("1 kg")._units,
                        Quantity("1 s")._units),
                    OffsetUnitCalculusError(q1._units, q2._units),
            ]:
                with self.subTest(protocol=protocol, etype=type(ex)):
                    pik = pickle.dumps(ureg.Quantity("1 foo"), protocol)
                    with self.assertRaises(UndefinedUnitError):
                        pickle.loads(pik)

                    # assert False, ex.__reduce__()
                    ex2 = pickle.loads(pickle.dumps(ex, protocol))
                    assert type(ex) is type(ex2)
                    self.assertEqual(ex.args, ex2.args)
                    self.assertEqual(ex.__dict__, ex2.__dict__)
                    self.assertEqual(str(ex), str(ex2))
Example #2
0
 def test_offset_unit_calculus_error(self):
     ex = OffsetUnitCalculusError(Quantity("1 kg")._units)
     assert (str(
         ex) == "Ambiguous operation with offset unit (kilogram). See " +
             OFFSET_ERROR_DOCS_HTML + " for guidance.")
     ex = OffsetUnitCalculusError(
         Quantity("1 kg")._units,
         Quantity("1 s")._units)
     assert (
         str(ex) ==
         "Ambiguous operation with offset unit (kilogram, second). See " +
         OFFSET_ERROR_DOCS_HTML + " for guidance.")
Example #3
0
 def test_offset_unit_calculus_error(self):
     ex = OffsetUnitCalculusError(Quantity("1 kg")._units)
     self.assertEqual(
         str(ex),
         "Ambiguous operation with offset unit (kilogram). See "
         "https://pint.readthedocs.io/en/latest/nonmult.html for guidance.",
     )
     ex = OffsetUnitCalculusError(Quantity("1 kg")._units, Quantity("1 s")._units)
     self.assertEqual(
         str(ex),
         "Ambiguous operation with offset unit (kilogram, second). See "
         "https://pint.readthedocs.io/en/latest/nonmult.html for guidance.",
     )