Source code for beorn.load_input_data.base

from abc import ABC, abstractmethod
import numpy as np
import logging

from ..structs import Parameters, HaloCatalog

[docs] class BaseLoader(ABC): """Abstract base class for data loaders. Subclasses must implement methods to provide the following data: - halo catalogs containing all relevant halo properties, - baryonic density fields, - redshift-space-distortion (RSD) (optional) Implementations are expected to expose a ``redshifts`` property describing available snapshots. """ logger = logging.getLogger(__name__)
[docs] def __init__(self, parameters: Parameters): """Initialize the loader with simulation ``parameters``. Args: parameters (Parameters): Parameters object containing simulation settings. """ self.parameters = parameters
[docs] @abstractmethod def load_halo_catalog(self, redshift_index: int) -> HaloCatalog: """Load the halo catalog for a given snapshot index. Args: redshift_index (int): Snapshot index to load. Returns: HaloCatalog: Loaded halo catalog for the snapshot. """ pass
[docs] @abstractmethod def load_density_field(self, redshift_index: int) -> np.ndarray: """Load the baryonic density field for a given snapshot. Args: redshift_index (int): Snapshot index to load. Returns: numpy.ndarray: 3D density field array (shape ``Ncell^3``). """ pass
[docs] @abstractmethod def load_rsd_fields(self, redshift_index: int) -> tuple[np.ndarray, np.ndarray, np.ndarray]: """Load the three RSD (velocity-weighted) fields for the snapshot. Args: redshift_index (int): Snapshot index to load. Returns: tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray]: The three velocity-component meshes (vx, vy, vz) mapped to the grid. """ pass
@property @abstractmethod def redshifts(self) -> np.ndarray: """Array of available redshifts for this loader. Returns: numpy.ndarray: 1D array of redshift values (ascending order: current->past). """ pass
[docs] def redshift_index(self, redshift: float) -> int: """Return the index of ``redshift`` in the loader's grid. Args: redshift (float): Redshift value to look up. Returns: int: Index into :pyattr:`redshifts` corresponding to ``redshift``. Raises: ValueError: If the requested redshift is not available. """ indices = np.where(self.redshifts == redshift)[0] if indices.size == 0: raise ValueError(f"Redshift {redshift} not found in loader's redshifts.") return indices[0]