Source code for beetroots.simulations.astro.forward_map.abstract_forward_map

import abc
import os
from typing import Dict, Optional, Tuple

import numpy as np

from beetroots.modelling.forward_maps.abstract_base import ForwardMap
from beetroots.simulations.astro.abstract_astro_simulation import AstroSimulation
from beetroots.space_transform.abstract_transform import Scaler


[docs] class SimulationForwardMap(AstroSimulation, abc.ABC): r"""abstract class for to set up the forward map for an inversion of astrophysical data"""
[docs] @abc.abstractmethod def setup_forward_map(self, **kwargs) -> Tuple[Scaler, ForwardMap]: """sets up the forward map and the scaler Returns ------- Scaler contains the transformation of the Theta values from their natural space to their scaled space (used by the forward map and in which the sampling happens) and its inverse ForwardMap forward map to be used in the inversion """ pass
[docs] def scale_dict_fixed_params( self, scaler: Scaler, dict_fixed_params: Dict[str, Optional[float]] ) -> Dict[str, Optional[float]]: r"""transforms the fixed parameters from their value in their natural spae to their value in the space in which they are to be sampled. Note ---- since the scaler does not accept None or np.NaN, this transformation really needed a dedicated (though simple) method Parameters ---------- scaler : Scaler contains the transformation of the physical parameters values from their natural space to their scaled space (in which the sampling happens) and its inverse dict_fixed_params : Dict[str, Optional[float]] contains the value of the fixed parameters in the physical parameter natural space. For example, {"kappa":None, "Pth":None, "G0":None, "AV":None, "angle":0.} (the values with None indicate that the parameter is not fixed, so here, only the angle is set, to 0 degree). Returns ------- Dict[str, Optional[float]] contains the value of the fixed parameters in the space in which the physical parameter are to be sampled """ arr_fixed_values = np.ones((1, len(dict_fixed_params))) for i, name in enumerate(dict_fixed_params.keys()): if dict_fixed_params[name] is not None: arr_fixed_values[0, i] = dict_fixed_params[name] arr_fixed_values_scaled = scaler.from_lin_to_scaled(arr_fixed_values) dict_fixed_params_scaled = { name: arr_fixed_values_scaled[0, i] if dict_fixed_params[name] is not None else None for i, name in enumerate(dict_fixed_params.keys()) } return dict_fixed_params_scaled