def test_greater_than_validator_creator(): """Check the greater_than_validator creator raises errors when start is not a number type""" with pytest.raises(TypeError): greater_than_validator("str") with pytest.raises(TypeError): greater_than_validator([])
def test_greater_than_validator(): """ Test the greater_than_validator with some values """ validator = greater_than_validator(100) assert str(validator) == "Value(s) must be greater than 100" assert validator(101) assert validator(1000) assert validator(float("inf")) assert not validator(99) assert not validator(100) assert not validator(float("-inf")) assert not validator("not a number")
def test_for_each_validator(): """ Test the for each validator """ validator = for_each_validator(greater_than_validator(0.5)) assert ( str(validator) == "Must be a list or tuple and for each value in the " "list: Value(s) must be greater than 0.5") assert validator([0.6, 0.7, 0.8]) assert validator((0.7, 0.51, 0.6)) assert not validator([0.5, 0.6, 0.7]) assert not validator([0.1, 100, 0.9]) assert not validator((0.7, 0.1, 0.6)) assert not validator("not a list or tuple")
def test_greater_than_validator_image_container(): """ Test the greater than validator with an image container """ validator = greater_than_validator(1.5) assert str(validator) == "Value(s) must be greater than 1.5" image_container = NumpyImageContainer( image=np.array([[-0.5, 0.2], [0.1, -0.9]])) assert not validator(image_container) image_container = NumpyImageContainer( image=np.array([[1.5, 2.2], [1.7, 90]])) assert not validator(image_container) image_container = NumpyImageContainer( image=np.array([[1.51, 2.2], [1.7, 90]])) assert validator(image_container)
default_value=0.0), TRANSL_X: Parameter(validators=range_inclusive_validator(-1000.0, 1000.0), default_value=0.0), TRANSL_Y: Parameter(validators=range_inclusive_validator(-1000.0, 1000.0), default_value=0.0), TRANSL_Z: Parameter(validators=range_inclusive_validator(-1000.0, 1000.0), default_value=0.0), ACQ_MATRIX: Parameter( validators=[ list_of_type_validator(int), of_length_validator(3), for_each_validator(greater_than_validator(0)), ], default_value=[64, 64, 12], ), }), STRUCTURAL: ParameterValidator( parameters={ ECHO_TIME: Parameter(validators=greater_than_validator(0), default_value=0.005), REPETITION_TIME: Parameter(validators=greater_than_validator(0), default_value=0.3), ROT_X: Parameter(validators=range_inclusive_validator(-180.0, 180.0), default_value=0.0),
def _validate_inputs(self): """Checks that the inputs meet their validation criteria `'object'` must be derived from BaseImageContainer `'target_shape'` (optional)must be a Tuple of ints of length 3, values > 0 `'rotation'` (optional) must be a Tuple of floats of length 3, each value -180 to 180 inclusive, default (optional) = (0.0, 0.0, 0.0) `'rotation_origin'` (optional) must be a Tuple of floats of length 3, default = (0.0, 0.0, 0.0) `'translation'` (optional) must be a Tuple of floats of length 3, default = (0.0, 0.0, 0.0) """ input_validator = ParameterValidator( parameters={ self.KEY_IMAGE: Parameter(validators=isinstance_validator(BaseImageContainer)), self.KEY_ROTATION: Parameter( validators=[ isinstance_validator(tuple), for_each_validator(isinstance_validator(float)), for_each_validator(range_inclusive_validator( -180, 180)), ], optional=True, default_value=(0.0, 0.0, 0.0), ), self.KEY_ROTATION_ORIGIN: Parameter( validators=[ isinstance_validator(tuple), for_each_validator(isinstance_validator(float)), ], optional=True, default_value=(0.0, 0.0, 0.0), ), self.KEY_TRANSLATION: Parameter( validators=[ isinstance_validator(tuple), for_each_validator(isinstance_validator(float)), ], optional=True, default_value=(0.0, 0.0, 0.0), ), self.KEY_TARGET_SHAPE: Parameter( validators=[ isinstance_validator(tuple), for_each_validator(isinstance_validator(int)), for_each_validator(greater_than_validator(0)), ], optional=True, default_value=(9999, 9999, 9999), ), }) # validate, returning a dictionary which also includes default parameters new_params = input_validator.validate( self.inputs, error_type=FilterInputValidationError) # Further validation that can't be handled by the parameter validator if new_params[self.KEY_TARGET_SHAPE] == (9999, 9999, 9999): new_params[self.KEY_TARGET_SHAPE] = self.inputs[ self.KEY_IMAGE].shape # Check that the tuple self.KEY_ROTATION's length is 3 if len(new_params[self.KEY_ROTATION]) != 3: raise FilterInputValidationError # Check that the tuple self.KEY_ROTATION_ORIGIN's length is 3 if len(new_params[self.KEY_ROTATION_ORIGIN]) != 3: raise FilterInputValidationError # Check that the tuple self.KEY_TRANSLATION's length is 3 if len(new_params[self.KEY_TRANSLATION]) != 3: raise FilterInputValidationError # Check that the tuple self.KEY_SCALE's length is 3 if len(new_params[self.KEY_TARGET_SHAPE]) != 3: raise FilterInputValidationError # merge the updated parameters from the output with the input parameters self.inputs = {**self._i, **new_params}