Source code for sid.vaccination

"""This module contains the code for vaccinating individuals."""
import itertools
from typing import Any
from typing import Dict
from typing import Optional

import pandas as pd
from sid.validation import validate_return_is_series_or_ndarray


[docs]def vaccinate_individuals( date: pd.Timestamp, vaccination_models: Optional[Dict[str, Dict[str, Any]]], states: pd.DataFrame, params: pd.DataFrame, seed: itertools.count, ) -> pd.Series: """Vaccinate individuals. Args: date (pandas.Timestamp): The current date. vaccination_models (Optional[Dict[str, Dict[str, Any]): A dictionary of models which allow to vaccinate individuals. The ``"model"`` key holds a function with arguments ``states``, ``params``, and a ``seed`` which returns boolean indicators for individuals who received a vaccination. states (pandas.DataFrame): The states. params (pandas.DataFrame): The params. seed (itertools.count): The seed counter. Returns: newly_vaccinated (pandas.Series): 1d boolean series indicating newly vaccinated individuals. """ newly_vaccinated = pd.Series(index=states.index, data=False) for name, model in vaccination_models.items(): loc = model.get("loc", params.index) func = model["model"] if model["start"] <= date <= model["end"]: new_newly_vaccinated = func( receives_vaccine=newly_vaccinated.copy(deep=True), states=states, params=params.loc[loc], seed=next(seed), ) new_newly_vaccinated = validate_return_is_series_or_ndarray( new_newly_vaccinated, name, "vaccination_models", states.index ) newly_vaccinated.loc[new_newly_vaccinated] = True return newly_vaccinated