Hyperiso 1.0.3
Modular flavour-physics calculations, Wilson coefficients and statistical inference
Loading...
Searching...
No Matches
HyperisoConfig.py
Go to the documentation of this file.
1"""Configuration objects used to initialize Hyperiso."""
2
3from __future__ import annotations
4
5from dataclasses import dataclass, field
6from enum import Enum
7from pathlib import Path
8from typing import Dict, Optional, Union
9
10from pyhyperiso.phyperiso.pyhyperiso.core import ExternalFlag as _CppExternalFlag
11from pyhyperiso.phyperiso.pyhyperiso.core import HyperisoConfig as _CppHyperisoConfig
13
14PathLike = Union[str, Path]
15
16
17class ExternalFlag(Enum):
18 """External input flags understood by the C++ initialization layer.
19
20 Attributes:
21 IS_LHA_SPECTRUM: Whether the input file is a spectrum-style LHA file.
22 HAS_WILSON_INPUT: Whether Wilson coefficients are provided externally.
23 HAS_TH_OBSERVABLE_INPUT: Whether theory-observable inputs are provided
24 externally.
25 HYP_AS_SM_MARTY: Whether Hyperiso should expose SM-like inputs to the
26 MARTY backend.
27 """
28
29 IS_LHA_SPECTRUM = _CppExternalFlag.IS_LHA_SPECTRUM
30 HAS_WILSON_INPUT = _CppExternalFlag.HAS_WILSON_INPUT
31 HAS_TH_OBSERVABLE_INPUT = _CppExternalFlag.HAS_TH_OBSERVABLE_INPUT
32 HYP_AS_SM_MARTY = _CppExternalFlag.HYP_AS_SM_MARTY
33
34
35@dataclass
37 """Python configuration for ``HyperisoMaster``.
38
39 Attributes:
40 flags: Mapping of external flags to booleans. Missing flags are not
41 explicitly set in C++; the default mapping mirrors the common
42 Python workflow.
43 model: Physics model selected for the session.
44 mty_model_name: Optional MARTY model name used by the C++ backend.
45 mty_model_path: Optional path to the MARTY model directory or file.
46 mty_bsm_mapping_path: Optional user-provided BSM MARTY/Hyperiso mapping JSON.
47
48 Examples:
49 >>> from pathlib import Path
50 >>> cfg = HyperisoConfig(
51 ... model=Model.SM,
52 ... mty_model_name="MSSM_UFO",
53 ... mty_model_path=Path("/path/to/marty/model"),
54 ... mty_bsm_mapping_path=Path("/path/to/zprime_mapping.json"),
55 ... )
56 >>> cpp_cfg = cfg.to_cpp()
57 """
58
59 flags: Dict[ExternalFlag, bool] = field(
60 default_factory=lambda: {
61 ExternalFlag.IS_LHA_SPECTRUM: False,
62 ExternalFlag.HAS_WILSON_INPUT: False,
63 ExternalFlag.HAS_TH_OBSERVABLE_INPUT: False,
64 ExternalFlag.HYP_AS_SM_MARTY: False,
65 }
66 )
67 model: Model = Model.SM
68 mty_model_name: Optional[str] = None
69 mty_model_path: Optional[PathLike] = None
70 mty_bsm_mapping_path: Optional[PathLike] = None
71
72 def to_cpp(self) -> _CppHyperisoConfig:
73 """Convert this Python config into the bound C++ config.
74
75 Returns:
76 C++ ``HyperisoConfig`` instance ready to pass to pybind methods.
77 """
78 cpp = _CppHyperisoConfig()
79 cpp.flags = {flag.value: val for flag, val in self.flags.items()}
80 cpp.model = self.model.value
81
82 if self.mty_model_name is not None:
83 cpp.mty_model_name = self.mty_model_name
84
85 if self.mty_model_path is not None:
86 cpp.mty_model_path = str(self.mty_model_path)
87
88 if self.mty_bsm_mapping_path is not None:
89 cpp.mty_bsm_mapping_path = str(self.mty_bsm_mapping_path)
90
91 return cpp
92
93 def __repr__(self) -> str:
94 """Return a compact representation suitable for logs."""
95 return (
96 "HyperisoConfig("
97 f"model={self.model}, "
98 f"flags={self.flags}, "
99 f"mty_model_name={self.mty_model_name!r}, "
100 f"mty_model_path={self.mty_model_path!r}, "
101 f"mty_bsm_mapping_path={self.mty_bsm_mapping_path!r}"
102 ")"
103 )
104
105
106__all__ = ["ExternalFlag", "HyperisoConfig"]