Skip to content

supaernova.configs.steps.posterior.model

[docs] module supaernova.configs.steps.posterior.model

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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
90
91
92
93
94
95
from typing import Literal, ClassVar
from pathlib import Path

from pydantic import PositiveInt, PositiveFloat

from supaernova.analysis.dispersion import DispersionPlot
from supaernova.configs.steps.nflow import NFlowStepConfig
from supaernova.configs.steps.steps import AbstractStepResult, AbstractStepAnalysis
from supaernova.analysis.distribution import DistributionPlot
from supaernova.configs.steps.backends import AbstractModelConfig


class PosteriorStepAnalysis(AbstractStepAnalysis):
    plot_map_init: DistributionPlot | list[DistributionPlot] | None = None
    plot_map_best: DistributionPlot | list[DistributionPlot] | None = None
    plot_hmc: DistributionPlot | list[DistributionPlot] | None = None
    plot_dispersion: DispersionPlot | list[DispersionPlot] | None = None


class PosteriorModelConfig(AbstractModelConfig):
    # --- Class Variables ---
    id: ClassVar[str] = "posterior_model"
    required_steps: ClassVar[list[str]] = [NFlowStepConfig.id]
    analysis: PosteriorStepAnalysis

    # === Required ===
    debug: bool = False
    profile: bool = False

    # === Optional ===
    seed: int = 12345
    iterations: int = 1
    train_subset: bool = True
    test_subset: bool = True
    subset: Literal["train", "test"] = "train"
    analysis: PosteriorStepAnalysis = PosteriorStepAnalysis.model_validate({})

    save_best: bool = False

    n_chains_early: int
    n_chains_mid: int
    n_chains_final: int

    tolerance: PositiveFloat = 0.01
    max_iterations: PositiveInt = 2500

    n_burnin: PositiveInt
    n_samples: PositiveInt
    n_leapfrog: PositiveInt = 5
    target_acceptance_rate: PositiveFloat = 0.651

    random_initial_positions: bool = False

    u_delta_av_min: float = -10.0
    u_delta_av_max: float = 10.0
    u_delta_av_start: float = -1.0
    u_delta_av_end: float = 1.0
    u_delta_av_mean: float = 0.0
    u_delta_av_std: float = 1.0

    u_latents_min: float = -10.0
    u_latents_max: float = 10.0
    u_latents_mean: float = 0.0
    u_latents_std: float = 1.0

    delta_av_min: float = -5.0
    delta_av_max: float = 5.0
    delta_av_start: float = -0.5
    delta_av_end: float = 0.5
    delta_av_mean: float = 0.0
    delta_av_std: float = 0.5

    train_delta_m: bool
    delta_m_min: float = -15
    delta_m_max: float = 15
    delta_m_start: float = -1.5
    delta_m_end: float = 1.5
    delta_m_mean: float = 0.0
    delta_m_std: float = 0.1

    train_delta_p: bool
    delta_p_min: float = -10
    delta_p_max: float = 10
    delta_p_start: float = -1.0
    delta_p_end: float = 1.0
    delta_p_mean: float = 0.0
    delta_p_std: float = 0.01

    train_bias: bool
    bias_min: float = -10
    bias_max: float = 10
    bias_start: float = -1.0
    bias_end: float = 1.0
    bias_mean: float = 0.0
    bias_std: float = 1.0