def test_validation_fails_due_to_wrong_spelling(self): kp = Parameters(wrong_spelling) defaults_params = Parameters(defaults) # should check which errors are thrown!! with self.assertRaises(RuntimeError): kp.ValidateAndAssignDefaults(defaults_params)
def test_validation_succeeds(self): kp = Parameters(json_string) defaults_params = Parameters(defaults) defaults_params["level1"]["tmp"].SetDouble(2.0) # this does not coincide with the value in kp, but is of the same type kp.ValidateAndAssignDefaults(defaults_params) self.assertEqual(kp.PrettyPrintJsonString(), expected_validation_output) self.assertEqual(kp["level1"]["tmp"].GetDouble(), 5.0) # not 2, since kp overwrites the defaults
def test_double_vs_null_validation(self): # supplied settings double_custom = Parameters("""{ "parameter": 0.0 }""") # default settings null_default = Parameters("""{ "parameter": null }""") with self.assertRaises(RuntimeError): double_custom.ValidateAndAssignDefaults(null_default)
def test_null_vs_null_validation(self): # supplied settings null_custom = Parameters("""{ "parameter": null }""") # default settings null_default = Parameters("""{ "parameter": null }""") #this should NOT raise, hence making the test to pass null_custom.ValidateAndAssignDefaults(null_default)
def test_validation_succeds_error_on_first_level(self): kp = Parameters(wrong_lev2) defaults_params = Parameters(defaults) # here no error shall be thrown since validation is only done on level0 kp.ValidateAndAssignDefaults(defaults_params)
def __init__(self, model: KratosMultiphysics.Model, parameters: KratosMultiphysics.Parameters): """Impose a rotation followed by translation on a ModelPart.""" KratosMultiphysics.Process.__init__(self) # 'rotation_angle' can either be a float or "End", but the validator can't handle both # => convert 'rotation_angle' to the input type default_parameters = self.GetDefaultParameters() if parameters.Has("rotation_angle") and parameters["rotation_angle"].IsString(): default_parameters.RemoveValue("rotation_angle") default_parameters.AddValue("rotation_angle", parameters["rotation_angle"]) parameters.ValidateAndAssignDefaults(default_parameters) self.model_part = model[parameters["model_part_name"].GetString()] # Parse interval self.interval_utility = KratosMultiphysics.IntervalUtility(parameters) # Determine whether a constant transform will suffice or a parametric one is needed requires_parametric_transform = False euler_angle_parameters = parameters["euler_angles"] rotation_axis_parameters = parameters["rotation_axis"] rotation_angle_parameters = parameters["rotation_angle"] reference_point_parameters = parameters["reference_point"] translation_vector_parameters = parameters["translation_vector"] if rotation_angle_parameters.IsString(): requires_parametric_transform = True else: for i in range(3): if euler_angle_parameters[i].IsString() or rotation_axis_parameters[i].IsString() or reference_point_parameters[i].IsString() or translation_vector_parameters[i].IsString(): requires_parametric_transform = True break rotation_definition = parameters["rotation_definition"].GetString() if requires_parametric_transform: if rotation_definition == "rotation_axis": self.transform = MeshMovingApplication.ParametricLinearTransform( rotation_axis_parameters, rotation_angle_parameters, reference_point_parameters, translation_vector_parameters) elif rotation_definition == "euler_angles": self.transform = MeshMovingApplication.ParametricLinearTransform( euler_angle_parameters, reference_point_parameters, translation_vector_parameters) else: raise ValueError("Invalid rotation definition '{}'".format(rotation_definition)) else: reference_point = reference_point_parameters.GetVector() translation_vector = translation_vector_parameters.GetVector() if rotation_definition == "rotation_axis": rotation_axis = rotation_axis_parameters.GetVector() rotation_angle = rotation_angle_parameters.GetDouble() self.transform = MeshMovingApplication.LinearTransform( rotation_axis, rotation_angle, reference_point, translation_vector) elif rotation_definition == "euler_angles": euler_angles = euler_angle_parameters.GetVector() self.transform = MeshMovingApplication.LinearTransform( euler_angles, reference_point, translation_vector) else: raise ValueError("Invalid rotation definition '{}'".format(rotation_definition))