Source code for scarlet2.validation

from .infer import FitValidator
from .module import ParameterValidator
from .observation import ObservationValidator
from .source import SourceValidator
from .validation_utils import ValidationResult


def _check(validation_class, **kwargs) -> list[ValidationResult]:
    """Check the object against the validation rules defined in the validation_class.

    Parameters
    ----------
    validation_class : type
        The class containing the validation checks.
    **kwargs : dict
        Keyword arguments to pass to the validation class constructor. These should be
        the inputs required by the validation classes, such as `scene`, `observation`,
        or `source`.

    Returns
    -------
    list[ValidationResult]
        A list of validation results returned from the validation checks for the
        given object.
    """
    validator = validation_class(**kwargs)
    validation_results = []
    for check in validator.validation_checks:
        if error := getattr(validator, check)():
            if isinstance(error, list):
                validation_results.extend(error)
            else:
                validation_results.append(error)

    return validation_results


[docs] def check_fit(scene, observation) -> list[ValidationResult]: """Check the scene after fitting against the various validation rules. Parameters ---------- scene : Scene The scene object to check. observation : Observation The observation object to use for checks. Returns ------- list[ValidationResult] A list of validation results returned from the validation checks for the scene fit results. """ return _check(validation_class=FitValidator, **{"scene": scene, "observation": observation})
[docs] def check_observation(observation) -> list[ValidationResult]: """Check the observation object for consistency Parameters ---------- observation: Observation The observation object to check. Returns ------- list[ValidationResult] A list of validation results from the validation check of the observation object. """ return _check(validation_class=ObservationValidator, **{"observation": observation})
[docs] def check_scene(scene) -> list[ValidationResult]: """Check the scene against the various validation rules. Parameters ---------- scene : Scene The scene object to check. Returns ------- list[ValidationResult] A list of validation results from the validation checks of the scene. """ validation_results = [] for source in scene.sources: validation_results.extend(check_source(source)) return validation_results
[docs] def check_source(source) -> list[ValidationResult]: """Check the source against the various validation rules. Parameters ---------- source : Source The source object to check. scene : Scene The scene that the source is part of. Returns ------- list[ValidationResult] A list of validation results from the source object checks. """ return _check(validation_class=SourceValidator, **{"source": source})
def check_parameters(parameters) -> list[ValidationResult]: """Check the parameter list against the various validation rules. Parameters ---------- parameters : Parameters The parameters list to check Returns ------- list[ValidationResult] A list of validation results from the validation checks of the parameters. """ validation_results = [] for name, (_, param) in parameters.items(): node = parameters.base.get(name) validation_results.extend(check_parameter(name, param, node)) return validation_results def check_parameter(name, parameter, node) -> list[ValidationResult]: """Check the parameter against the various validation rules. Parameters ---------- name: str The parameter name. parameter : Parameter The parameter informaiton to check node: jnp.array The parameter array check Returns ------- list[ValidationResult] A list of validation results from the validation checks of the parameters. """ return _check(validation_class=ParameterValidator, **{"name": name, "parameter": parameter, "node": node})