Kévin Yauy commited on
Commit
fa8bd43
1 Parent(s): fd06789

refacto(requirements): add requirements

Browse files

Former-commit-id: 10acc250bd2079381b082a132ef673875d815d88

Files changed (4) hide show
  1. .python-version +1 -0
  2. README.md +2 -2
  3. phenogenius_cli.py +77 -75
  4. requirements.txt +178 -0
.python-version ADDED
@@ -0,0 +1 @@
 
 
1
+ 3.8
README.md CHANGED
@@ -18,8 +18,8 @@ If you use PhenoGenius, please cite:
18
  - Requirements
19
 
20
  ```bash
21
- python == 3.8
22
- poetry
23
  ```
24
 
25
  - Install dependencies
 
18
  - Requirements
19
 
20
  ```bash
21
+ python == 3.8 #(pyenv install 3.8)
22
+ poetry #(https://python-poetry.org/docs/#installation)
23
  ```
24
 
25
  - Install dependencies
phenogenius_cli.py CHANGED
@@ -90,7 +90,7 @@ def score_sim_add(hpo_list_add, matrix, sim_dict, symbol):
90
 
91
  @click.command()
92
  @click.option("--result_file", default="match.tsv")
93
- @click.option("--hpo_list", default="HP:0000107,HP:0000108,HP:0001407,HP:0005562")
94
  def evaluate_matching(result_file, hpo_list):
95
  logging.info("INFO: load databases")
96
  ncbi, symbol = symbol_to_id_to_dict()
@@ -98,83 +98,85 @@ def evaluate_matching(result_file, hpo_list):
98
  hp_onto = load_hp_ontology()
99
 
100
  logging.info("INFO: clean HPO list")
101
- hpo_list_ini = hpo_list.strip().split(",")
102
- hpo_list_up = []
103
-
104
- for hpo in hpo_list_ini:
105
- if hpo in ["HP:0000001"]:
106
- pass
107
- else:
108
- if data[hpo].astype(bool).sum(axis=0) != 0:
109
- hpo_list_up.append(hpo)
110
  else:
111
- hpo_to_test = hp_onto[hpo]["direct_parent"][0]
112
- while data[hpo_to_test].astype(bool).sum(
113
- axis=0
114
- ) == 0 and hpo_to_test not in ["HP:0000001"]:
115
- hpo_to_test = hp_onto[hpo_to_test]["direct_parent"][0]
116
- if hpo_to_test in ["HP:0000001"]:
117
- pass
118
  else:
119
- hpo_list_up.append(hpo_to_test)
120
- hpo_list = list(set(hpo_list_up))
121
- if len(hpo_list) < 6:
122
- logging.info("INFO: selected symptom interaction model - NMF")
123
- pandarallel.initialize(nb_workers=4)
124
- pheno_NMF, reduced = load_nmf_model()
125
- witness = np.zeros(len(data.columns))
126
- witness_nmf = np.matmul(pheno_NMF.components_, witness)
127
- witness_df = (
128
- pd.DataFrame(reduced)
129
- .set_index(data.index)
130
- .parallel_apply(lambda x: sum((x - witness_nmf) ** 2), axis=1)
131
- )
132
-
133
- patient = np.zeros(len(data.columns))
134
- for hpo in hpo_list:
135
- hpo_index = list(data.columns).index(hpo)
136
- patient[hpo_index] = 1
137
-
138
- patient_nmf = np.matmul(pheno_NMF.components_, patient)
139
- patient_df = (
140
- pd.DataFrame(reduced)
141
- .set_index(data.index)
142
- .parallel_apply(lambda x: sum((x - patient_nmf) ** 2), axis=1)
143
- )
144
-
145
- case_df = pd.DataFrame(patient_df - witness_df)
146
- case_df.columns = ["score"]
147
- case_df["score_norm"] = abs(case_df["score"] - case_df["score"].max())
148
- case_df["sum"] = case_df["score_norm"]
149
- case_df_sort = case_df.sort_values(by="sum", ascending=False)
150
- case_df_sort["rank"] = (
151
- case_df_sort["sum"].rank(ascending=False, method="max").astype(int)
152
- )
153
- case_df_sort["gene_symbol"] = case_df_sort.index.to_series().apply(
154
- get_symbol, args=(symbol,)
155
- )
156
- match_nmf = case_df_sort[["gene_symbol", "rank", "sum"]]
157
- match_nmf_filter = match_nmf[match_nmf["sum"] > 0.01].reset_index()
158
- match_nmf_filter.columns = ["gene_id", "gene_symbol", "rank", "sum"]
159
- match_nmf_filter["sum"] = match_nmf_filter["sum"].round(2)
160
- match_nmf_filter.to_csv(result_file, sep="\t", index=False)
 
 
 
 
 
 
 
 
161
 
162
- else:
163
- logging.info("INFO: selected symptom interaction model - node similarity")
164
- similarity_terms_dict = load_similarity_dict()
165
- sim_dict, hpo_list_add = get_similar_terms(hpo_list, similarity_terms_dict)
166
- results_sum_add = score_sim_add(hpo_list_add, data, sim_dict, symbol)
167
- results_sum_add["rank"] = (
168
- results_sum_add["sum"].rank(ascending=False, method="max").astype(int)
169
- )
170
- cols = results_sum_add.columns.tolist()
171
- cols = cols[-2:] + cols[:-2]
172
- match_sim = results_sum_add[cols].sort_values(by=["sum"], ascending=False)
173
- match_sim_filter = match_sim[match_sim["sum"] > 0.01].reset_index()
174
- match_sim_filter_print = match_sim_filter.iloc[:, [0, 1, 2, -1]]
175
- match_sim_filter_print.columns = ["gene_id", "gene_symbol", "rank", "sum"]
176
- match_sim_filter_print["sum"] = match_sim_filter_print["sum"].round(2)
177
- match_sim_filter_print.to_csv(result_file, sep="\t", index=False)
178
 
179
 
180
  if __name__ == "__main__":
 
90
 
91
  @click.command()
92
  @click.option("--result_file", default="match.tsv")
93
+ @click.option("--hpo_list", default=None)
94
  def evaluate_matching(result_file, hpo_list):
95
  logging.info("INFO: load databases")
96
  ncbi, symbol = symbol_to_id_to_dict()
 
98
  hp_onto = load_hp_ontology()
99
 
100
  logging.info("INFO: clean HPO list")
101
+ if hpo_list is None:
102
+ print("Provide a list of HPO terms with the --hpo_list option")
103
+ else:
104
+ hpo_list_ini = hpo_list.strip().split(",")
105
+ hpo_list_up = []
106
+ for hpo in hpo_list_ini:
107
+ if hpo in ["HP:0000001"]:
108
+ pass
 
109
  else:
110
+ if data[hpo].astype(bool).sum(axis=0) != 0:
111
+ hpo_list_up.append(hpo)
 
 
 
 
 
112
  else:
113
+ hpo_to_test = hp_onto[hpo]["direct_parent"][0]
114
+ while data[hpo_to_test].astype(bool).sum(
115
+ axis=0
116
+ ) == 0 and hpo_to_test not in ["HP:0000001"]:
117
+ hpo_to_test = hp_onto[hpo_to_test]["direct_parent"][0]
118
+ if hpo_to_test in ["HP:0000001"]:
119
+ pass
120
+ else:
121
+ hpo_list_up.append(hpo_to_test)
122
+ hpo_list = list(set(hpo_list_up))
123
+ if len(hpo_list) < 6:
124
+ logging.info("INFO: selected symptom interaction model - NMF")
125
+ pandarallel.initialize(nb_workers=4)
126
+ pheno_NMF, reduced = load_nmf_model()
127
+ witness = np.zeros(len(data.columns))
128
+ witness_nmf = np.matmul(pheno_NMF.components_, witness)
129
+ witness_df = (
130
+ pd.DataFrame(reduced)
131
+ .set_index(data.index)
132
+ .parallel_apply(lambda x: sum((x - witness_nmf) ** 2), axis=1)
133
+ )
134
+
135
+ patient = np.zeros(len(data.columns))
136
+ for hpo in hpo_list:
137
+ hpo_index = list(data.columns).index(hpo)
138
+ patient[hpo_index] = 1
139
+
140
+ patient_nmf = np.matmul(pheno_NMF.components_, patient)
141
+ patient_df = (
142
+ pd.DataFrame(reduced)
143
+ .set_index(data.index)
144
+ .parallel_apply(lambda x: sum((x - patient_nmf) ** 2), axis=1)
145
+ )
146
+
147
+ case_df = pd.DataFrame(patient_df - witness_df)
148
+ case_df.columns = ["score"]
149
+ case_df["score_norm"] = abs(case_df["score"] - case_df["score"].max())
150
+ case_df["sum"] = case_df["score_norm"]
151
+ case_df_sort = case_df.sort_values(by="sum", ascending=False)
152
+ case_df_sort["rank"] = (
153
+ case_df_sort["sum"].rank(ascending=False, method="max").astype(int)
154
+ )
155
+ case_df_sort["gene_symbol"] = case_df_sort.index.to_series().apply(
156
+ get_symbol, args=(symbol,)
157
+ )
158
+ match_nmf = case_df_sort[["gene_symbol", "rank", "sum"]]
159
+ match_nmf_filter = match_nmf[match_nmf["sum"] > 0.01].reset_index()
160
+ match_nmf_filter.columns = ["gene_id", "gene_symbol", "rank", "sum"]
161
+ match_nmf_filter["sum"] = match_nmf_filter["sum"].round(2)
162
+ match_nmf_filter.to_csv(result_file, sep="\t", index=False)
163
 
164
+ else:
165
+ logging.info("INFO: selected symptom interaction model - node similarity")
166
+ similarity_terms_dict = load_similarity_dict()
167
+ sim_dict, hpo_list_add = get_similar_terms(hpo_list, similarity_terms_dict)
168
+ results_sum_add = score_sim_add(hpo_list_add, data, sim_dict, symbol)
169
+ results_sum_add["rank"] = (
170
+ results_sum_add["sum"].rank(ascending=False, method="max").astype(int)
171
+ )
172
+ cols = results_sum_add.columns.tolist()
173
+ cols = cols[-2:] + cols[:-2]
174
+ match_sim = results_sum_add[cols].sort_values(by=["sum"], ascending=False)
175
+ match_sim_filter = match_sim[match_sim["sum"] > 0.01].reset_index()
176
+ match_sim_filter_print = match_sim_filter.iloc[:, [0, 1, 2, -1]]
177
+ match_sim_filter_print.columns = ["gene_id", "gene_symbol", "rank", "sum"]
178
+ match_sim_filter_print["sum"] = match_sim_filter_print["sum"].round(2)
179
+ match_sim_filter_print.to_csv(result_file, sep="\t", index=False)
180
 
181
 
182
  if __name__ == "__main__":
requirements.txt ADDED
@@ -0,0 +1,178 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ altair==4.2.0 ; python_version >= "3.8" and python_version < "3.9"
2
+ appnope==0.1.3 ; python_version >= "3.8" and python_version < "3.9" and (platform_system == "Darwin" or sys_platform == "darwin")
3
+ argon2-cffi-bindings==21.2.0 ; python_version >= "3.8" and python_version < "3.9"
4
+ argon2-cffi==21.3.0 ; python_version >= "3.8" and python_version < "3.9"
5
+ asttokens==2.0.5 ; python_version >= "3.8" and python_version < "3.9"
6
+ attrs==22.1.0 ; python_version >= "3.8" and python_version < "3.9"
7
+ backcall==0.2.0 ; python_version >= "3.8" and python_version < "3.9" \
8
+ --hash=sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e \
9
+ --hash=sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255
10
+ backports-zoneinfo==0.2.1 ; python_version >= "3.8" and python_version < "3.9"
11
+ beautifulsoup4==4.11.1 ; python_version >= "3.8" and python_version < "3.9"
12
+ bleach==5.0.1 ; python_version >= "3.8" and python_version < "3.9"
13
+ blinker==1.5 ; python_version >= "3.8" and python_version < "3.9"
14
+ cachetools==5.2.0 ; python_version >= "3.8" and python_version < "3.9"
15
+ certifi==2022.6.15 ; python_version >= "3.8" and python_version < "3.9"
16
+ cffi==1.15.1 ; python_version >= "3.8" and python_version < "3.9"
17
+ charset-normalizer==2.1.0 ; python_version >= "3.8" and python_version < "3.9"
18
+ click==8.0.4 ; python_version >= "3.8" and python_version < "3.9"
19
+ colorama==0.4.5 ; python_version >= "3.8" and python_version < "3.9" and (platform_system == "Windows" or sys_platform == "win32")
20
+ commonmark==0.9.1 ; python_version >= "3.8" and python_version < "3.9"
21
+ cycler==0.11.0 ; python_version >= "3.8" and python_version < "3.9"
22
+ debugpy==1.6.2 ; python_version >= "3.8" and python_version < "3.9"
23
+ decorator==5.1.1 ; python_version >= "3.8" and python_version < "3.9"
24
+ defusedxml==0.7.1 ; python_version >= "3.8" and python_version < "3.9" \
25
+ --hash=sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69 \
26
+ --hash=sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61
27
+ dill==0.3.5.1 ; python_version >= "3.8" and python_version < "3.9"
28
+ entrypoints==0.4 ; python_version >= "3.8" and python_version < "3.9"
29
+ executing==0.9.1 ; python_version >= "3.8" and python_version < "3.9"
30
+ fastjsonschema==2.16.1 ; python_version >= "3.8" and python_version < "3.9"
31
+ fonttools==4.34.4 ; python_version >= "3.8" and python_version < "3.9"
32
+ gitdb==4.0.9 ; python_version >= "3.8" and python_version < "3.9"
33
+ gitpython==3.1.27 ; python_version >= "3.8" and python_version < "3.9"
34
+ idna==3.3 ; python_version >= "3.8" and python_version < "3.9"
35
+ importlib-metadata==4.12.0 ; python_version >= "3.8" and python_version < "3.9"
36
+ importlib-resources==5.9.0 ; python_version >= "3.8" and python_version < "3.9"
37
+ ipykernel==6.15.1 ; python_version >= "3.8" and python_version < "3.9"
38
+ ipython-genutils==0.2.0 ; python_version >= "3.8" and python_version < "3.9" \
39
+ --hash=sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8 \
40
+ --hash=sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8
41
+ ipython==8.4.0 ; python_version >= "3.8" and python_version < "3.9"
42
+ ipywidgets==7.7.1 ; python_version >= "3.8" and python_version < "3.9"
43
+ jedi==0.18.1 ; python_version >= "3.8" and python_version < "3.9"
44
+ jinja2==3.1.2 ; python_version >= "3.8" and python_version < "3.9"
45
+ joblib==1.1.0 ; python_version >= "3.8" and python_version < "3.9" \
46
+ --hash=sha256:4158fcecd13733f8be669be0683b96ebdbbd38d23559f54dca7205aea1bf1e35 \
47
+ --hash=sha256:f21f109b3c7ff9d95f8387f752d0d9c34a02aa2f7060c2135f465da0e5160ff6
48
+ jsonschema==4.9.0 ; python_version >= "3.8" and python_version < "3.9"
49
+ jupyter-client==7.3.4 ; python_version >= "3.8" and python_version < "3.9"
50
+ jupyter-core==4.11.1 ; python_version >= "3.8" and python_version < "3.9"
51
+ jupyterlab-pygments==0.2.2 ; python_version >= "3.8" and python_version < "3.9"
52
+ jupyterlab-widgets==1.1.1 ; python_version >= "3.8" and python_version < "3.9"
53
+ kiwisolver==1.4.4 ; python_version >= "3.8" and python_version < "3.9"
54
+ llvmlite==0.34.0 ; python_version >= "3.8" and python_version < "3.9"
55
+ markupsafe==2.1.1 ; python_version >= "3.8" and python_version < "3.9"
56
+ matplotlib-inline==0.1.3 ; python_version >= "3.8" and python_version < "3.9"
57
+ matplotlib==3.5.2 ; python_version >= "3.8" and python_version < "3.9"
58
+ mistune==0.8.4 ; python_version >= "3.8" and python_version < "3.9" \
59
+ --hash=sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e \
60
+ --hash=sha256:88a1051873018da288eee8538d476dffe1262495144b33ecb586c4ab266bb8d4
61
+ mizani==0.7.4 ; python_version >= "3.8" and python_version < "3.9"
62
+ multipy==0.16 ; python_version >= "3.8" and python_version < "3.9"
63
+ nbclient==0.6.6 ; python_version >= "3.8" and python_version < "3.9"
64
+ nbconvert==6.5.0 ; python_version >= "3.8" and python_version < "3.9"
65
+ nbformat==5.4.0 ; python_version >= "3.8" and python_version < "3.9"
66
+ nest-asyncio==1.5.5 ; python_version >= "3.8" and python_version < "3.9"
67
+ networkx==2.8.5 ; python_version >= "3.8" and python_version < "3.9"
68
+ notebook==6.4.12 ; python_version >= "3.8" and python_version < "3.9"
69
+ numba==0.51.2 ; python_version >= "3.8" and python_version < "3.9"
70
+ numpy==1.23.1 ; python_version < "3.9" and python_version >= "3.8"
71
+ obonet==0.3.0 ; python_version >= "3.8" and python_version < "3.9"
72
+ packaging==21.3 ; python_version >= "3.8" and python_version < "3.9"
73
+ palettable==3.3.0 ; python_version >= "3.8" and python_version < "3.9"
74
+ pandarallel==1.6.1 ; python_version >= "3.8" and python_version < "3.9" \
75
+ --hash=sha256:e36f16d7057a1728f9f3a6ef25ca50e01e382eb10d8be580a4881c210be6ce3a
76
+ pandas==1.4.3 ; python_version >= "3.8" and python_version < "3.9"
77
+ pandocfilters==1.5.0 ; python_version >= "3.8" and python_version < "3.9"
78
+ parso==0.8.3 ; python_version >= "3.8" and python_version < "3.9"
79
+ patsy==0.5.2 ; python_version >= "3.8" and python_version < "3.9"
80
+ pexpect==4.8.0 ; python_version >= "3.8" and python_version < "3.9" and sys_platform != "win32" \
81
+ --hash=sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937 \
82
+ --hash=sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c
83
+ pickleshare==0.7.5 ; python_version >= "3.8" and python_version < "3.9" \
84
+ --hash=sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca \
85
+ --hash=sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56
86
+ pillow==9.2.0 ; python_version >= "3.8" and python_version < "3.9"
87
+ pkgutil-resolve-name==1.3.10 ; python_version >= "3.8" and python_version < "3.9"
88
+ plotnine==0.9.0 ; python_version >= "3.8" and python_version < "3.9"
89
+ prometheus-client==0.14.1 ; python_version >= "3.8" and python_version < "3.9"
90
+ prompt-toolkit==3.0.30 ; python_version >= "3.8" and python_version < "3.9"
91
+ protobuf==3.20.1 ; python_version >= "3.8" and python_version < "3.9"
92
+ psrecord==1.2 ; python_version >= "3.8" and python_version < "3.9"
93
+ psutil==5.9.1 ; python_version >= "3.8" and python_version < "3.9"
94
+ ptyprocess==0.7.0 ; python_version >= "3.8" and python_version < "3.9" and (sys_platform != "win32" or os_name != "nt") \
95
+ --hash=sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35 \
96
+ --hash=sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220
97
+ pure-eval==0.2.2 ; python_version >= "3.8" and python_version < "3.9"
98
+ py==1.11.0 ; python_version >= "3.8" and python_version < "3.9" and implementation_name == "pypy"
99
+ pyarrow==8.0.0 ; python_version >= "3.8" and python_version < "3.9"
100
+ pycparser==2.21 ; python_version >= "3.8" and python_version < "3.9"
101
+ pydeck==0.7.1 ; python_version >= "3.8" and python_version < "3.9"
102
+ pygments==2.12.0 ; python_version >= "3.8" and python_version < "3.9"
103
+ pympler==1.0.1 ; python_version >= "3.8" and python_version < "3.9"
104
+ pynndescent==0.5.7 ; python_version >= "3.8" and python_version < "3.9"
105
+ pyparsing==3.0.9 ; python_version >= "3.8" and python_version < "3.9"
106
+ pyrsistent==0.18.1 ; python_version >= "3.8" and python_version < "3.9"
107
+ python-dateutil==2.8.2 ; python_version >= "3.8" and python_version < "3.9" \
108
+ --hash=sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 \
109
+ --hash=sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9
110
+ pytz-deprecation-shim==0.1.0.post0 ; python_version >= "3.8" and python_version < "3.9"
111
+ pytz==2022.1 ; python_version >= "3.8" and python_version < "3.9"
112
+ pywin32==304 ; sys_platform == "win32" and platform_python_implementation != "PyPy" and python_version >= "3.8" and python_version < "3.9"
113
+ pywinpty==2.0.6 ; python_version >= "3.8" and python_version < "3.9" and os_name == "nt"
114
+ pyzmq==23.2.0 ; python_version >= "3.8" and python_version < "3.9"
115
+ requests==2.28.1 ; python_version >= "3.8" and python_version < "3.9"
116
+ rich==12.5.1 ; python_version >= "3.8" and python_version < "3.9"
117
+ scikit-learn==1.1.1 ; python_version >= "3.8" and python_version < "3.9"
118
+ scipy==1.6.1 ; python_version >= "3.8" and python_version < "3.9" \
119
+ --hash=sha256:0c8a51d33556bf70367452d4d601d1742c0e806cd0194785914daf19775f0e67 \
120
+ --hash=sha256:0e5b0ccf63155d90da576edd2768b66fb276446c371b73841e3503be1d63fb5d \
121
+ --hash=sha256:2481efbb3740977e3c831edfd0bd9867be26387cacf24eb5e366a6a374d3d00d \
122
+ --hash=sha256:33d6b7df40d197bdd3049d64e8e680227151673465e5d85723b3b8f6b15a6ced \
123
+ --hash=sha256:5da5471aed911fe7e52b86bf9ea32fb55ae93e2f0fac66c32e58897cfb02fa07 \
124
+ --hash=sha256:5f331eeed0297232d2e6eea51b54e8278ed8bb10b099f69c44e2558c090d06bf \
125
+ --hash=sha256:5fa9c6530b1661f1370bcd332a1e62ca7881785cc0f80c0d559b636567fab63c \
126
+ --hash=sha256:6725e3fbb47da428794f243864f2297462e9ee448297c93ed1dcbc44335feb78 \
127
+ --hash=sha256:68cb4c424112cd4be886b4d979c5497fba190714085f46b8ae67a5e4416c32b4 \
128
+ --hash=sha256:794e768cc5f779736593046c9714e0f3a5940bc6dcc1dba885ad64cbfb28e9f0 \
129
+ --hash=sha256:83bf7c16245c15bc58ee76c5418e46ea1811edcc2e2b03041b804e46084ab627 \
130
+ --hash=sha256:8e403a337749ed40af60e537cc4d4c03febddcc56cd26e774c9b1b600a70d3e4 \
131
+ --hash=sha256:a15a1f3fc0abff33e792d6049161b7795909b40b97c6cc2934ed54384017ab76 \
132
+ --hash=sha256:a423533c55fec61456dedee7b6ee7dce0bb6bfa395424ea374d25afa262be261 \
133
+ --hash=sha256:a5193a098ae9f29af283dcf0041f762601faf2e595c0db1da929875b7570353f \
134
+ --hash=sha256:bd50daf727f7c195e26f27467c85ce653d41df4358a25b32434a50d8870fc519 \
135
+ --hash=sha256:c4fceb864890b6168e79b0e714c585dbe2fd4222768ee90bc1aa0f8218691b11 \
136
+ --hash=sha256:e79570979ccdc3d165456dd62041d9556fb9733b86b4b6d818af7a0afc15f092 \
137
+ --hash=sha256:f46dd15335e8a320b0fb4685f58b7471702234cba8bb3442b69a3e1dc329c345
138
+ seaborn==0.11.2 ; python_version >= "3.8" and python_version < "3.9"
139
+ semver==2.13.0 ; python_version >= "3.8" and python_version < "3.9"
140
+ send2trash==1.8.0 ; python_version >= "3.8" and python_version < "3.9"
141
+ setuptools-scm==7.0.5 ; python_version >= "3.8" and python_version < "3.9"
142
+ six==1.16.0 ; python_version >= "3.8" and python_version < "3.9" \
143
+ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \
144
+ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254
145
+ smmap==5.0.0 ; python_version >= "3.8" and python_version < "3.9"
146
+ soupsieve==2.3.2.post1 ; python_version >= "3.8" and python_version < "3.9"
147
+ stack-data==0.3.0 ; python_version >= "3.8" and python_version < "3.9"
148
+ statsmodels==0.13.2 ; python_version >= "3.8" and python_version < "3.9"
149
+ streamlit==1.15.1 ; python_version >= "3.8" and python_version < "3.9"
150
+ terminado==0.15.0 ; python_version >= "3.8" and python_version < "3.9"
151
+ threadpoolctl==3.1.0 ; python_version >= "3.8" and python_version < "3.9" \
152
+ --hash=sha256:8b99adda265feb6773280df41eece7b2e6561b772d21ffd52e372f999024907b \
153
+ --hash=sha256:a335baacfaa4400ae1f0d8e3a58d6674d2f8828e3716bb2802c44955ad391380
154
+ tinycss2==1.1.1 ; python_version >= "3.8" and python_version < "3.9"
155
+ toml==0.10.2 ; python_version >= "3.8" and python_version < "3.9" \
156
+ --hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b \
157
+ --hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f
158
+ tomli==2.0.1 ; python_version >= "3.8" and python_version < "3.9"
159
+ toolz==0.12.0 ; python_version >= "3.8" and python_version < "3.9"
160
+ tornado==6.2 ; python_version >= "3.8" and python_version < "3.9"
161
+ tqdm==4.64.0 ; python_version >= "3.8" and python_version < "3.9"
162
+ traitlets==5.3.0 ; python_version >= "3.8" and python_version < "3.9"
163
+ typing-extensions==4.3.0 ; python_version >= "3.8" and python_version < "3.9"
164
+ tzdata==2022.1 ; python_version >= "3.8" and python_version < "3.9"
165
+ tzlocal==4.2 ; python_version >= "3.8" and python_version < "3.9"
166
+ ujson==5.4.0 ; python_version >= "3.8" and python_version < "3.9"
167
+ umap-learn==0.5.3 ; python_version >= "3.8" and python_version < "3.9"
168
+ urllib3==1.26.11 ; python_version >= "3.8" and python_version < "3.9"
169
+ validators==0.20.0 ; python_version >= "3.8" and python_version < "3.9"
170
+ watchdog==2.1.9 ; python_version >= "3.8" and python_version < "3.9" and platform_system != "Darwin"
171
+ wcwidth==0.2.5 ; python_version >= "3.8" and python_version < "3.9" \
172
+ --hash=sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784 \
173
+ --hash=sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83
174
+ webencodings==0.5.1 ; python_version >= "3.8" and python_version < "3.9" \
175
+ --hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 \
176
+ --hash=sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923
177
+ widgetsnbextension==3.6.1 ; python_version >= "3.8" and python_version < "3.9"
178
+ zipp==3.8.1 ; python_version >= "3.8" and python_version < "3.9"