def validate()

in src/sagemaker_algorithm_toolkit/hyperparameter_validation.py [0:0]


    def validate(self, user_hyperparameters):
        # Note: 0. Replace aliases with original keys
        user_hyperparameters = self._replace_aliases(user_hyperparameters)

        # NOTE: 1. Validate required or fill in default.
        for hp in self.hyperparameters:
            if hp not in user_hyperparameters:
                if self.hyperparameters[hp].required:
                    raise exc.UserError("Missing required hyperparameter: {}".format(hp))
                elif self.hyperparameters[hp].default is not None:
                    user_hyperparameters[hp] = self.hyperparameters[hp].default

        # NOTE: 2. Convert hyperparameters.
        converted_hyperparameters = {}
        for hp, value in user_hyperparameters.items():
            try:
                hyperparameter_obj = self.hyperparameters[hp]
            except KeyError:
                raise exc.UserError("Extraneous hyperparameter found: {}".format(hp))
            try:
                converted_hyperparameters[hp] = hyperparameter_obj.parse(value)
            except ValueError as e:
                raise exc.UserError("Hyperparameter {}: could not parse value".format(hp), caused_by=e)

        # NOTE: 3. Validate range.
        for hp, value in converted_hyperparameters.items():
            try:
                self.hyperparameters[hp].validate_range(value)
            except exc.UserError:
                raise
            except Exception as e:
                raise exc.AlgorithmError(
                    "Hyperparameter {}: unexpected failure when validating {}".format(hp, value), caused_by=e
                )

        # NOTE: 4. Validate dependencies.
        sorted_deps = self._sort_dependencies(converted_hyperparameters.keys())
        new_validated_hyperparameters = {}
        while sorted_deps:
            hp = sorted_deps.pop()
            value = converted_hyperparameters[hp]
            if self.hyperparameters[hp].dependencies:
                dependencies = {
                    hp_d: new_validated_hyperparameters[hp_d]
                    for hp_d in self.hyperparameters[hp].dependencies
                    if hp_d in new_validated_hyperparameters
                }
                self.hyperparameters[hp].validate_dependencies(value, dependencies)
            new_validated_hyperparameters[hp] = value

        return new_validated_hyperparameters