Source code for pyhs3.analyses
"""
HS3 Analysis implementations.
Provides Pydantic classes for handling HS3 analysis specifications
including analysis configurations with parameters of interest and domains.
"""
from __future__ import annotations
from typing import Annotated
from pydantic import Field, model_validator
from pyhs3.collections import NamedCollection, NamedModel
from pyhs3.domains import Domain, Domains
from pyhs3.likelihoods import Likelihood
from pyhs3.typing.annotations import (
FKListSchema,
FKListSerializer,
FKSchema,
FKSerializer,
FKValidator,
make_fk_list_validator,
)
[docs]
class Analysis(NamedModel):
"""
Analysis specification defining automated analysis parameters.
Represents a complete analysis configuration that specifies which likelihood
to use, parameters of interest, parameter domains, and optional priors.
All parameters from the likelihood distributions must either be in the
referenced domain or set to 'const' in the parameter point.
Attributes:
name: Custom string identifier for the analysis
likelihood: Name referencing a likelihood in the likelihoods component
parameters_of_interest: Optional array of parameter names of interest
domains: Array of domain names from domains component
init: Optional name of initial values from parameter_points component
prior: Optional name of prior distribution from distributions component
"""
likelihood: Annotated[str | Likelihood, FKValidator, FKSerializer, FKSchema] = (
Field(..., repr=False)
)
parameters_of_interest: list[str] | None = Field(default=None, repr=False)
domains: Annotated[
list[str] | Domains,
make_fk_list_validator(Domain),
FKListSerializer,
FKListSchema,
] = Field(..., repr=False)
init: str | None = Field(default=None, repr=False)
prior: str | None = Field(default=None, repr=False)
@model_validator(mode="after")
def validate_non_empty_domains(self) -> Analysis:
"""Validate that domains is non-empty."""
if len(self.domains) == 0:
msg = f"Analysis '{self.name}': must have at least one domain"
raise ValueError(msg)
return self
[docs]
class Analyses(NamedCollection[Analysis]):
"""
Collection of HS3 analysis specifications.
Manages a set of analysis instances that define automated analysis
configurations with likelihoods, parameters of interest, and domains.
Provides dict-like access to analyses by name.
"""
root: list[Analysis] = Field(default_factory=list)