def __init__(self, body: Waveform, repetition_count: int): repetition_count = checked_int_cast(repetition_count) if repetition_count < 1 or not isinstance(repetition_count, int): raise ValueError('Repetition count must be an integer >0') super().__init__(duration=body.duration * repetition_count) self._body = body self._repetition_count = repetition_count
def get_repetition_count_value(self, parameters: Mapping[str, Real]) -> int: value = self._repetition_count.evaluate_in_scope(parameters) try: return checked_int_cast(value) except ValueError: raise ParameterNotIntegerException(str(self._repetition_count), value)
def test_no_int_detection(self): with self.assertRaises(ValueError): checked_int_cast(0.5) with self.assertRaises(ValueError): checked_int_cast(-0.5) with self.assertRaises(ValueError): checked_int_cast(123124.2) with self.assertRaises(ValueError): checked_int_cast(123124 + 1e-6, epsilon=1e-10)
def to_range(self, parameters: Mapping[str, Number]) -> range: return range( checked_int_cast(self.start.evaluate_in_scope(parameters)), checked_int_cast(self.stop.evaluate_in_scope(parameters)), checked_int_cast(self.step.evaluate_in_scope(parameters)))
def test_int_forwarding(self): my_int = 6 self.assertIs(my_int, checked_int_cast(my_int))
def test_variable_epsilon(self): self.assertEqual(6, checked_int_cast(6 + 1e-11)) with self.assertRaises(ValueError): checked_int_cast(6 + 1e-11, epsilon=1e-15)
def test_float_cast(self): self.assertEqual(6, checked_int_cast(6 + 1e-11)) self.assertEqual(-6, checked_int_cast(-6 + 1e-11))
def to_range(self, parameters: Dict[str, Any]) -> range: return range(checked_int_cast(self.start.evaluate_numeric(**parameters)), checked_int_cast(self.stop.evaluate_numeric(**parameters)), checked_int_cast(self.step.evaluate_numeric(**parameters)))