From 20c3cd69a91b7a5ba1a6ad8dbc62cc62a118ac00 Mon Sep 17 00:00:00 2001 From: Emilien Kofman Date: Wed, 13 Jan 2016 10:42:17 +0100 Subject: [PATCH 1/3] UnitRegistry.convert now returns a Fraction if the user submits a Fraction to it. I also added a test for this issue. --- pint/testsuite/test_issues.py | 6 ++++++ pint/unit.py | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/pint/testsuite/test_issues.py b/pint/testsuite/test_issues.py index db9100b..41cc4fa 100644 --- a/pint/testsuite/test_issues.py +++ b/pint/testsuite/test_issues.py @@ -507,3 +507,9 @@ class TestIssuesNP(QuantityTestCase): t = copy.deepcopy(q) u = t.to(ur.mF) self.assertQuantityEqual(q.to(ur.mF), u) + + def test_issue323(self): + from fractions import Fraction as F + self.assertEqual((self.Q_(F(2,3), 's')).to('ms'), self.Q_(F(2000,3), 'ms')) + self.assertEqual((self.Q_(F(2,3), 'm')).to('km'), self.Q_(F(1,1500), 'km')) + diff --git a/pint/unit.py b/pint/unit.py index 9acdae5..be00fe4 100644 --- a/pint/unit.py +++ b/pint/unit.py @@ -18,6 +18,7 @@ import functools import operator import pkg_resources from decimal import Decimal +from fractions import Fraction from contextlib import contextmanager, closing from io import open, StringIO from collections import defaultdict @@ -1109,6 +1110,9 @@ class UnitRegistry(object): if isinstance(value, Decimal): factor = Decimal(str(factor)) + if isinstance(value, Fraction): + factor = Fraction(Decimal(str(factor))) + if inplace: value *= factor else: From 4dd7413dc60ca074e1f33ba0e2c642e495e31a71 Mon Sep 17 00:00:00 2001 From: Emilien Kofman Date: Wed, 13 Jan 2016 13:23:21 +0100 Subject: [PATCH 2/3] Trying to make it python2.6 compatible. --- pint/unit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pint/unit.py b/pint/unit.py index be00fe4..1e5f8bb 100644 --- a/pint/unit.py +++ b/pint/unit.py @@ -1111,7 +1111,7 @@ class UnitRegistry(object): factor = Decimal(str(factor)) if isinstance(value, Fraction): - factor = Fraction(Decimal(str(factor))) + factor = Fraction(str(factor)) if inplace: value *= factor From 5a7e57ad30845b6dcdca5afc41f16648cf8449f4 Mon Sep 17 00:00:00 2001 From: Emilien Kofman Date: Fri, 15 Jan 2016 11:34:58 +0100 Subject: [PATCH 3/3] Fixed a small bug that caused _Quantity.to_compact to fail when magnitude is 0 --- pint/quantity.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pint/quantity.py b/pint/quantity.py index 22dc875..a816787 100644 --- a/pint/quantity.py +++ b/pint/quantity.py @@ -317,7 +317,7 @@ class _Quantity(SharedRegistryObject): >>> (1e-2*ureg('kg m/s^2')).to_compact('N') """ - if self.unitless: + if self.unitless or self.magnitude==0: return self SI_prefixes = {}