5
5
"""
6
6
7
7
from collections import namedtuple
8
- from datetime import date
8
+ from datetime import date , datetime
9
9
from typing import Optional
10
10
11
11
from .validators import (
@@ -45,24 +45,29 @@ def __init__(self, **kwargs):
45
45
self .population = population
46
46
47
47
48
+ def cast_date (string ):
49
+ return datetime .strptime (string , '%Y-%m-%d' ).date ()
50
+
51
+
52
+ # Dictionary from parameter names to Tuples containing (validator, default value, cast function, help text)
48
53
ACCEPTED_PARAMETERS = {
49
- "current_hospitalized" : (Positive , None ),
50
- "current_date" : (OptionalDate , None ),
51
- "date_first_hospitalized" : (OptionalDate , None ),
52
- "doubling_time" : (OptionalStrictlyPositive , None ),
53
- "relative_contact_rate" : (Rate , None ),
54
- "mitigation_date" : (OptionalDate , None ),
55
- "infectious_days" : (StrictlyPositive , 14 ),
56
- "market_share" : (Rate , 1.0 ),
57
- "max_y_axis" : (OptionalStrictlyPositive , None ),
58
- "n_days" : (StrictlyPositive , 100 ),
59
- "recovered" : (Positive , 0 ),
60
- "population" : (OptionalStrictlyPositive , None ),
61
- "region" : (OptionalValue , None ),
62
-
63
- "hospitalized" : (ValDisposition , None ),
64
- "icu" : (ValDisposition , None ),
65
- "ventilated" : (ValDisposition , None ),
54
+ "current_hospitalized" : (Positive , None , int , "Currently hospitalized COVID-19 patients (>= 0)" ),
55
+ "current_date" : (OptionalDate , None , cast_date , "Date on which the forecast should be based" ),
56
+ "date_first_hospitalized" : (OptionalDate , None , cast_date , "Date the first patient was hospitalized" ),
57
+ "doubling_time" : (OptionalStrictlyPositive , None , float , "Doubling time before social distancing (days)" ),
58
+ "relative_contact_rate" : (Rate , None , float , "Social distancing reduction rate: 0.0 - 1.0" ),
59
+ "mitigation_date" : (OptionalDate , None , cast_date , "Date on which social distancing measures too effect" ),
60
+ "infectious_days" : (StrictlyPositive , 14 , int , "Infectious days" ),
61
+ "market_share" : (Rate , 1.0 , float , "Hospital market share (0.00001 - 1.0)" ),
62
+ "max_y_axis" : (OptionalStrictlyPositive , None , int , None ),
63
+ "n_days" : (StrictlyPositive , 100 , int , "Number of days to project >= 0" ),
64
+ "recovered" : (Positive , 0 , int , "Number of patients already recovered (not yet implemented)" ),
65
+ "population" : (OptionalStrictlyPositive , None , int , "Regional population >= 1" ),
66
+ "region" : (OptionalValue , None , None , "No help available" ),
67
+
68
+ "hospitalized" : (ValDisposition , None , None , None ),
69
+ "icu" : (ValDisposition , None , None , None ),
70
+ "ventilated" : (ValDisposition , None , None , None ),
66
71
}
67
72
68
73
@@ -76,7 +81,7 @@ def __init__(self, **kwargs):
76
81
raise ValueError (f"Unexpected parameter { key } " )
77
82
passed_and_default_parameters [key ] = value
78
83
79
- for key , (validator , default_value ) in ACCEPTED_PARAMETERS .items ():
84
+ for key , (validator , default_value , cast , help ) in ACCEPTED_PARAMETERS .items ():
80
85
if key not in passed_and_default_parameters :
81
86
passed_and_default_parameters [key ] = default_value
82
87
0 commit comments