@@ -100,7 +100,7 @@ def __init__(self, p: Parameters) -> SimSirModel:
100
100
101
101
def sir (
102
102
s : float , i : float , r : float , beta : float , gamma : float , n : float
103
- ) -> Tuple [float , float , float ]:
103
+ ) -> Tuple [float , float , float , float ]:
104
104
"""The SIR model, one time step."""
105
105
106
106
potential_new_infections = beta * s * i
@@ -119,18 +119,18 @@ def sir(
119
119
r_n = 0.0
120
120
121
121
scale = n / (s_n + i_n + r_n )
122
- return s_n * scale , i_n * scale , r_n * scale
122
+ return s_n * scale , i_n * scale , r_n * scale , new_infections * scale
123
123
124
124
125
125
def gen_sir (
126
126
s : float , i : float , r : float , beta : float , gamma : float , n_days : int
127
- ) -> Generator [Tuple [float , float , float ], None , None ]:
127
+ ) -> Generator [Tuple [float , float , float , float ], None , None ]:
128
128
"""Simulate SIR model forward in time yielding tuples."""
129
- s , i , r = (float (v ) for v in (s , i , r ))
129
+ s , i , r , new_infections = (float (v ) for v in (s , i , r , 0.0 ))
130
130
n = s + i + r
131
131
for d in range (n_days + 1 ):
132
- yield d , s , i , r
133
- s , i , r = sir (s , i , r , beta , gamma , n )
132
+ yield d , s , i , r , new_infections
133
+ s , i , r , new_infections = sir (s , i , r , beta , gamma , n )
134
134
135
135
136
136
def sim_sir_df (
@@ -139,7 +139,7 @@ def sim_sir_df(
139
139
"""Simulate the SIR model forward in time."""
140
140
return pd .DataFrame (
141
141
data = gen_sir (s , i , r , beta , gamma , n_days ),
142
- columns = ("day" , "susceptible" , "infected" , "recovered" ),
142
+ columns = ("day" , "susceptible" , "infected" , "recovered" , "new_infections" ),
143
143
)
144
144
145
145
def build_dispositions_df (
0 commit comments