Source code for laser.measles.abm.components.process_no_births

"""
Process for setting a static population (no vital dynamics).
"""

import numpy as np
import polars as pl

from laser.measles.abm.model import ABMModel
from laser.measles.base import BaseLaserModel
from laser.measles.components import BaseVitalDynamicsParams
from laser.measles.components import BaseVitalDynamicsProcess


class NoBirthsParams(BaseVitalDynamicsParams):
    """Parameters for the no births process."""

    @property
    def crude_birth_rate(self) -> float:
        return 0.0

    @property
    def crude_death_rate(self) -> float:
        return 0.0


[docs] class NoBirthsProcess(BaseVitalDynamicsProcess): """ Component for setting the population of the patches to not have births. """ def __init__( self, model: BaseLaserModel, verbose: bool = False, params: NoBirthsParams | None = None, ) -> None: super().__init__(model, verbose) if params is None: params = NoBirthsParams() self.params = params return
[docs] def __call__(self, model, tick) -> None: pass
[docs] def calculate_capacity(self, model: ABMModel) -> int: """ Calculate the capacity of the people laserframe. Args: model: The ABM model instance Returns: The total population capacity needed across all patches """ return int(model.patches.states.sum())
def _initialize(self, model: ABMModel) -> None: """ Initialize the no births process by setting up the population. Args: model: The ABM model instance to initialize """ # initialize the people laserframe with correct capacity model.initialize_people_capacity(self.calculate_capacity(model)) # people laserframe people = model.people # scenario dataframe scenario = model.scenario # initialize the patch ids according to the scenario population people.patch_id[:] = np.array( scenario.with_row_index().select(pl.col("index").repeat_by(pl.col("pop"))).explode("index")["index"].to_numpy(), dtype=people.patch_id.dtype, ) return