parameters Module#

Parameter containers for compartmental models.

This module provides validated parameter classes for each model type, with automatic calculation of derived quantities (R₀, CFR, etc.).

Classes#

class episia.models.parameters.ModelParameters(N, I0, E0=0.0, R0_init=0.0, D0=0.0, t_span=(0.0, 160.0), dt=1.0)[source]#

Bases: object

Base parameters shared by all compartmental models.

Parameters:
  • N (int) – Total population size.

  • I0 (float) – Initial number of infected individuals.

  • E0 (float) – Initial number of exposed (used by SEIR/SEIRD).

  • R0_init (float) – Initial recovered (default 0).

  • D0 (float) – Initial dead (used by SEIRD, default 0).

  • t_span (Tuple[float, float]) – (t_start, t_end) in days.

  • dt (float) – Output time step in days (informational only).

D0: float = 0.0#
E0: float = 0.0#
I0: float#
N: int#
R0_init: float = 0.0#
property S0: float#

Initial susceptibles derived from other compartments.

__init__(N, I0, E0=0.0, R0_init=0.0, D0=0.0, t_span=(0.0, 160.0), dt=1.0)#
Parameters:
Return type:

None

dt: float = 1.0#
t_span: Tuple[float, float] = (0.0, 160.0)#
to_dict()[source]#
Return type:

Dict[str, Any]

class episia.models.parameters.SIRParameters(N, I0, E0=0.0, R0_init=0.0, D0=0.0, t_span=(0.0, 160.0), dt=1.0, beta=0.3, gamma=0.1)[source]#

Bases: ModelParameters

Parameters for the SIR model.

Parameters:
Derived:

r0 = beta / gamma t_inf = 1 / gamma (mean infectious period)

__init__(N, I0, E0=0.0, R0_init=0.0, D0=0.0, t_span=(0.0, 160.0), dt=1.0, beta=0.3, gamma=0.1)#
Parameters:
Return type:

None

beta: float = 0.3#
gamma: float = 0.1#
property r0: float#

Basic reproduction number R₀ = β / γ.

property t_infectious: float#

Mean infectious period in days.

to_dict()[source]#
Return type:

Dict[str, Any]

class episia.models.parameters.SEIRParameters(N, I0, E0=0.0, R0_init=0.0, D0=0.0, t_span=(0.0, 160.0), dt=1.0, beta=0.3, sigma=0.2, gamma=0.1)[source]#

Bases: ModelParameters

Parameters for the SEIR model.

Parameters:
  • beta (float) – Transmission rate (day⁻¹).

  • sigma (float) – Rate of progression from exposed to infectious (day⁻¹). 1/sigma = mean incubation period.

  • gamma (float) – Recovery rate (day⁻¹).

  • N (int)

  • I0 (float)

  • E0 (float)

  • R0_init (float)

  • D0 (float)

  • t_span (Tuple[float, float])

  • dt (float)

Derived:

r0 = beta / gamma t_inc = 1 / sigma t_inf = 1 / gamma

__init__(N, I0, E0=0.0, R0_init=0.0, D0=0.0, t_span=(0.0, 160.0), dt=1.0, beta=0.3, sigma=0.2, gamma=0.1)#
Parameters:
Return type:

None

beta: float = 0.3#
gamma: float = 0.1#
property r0: float#

Basic reproduction number R₀ = β / γ.

sigma: float = 0.2#
property t_incubation: float#

Mean incubation period in days.

property t_infectious: float#

Mean infectious period in days.

to_dict()[source]#
Return type:

Dict[str, Any]

class episia.models.parameters.SEIRDParameters(N, I0, E0=0.0, R0_init=0.0, D0=0.0, t_span=(0.0, 160.0), dt=1.0, beta=0.3, sigma=0.2, gamma=0.09, mu=0.01)[source]#

Bases: ModelParameters

Parameters for the SEIRD model (with death compartment).

Parameters:
Derived:

r0 = beta / (gamma + mu) cfr = mu / (gamma + mu) (case fatality ratio)

__init__(N, I0, E0=0.0, R0_init=0.0, D0=0.0, t_span=(0.0, 160.0), dt=1.0, beta=0.3, sigma=0.2, gamma=0.09, mu=0.01)#
Parameters:
Return type:

None

beta: float = 0.3#
property cfr: float#

Case fatality ratio μ / (γ + μ).

gamma: float = 0.09#
mu: float = 0.01#
property r0: float#

Basic reproduction number R₀ = β / (γ + μ).

sigma: float = 0.2#
property t_incubation: float#
property t_infectious: float#
to_dict()[source]#
Return type:

Dict[str, Any]

class episia.models.parameters.ScenarioSet(scenarios=<factory>)[source]#

Bases: object

Named collection of parameter sets for scenario comparison.

Example:

from episia.models.parameters import SIRParameters, ScenarioSet

baseline     = SIRParameters(N=1_000_000, I0=1, beta=0.3, gamma=0.1)
intervention = SIRParameters(N=1_000_000, I0=1, beta=0.15, gamma=0.1)

scenarios = ScenarioSet([
    ("Baseline",     baseline),
    ("50% reduction", intervention),
])
Parameters:

scenarios (List[Tuple[str, ModelParameters]])

__iter__()[source]#
__len__()[source]#
Return type:

int

__repr__()[source]#

Return repr(self).

Return type:

str

add(label, params)[source]#

Append a scenario and return self for chaining.

Parameters:
Return type:

ScenarioSet

labels()[source]#
Return type:

List[str]

scenarios: List[Tuple[str, ModelParameters]]#

Examples#

SIR parameters:

from episia.models.parameters import SIRParameters

params = SIRParameters(
    N=1_000_000,      # Population
    I0=10,            # Initial infected
    beta=0.3,         # Transmission rate
    gamma=0.1,        # Recovery rate
    t_span=(0, 200)   # Simulation period
)

print(f"R₀: {params.r0:.2f}")
print(f"Infectious period: {params.t_infectious:.1f} days")

SEIRD parameters with mortality:

from episia.models.parameters import SEIRDParameters

params = SEIRDParameters(
    N=1_000_000,
    I0=10,
    E0=50,
    beta=0.35,
    sigma=1/5.2,      # Incubation rate
    gamma=0.09,        # Recovery rate
    mu=0.01,           # Mortality rate
    t_span=(0, 365)
)

print(f"CFR: {params.cfr:.1%}")
print(f"R₀: {params.r0:.2f}")

Scenario sets:

from episia.models.parameters import SIRParameters, ScenarioSet

baseline = SIRParameters(N=1e6, I0=10, beta=0.3, gamma=0.1)
lockdown = SIRParameters(N=1e6, I0=10, beta=0.15, gamma=0.1)
masks    = SIRParameters(N=1e6, I0=10, beta=0.2, gamma=0.1)

scenarios = ScenarioSet([
    ("Baseline", baseline),
    ("Lockdown", lockdown),
    ("Masks only", masks),
])

for label, params in scenarios:
    print(f"{label}: R₀={params.r0:.2f}")