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)
예제 #5
0
                   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}