torchcell.datamodels.schema.FitnessPhenotype

class FitnessPhenotype(*, provenance_gaps: list[~torchcell.verification.sourced.ProvenanceGap] = <factory>, graph_level: str = 'global', label_name: str = 'fitness', label_statistic_name: str = 'fitness_se', fitness: float, fitness_se: float | None = None, fitness_std: float | None = None, n_samples: int | None = None, fitness_uncertainty: float | None = None, fitness_uncertainty_type: ~torchcell.datamodels.schema.UncertaintyType | None = None, sample_unit: ~torchcell.datamodels.schema.SampleUnit | None = None, screen_id: str | None = None)[source]

Bases: Phenotype, ModelStrict

Fitness phenotype with fitness value and uncertainty statistics.

Uncertainty ontology: the source-reported number lives in fitness_uncertainty with its fitness_uncertainty_type; n_samples + sample_unit give the replicate design; fitness_se is the DERIVED, ML-facing standard error (auto-computed via derive_se when not supplied). fitness_std is DEPRECATED (superseded by uncertainty/type; retained until loaders migrate).

classmethod validate_fitness(v: float) → float[source]

Reject NaN fitness and clamp non-positive values to zero.

classmethod validate_n_samples(v: int | None) → int | None[source]

Validate that n_samples is a positive integer or None.

model_config: ClassVar[ConfigDict] = {'extra': 'forbid', 'frozen': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].