Hyperiso 1.0.3
Modular flavour-physics calculations, Wilson coefficients and statistical inference
Loading...
Searching...
No Matches
ParameterProvider.py
Go to the documentation of this file.
1"""Read-only access to parameters stored in the C++ core.
2
3The filename keeps the historical spelling ``ParamaterProvider.py`` for import
4compatibility. The public class is :class:`ParameterProvider`.
5"""
6
7from __future__ import annotations
8
9from typing import Optional, Union
10
11from pyhyperiso.phyperiso.pyhyperiso.core import ParameterProvider as _CppParameterProvider
12from pyhyperiso.core.Common.GeneralEnum import DataType, ParameterType
13from pyhyperiso.core.Common.ParamId import LhaID, ParamId
14from pyhyperiso.core.Core.Parameter import Parameter
15from pyhyperiso.core.Math.Scalar import Scalar
16
17
19 """Read parameter values and metadata from a C++ parameter namespace.
20
21 A provider can be bound to a specific :class:`ParameterType`, or left
22 unfiltered to use the C++ provider default. Parameters can be addressed by
23 a full ``ParamId`` or by the pair ``(block, code)``.
24
25 Examples:
26 >>> provider = ParameterProvider(ParameterType.SM)
27 >>> pid = ParamId(type=ParameterType.SM, block="MASS", code=24)
28 >>> provider.exists_by_pid(pid)
29 True
30 >>> provider.get_by_block("MASS", 24)
31 80.379
32 """
33
34 def __init__(self, param_type: Optional[ParameterType] = None) -> None:
35 """Create a provider.
36
37 Args:
38 param_type: Optional parameter namespace. When omitted, the C++
39 default provider constructor is used.
40 """
41 self._type = param_type
42 self._cpp_obj = (
43 _CppParameterProvider(param_type.value)
44 if param_type is not None
45 else _CppParameterProvider()
46 )
47
48 def get_by_pid(self, pid: ParamId, dtype: DataType = DataType.VALUE) -> Scalar:
49 """Return a parameter component addressed by ``ParamId``.
50
51 Args:
52 pid: Parameter identifier.
53 dtype: Component to read, for example central value or uncertainty.
54
55 Returns:
56 Requested parameter component as a Scalar (real,complex).
57 """
58 return Scalar.from_cpp(self._cpp_obj(pid._cpp_obj, dtype.value))
59
61 self,
62 block: str,
63 code: Union[int, str, list, LhaID],
64 dtype: DataType = DataType.VALUE,
65 ) -> Scalar:
66 """Return a parameter component addressed by block and LHA code.
67
68 Args:
69 block: LHA-style block name.
70 code: LHA code. Integers, strings, lists and ``LhaID`` are accepted.
71 dtype: Component to read.
72
73 Returns:
74 Requested parameter component as a Scalar (real,complex).
75 """
76 if not isinstance(code, LhaID):
77 code = LhaID(code)
78 return Scalar.from_cpp(self._cpp_obj(block, code._cpp_obj, dtype.value))
79
80 def exists_by_pid(self, pid: ParamId) -> bool:
81 """Return whether a parameter exists for a full ``ParamId``."""
82 return bool(self._cpp_obj.exists(pid._cpp_obj))
83
84 def exists_by_block(self, block: str, code: Union[int, str, list, LhaID]) -> bool:
85 """Return whether a parameter exists for ``(block, code)``."""
86 if not isinstance(code, LhaID):
87 code = LhaID(code)
88 return bool(self._cpp_obj.exists(block, code._cpp_obj))
89
90 def get_parameter(self, pid: ParamId) -> Parameter:
91 """Return the full parameter object for ``pid``.
92
93 Args:
94 pid: Parameter identifier to retrieve.
95
96 Returns:
97 Python ``Parameter`` wrapper around the bound C++ object.
98 """
99 cpp_param = self._cpp_obj.get_parameter(pid._cpp_obj)
100 return Parameter.from_cpp(cpp_param)
101
102 def get_type(self) -> ParameterType:
103 """Return the namespace served by this provider."""
104 return ParameterType(self._cpp_obj.get_type())
105
106 def __repr__(self) -> str:
107 """Return a compact representation including the provider type."""
108 return f"<PyParameterProvider type={self.get_type().name}>"
109
110
111__all__ = ["ParameterProvider"]
Scalar get_by_block(self, str block, Union[int, str, list, LhaID] code, DataType dtype=DataType.VALUE)
bool exists_by_block(self, str block, Union[int, str, list, LhaID] code)
None __init__(self, Optional[ParameterType] param_type=None)
Scalar get_by_pid(self, ParamId pid, DataType dtype=DataType.VALUE)