from dataclasses import dataclass, field
from enum import Enum
from typing import Any, Dict, Optional
import numpy as np
from .plotting_structure import CornerStyle, MPLCmap
[docs]
class Sampler(Enum):
emcee = "emcee"
multinest = "multinest"
zeus = "zeus"
dynesty_nested = "dynesty_nested"
dynesty_dynamic = "dynesty_dynamic"
ultranest = "ultranest"
autoemcee = "autoemcee"
_sampler_default = {"emcee": {"n_burnin": 1}}
[docs]
class Optimizer(Enum):
minuit = "minuit"
scipy = "scipy"
ROOT = "ROOT"
[docs]
@dataclass
class BayesianDefault:
use_median_fit: bool = False
default_sampler: Sampler = Sampler.emcee
emcee_setup: Optional[Dict[str, Any]] = field(
default_factory=lambda: {
"n_burnin": None,
"n_iterations": 500,
"n_walkers": 50,
"seed": 5123,
}
)
multinest_setup: Optional[Dict[str, Any]] = field(
default_factory=lambda: {
"n_live_points": 400,
"chain_name": "chains/fit-",
"resume": False,
"importance_nested_sampling": False,
"auto_clean": False,
}
)
ultranest_setup: Optional[Dict[str, Any]] = field(
default_factory=lambda: {
"min_num_live_points": 400,
"dlogz": 0.5,
"dKL": 0.5,
"frac_remain": 0.01,
"Lepsilon": 0.001,
"min_ess": 400,
"update_interval_volume_fraction": 0.8,
"cluster_num_live_points": 40,
"use_mlfriends": True,
"resume": "overwrite",
}
)
zeus_setup: Optional[Dict[str, Any]] = field(
default_factory=lambda: {
"n_burnin": None,
"n_iterations": 500,
"n_walkers": 50,
"seed": 5123,
}
)
dynesty_nested_setup: Optional[Dict[str, Any]] = field(
default_factory=lambda: {
"n_live_points": 400,
"maxiter": None,
"maxcall": None,
"dlogz": None,
"logl_max": np.inf,
"n_effective": None,
"add_live": True,
"print_func": None,
"save_bounds": True,
"bound": "multi",
"wrapped_params": None,
"sample": "auto",
"periodic": None,
"reflective": None,
"update_interval": None,
"first_update": None,
"npdim": None,
"rstate": None,
"use_pool": None,
"live_points": None,
"logl_args": None,
"logl_kwargs": None,
"ptform_args": None,
"ptform_kwargs": None,
"gradient": None,
"grad_args": None,
"grad_kwargs": None,
"compute_jac": False,
"enlarge": None,
"bootstrap": 0,
"vol_dec": 0.5,
"vol_check": 2.0,
"walks": 25,
"facc": 0.5,
"slices": 5,
"fmove": 0.9,
"max_move": 100,
"update_func": None,
}
)
dynesty_dynmaic_setup: Optional[Dict[str, Any]] = field(
default_factory=lambda: {
"nlive_init": 500,
"maxiter_init": None,
"maxcall_init": None,
"dlogz_init": 0.01,
"logl_max_init": np.inf,
"n_effective_init": np.inf,
"nlive_batch": 500,
"wt_function": None,
"wt_kwargs": None,
"maxiter_batch": None,
"maxcall_batch": None,
"maxiter": None,
"maxcall": None,
"maxbatch": None,
"n_effective": np.inf,
"stop_function": None,
"stop_kwargs": None,
"use_stop": True,
"save_bounds": True,
"print_func": None,
"live_points": None,
"bound": "multi",
"wrapped_params": None,
"sample": "auto",
"periodic": None,
"reflective": None,
"update_interval": None,
"first_update": None,
"npdim": None,
"rstate": None,
"use_pool": None,
"logl_args": None,
"logl_kwargs": None,
"ptform_args": None,
"ptform_kwargs": None,
"gradient": None,
"grad_args": None,
"grad_kwargs": None,
"compute_jac": False,
"enlarge": None,
"bootstrap": 0,
"vol_dec": 0.5,
"vol_check": 2.0,
"walks": 25,
"facc": 0.5,
"slices": 5,
"fmove": 0.9,
"max_move": 100,
"update_func": None,
}
)
corner_style: CornerStyle = field(default_factory=lambda: CornerStyle())
[docs]
@dataclass
class MLEDefault:
default_minimizer: Optimizer = Optimizer.minuit
default_minimizer_algorithm: Optional[str] = None
default_minimizer_callback: Optional[str] = None
contour_cmap: MPLCmap = MPLCmap.Pastel1
contour_background: str = "white"
contour_level_1: str = "#ffa372"
contour_level_2: str = "#ed6663"
contour_level_3: str = "#0f4c81"
profile_color: str = "k"
profile_level_1: str = "#ffa372"
profile_level_2: str = "#ed6663"
profile_level_3: str = "#0f4c81"