Skip to content

Commit 522c06a

Browse files
committed
fix dimensionality comparison bug #386208 caused by hash(-1)==hash(-2)
Thanks Tony Yu for the bug report and suggested fix
1 parent b9d5894 commit 522c06a

File tree

2 files changed

+4
-0
lines changed

2 files changed

+4
-0
lines changed

quantities/dimensionality.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ def __hash__(self):
5353
res = hash(unit_registry['dimensionless'])
5454
for key in sorted(self.keys(), key=operator.attrgetter('format_order')):
5555
val = self[key]
56+
if val < 0:
57+
# can you believe that hash(-1)==hash(-2)?
58+
val -= 1
5659
res ^= hash((key, val))
5760
return res
5861

quantities/tests/test_01_dimensionality.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ def test_power():
141141
assert_equal(joule**2, Dimensionality({pq.kg: 2, pq.m: 4, pq.s: -4}))
142142
assert_raises(TypeError, operator.__pow__, Joule, joule)
143143
assert_raises(TypeError, operator.__pow__, joule, Joule)
144+
assert_equal(meter**-1 == meter**-2, False)
144145
test_dimensionality_repr()
145146

146147
def test_inplace_power():

0 commit comments

Comments
 (0)