def test_parameters_with_quantity_powers(self): """Test if we can construct and use a Parameter instance passing pint.Quantity and pint.Unit objects to the constructor and interval setter. Use different powers of 10 in parameter initialization and value assignment.""" # Define the base unit of my parameter object. meter = Unit("meter") centimeter = Unit("centimeter") self.assertIsInstance(meter, Unit) minimum_undulator_length = 10.0 * meter undulator_length = Parameter("undulator_length", centimeter) self.assertIsInstance(undulator_length, Parameter) self.assertEqual(undulator_length.unit, Unit("centimeter")) undulator_length.add_interval( min_value=minimum_undulator_length, max_value=numpy.inf * meter, intervals_are_legal=True, ) print(undulator_length) self.assertTrue(undulator_length.is_legal(10.1 * meter)) self.assertFalse(undulator_length.is_legal(9.0 * centimeter)) self.assertTrue(undulator_length.is_legal(5.5e4 * Unit("centimeter")))
def test_parameter_iterable(self): par = Parameter("test") par.add_interval(3, 4.5, True) par.add_option(7, True) self.assertFalse(par.is_legal([0.5, 3.2, 5.0])) self.assertTrue(par.is_legal([3.1, 4.2, 4.4])) self.assertTrue(par.is_legal([3.1, 4.2, 4.4, 7]))
def test_parameter_from_dict(self): par = Parameter("test") par.add_interval(3, 4.5, True) par.value = 4.0 par_from_dict = Parameter.from_dict(par.__dict__) self.assertEqual(par_from_dict.value, 4.0)
def test_clear_intervals(self): # FIXME par = Parameter("test") par.add_interval(3, 4.5, True) # self.assertEqual(par.__intervals, [[3, 4.5]]) #FIXME par.clear_intervals() par.add_option(9.7, True) # self.assertEqual(par.__options, [9.7]) par.clear_options()
def test_parameter_multiple_intervals(self): par = Parameter("test") par.add_interval(None, 8.5, True) # minus infinite to 8.5 self.assertRaises(ValueError, par.add_interval, 3, 4.5, False) self.assertTrue(par.is_legal(-831.0)) self.assertTrue(par.is_legal(3.5)) self.assertTrue(par.is_legal(5.0)) self.assertFalse(par.is_legal(10.0))
def test_add_interval_after_value(self): par = Parameter("test") par.value = 4.0 par.add_interval(3, 4.5, True) par.clear_intervals() par.value = 5.0 with self.assertRaises(ValueError): par.add_interval(3, 4.5, True)
def test_parameter_illegal_interval_plus_legal_option(self): par = Parameter("test") par.add_interval(None, 8.5, False) # minus infinite to 8.5 par.add_option(5, True) self.assertFalse(par.is_legal(-831.0)) self.assertFalse(par.is_legal(8.5)) self.assertTrue(par.is_legal(5.0)) self.assertTrue(par.is_legal(10.0)) self.assertTrue(par.is_legal(11.0))
def test_parameter_set_value(self): par = Parameter("test") par.add_interval(3, 4.5, True) par.value = 4.0 self.assertEqual(par.value, 4.0) with self.assertRaises(ValueError): par.value = 5.0 # Should throw an error and be ignored self.assertEqual(par.value, 4.0)
def test_parameter_illegal_interval_plus_illegal_option(self): par = Parameter("test") par.add_interval(None, 8.5, False) # minus infinite to 8.5 par.add_option( 5, False) # this is stupid, already accounted in the interval par.add_option(11, False) self.assertFalse(par.is_legal(-831.0)) self.assertFalse(par.is_legal(8.5)) # illegal because closed interval self.assertFalse(par.is_legal(5.0)) self.assertTrue(par.is_legal(10.0)) self.assertFalse(par.is_legal(11.0))
def test_get_intervals(self): par = Parameter("test") par.add_interval(3, 4.5, True) par.add_interval(8, 10, True) retrived_intervals = par.get_intervals() self.assertEqual(len(retrived_intervals), 2) self.assertEqual(retrived_intervals[0][0], 3) self.assertEqual(retrived_intervals[0][1], 4.5) self.assertEqual(retrived_intervals[1][0], 8) self.assertEqual(retrived_intervals[1][1], 10) self.assertTrue(par.get_intervals_are_legal())
def test_parameter_value_type(self): par = Parameter("test") par.value = 4.0 assert par._Parameter__value_type == Quantity par1 = Parameter("test") par1.value = 4 assert par1._Parameter__value_type == int par2 = Parameter("test", unit="meV") par2.value = 4 assert par2._Parameter__value_type == Quantity par3 = Parameter("test", unit="meV") par3.add_interval(0, 1e6, True) assert par3._Parameter__value_type == Quantity
def test_parameter_get_options(self): """ Ensure get_options returns the options as required """ par = Parameter("test") par.add_interval(None, 8.5, False) # minus infinite to 8.5 par.add_option( 5, True) # this is stupid, already accounted in the interval par.add_option(11, True) retrieved_options = par.get_options() self.assertEqual(len(retrieved_options), 2) self.assertEqual(retrieved_options[0], 5.0) self.assertEqual(retrieved_options[1], 11.0) self.assertTrue(par.get_options_are_legal())
def test_parameter_legal_interval(self): par = Parameter("test") par.add_interval(3, 4.5, True) self.assertTrue(par.is_legal(3.5)) self.assertFalse(par.is_legal(1.0))
def test_print(self): par = Parameter("test") par.add_interval(3, 4.5, True) par.add_option(9.8, True) print(par)
def test_print_legal_interval(self): par = Parameter("test") par.add_interval(3, 4.5, True) par.add_option(9.8, True) par.print_parameter_constraints()