156def _config_from_cpp(cpp_cfg: Any) -> MarginalConfig:
157 """Dispatch a bound C++ marginal config to the matching Python dataclass.
160 cpp_cfg: Bound C++ marginal configuration object.
163 The corresponding Python configuration dataclass.
166 TypeError: If the C++ config type is not recognized.
168 if isinstance(cpp_cfg, st.FlatMarginalCfg):
169 return FlatMarginalConfig.from_cpp(cpp_cfg)
170 if isinstance(cpp_cfg, st.GaussianMarginalCfg):
171 return GaussianMarginalConfig.from_cpp(cpp_cfg)
172 if isinstance(cpp_cfg, st.SplitGaussianMarginalCfg):
173 return SplitGaussianMarginalConfig.from_cpp(cpp_cfg)
174 if isinstance(cpp_cfg, st.LikelihoodMarginalCfg):
175 return LikelihoodMarginalConfig.from_cpp(cpp_cfg)
177 raise TypeError(f
"Config C++ not known: {type(cpp_cfg)!r}")