ribesstefano commited on
Commit
d4cd645
1 Parent(s): f34a470

Updated README and Conda environment configuration file

Browse files
Files changed (3) hide show
  1. .gitignore +1 -0
  2. README.md +27 -16
  3. environment.yml +399 -0
.gitignore CHANGED
@@ -165,5 +165,6 @@ cython_debug/
165
  data/uniprot2embedding.h5
166
  data/PROTAC-DB.csv
167
  data/PROTAC-Pedia.csv
 
168
  logs/
169
  notebooks/per-protein*
 
165
  data/uniprot2embedding.h5
166
  data/PROTAC-DB.csv
167
  data/PROTAC-Pedia.csv
168
+ data/cellosaurus.txt
169
  logs/
170
  notebooks/per-protein*
README.md CHANGED
@@ -1,22 +1,19 @@
1
- <!-- ![Maturity level-0](https://img.shields.io/badge/Maturity%20Level-ML--0-red)
 
2
 
3
- # PROTAC-Degradation-Predictor -->
4
 
5
- <p align="center">
6
- <img src="https://img.shields.io/badge/Maturity%20Level-ML--0-red" alt="Maturity level-0">
7
- </p>
8
 
9
- <h1 align="center">PROTAC-Degradation-Predictor</h1>
10
-
11
- <p align="center">
12
- A machine learning-based tool for predicting PROTAC protein degradation activity.
13
- </p>
14
 
15
  ## 📚 Table of Contents
16
 
17
  - [Data Curation](#-data-curation)
18
  - [Installation](#-installation)
19
  - [Usage](#-usage)
 
 
 
20
 
21
  ## 📝 Data Curation
22
 
@@ -36,12 +33,14 @@ The package has been developed on a Linux machine with Python 3.10.8. It is reco
36
 
37
  ## 🎯 Usage
38
 
 
 
39
  After installing the package, you can use it as follows:
40
 
41
  ```python
42
  import protac_degradation_predictor as pdp
43
 
44
- protac_smiles = 'CC(C)(C)OC(=O)N1CCN(CC1)C2=CC(=C(C=C2)C(=O)NC3=CC(=C(C=C3)F)Cl)C(=O)NC4=CC=C(C=C4)F'
45
  e3_ligase = 'VHL'
46
  target_uniprot = 'P04637'
47
  cell_line = 'HeLa'
@@ -51,8 +50,6 @@ active_protac = pdp.is_protac_active(
51
  e3_ligase,
52
  target_uniprot,
53
  cell_line,
54
- device='cuda', # Default to 'cpu'
55
- proba_threshold=0.5, # Default value
56
  )
57
 
58
  print(f'The given PROTAC is: {"active" if active_protac else "inactive"}')
@@ -62,12 +59,26 @@ This example demonstrates how to predict the activity of a PROTAC molecule. The
62
 
63
  The function supports batch computation by passing lists of SMILES strings, E3 ligases, UniProt IDs, and cell lines. In this case, it returns a list of booleans indicating the activity of each PROTAC.
64
 
 
65
 
66
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
 
68
- ## 📈 Training
69
-
70
- The code for training the model can be found in the file [`run_experiments.py`](src/run_experiments.py).
71
 
72
  ## 📄 Citation
73
 
 
1
+ ![Maturity level-0](https://img.shields.io/badge/Maturity%20Level-ML--0-red)
2
+ <a href="https://colab.research.google.com/github/ribesstefano/PROTAC-Degradation-Predictor/blob/main/notebooks/protac_degradation_predictor_tutorial.ipynb" target="_parent"><img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/></a>
3
 
 
4
 
5
+ # PROTAC-Degradation-Predictor
 
 
6
 
7
+ A machine learning-based tool for predicting PROTAC protein degradation activity.
 
 
 
 
8
 
9
  ## 📚 Table of Contents
10
 
11
  - [Data Curation](#-data-curation)
12
  - [Installation](#-installation)
13
  - [Usage](#-usage)
14
+ - [Training](#-training)
15
+ - [Citation](#-citation)
16
+ - [License](#-license)
17
 
18
  ## 📝 Data Curation
19
 
 
33
 
34
  ## 🎯 Usage
35
 
36
+ For a thorough explanation on how to use the package, please refer to the tutorial notebook [`protac_degradation_tutorial.ipynb`](notebooks/protac_degradation_tutorial.ipynb).
37
+
38
  After installing the package, you can use it as follows:
39
 
40
  ```python
41
  import protac_degradation_predictor as pdp
42
 
43
+ protac_smiles = 'Cc1ncsc1-c1ccc(CNC(=O)[C@@H]2C[C@@H](O)CN2C(=O)[C@@H](NC(=O)COCCCCCCCCCOCC(=O)Nc2ccc(C(=O)Nc3ccc(F)cc3N)cc2)C(C)(C)C)cc1'
44
  e3_ligase = 'VHL'
45
  target_uniprot = 'P04637'
46
  cell_line = 'HeLa'
 
50
  e3_ligase,
51
  target_uniprot,
52
  cell_line,
 
 
53
  )
54
 
55
  print(f'The given PROTAC is: {"active" if active_protac else "inactive"}')
 
59
 
60
  The function supports batch computation by passing lists of SMILES strings, E3 ligases, UniProt IDs, and cell lines. In this case, it returns a list of booleans indicating the activity of each PROTAC.
61
 
62
+ ## 📈 Training
63
 
64
 
65
+ Before running the experiments, here are some required steps to follow (assuming one is in the repository directory already):
66
+ 1. Download the data from the [Cellosaurus database](https://web.expasy.org/cellosaurus/) and save it in the `data` directory:
67
+ ```bash
68
+ wget https://ftp.expasy.org/databases/cellosaurus/cellosaurus.txt data/
69
+ ```
70
+ 2. Make a copy of the Uniprot embeddings to be placed in the `data` directory:
71
+ ```bash
72
+ cp protac_degradation_predictor/data/uniprot2embedding.h5 data/
73
+ ```
74
+ 3. Create a virtual environment and install the required packages by running the following commands:
75
+ ```bash
76
+ conda env create -f environment.yaml
77
+ conda activate protac-degradation-predictor
78
+ ```
79
+ 4. The code for training the model can be found in the file [`run_experiments.py`](src/run_experiments.py).
80
 
81
+ (Don't forget to adjust the `PYTHONPATH` environment variable to include the repository directory: `export PYTHONPATH=$PYTHONPATH:/path/to/PROTAC-Degradation-Predictor`)
 
 
82
 
83
  ## 📄 Citation
84
 
environment.yml ADDED
@@ -0,0 +1,399 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: env-protac-degradation-predictor
2
+ channels:
3
+ - pyg
4
+ - anaconda
5
+ - pytorch
6
+ - huggingface
7
+ - nvidia
8
+ - conda-forge
9
+ - defaults
10
+ dependencies:
11
+ - _libgcc_mutex=0.1=main
12
+ - _openmp_mutex=5.1=1_gnu
13
+ - _py-xgboost-mutex=2.0=cpu_0
14
+ - abseil-cpp=20211102.0=h27087fc_1
15
+ - absl-py=1.4.0=pyhd8ed1ab_0
16
+ - accelerate=0.21.0=pyhd8ed1ab_0
17
+ - aiohttp=3.8.3=py310h5eee18b_0
18
+ - aiosignal=1.2.0=pyhd8ed1ab_0
19
+ - alembic=1.12.0=pyhd8ed1ab_0
20
+ - anyio=3.7.1=pyhd8ed1ab_0
21
+ - arrow=1.2.3=pyhd8ed1ab_0
22
+ - arrow-cpp=11.0.0=py310h7516544_0
23
+ - async-timeout=4.0.2=pyhd8ed1ab_0
24
+ - aws-c-common=0.4.57=he1b5a44_1
25
+ - aws-c-event-stream=0.1.6=h72b8ae1_3
26
+ - aws-checksums=0.1.9=h346380f_0
27
+ - aws-sdk-cpp=1.8.185=hce553d0_0
28
+ - backports=1.0=pyhd8ed1ab_3
29
+ - backports.functools_lru_cache=1.6.5=pyhd8ed1ab_0
30
+ - beautifulsoup4=4.12.2=pyha770c72_0
31
+ - binaryornot=0.4.4=py_1
32
+ - blas=1.0=mkl
33
+ - blessed=1.19.1=pyhe4f9e05_2
34
+ - blinker=1.6.2=pyhd8ed1ab_0
35
+ - boltons=23.0.0=pyhd8ed1ab_0
36
+ - boost-cpp=1.73.0=h7f8727e_12
37
+ - bottleneck=1.3.5=py310ha9d4c09_0
38
+ - brotlipy=0.7.0=py310h5764c6d_1004
39
+ - bzip2=1.0.8=h7f98852_4
40
+ - c-ares=1.19.0=h5eee18b_0
41
+ - ca-certificates=2023.08.22=h06a4308_0
42
+ - cachecontrol=0.12.14=pyhd8ed1ab_0
43
+ - certifi=2023.7.22=py310h06a4308_0
44
+ - cffi=1.15.1=py310h5eee18b_3
45
+ - chardet=5.1.0=py310hff52083_0
46
+ - charset-normalizer=2.0.4=pyhd8ed1ab_0
47
+ - cleo=2.0.1=pyhd8ed1ab_0
48
+ - click=8.0.4=py310hff52083_0
49
+ - cmaes=0.10.0=pyhd8ed1ab_0
50
+ - colorama=0.4.6=pyhd8ed1ab_0
51
+ - colorlog=6.7.0=py310hff52083_1
52
+ - conda=23.7.4=py310hff52083_0
53
+ - conda-content-trust=0.1.3=pyhd8ed1ab_0
54
+ - conda-package-handling=1.9.0=py310h5eee18b_1
55
+ - cookiecutter=2.3.0=pyh1a96a4e_0
56
+ - crashtest=0.4.1=pyhd8ed1ab_0
57
+ - croniter=1.3.15=pyhd8ed1ab_0
58
+ - cryptography=38.0.1=py310h9ce1e76_0
59
+ - cuda-cudart=11.8.89=0
60
+ - cuda-cupti=11.8.87=0
61
+ - cuda-libraries=11.8.0=0
62
+ - cuda-nvrtc=11.8.89=0
63
+ - cuda-nvtx=11.8.86=0
64
+ - cuda-runtime=11.8.0=0
65
+ - dataclasses=0.8=pyhc8e2a94_3
66
+ - datasets=2.14.4=py_0
67
+ - dateutils=0.6.12=py_0
68
+ - dbus=1.13.0=h4e0c4b3_1000
69
+ - deepdiff=6.2.2=pyhd8ed1ab_0
70
+ - dill=0.3.6=pyhd8ed1ab_1
71
+ - distlib=0.3.7=pyhd8ed1ab_0
72
+ - dulwich=0.21.3=py310h5eee18b_0
73
+ - evaluate=0.2.2=pyhd8ed1ab_0
74
+ - exceptiongroup=1.1.3=pyhd8ed1ab_0
75
+ - expat=2.4.8=h27087fc_0
76
+ - fastapi=0.103.1=pyhd8ed1ab_0
77
+ - ffmpeg=4.3=hf484d3e_0
78
+ - filelock=3.9.0=pyhd8ed1ab_0
79
+ - freetype=2.12.1=h4a9f257_0
80
+ - frozenlist=1.3.3=py310h5eee18b_0
81
+ - fsspec=2023.4.0=pyh1a96a4e_0
82
+ - gflags=2.2.2=he1b5a44_1004
83
+ - giflib=5.2.1=h36c2ea0_2
84
+ - glog=0.5.0=h48cff8f_0
85
+ - gmp=6.2.1=h58526e2_0
86
+ - gmpy2=2.1.2=py310heeb90bb_0
87
+ - gnutls=3.6.15=he1e5248_0
88
+ - google-auth-oauthlib=0.4.1=py_2
89
+ - greenlet=1.1.2=py310hd8f1fbe_2
90
+ - grpc-cpp=1.46.1=h33aed49_1
91
+ - grpcio=1.42.0=py310hce63b2e_0
92
+ - h11=0.14.0=pyhd8ed1ab_0
93
+ - html5lib=1.1=pyh9f0ad1d_0
94
+ - huggingface_hub=0.16.4=py_0
95
+ - icu=58.2=hf484d3e_1000
96
+ - idna=3.4=pyhd8ed1ab_0
97
+ - importlib-metadata=6.8.0=pyha770c72_0
98
+ - importlib_metadata=6.8.0=hd8ed1ab_0
99
+ - importlib_resources=6.0.1=pyhd8ed1ab_0
100
+ - inquirer=3.1.3=pyhd8ed1ab_0
101
+ - intel-openmp=2023.1.0=hdb19cb5_46305
102
+ - itsdangerous=2.1.2=pyhd8ed1ab_0
103
+ - jaraco.classes=3.3.0=pyhd8ed1ab_0
104
+ - jeepney=0.8.0=pyhd8ed1ab_0
105
+ - jinja2=3.1.2=pyhd8ed1ab_1
106
+ - joblib=1.2.0=pyhd8ed1ab_0
107
+ - jpeg=9e=h166bdaf_1
108
+ - jsonpatch=1.32=pyhd8ed1ab_0
109
+ - jsonpointer=2.1=pyhd3eb1b0_0
110
+ - keyring=23.13.1=py310hff52083_0
111
+ - krb5=1.20.1=h568e23c_1
112
+ - lame=3.100=h7f98852_1001
113
+ - lcms2=2.12=h3be6417_0
114
+ - ld_impl_linux-64=2.38=h1181459_1
115
+ - lerc=3.0=h9c3ff4c_0
116
+ - libboost=1.73.0=h28710b8_12
117
+ - libbrotlicommon=1.0.9=h166bdaf_7
118
+ - libbrotlidec=1.0.9=h166bdaf_7
119
+ - libbrotlienc=1.0.9=h166bdaf_7
120
+ - libcublas=11.11.3.6=0
121
+ - libcufft=10.9.0.58=0
122
+ - libcufile=1.7.1.12=0
123
+ - libcurand=10.3.3.129=0
124
+ - libcurl=8.1.1=h91b91d3_2
125
+ - libcusolver=11.4.1.48=0
126
+ - libcusparse=11.7.5.86=0
127
+ - libdeflate=1.8=h7f98852_0
128
+ - libedit=3.1.20221030=h5eee18b_0
129
+ - libev=4.33=h516909a_1
130
+ - libevent=2.1.12=h8f2d780_0
131
+ - libffi=3.4.2=h7f98852_5
132
+ - libgcc-ng=11.2.0=h1234567_1
133
+ - libgfortran-ng=11.2.0=h00389a5_1
134
+ - libgfortran5=11.2.0=h1234567_1
135
+ - libgomp=11.2.0=h1234567_1
136
+ - libiconv=1.16=h516909a_0
137
+ - libidn2=2.3.4=h5eee18b_0
138
+ - libnghttp2=1.52.0=ha637b67_1
139
+ - libnpp=11.8.0.86=0
140
+ - libnvjpeg=11.9.0.86=0
141
+ - libpng=1.6.39=h5eee18b_0
142
+ - libprotobuf=3.20.3=he621ea3_0
143
+ - libssh2=1.10.0=ha56f1ee_2
144
+ - libstdcxx-ng=11.2.0=he4da1e4_16
145
+ - libtasn1=4.19.0=h5eee18b_0
146
+ - libthrift=0.15.0=h0d84882_2
147
+ - libtiff=4.5.0=hecacb30_0
148
+ - libunistring=0.9.10=h7f98852_0
149
+ - libuuid=1.41.5=h5eee18b_0
150
+ - libwebp=1.2.4=h11a3e52_1
151
+ - libwebp-base=1.2.4=h5eee18b_1
152
+ - libxgboost=1.5.1=cpu_h3d145d1_2
153
+ - lightning=2.0.4=pyhd8ed1ab_0
154
+ - lightning-cloud=0.5.38=pyhd8ed1ab_0
155
+ - lightning-utilities=0.9.0=pyhd8ed1ab_0
156
+ - lockfile=0.12.2=py_1
157
+ - lz4-c=1.9.4=h6a678d5_0
158
+ - mako=1.2.4=pyhd8ed1ab_0
159
+ - markdown=3.4.4=pyhd8ed1ab_0
160
+ - markdown-it-py=3.0.0=pyhd8ed1ab_0
161
+ - markupsafe=2.1.1=py310h5764c6d_1
162
+ - mdurl=0.1.0=pyhd8ed1ab_0
163
+ - mkl=2023.1.0=h213fc3f_46343
164
+ - mkl-service=2.4.0=py310h5eee18b_1
165
+ - mkl_fft=1.3.6=py310h1128e8f_1
166
+ - mkl_random=1.2.2=py310h1128e8f_1
167
+ - more-itertools=10.1.0=pyhd8ed1ab_0
168
+ - mpc=1.1.0=h04dde30_1009
169
+ - mpfr=4.0.2=he80fd80_1
170
+ - mpmath=1.3.0=pyhd8ed1ab_0
171
+ - msgpack-python=1.0.3=py310hbf28c38_1
172
+ - multidict=6.0.2=py310h5764c6d_1
173
+ - multiprocess=0.70.14=py310h06a4308_0
174
+ - ncurses=6.3=h27087fc_1
175
+ - nettle=3.7.3=hbbd107a_1
176
+ - networkx=3.1=pyhd8ed1ab_0
177
+ - numexpr=2.8.4=py310h85018f9_1
178
+ - numpy=1.25.2=py310h5f9d8c6_0
179
+ - numpy-base=1.25.2=py310hb5e798b_0
180
+ - oauthlib=3.2.2=pyhd8ed1ab_0
181
+ - openh264=2.1.1=h780b84a_0
182
+ - openssl=1.1.1w=h7f8727e_0
183
+ - optuna=3.3.0=pyhd8ed1ab_0
184
+ - orc=1.7.4=hb3bc3d3_1
185
+ - ordered-set=4.1.0=pyhd8ed1ab_0
186
+ - packaging=23.0=pyhd8ed1ab_0
187
+ - pandas=1.5.3=py310h1128e8f_0
188
+ - pexpect=4.8.0=pyh1a96a4e_2
189
+ - pillow=9.4.0=py310h6a678d5_0
190
+ - pip=22.3.1=pyhd8ed1ab_0
191
+ - pkginfo=1.9.6=pyhd8ed1ab_0
192
+ - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1
193
+ - platformdirs=2.6.2=pyhd8ed1ab_0
194
+ - poetry=1.4.2=linux_pyhd8ed1ab_0
195
+ - poetry-core=1.5.2=pyhd8ed1ab_0
196
+ - poetry-plugin-export=1.3.1=pyhd8ed1ab_0
197
+ - protobuf=3.20.3=py310h6a678d5_0
198
+ - psutil=5.9.0=py310h5764c6d_1
199
+ - ptyprocess=0.7.0=pyhd3deb0d_0
200
+ - py-xgboost=1.5.1=cpu_py310hd1aba9c_2
201
+ - pyarrow=11.0.0=py310h468efa6_0
202
+ - pyasn1=0.4.8=py_0
203
+ - pyasn1-modules=0.2.7=py_0
204
+ - pycosat=0.6.4=py310h5eee18b_0
205
+ - pycparser=2.21=pyhd8ed1ab_0
206
+ - pydantic=1.9.1=py310h5764c6d_0
207
+ - pyg=2.3.1=py310_torch_2.0.0_cu118
208
+ - pygments=2.16.1=pyhd8ed1ab_0
209
+ - pyjwt=2.8.0=pyhd8ed1ab_0
210
+ - pyopenssl=22.0.0=pyhd8ed1ab_1
211
+ - pyparsing=3.0.9=py310h06a4308_0
212
+ - pyproject_hooks=1.0.0=pyhd8ed1ab_0
213
+ - pyrsistent=0.18.1=py310h5764c6d_1
214
+ - pysocks=1.7.1=pyha2e5f31_6
215
+ - python=3.10.8=h7a1cb2a_1
216
+ - python-build=0.10.0=pyhd8ed1ab_1
217
+ - python-dateutil=2.8.2=pyhd8ed1ab_0
218
+ - python-editor=1.0.4=py_0
219
+ - python-installer=0.7.0=pyhd8ed1ab_0
220
+ - python-multipart=0.0.6=pyhd8ed1ab_0
221
+ - python-slugify=8.0.1=pyhd8ed1ab_0
222
+ - python-xxhash=2.0.2=py310h6acc77f_1
223
+ - python_abi=3.10=2_cp310
224
+ - pytorch=2.0.1=py3.10_cuda11.8_cudnn8.7.0_0
225
+ - pytorch-cuda=11.8=h7e8668a_5
226
+ - pytorch-lightning=2.0.9=pyhd8ed1ab_0
227
+ - pytorch-mutex=1.0=cuda
228
+ - pytz=2022.7.1=pyhd8ed1ab_0
229
+ - pyu2f=0.1.5=pyhd8ed1ab_0
230
+ - pyyaml=6.0=py310h5764c6d_4
231
+ - rapidfuzz=2.13.7=py310h1128e8f_0
232
+ - re2=2022.04.01=h27087fc_0
233
+ - readchar=4.0.5=pyhd8ed1ab_0
234
+ - readline=8.2=h5eee18b_0
235
+ - regex=2022.7.9=py310h5eee18b_0
236
+ - requests-oauthlib=1.3.1=pyhd8ed1ab_0
237
+ - requests-toolbelt=0.10.1=pyhd8ed1ab_0
238
+ - responses=0.18.0=pyhd8ed1ab_0
239
+ - rich=13.5.1=pyhd8ed1ab_0
240
+ - rsa=4.9=pyhd8ed1ab_0
241
+ - ruamel.yaml=0.17.21=py310h5764c6d_1
242
+ - ruamel.yaml.clib=0.2.6=py310h5764c6d_1
243
+ - sacremoses=master=py_0
244
+ - scikit-learn=1.2.0=py310h6a678d5_1
245
+ - scipy=1.9.3=py310h5f9d8c6_2
246
+ - secretstorage=3.3.3=py310hff52083_1
247
+ - setuptools=65.5.0=pyhd8ed1ab_0
248
+ - shellingham=1.5.3=pyhd8ed1ab_0
249
+ - six=1.16.0=pyh6c4a22f_0
250
+ - snappy=1.1.9=hbd366e4_1
251
+ - sniffio=1.3.0=pyhd8ed1ab_0
252
+ - soupsieve=2.5=pyhd8ed1ab_1
253
+ - sqlalchemy=1.4.36=py310h5764c6d_0
254
+ - sqlite=3.40.0=h5082296_0
255
+ - starlette=0.27.0=pyhd8ed1ab_0
256
+ - starsessions=1.3.0=pyhd8ed1ab_0
257
+ - sympy=1.11.1=pyh04b8f61_3
258
+ - tabulate=0.9.0=pyhd8ed1ab_1
259
+ - tbb=2021.8.0=hdb19cb5_0
260
+ - tensorboard=2.6.0=py_0
261
+ - tensorboard-plugin-wit=1.8.1=pyhd8ed1ab_0
262
+ - text-unidecode=1.3=py_0
263
+ - threadpoolctl=2.2.0=pyh0d69192_0
264
+ - tk=8.6.12=h1ccaba5_0
265
+ - tokenizers=0.13.2=py310he7d60b5_1
266
+ - tomli=2.0.1=pyhd8ed1ab_0
267
+ - tomlkit=0.12.1=pyha770c72_0
268
+ - toolz=0.12.0=pyhd8ed1ab_0
269
+ - torchaudio=2.0.2=py310_cu118
270
+ - torchmetrics=1.1.2=pyhd8ed1ab_0
271
+ - torchtriton=2.0.0=py310
272
+ - torchvision=0.15.2=py310_cu118
273
+ - tqdm=4.64.1=pyhd8ed1ab_0
274
+ - transformers=4.29.2=pyhd8ed1ab_0
275
+ - trove-classifiers=2023.8.7=pyhd8ed1ab_0
276
+ - typing-extensions=4.7.1=hd8ed1ab_0
277
+ - typing_extensions=4.7.1=pyha770c72_0
278
+ - tzdata=2022g=h191b570_0
279
+ - unidecode=1.3.6=pyhd8ed1ab_0
280
+ - urllib3=1.26.13=pyhd8ed1ab_0
281
+ - utf8proc=2.6.1=h27cfd23_0
282
+ - uvicorn=0.23.2=py310hff52083_0
283
+ - virtualenv=20.21.1=pyhd8ed1ab_0
284
+ - wcwidth=0.2.6=pyhd8ed1ab_0
285
+ - webencodings=0.5.1=pyhd8ed1ab_2
286
+ - websockets=10.3=py310h5764c6d_0
287
+ - werkzeug=2.3.6=pyhd8ed1ab_0
288
+ - wheel=0.37.1=pyhd8ed1ab_0
289
+ - xxhash=0.8.0=h7f98852_3
290
+ - xz=5.2.8=h5eee18b_0
291
+ - yaml=0.2.5=h7f98852_2
292
+ - yarl=1.8.1=py310h5eee18b_0
293
+ - zipp=3.16.2=pyhd8ed1ab_0
294
+ - zlib=1.2.13=h5eee18b_0
295
+ - zstd=1.5.2=ha4553b6_0
296
+ - pip:
297
+ - appdirs==1.4.4
298
+ - argon2-cffi==23.1.0
299
+ - argon2-cffi-bindings==21.2.0
300
+ - asttokens==2.4.1
301
+ - async-lru==2.0.4
302
+ - attrs==23.2.0
303
+ - babel==2.14.0
304
+ - bleach==6.1.0
305
+ - cachetools==4.2.4
306
+ - comm==0.2.2
307
+ - contourpy==1.2.1
308
+ - cycler==0.12.1
309
+ - debugpy==1.8.1
310
+ - decorator==5.1.1
311
+ - defusedxml==0.7.1
312
+ - docker-pycreds==0.4.0
313
+ - docstring-parser==0.15
314
+ - executing==2.0.1
315
+ - fastjsonschema==2.19.1
316
+ - fonttools==4.51.0
317
+ - fqdn==1.5.1
318
+ - gitdb==4.0.11
319
+ - gitpython==3.1.42
320
+ - google-auth==1.35.0
321
+ - h5py==3.10.0
322
+ - httpcore==1.0.5
323
+ - httpx==0.27.0
324
+ - imbalanced-learn==0.12.0
325
+ - iniconfig==2.0.0
326
+ - ipykernel==6.29.4
327
+ - ipython==8.23.0
328
+ - ipywidgets==8.1.2
329
+ - isoduration==20.11.0
330
+ - jedi==0.19.1
331
+ - json5==0.9.25
332
+ - jsonargparse==4.23.1
333
+ - jsonschema==4.21.1
334
+ - jsonschema-specifications==2023.12.1
335
+ - jupyter==1.0.0
336
+ - jupyter-client==8.6.1
337
+ - jupyter-console==6.6.3
338
+ - jupyter-core==5.7.2
339
+ - jupyter-events==0.10.0
340
+ - jupyter-lsp==2.2.5
341
+ - jupyter-server==2.14.0
342
+ - jupyter-server-terminals==0.5.3
343
+ - jupyterlab==4.1.6
344
+ - jupyterlab-pygments==0.3.0
345
+ - jupyterlab-server==2.26.0
346
+ - jupyterlab-widgets==3.0.10
347
+ - kiwisolver==1.4.5
348
+ - llvmlite==0.42.0
349
+ - matplotlib==3.8.4
350
+ - matplotlib-inline==0.1.7
351
+ - mistune==3.0.2
352
+ - nbclient==0.10.0
353
+ - nbconvert==7.16.3
354
+ - nbformat==5.10.4
355
+ - nest-asyncio==1.6.0
356
+ - nltk==3.8.1
357
+ - notebook==7.1.3
358
+ - notebook-shim==0.2.4
359
+ - numba==0.59.1
360
+ - overrides==7.7.0
361
+ - pandocfilters==1.5.1
362
+ - parso==0.8.4
363
+ - pluggy==1.5.0
364
+ - prometheus-client==0.20.0
365
+ - prompt-toolkit==3.0.43
366
+ - pure-eval==0.2.2
367
+ - pynndescent==0.5.12
368
+ - pynvml==11.5.0
369
+ - pytest==8.1.1
370
+ - python-json-logger==2.0.7
371
+ - pyzmq==26.0.1
372
+ - qtconsole==5.5.1
373
+ - qtpy==2.4.1
374
+ - rdkit==2023.9.5
375
+ - rdkit-pypi==2022.9.5
376
+ - referencing==0.34.0
377
+ - requests==2.31.0
378
+ - rfc3339-validator==0.1.4
379
+ - rfc3986-validator==0.1.1
380
+ - rouge-score==0.1.2
381
+ - rpds-py==0.18.0
382
+ - seaborn==0.13.2
383
+ - send2trash==1.8.3
384
+ - sentry-sdk==1.41.0
385
+ - setproctitle==1.3.3
386
+ - smmap==5.0.1
387
+ - stack-data==0.6.3
388
+ - tensorboard-data-server==0.6.1
389
+ - terminado==0.18.1
390
+ - tinycss2==1.2.1
391
+ - tornado==6.4
392
+ - traitlets==5.14.3
393
+ - typeshed-client==2.3.0
394
+ - umap-learn==0.5.6
395
+ - uri-template==1.3.0
396
+ - wandb==0.16.4
397
+ - webcolors==1.13
398
+ - websocket-client==1.7.0
399
+ - widgetsnbextension==4.0.10