Skip to content

Commit 9a2b716

Browse files
committed
Does not exponentiate non-dimensional dimensions and composite dimensions
1 parent 4f65eef commit 9a2b716

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

src/property_utils/tests/units/test_descriptors.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,15 @@
2929
Unit5,
3030
Unit6,
3131
Unit7,
32+
Unit9,
3233
dimension_1,
3334
dimension_2,
3435
dimension_3,
3536
dimension_4,
3637
dimension_5,
3738
dimension_6,
3839
dimension_7,
40+
dimension_9,
3941
generic_dimension_1,
4042
generic_dimension_2,
4143
generic_dimension_3,
@@ -466,6 +468,22 @@ def test_with_none(self):
466468
self.assertResultRaises(DescriptorExponentError)
467469

468470

471+
@add_to(MeasurementUnit_test_suite)
472+
class TestNonDimensionalMeasurementUnitExponentiation(TestDescriptor):
473+
produced_type = Dimension
474+
475+
def subject(self, value):
476+
return Unit9.NON_DIMENSIONAL**value
477+
478+
@args({"value": 2})
479+
def test_with_positive_int(self):
480+
self.assert_result("")
481+
482+
@args({"value": -10})
483+
def test_with_negative_int(self):
484+
self.assert_result("")
485+
486+
469487
@add_to(AliasMeasurementUnit_test_suite)
470488
class TestAliasMeasurementUnitFromDescriptor(TestDescriptor):
471489
def subject(self, descriptor):
@@ -1372,6 +1390,19 @@ def subject(self, value):
13721390
return dimension_1() ** value
13731391

13741392

1393+
@add_to(Dimension_test_suite)
1394+
class TestNonDimensionalDimensionExponentiation(
1395+
TestNonDimensionalMeasurementUnitExponentiation
1396+
):
1397+
"""
1398+
Repeat all tests in `TestNonDimensionalMeasurementUnitExponentiation` but with
1399+
dimension_9() as descriptor.
1400+
"""
1401+
1402+
def subject(self, value):
1403+
return dimension_9() ** value
1404+
1405+
13751406
@add_to(Dimension_test_suite)
13761407
class TestExponentiatedDimensionExponentiation(TestDescriptor):
13771408
produced_type = Dimension

src/property_utils/units/descriptors.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -484,6 +484,9 @@ def __pow__(self, power: float) -> "Dimension":
484484
>>> LengthUnit.FEET**3
485485
<Dimension: ft^3>
486486
"""
487+
# always keep non dimensional units to the first power
488+
power = 1 if self.is_non_dimensional() else power
489+
487490
return Dimension(self, power)
488491

489492
def __hash__(self) -> int:
@@ -1025,7 +1028,10 @@ def __pow__(self, power: float) -> "Dimension":
10251028
f"invalid exponent: {{ value: {power}, type: {type(power)} }};"
10261029
" expected float or int. "
10271030
)
1028-
self.power *= power
1031+
if self.unit.is_non_dimensional():
1032+
self.power = 1
1033+
else:
1034+
self.power *= power
10291035
return self
10301036

10311037
def __eq__(self, dimension) -> bool:

0 commit comments

Comments
 (0)