Skip to content

Commit 258ac67

Browse files
committed
Defines has_no_units methods for composite dimensions
1 parent be68cd1 commit 258ac67

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed

src/property_utils/tests/units/test_descriptors.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2006,6 +2006,14 @@ def test_with_aliased_denominator_composite_dimension(self):
20062006
def test_with_fully_aliased_composite_dimension(self):
20072007
self.assertResultTrue()
20082008

2009+
@add_to(GenericCompositeDimension_test_suite)
2010+
class TestGenericCompositeDimensionHasNoUnits(TestDescriptor):
2011+
def test_with_measurement_units(self):
2012+
self.assertFalse(generic_composite_dimension().has_no_units())
2013+
2014+
def test_with_no_measurement_units(self):
2015+
self.assertTrue(GenericCompositeDimension().has_no_units())
2016+
20092017

20102018
@add_to(CompositeDimension_test_suite)
20112019
class TestCompositeDimensionFromDescriptor(TestDescriptor):
@@ -2568,6 +2576,19 @@ def test_objects_are_not_persisted(self):
25682576
self.assertNotEqual(ids(composite.numerator), ids(inverse.denominator))
25692577
self.assertNotEqual(ids(composite.denominator), ids(inverse.numerator))
25702578

2579+
@add_to(CompositeDimension_test_suite)
2580+
class TestCompositeDimensionHasNoUnits(TestDescriptor):
2581+
def test_with_units(self):
2582+
self.assertFalse(composite_dimension().has_no_units())
2583+
2584+
def test_with_no_units(self):
2585+
self.assertTrue(CompositeDimension().has_no_units())
2586+
2587+
def test_with_same_unit_type(self):
2588+
self.assertFalse(CompositeDimension([Unit1.A],[Unit1.a]).has_no_units())
2589+
2590+
def test_with_same_unit(self):
2591+
self.assertFalse(CompositeDimension([Unit1.A],[Unit1.A]).has_no_units())
25712592

25722593
@add_to(CompositeDimension_test_suite)
25732594
class TestCompositeDimensionMultiplication(TestDescriptorBinaryOperation):

src/property_utils/units/descriptors.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1314,6 +1314,21 @@ def is_equivalent(self, other: GenericUnitDescriptor) -> bool:
13141314

13151315
return False
13161316

1317+
def has_no_units(self) -> bool:
1318+
"""
1319+
Returns True if the generic composite dimension does not have any units, False
1320+
otherwise.
1321+
1322+
Examples:
1323+
>>> class LengthUnit(MeasurementUnit): ...
1324+
1325+
>>> GenericCompositeDimension().has_no_units()
1326+
True
1327+
>>> GenericCompositeDimension([LengthUnit]).has_no_units()
1328+
False
1329+
"""
1330+
return len(self.denominator) == 0 and len(self.numerator) == 0
1331+
13171332
def _numerator_copy(self) -> List[GenericDimension]:
13181333
return [replace(n) for n in self.numerator]
13191334

@@ -1743,6 +1758,21 @@ def inverse(self) -> "CompositeDimension":
17431758
"""
17441759
return CompositeDimension(self._denominator_copy(), self._numerator_copy())
17451760

1761+
def has_no_units(self) -> bool:
1762+
"""
1763+
Returns True if the composite dimension does not have any units, False otherwise.
1764+
1765+
Examples:
1766+
>>> class LengthUnit(MeasurementUnit):
1767+
... METER = "m"
1768+
1769+
>>> CompositeDimension().has_no_units()
1770+
True
1771+
>>> CompositeDimension([LengthUnit.METER]).has_no_units()
1772+
False
1773+
"""
1774+
return len(self.denominator) == 0 and len(self.numerator) == 0
1775+
17461776
def _numerator_copy(self) -> List[Dimension]:
17471777
return [replace(n) for n in self.numerator]
17481778

0 commit comments

Comments
 (0)