return toMetricFloat(value, 'latency', 's')
def anyToLatency(value):
- """result is a clock period"""
- try:
- return 1 / toFrequency(value)
- except (ValueError, ZeroDivisionError):
- pass
+ """Convert a magnitude and unit to a clock period."""
- try:
- return toLatency(value)
- except ValueError:
- pass
-
- raise ValueError("cannot convert '%s' to clock period" % value)
+ magnitude, unit = toNum(value,
+ target_type='latency',
+ units=('Hz', 's'),
+ prefixes=metric_prefixes,
+ converter=float)
+ if unit == 's':
+ return magnitude
+ elif unit == 'Hz':
+ try:
+ return 1.0 / magnitude
+ except ZeroDivisionError:
+ raise ValueError(f"cannot convert '{value}' to clock period")
+ else:
+ raise ValueError(f"'{value}' needs a valid unit to be unambiguous.")
def anyToFrequency(value):
- """result is a clock period"""
- try:
- return toFrequency(value)
- except ValueError:
- pass
-
- try:
- return 1 / toLatency(value)
- except ValueError as ZeroDivisionError:
- pass
-
- raise ValueError("cannot convert '%s' to clock period" % value)
+ """Convert a magnitude and unit to a clock frequency."""
+
+ magnitude, unit = toNum(value,
+ target_type='frequency',
+ units=('Hz', 's'),
+ prefixes=metric_prefixes,
+ converter=float)
+ if unit == 'Hz':
+ return magnitude
+ elif unit == 's':
+ try:
+ return 1.0 / magnitude
+ except ZeroDivisionError:
+ raise ValueError(f"cannot convert '{value}' to frequency")
+ else:
+ raise ValueError(f"'{value}' needs a valid unit to be unambiguous.")
def toNetworkBandwidth(value):
return toMetricFloat(value, 'network bandwidth', 'bps')
self.assertEqual(conv('1kHz'), 1e-3)
self.assertRaises(ValueError, conv, '42k')
-
- @unittest.expectedFailure
- def test_anyToLatency_ambiguous(self):
- # This the behavior of anyToFrequency is currently ambiguous
- # (and surprising) for unitless quantities. The following
- # should be true to be consistent with the other conversion
- # functions, but that isn't currently the case.
- self.assertEqual(convert.anyToLatency('42'), 42.0)
-
+ self.assertRaises(ValueError, conv, '42')
def test_anyToFrequency(self):
conv = convert.anyToFrequency
- # This is ambiguous and should probably not be allowed.
- self.assertEqual(conv('42'), 42.0)
-
self.assertEqual(conv('42kHz'), 42e3)
self.assertEqual(conv('0.1s'), 10.0)
self.assertEqual(conv('1ms'), 1000.0)
self.assertRaises(ValueError, conv, '42k')
+ self.assertRaises(ValueError, conv, '42')
def test_toNetworkBandwidth(self):
conv = convert.toNetworkBandwidth