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