Skip to content

modosaic.core.validator_step

modosaic.core.validator_step

ValidatorStep dataclass

ValidatorStep(validator, dependencies=dict(), name=None, constraint=None)

Configured execution wrapper for a modality validator.

Attributes:

Name Type Description
validator ModalityValidator[T, U]

Validator object to run.

dependencies Mapping[str, Modalities]

Mapping from validator keyword arguments to earlier modality outputs.

name str | None

Optional display name. Defaults to the validator class name.

constraint ValidationConstraint[U] | None

Optional quality gate applied to the validator value.

validator_name property

validator_name

Return the configured display name for the validator.

validate

validate(record, generated, generated_modalities)

Run the validator and apply the optional constraint.

Parameters:

Name Type Description Default
record ImageRecord

Input image record.

required
generated T

Output generated by the current modality.

required
generated_modalities Mapping[Modalities, Any]

Accepted outputs from earlier modalities, used to satisfy dependency mappings.

required

Returns:

Type Description
ValidationResult[U]

Raw or constrained validation result.

Source code in modosaic/core/validator_step.py
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
def validate(
        self,
        record: ImageRecord,
        generated: T,
        generated_modalities: Mapping[Modalities, Any],
) -> ValidationResult[U]:
    """Run the validator and apply the optional constraint.

    Args:
        record: Input image record.
        generated: Output generated by the current modality.
        generated_modalities: Accepted outputs from earlier modalities,
            used to satisfy dependency mappings.

    Returns:
        Raw or constrained validation result.
    """
    logger.debug(f"Running validator {self.validator_name} for record sample {record.sample_id}")
    kwargs = {
        name: generated_modalities.get(modality)
        for name, modality in self.dependencies.items()
    }
    if self.dependencies:
        logger.debug(
            f"Validator {self.validator_name} dependencies for record sample {record.sample_id}: "
            f"{self.dependencies}"
        )

    if kwargs:
        value = cast(Any, self.validator).validate(record, generated, **kwargs)
    else:
        value = self.validator.validate(record, generated)

    if self.constraint:
        score, passed = self.constraint.evaluate(value)
        logger.debug(
            f"Validator {self.validator_name} scored {score} for record sample {record.sample_id}; "
            f"passed={passed}"
        )
        return ValidationResult(
            validator_name=self.validator_name,
            value=value,
            score=score,
            score_name=self.constraint.score_name,
            minimum=self.constraint.minimum,
            passed=passed,
        )

    logger.debug(f"Validator {self.validator_name} completed for record sample {record.sample_id}")
    return ValidationResult(
        validator_name=self.validator_name,
        value=value,
    )