diff --git a/Dockerfile b/Dockerfile index 3a5fc38..d8cf8a0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,10 +8,6 @@ WORKDIR /opt/app RUN set -xe \ && apt-get update \ && apt-get install python3-pip -y -# RUN pip3 install --upgrade pip -# RUN python3 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip -# RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple -# RUN pip install -r requirements.txt --default-timeout=1000 COPY . /opt/app RUN apt-get update @@ -21,18 +17,13 @@ RUN wget \ && mkdir /root/.conda \ && bash Miniconda3-latest-Linux-x86_64.sh -b \ && rm -f Miniconda3-latest-Linux-x86_64.sh -RUN conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ \ - && conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ \ - && conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ +# RUN conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/ +# RUN conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ +# RUN conda config --set show_channel_urls yes RUN conda install -c bioconda anarci -RUN conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ \ - && conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ \ - && conda config --set show_channel_urls yes -RUN conda config --set remote_read_timeout_secs 1000.0 -# RUN conda install -c bioconda anarci RUN conda install pytorch==1.10.0 cudatoolkit=10.2 -c pytorch -RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple +# RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple RUN python -m pip install --upgrade pip RUN pip install biopython==1.79 RUN pip install pytorch-lightning==1.6.4 diff --git a/data/cluster/reslevel_cdr3_cluster_0.2.pkl b/data/cluster/reslevel_cdr3_cluster_0.2.pkl new file mode 100644 index 0000000..213167c Binary files /dev/null and b/data/cluster/reslevel_cdr3_cluster_0.2.pkl differ diff --git a/data/cluster/reslevel_epi_cluster_0.2.pkl b/data/cluster/reslevel_epi_cluster_0.2.pkl new file mode 100644 index 0000000..f2e353a Binary files /dev/null and b/data/cluster/reslevel_epi_cluster_0.2.pkl differ diff --git a/data/cluster/seqlevel_epi_cluster_0.5.pkl b/data/cluster/seqlevel_epi_cluster_0.5.pkl new file mode 100644 index 0000000..33c2c51 --- /dev/null +++ b/data/cluster/seqlevel_epi_cluster_0.5.pkl @@ -0,0 +1,2859 @@ +(dp0 +S'>Epi_59' +p1 +cnumpy.core.multiarray +scalar +p2 +(cnumpy +dtype +p3 +(S'i4' +p4 +I0 +I1 +tp5 +Rp6 +(I3 +S'<' +p7 +NNNI-1 +I-1 +I0 +tp8 +bS'\x16\x00\x00\x00' +p9 +tp10 +Rp11 +sS'>Epi_58' +p12 +g2 +(g6 +S'n\x00\x00\x00' +p13 +tp14 +Rp15 +sS'>Epi_51' +p16 +g2 +(g6 +S'\x93\x00\x00\x00' +p17 +tp18 +Rp19 +sS'>Epi_50' +p20 +g2 +(g6 +S'\x04\x00\x00\x00' +p21 +tp22 +Rp23 +sS'>Epi_53' +p24 +g2 +(g6 +S';\x00\x00\x00' +p25 +tp26 +Rp27 +sS'>Epi_52' +p28 +g2 +(g6 +S'v\x00\x00\x00' +p29 +tp30 +Rp31 +sS'>Epi_55' +p32 +g2 +(g6 +S'n\x00\x00\x00' +p33 +tp34 +Rp35 +sS'>Epi_54' +p36 +g2 +(g6 +S'Z\x00\x00\x00' +p37 +tp38 +Rp39 +sS'>Epi_57' +p40 +g2 +(g6 +S'\xcc\x00\x00\x00' +p41 +tp42 +Rp43 +sS'>Epi_56' +p44 +g2 +(g6 +S'v\x00\x00\x00' +p45 +tp46 +Rp47 +sS'>Epi_328' +p48 +g2 +(g6 +S'n\x00\x00\x00' +p49 +tp50 +Rp51 +sS'>Epi_329' +p52 +g2 +(g6 +S'n\x00\x00\x00' +p53 +tp54 +Rp55 +sS'>Epi_322' +p56 +g2 +(g6 +S'f\x00\x00\x00' +p57 +tp58 +Rp59 +sS'>Epi_323' +p60 +g2 +(g6 +S'r\x00\x00\x00' +p61 +tp62 +Rp63 +sS'>Epi_320' +p64 +g2 +(g6 +S'n\x00\x00\x00' +p65 +tp66 +Rp67 +sS'>Epi_321' +p68 +g2 +(g6 +S'n\x00\x00\x00' +p69 +tp70 +Rp71 +sS'>Epi_326' +p72 +g2 +(g6 +S'\xd2\x00\x00\x00' +p73 +tp74 +Rp75 +sS'>Epi_327' +p76 +g2 +(g6 +S'c\x00\x00\x00' +p77 +tp78 +Rp79 +sS'>Epi_324' +p80 +g2 +(g6 +S'\xcb\x00\x00\x00' +p81 +tp82 +Rp83 +sS'>Epi_325' +p84 +g2 +(g6 +S'"\x00\x00\x00' +p85 +tp86 +Rp87 +sS'>Epi_241' +p88 +g2 +(g6 +S'\xb4\x00\x00\x00' +p89 +tp90 +Rp91 +sS'>Epi_240' +p92 +g2 +(g6 +S'\x15\x00\x00\x00' +p93 +tp94 +Rp95 +sS'>Epi_243' +p96 +g2 +(g6 +S'F\x00\x00\x00' +p97 +tp98 +Rp99 +sS'>Epi_242' +p100 +g2 +(g6 +S'\xa7\x00\x00\x00' +p101 +tp102 +Rp103 +sS'>Epi_245' +p104 +g2 +(g6 +S'P\x00\x00\x00' +p105 +tp106 +Rp107 +sS'>Epi_244' +p108 +g2 +(g6 +S'\x0e\x00\x00\x00' +p109 +tp110 +Rp111 +sS'>Epi_247' +p112 +g2 +(g6 +S'`\x00\x00\x00' +p113 +tp114 +Rp115 +sS'>Epi_246' +p116 +g2 +(g6 +S'n\x00\x00\x00' +p117 +tp118 +Rp119 +sS'>Epi_249' +p120 +g2 +(g6 +S'=\x00\x00\x00' +p121 +tp122 +Rp123 +sS'>Epi_248' +p124 +g2 +(g6 +S'\xd0\x00\x00\x00' +p125 +tp126 +Rp127 +sS'>Epi_119' +p128 +g2 +(g6 +S'n\x00\x00\x00' +p129 +tp130 +Rp131 +sS'>Epi_293' +p132 +g2 +(g6 +S'f\x00\x00\x00' +p133 +tp134 +Rp135 +sS'>Epi_290' +p136 +g2 +(g6 +S'<\x00\x00\x00' +p137 +tp138 +Rp139 +sS'>Epi_291' +p140 +g2 +(g6 +S'`\x00\x00\x00' +p141 +tp142 +Rp143 +sS'>Epi_296' +p144 +g2 +(g6 +S'\x05\x00\x00\x00' +p145 +tp146 +Rp147 +sS'>Epi_297' +p148 +g2 +(g6 +S'\xcd\x00\x00\x00' +p149 +tp150 +Rp151 +sS'>Epi_294' +p152 +g2 +(g6 +S'\xaf\x00\x00\x00' +p153 +tp154 +Rp155 +sS'>Epi_295' +p156 +g2 +(g6 +S'n\x00\x00\x00' +p157 +tp158 +Rp159 +sS'>Epi_111' +p160 +g2 +(g6 +S'!\x00\x00\x00' +p161 +tp162 +Rp163 +sS'>Epi_110' +p164 +g2 +(g6 +S'\xbc\x00\x00\x00' +p165 +tp166 +Rp167 +sS'>Epi_113' +p168 +g2 +(g6 +S'k\x00\x00\x00' +p169 +tp170 +Rp171 +sS'>Epi_112' +p172 +g2 +(g6 +S'k\x00\x00\x00' +p173 +tp174 +Rp175 +sS'>Epi_115' +p176 +g2 +(g6 +S'\xb0\x00\x00\x00' +p177 +tp178 +Rp179 +sS'>Epi_114' +p180 +g2 +(g6 +S'm\x00\x00\x00' +p181 +tp182 +Rp183 +sS'>Epi_117' +p184 +g2 +(g6 +S'\xc3\x00\x00\x00' +p185 +tp186 +Rp187 +sS'>Epi_116' +p188 +g2 +(g6 +S'o\x00\x00\x00' +p189 +tp190 +Rp191 +sS'>Epi_82' +p192 +g2 +(g6 +S'n\x00\x00\x00' +p193 +tp194 +Rp195 +sS'>Epi_83' +p196 +g2 +(g6 +S'n\x00\x00\x00' +p197 +tp198 +Rp199 +sS'>Epi_80' +p200 +g2 +(g6 +S'\x0f\x00\x00\x00' +p201 +tp202 +Rp203 +sS'>Epi_81' +p204 +g2 +(g6 +S'\x0f\x00\x00\x00' +p205 +tp206 +Rp207 +sS'>Epi_86' +p208 +g2 +(g6 +S'\x18\x00\x00\x00' +p209 +tp210 +Rp211 +sS'>Epi_87' +p212 +g2 +(g6 +S'k\x00\x00\x00' +p213 +tp214 +Rp215 +sS'>Epi_84' +p216 +g2 +(g6 +S'o\x00\x00\x00' +p217 +tp218 +Rp219 +sS'>Epi_85' +p220 +g2 +(g6 +S'"\x00\x00\x00' +p221 +tp222 +Rp223 +sS'>Epi_88' +p224 +g2 +(g6 +S'e\x00\x00\x00' +p225 +tp226 +Rp227 +sS'>Epi_89' +p228 +g2 +(g6 +S'\x91\x00\x00\x00' +p229 +tp230 +Rp231 +sS'>Epi_209' +p232 +g2 +(g6 +S'\xb7\x00\x00\x00' +p233 +tp234 +Rp235 +sS'>Epi_208' +p236 +g2 +(g6 +S'i\x00\x00\x00' +p237 +tp238 +Rp239 +sS'>Epi_205' +p240 +g2 +(g6 +S'i\x00\x00\x00' +p241 +tp242 +Rp243 +sS'>Epi_204' +p244 +g2 +(g6 +S'i\x00\x00\x00' +p245 +tp246 +Rp247 +sS'>Epi_207' +p248 +g2 +(g6 +S'i\x00\x00\x00' +p249 +tp250 +Rp251 +sS'>Epi_206' +p252 +g2 +(g6 +S'i\x00\x00\x00' +p253 +tp254 +Rp255 +sS'>Epi_201' +p256 +g2 +(g6 +S'i\x00\x00\x00' +p257 +tp258 +Rp259 +sS'>Epi_200' +p260 +g2 +(g6 +S'`\x00\x00\x00' +p261 +tp262 +Rp263 +sS'>Epi_203' +p264 +g2 +(g6 +S'i\x00\x00\x00' +p265 +tp266 +Rp267 +sS'>Epi_202' +p268 +g2 +(g6 +S'o\x00\x00\x00' +p269 +tp270 +Rp271 +sS'>Epi_19' +p272 +g2 +(g6 +S'i\x00\x00\x00' +p273 +tp274 +Rp275 +sS'>Epi_18' +p276 +g2 +(g6 +S'I\x00\x00\x00' +p277 +tp278 +Rp279 +sS'>Epi_15' +p280 +g2 +(g6 +S'h\x00\x00\x00' +p281 +tp282 +Rp283 +sS'>Epi_14' +p284 +g2 +(g6 +S'-\x00\x00\x00' +p285 +tp286 +Rp287 +sS'>Epi_17' +p288 +g2 +(g6 +S'l\x00\x00\x00' +p289 +tp290 +Rp291 +sS'>Epi_16' +p292 +g2 +(g6 +S'\x95\x00\x00\x00' +p293 +tp294 +Rp295 +sS'>Epi_11' +p296 +g2 +(g6 +S'B\x00\x00\x00' +p297 +tp298 +Rp299 +sS'>Epi_10' +p300 +g2 +(g6 +S'\xa6\x00\x00\x00' +p301 +tp302 +Rp303 +sS'>Epi_13' +p304 +g2 +(g6 +S'\x9e\x00\x00\x00' +p305 +tp306 +Rp307 +sS'>Epi_12' +p308 +g2 +(g6 +S'\x87\x00\x00\x00' +p309 +tp310 +Rp311 +sS'>Epi_278' +p312 +g2 +(g6 +S'\n\x00\x00\x00' +p313 +tp314 +Rp315 +sS'>Epi_279' +p316 +g2 +(g6 +S'z\x00\x00\x00' +p317 +tp318 +Rp319 +sS'>Epi_270' +p320 +g2 +(g6 +S'f\x00\x00\x00' +p321 +tp322 +Rp323 +sS'>Epi_271' +p324 +g2 +(g6 +S'n\x00\x00\x00' +p325 +tp326 +Rp327 +sS'>Epi_272' +p328 +g2 +(g6 +S'\xad\x00\x00\x00' +p329 +tp330 +Rp331 +sS'>Epi_273' +p332 +g2 +(g6 +S'n\x00\x00\x00' +p333 +tp334 +Rp335 +sS'>Epi_274' +p336 +g2 +(g6 +S'n\x00\x00\x00' +p337 +tp338 +Rp339 +sS'>Epi_275' +p340 +g2 +(g6 +S'd\x00\x00\x00' +p341 +tp342 +Rp343 +sS'>Epi_276' +p344 +g2 +(g6 +S'd\x00\x00\x00' +p345 +tp346 +Rp347 +sS'>Epi_277' +p348 +g2 +(g6 +S'\x84\x00\x00\x00' +p349 +tp350 +Rp351 +sS'>Epi_155' +p352 +g2 +(g6 +S'o\x00\x00\x00' +p353 +tp354 +Rp355 +sS'>Epi_154' +p356 +g2 +(g6 +S's\x00\x00\x00' +p357 +tp358 +Rp359 +sS'>Epi_157' +p360 +g2 +(g6 +S'\x99\x00\x00\x00' +p361 +tp362 +Rp363 +sS'>Epi_156' +p364 +g2 +(g6 +S'\xaa\x00\x00\x00' +p365 +tp366 +Rp367 +sS'>Epi_151' +p368 +g2 +(g6 +S'i\x00\x00\x00' +p369 +tp370 +Rp371 +sS'>Epi_150' +p372 +g2 +(g6 +S'v\x00\x00\x00' +p373 +tp374 +Rp375 +sS'>Epi_153' +p376 +g2 +(g6 +S'&\x00\x00\x00' +p377 +tp378 +Rp379 +sS'>Epi_152' +p380 +g2 +(g6 +S'&\x00\x00\x00' +p381 +tp382 +Rp383 +sS'>Epi_159' +p384 +g2 +(g6 +S'\xb8\x00\x00\x00' +p385 +tp386 +Rp387 +sS'>Epi_158' +p388 +g2 +(g6 +S'4\x00\x00\x00' +p389 +tp390 +Rp391 +sS'>Epi_120' +p392 +g2 +(g6 +S'm\x00\x00\x00' +p393 +tp394 +Rp395 +sS'>Epi_121' +p396 +g2 +(g6 +S'/\x00\x00\x00' +p397 +tp398 +Rp399 +sS'>Epi_122' +p400 +g2 +(g6 +S'R\x00\x00\x00' +p401 +tp402 +Rp403 +sS'>Epi_123' +p404 +g2 +(g6 +S'U\x00\x00\x00' +p405 +tp406 +Rp407 +sS'>Epi_124' +p408 +g2 +(g6 +S'\x01\x00\x00\x00' +p409 +tp410 +Rp411 +sS'>Epi_125' +p412 +g2 +(g6 +S'\x01\x00\x00\x00' +p413 +tp414 +Rp415 +sS'>Epi_126' +p416 +g2 +(g6 +S'\x01\x00\x00\x00' +p417 +tp418 +Rp419 +sS'>Epi_127' +p420 +g2 +(g6 +S'\x08\x00\x00\x00' +p421 +tp422 +Rp423 +sS'>Epi_128' +p424 +g2 +(g6 +S'\x1d\x00\x00\x00' +p425 +tp426 +Rp427 +sS'>Epi_129' +p428 +g2 +(g6 +S'\xc9\x00\x00\x00' +p429 +tp430 +Rp431 +sS'>Epi_339' +p432 +g2 +(g6 +S'\xb3\x00\x00\x00' +p433 +tp434 +Rp435 +sS'>Epi_338' +p436 +g2 +(g6 +S'L\x00\x00\x00' +p437 +tp438 +Rp439 +sS'>Epi_335' +p440 +g2 +(g6 +S'L\x00\x00\x00' +p441 +tp442 +Rp443 +sS'>Epi_334' +p444 +g2 +(g6 +S'L\x00\x00\x00' +p445 +tp446 +Rp447 +sS'>Epi_337' +p448 +g2 +(g6 +S'\xab\x00\x00\x00' +p449 +tp450 +Rp451 +sS'>Epi_336' +p452 +g2 +(g6 +S'\xcf\x00\x00\x00' +p453 +tp454 +Rp455 +sS'>Epi_331' +p456 +g2 +(g6 +S'\x1c\x00\x00\x00' +p457 +tp458 +Rp459 +sS'>Epi_330' +p460 +g2 +(g6 +S'i\x00\x00\x00' +p461 +tp462 +Rp463 +sS'>Epi_333' +p464 +g2 +(g6 +S'x\x00\x00\x00' +p465 +tp466 +Rp467 +sS'>Epi_332' +p468 +g2 +(g6 +S'n\x00\x00\x00' +p469 +tp470 +Rp471 +sS'>Epi_234' +p472 +g2 +(g6 +S'\x1e\x00\x00\x00' +p473 +tp474 +Rp475 +sS'>Epi_235' +p476 +g2 +(g6 +S'J\x00\x00\x00' +p477 +tp478 +Rp479 +sS'>Epi_236' +p480 +g2 +(g6 +S':\x00\x00\x00' +p481 +tp482 +Rp483 +sS'>Epi_237' +p484 +g2 +(g6 +S'\x96\x00\x00\x00' +p485 +tp486 +Rp487 +sS'>Epi_230' +p488 +g2 +(g6 +S'\xb1\x00\x00\x00' +p489 +tp490 +Rp491 +sS'>Epi_231' +p492 +g2 +(g6 +S'n\x00\x00\x00' +p493 +tp494 +Rp495 +sS'>Epi_232' +p496 +g2 +(g6 +S'\xb5\x00\x00\x00' +p497 +tp498 +Rp499 +sS'>Epi_233' +p500 +g2 +(g6 +S'n\x00\x00\x00' +p501 +tp502 +Rp503 +sS'>Epi_238' +p504 +g2 +(g6 +S'C\x00\x00\x00' +p505 +tp506 +Rp507 +sS'>Epi_239' +p508 +g2 +(g6 +S'n\x00\x00\x00' +p509 +tp510 +Rp511 +sS'>Epi_46' +p512 +g2 +(g6 +S'o\x00\x00\x00' +p513 +tp514 +Rp515 +sS'>Epi_47' +p516 +g2 +(g6 +S'2\x00\x00\x00' +p517 +tp518 +Rp519 +sS'>Epi_44' +p520 +g2 +(g6 +S'L\x00\x00\x00' +p521 +tp522 +Rp523 +sS'>Epi_45' +p524 +g2 +(g6 +S'o\x00\x00\x00' +p525 +tp526 +Rp527 +sS'>Epi_42' +p528 +g2 +(g6 +S'$\x00\x00\x00' +p529 +tp530 +Rp531 +sS'>Epi_43' +p532 +g2 +(g6 +S'\x1c\x00\x00\x00' +p533 +tp534 +Rp535 +sS'>Epi_40' +p536 +g2 +(g6 +S'E\x00\x00\x00' +p537 +tp538 +Rp539 +sS'>Epi_41' +p540 +g2 +(g6 +S'n\x00\x00\x00' +p541 +tp542 +Rp543 +sS'>Epi_48' +p544 +g2 +(g6 +S'\xc0\x00\x00\x00' +p545 +tp546 +Rp547 +sS'>Epi_49' +p548 +g2 +(g6 +S'\x0c\x00\x00\x00' +p549 +tp550 +Rp551 +sS'>Epi_348' +p552 +g2 +(g6 +S'n\x00\x00\x00' +p553 +tp554 +Rp555 +sS'>Epi_349' +p556 +g2 +(g6 +S'o\x00\x00\x00' +p557 +tp558 +Rp559 +sS'>Epi_340' +p560 +g2 +(g6 +S'k\x00\x00\x00' +p561 +tp562 +Rp563 +sS'>Epi_341' +p564 +g2 +(g6 +S'k\x00\x00\x00' +p565 +tp566 +Rp567 +sS'>Epi_342' +p568 +g2 +(g6 +S'\x17\x00\x00\x00' +p569 +tp570 +Rp571 +sS'>Epi_343' +p572 +g2 +(g6 +S'i\x00\x00\x00' +p573 +tp574 +Rp575 +sS'>Epi_344' +p576 +g2 +(g6 +S'\xc4\x00\x00\x00' +p577 +tp578 +Rp579 +sS'>Epi_345' +p580 +g2 +(g6 +S'\xc1\x00\x00\x00' +p581 +tp582 +Rp583 +sS'>Epi_346' +p584 +g2 +(g6 +S'M\x00\x00\x00' +p585 +tp586 +Rp587 +sS'>Epi_347' +p588 +g2 +(g6 +S'\xa8\x00\x00\x00' +p589 +tp590 +Rp591 +sS'>Epi_285' +p592 +g2 +(g6 +S'n\x00\x00\x00' +p593 +tp594 +Rp595 +sS'>Epi_284' +p596 +g2 +(g6 +S'\x19\x00\x00\x00' +p597 +tp598 +Rp599 +sS'>Epi_287' +p600 +g2 +(g6 +S'n\x00\x00\x00' +p601 +tp602 +Rp603 +sS'>Epi_286' +p604 +g2 +(g6 +S'n\x00\x00\x00' +p605 +tp606 +Rp607 +sS'>Epi_168' +p608 +g2 +(g6 +S'f\x00\x00\x00' +p609 +tp610 +Rp611 +sS'>Epi_169' +p612 +g2 +(g6 +S'k\x00\x00\x00' +p613 +tp614 +Rp615 +sS'>Epi_283' +p616 +g2 +(g6 +S'v\x00\x00\x00' +p617 +tp618 +Rp619 +sS'>Epi_282' +p620 +g2 +(g6 +S'h\x00\x00\x00' +p621 +tp622 +Rp623 +sS'>Epi_164' +p624 +g2 +(g6 +S'p\x00\x00\x00' +p625 +tp626 +Rp627 +sS'>Epi_165' +p628 +g2 +(g6 +S'\xd1\x00\x00\x00' +p629 +tp630 +Rp631 +sS'>Epi_166' +p632 +g2 +(g6 +S'\x9f\x00\x00\x00' +p633 +tp634 +Rp635 +sS'>Epi_167' +p636 +g2 +(g6 +S'g\x00\x00\x00' +p637 +tp638 +Rp639 +sS'>Epi_289' +p640 +g2 +(g6 +S'o\x00\x00\x00' +p641 +tp642 +Rp643 +sS'>Epi_161' +p644 +g2 +(g6 +S'o\x00\x00\x00' +p645 +tp646 +Rp647 +sS'>Epi_162' +p648 +g2 +(g6 +S'\xa3\x00\x00\x00' +p649 +tp650 +Rp651 +sS'>Epi_163' +p652 +g2 +(g6 +S'y\x00\x00\x00' +p653 +tp654 +Rp655 +sS'>Epi_79' +p656 +g2 +(g6 +S'o\x00\x00\x00' +p657 +tp658 +Rp659 +sS'>Epi_78' +p660 +g2 +(g6 +S'u\x00\x00\x00' +p661 +tp662 +Rp663 +sS'>Epi_77' +p664 +g2 +(g6 +S'D\x00\x00\x00' +p665 +tp666 +Rp667 +sS'>Epi_76' +p668 +g2 +(g6 +S'n\x00\x00\x00' +p669 +tp670 +Rp671 +sS'>Epi_75' +p672 +g2 +(g6 +S'\x98\x00\x00\x00' +p673 +tp674 +Rp675 +sS'>Epi_74' +p676 +g2 +(g6 +S'k\x00\x00\x00' +p677 +tp678 +Rp679 +sS'>Epi_73' +p680 +g2 +(g6 +S'n\x00\x00\x00' +p681 +tp682 +Rp683 +sS'>Epi_72' +p684 +g2 +(g6 +S'n\x00\x00\x00' +p685 +tp686 +Rp687 +sS'>Epi_71' +p688 +g2 +(g6 +S'n\x00\x00\x00' +p689 +tp690 +Rp691 +sS'>Epi_70' +p692 +g2 +(g6 +S'n\x00\x00\x00' +p693 +tp694 +Rp695 +sS'>Epi_281' +p696 +g2 +(g6 +S'n\x00\x00\x00' +p697 +tp698 +Rp699 +sS'>Epi_280' +p700 +g2 +(g6 +S'n\x00\x00\x00' +p701 +tp702 +Rp703 +sS'>Epi_160' +p704 +g2 +(g6 +S'n\x00\x00\x00' +p705 +tp706 +Rp707 +sS'>Epi_288' +p708 +g2 +(g6 +S'j\x00\x00\x00' +p709 +tp710 +Rp711 +sS'>Epi_304' +p712 +g2 +(g6 +S'n\x00\x00\x00' +p713 +tp714 +Rp715 +sS'>Epi_305' +p716 +g2 +(g6 +S'n\x00\x00\x00' +p717 +tp718 +Rp719 +sS'>Epi_269' +p720 +g2 +(g6 +S'{\x00\x00\x00' +p721 +tp722 +Rp723 +sS'>Epi_307' +p724 +g2 +(g6 +S'n\x00\x00\x00' +p725 +tp726 +Rp727 +sS'>Epi_300' +p728 +g2 +(g6 +S'n\x00\x00\x00' +p729 +tp730 +Rp731 +sS'>Epi_301' +p732 +g2 +(g6 +S'\\\x00\x00\x00' +p733 +tp734 +Rp735 +sS'>Epi_302' +p736 +g2 +(g6 +S'v\x00\x00\x00' +p737 +tp738 +Rp739 +sS'>Epi_303' +p740 +g2 +(g6 +S'v\x00\x00\x00' +p741 +tp742 +Rp743 +sS'>Epi_263' +p744 +g2 +(g6 +S'\x92\x00\x00\x00' +p745 +tp746 +Rp747 +sS'>Epi_262' +p748 +g2 +(g6 +S'\xa9\x00\x00\x00' +p749 +tp750 +Rp751 +sS'>Epi_261' +p752 +g2 +(g6 +S'>\x00\x00\x00' +p753 +tp754 +Rp755 +sS'>Epi_260' +p756 +g2 +(g6 +S'.\x00\x00\x00' +p757 +tp758 +Rp759 +sS'>Epi_308' +p760 +g2 +(g6 +S'6\x00\x00\x00' +p761 +tp762 +Rp763 +sS'>Epi_309' +p764 +g2 +(g6 +S'o\x00\x00\x00' +p765 +tp766 +Rp767 +sS'>Epi_265' +p768 +g2 +(g6 +S'A\x00\x00\x00' +p769 +tp770 +Rp771 +sS'>Epi_264' +p772 +g2 +(g6 +S'n\x00\x00\x00' +p773 +tp774 +Rp775 +sS'>Epi_133' +p776 +g2 +(g6 +S'n\x00\x00\x00' +p777 +tp778 +Rp779 +sS'>Epi_132' +p780 +g2 +(g6 +S'\x7f\x00\x00\x00' +p781 +tp782 +Rp783 +sS'>Epi_131' +p784 +g2 +(g6 +S'\x18\x00\x00\x00' +p785 +tp786 +Rp787 +sS'>Epi_130' +p788 +g2 +(g6 +S'[\x00\x00\x00' +p789 +tp790 +Rp791 +sS'>Epi_137' +p792 +g2 +(g6 +S'n\x00\x00\x00' +p793 +tp794 +Rp795 +sS'>Epi_136' +p796 +g2 +(g6 +S'n\x00\x00\x00' +p797 +tp798 +Rp799 +sS'>Epi_135' +p800 +g2 +(g6 +S'\x80\x00\x00\x00' +p801 +tp802 +Rp803 +sS'>Epi_134' +p804 +g2 +(g6 +S'n\x00\x00\x00' +p805 +tp806 +Rp807 +sS'>Epi_139' +p808 +g2 +(g6 +S'v\x00\x00\x00' +p809 +tp810 +Rp811 +sS'>Epi_138' +p812 +g2 +(g6 +S'n\x00\x00\x00' +p813 +tp814 +Rp815 +sS'>Epi_227' +p816 +g2 +(g6 +S'?\x00\x00\x00' +p817 +tp818 +Rp819 +sS'>Epi_226' +p820 +g2 +(g6 +S'\x81\x00\x00\x00' +p821 +tp822 +Rp823 +sS'>Epi_225' +p824 +g2 +(g6 +S'%\x00\x00\x00' +p825 +tp826 +Rp827 +sS'>Epi_224' +p828 +g2 +(g6 +S'\x8d\x00\x00\x00' +p829 +tp830 +Rp831 +sS'>Epi_223' +p832 +g2 +(g6 +S'+\x00\x00\x00' +p833 +tp834 +Rp835 +sS'>Epi_258' +p836 +g2 +(g6 +S'q\x00\x00\x00' +p837 +tp838 +Rp839 +sS'>Epi_188' +p840 +g2 +(g6 +S'\xa1\x00\x00\x00' +p841 +tp842 +Rp843 +sS'>Epi_189' +p844 +g2 +(g6 +S'D\x00\x00\x00' +p845 +tp846 +Rp847 +sS'>Epi_186' +p848 +g2 +(g6 +S'n\x00\x00\x00' +p849 +tp850 +Rp851 +sS'>Epi_187' +p852 +g2 +(g6 +S'Y\x00\x00\x00' +p853 +tp854 +Rp855 +sS'>Epi_184' +p856 +g2 +(g6 +S'n\x00\x00\x00' +p857 +tp858 +Rp859 +sS'>Epi_259' +p860 +g2 +(g6 +S')\x00\x00\x00' +p861 +tp862 +Rp863 +sS'>Epi_182' +p864 +g2 +(g6 +S'k\x00\x00\x00' +p865 +tp866 +Rp867 +sS'>Epi_183' +p868 +g2 +(g6 +S'\x13\x00\x00\x00' +p869 +tp870 +Rp871 +sS'>Epi_229' +p872 +g2 +(g6 +S'\x10\x00\x00\x00' +p873 +tp874 +Rp875 +sS'>Epi_228' +p876 +g2 +(g6 +S'v\x00\x00\x00' +p877 +tp878 +Rp879 +sS'>Epi_33' +p880 +g2 +(g6 +S'k\x00\x00\x00' +p881 +tp882 +Rp883 +sS'>Epi_32' +p884 +g2 +(g6 +S'\xae\x00\x00\x00' +p885 +tp886 +Rp887 +sS'>Epi_31' +p888 +g2 +(g6 +S'\x8a\x00\x00\x00' +p889 +tp890 +Rp891 +sS'>Epi_30' +p892 +g2 +(g6 +S'a\x00\x00\x00' +p893 +tp894 +Rp895 +sS'>Epi_37' +p896 +g2 +(g6 +S'\x0f\x00\x00\x00' +p897 +tp898 +Rp899 +sS'>Epi_36' +p900 +g2 +(g6 +S'\x0f\x00\x00\x00' +p901 +tp902 +Rp903 +sS'>Epi_35' +p904 +g2 +(g6 +S'\xc8\x00\x00\x00' +p905 +tp906 +Rp907 +sS'>Epi_34' +p908 +g2 +(g6 +S'c\x00\x00\x00' +p909 +tp910 +Rp911 +sS'>Epi_39' +p912 +g2 +(g6 +S'\xb6\x00\x00\x00' +p913 +tp914 +Rp915 +sS'>Epi_38' +p916 +g2 +(g6 +S't\x00\x00\x00' +p917 +tp918 +Rp919 +sS'>Epi_250' +p920 +g2 +(g6 +S'\xb2\x00\x00\x00' +p921 +tp922 +Rp923 +sS'>Epi_251' +p924 +g2 +(g6 +S'W\x00\x00\x00' +p925 +tp926 +Rp927 +sS'>Epi_353' +p928 +g2 +(g6 +S'0\x00\x00\x00' +p929 +tp930 +Rp931 +sS'>Epi_352' +p932 +g2 +(g6 +S'n\x00\x00\x00' +p933 +tp934 +Rp935 +sS'>Epi_351' +p936 +g2 +(g6 +S'N\x00\x00\x00' +p937 +tp938 +Rp939 +sS'>Epi_350' +p940 +g2 +(g6 +S'\x8f\x00\x00\x00' +p941 +tp942 +Rp943 +sS'>Epi_354' +p944 +g2 +(g6 +S'V\x00\x00\x00' +p945 +tp946 +Rp947 +sS'>Epi_222' +p948 +g2 +(g6 +S'3\x00\x00\x00' +p949 +tp950 +Rp951 +sS'>Epi_221' +p952 +g2 +(g6 +S'S\x00\x00\x00' +p953 +tp954 +Rp955 +sS'>Epi_220' +p956 +g2 +(g6 +S'\x97\x00\x00\x00' +p957 +tp958 +Rp959 +sS'>Epi_185' +p960 +g2 +(g6 +S'(\x00\x00\x00' +p961 +tp962 +Rp963 +sS'>Epi_179' +p964 +g2 +(g6 +S'\x8b\x00\x00\x00' +p965 +tp966 +Rp967 +sS'>Epi_178' +p968 +g2 +(g6 +S'v\x00\x00\x00' +p969 +tp970 +Rp971 +sS'>Epi_177' +p972 +g2 +(g6 +S'\r\x00\x00\x00' +p973 +tp974 +Rp975 +sS'>Epi_176' +p976 +g2 +(g6 +S'\x15\x00\x00\x00' +p977 +tp978 +Rp979 +sS'>Epi_175' +p980 +g2 +(g6 +S'9\x00\x00\x00' +p981 +tp982 +Rp983 +sS'>Epi_174' +p984 +g2 +(g6 +S'\x0c\x00\x00\x00' +p985 +tp986 +Rp987 +sS'>Epi_173' +p988 +g2 +(g6 +S'\xa4\x00\x00\x00' +p989 +tp990 +Rp991 +sS'>Epi_172' +p992 +g2 +(g6 +S'#\x00\x00\x00' +p993 +tp994 +Rp995 +sS'>Epi_171' +p996 +g2 +(g6 +S'#\x00\x00\x00' +p997 +tp998 +Rp999 +sS'>Epi_170' +p1000 +g2 +(g6 +S'#\x00\x00\x00' +p1001 +tp1002 +Rp1003 +sS'>Epi_180' +p1004 +g2 +(g6 +S'v\x00\x00\x00' +p1005 +tp1006 +Rp1007 +sS'>Epi_181' +p1008 +g2 +(g6 +S'\xac\x00\x00\x00' +p1009 +tp1010 +Rp1011 +sS'>Epi_68' +p1012 +g2 +(g6 +S'k\x00\x00\x00' +p1013 +tp1014 +Rp1015 +sS'>Epi_69' +p1016 +g2 +(g6 +S'\xa2\x00\x00\x00' +p1017 +tp1018 +Rp1019 +sS'>Epi_64' +p1020 +g2 +(g6 +S'G\x00\x00\x00' +p1021 +tp1022 +Rp1023 +sS'>Epi_65' +p1024 +g2 +(g6 +S'G\x00\x00\x00' +p1025 +tp1026 +Rp1027 +sS'>Epi_66' +p1028 +g2 +(g6 +S'7\x00\x00\x00' +p1029 +tp1030 +Rp1031 +sS'>Epi_67' +p1032 +g2 +(g6 +S'l\x00\x00\x00' +p1033 +tp1034 +Rp1035 +sS'>Epi_60' +p1036 +g2 +(g6 +S'\xc2\x00\x00\x00' +p1037 +tp1038 +Rp1039 +sS'>Epi_61' +p1040 +g2 +(g6 +S'\x86\x00\x00\x00' +p1041 +tp1042 +Rp1043 +sS'>Epi_62' +p1044 +g2 +(g6 +S'\xa5\x00\x00\x00' +p1045 +tp1046 +Rp1047 +sS'>Epi_63' +p1048 +g2 +(g6 +S'\x14\x00\x00\x00' +p1049 +tp1050 +Rp1051 +sS'>Epi_9' +p1052 +g2 +(g6 +S'N\x00\x00\x00' +p1053 +tp1054 +Rp1055 +sS'>Epi_8' +p1056 +g2 +(g6 +S'N\x00\x00\x00' +p1057 +tp1058 +Rp1059 +sS'>Epi_1' +p1060 +g2 +(g6 +S'N\x00\x00\x00' +p1061 +tp1062 +Rp1063 +sS'>Epi_0' +p1064 +g2 +(g6 +S'2\x00\x00\x00' +p1065 +tp1066 +Rp1067 +sS'>Epi_3' +p1068 +g2 +(g6 +S'\x9c\x00\x00\x00' +p1069 +tp1070 +Rp1071 +sS'>Epi_2' +p1072 +g2 +(g6 +S'\x88\x00\x00\x00' +p1073 +tp1074 +Rp1075 +sS'>Epi_5' +p1076 +g2 +(g6 +S'\t\x00\x00\x00' +p1077 +tp1078 +Rp1079 +sS'>Epi_4' +p1080 +g2 +(g6 +S'n\x00\x00\x00' +p1081 +tp1082 +Rp1083 +sS'>Epi_7' +p1084 +g2 +(g6 +S'\xba\x00\x00\x00' +p1085 +tp1086 +Rp1087 +sS'>Epi_6' +p1088 +g2 +(g6 +S'\xbf\x00\x00\x00' +p1089 +tp1090 +Rp1091 +sS'>Epi_292' +p1092 +g2 +(g6 +S':\x00\x00\x00' +p1093 +tp1094 +Rp1095 +sS'>Epi_118' +p1096 +g2 +(g6 +S' \x00\x00\x00' +p1097 +tp1098 +Rp1099 +sS'>Epi_317' +p1100 +g2 +(g6 +S'f\x00\x00\x00' +p1101 +tp1102 +Rp1103 +sS'>Epi_316' +p1104 +g2 +(g6 +S'^\x00\x00\x00' +p1105 +tp1106 +Rp1107 +sS'>Epi_315' +p1108 +g2 +(g6 +S'j\x00\x00\x00' +p1109 +tp1110 +Rp1111 +sS'>Epi_314' +p1112 +g2 +(g6 +S'v\x00\x00\x00' +p1113 +tp1114 +Rp1115 +sS'>Epi_313' +p1116 +g2 +(g6 +S'h\x00\x00\x00' +p1117 +tp1118 +Rp1119 +sS'>Epi_312' +p1120 +g2 +(g6 +S'\x02\x00\x00\x00' +p1121 +tp1122 +Rp1123 +sS'>Epi_311' +p1124 +g2 +(g6 +S'\x83\x00\x00\x00' +p1125 +tp1126 +Rp1127 +sS'>Epi_310' +p1128 +g2 +(g6 +S']\x00\x00\x00' +p1129 +tp1130 +Rp1131 +sS'>Epi_256' +p1132 +g2 +(g6 +S'\x03\x00\x00\x00' +p1133 +tp1134 +Rp1135 +sS'>Epi_257' +p1136 +g2 +(g6 +S'\xb9\x00\x00\x00' +p1137 +tp1138 +Rp1139 +sS'>Epi_254' +p1140 +g2 +(g6 +S'\x8c\x00\x00\x00' +p1141 +tp1142 +Rp1143 +sS'>Epi_255' +p1144 +g2 +(g6 +S'n\x00\x00\x00' +p1145 +tp1146 +Rp1147 +sS'>Epi_252' +p1148 +g2 +(g6 +S'~\x00\x00\x00' +p1149 +tp1150 +Rp1151 +sS'>Epi_253' +p1152 +g2 +(g6 +S'\xc5\x00\x00\x00' +p1153 +tp1154 +Rp1155 +sS'>Epi_319' +p1156 +g2 +(g6 +S'n\x00\x00\x00' +p1157 +tp1158 +Rp1159 +sS'>Epi_318' +p1160 +g2 +(g6 +S'\x0b\x00\x00\x00' +p1161 +tp1162 +Rp1163 +sS'>Epi_298' +p1164 +g2 +(g6 +S'8\x00\x00\x00' +p1165 +tp1166 +Rp1167 +sS'>Epi_299' +p1168 +g2 +(g6 +S'8\x00\x00\x00' +p1169 +tp1170 +Rp1171 +sS'>Epi_106' +p1172 +g2 +(g6 +S'b\x00\x00\x00' +p1173 +tp1174 +Rp1175 +sS'>Epi_107' +p1176 +g2 +(g6 +S'o\x00\x00\x00' +p1177 +tp1178 +Rp1179 +sS'>Epi_104' +p1180 +g2 +(g6 +S'\xbd\x00\x00\x00' +p1181 +tp1182 +Rp1183 +sS'>Epi_105' +p1184 +g2 +(g6 +S'_\x00\x00\x00' +p1185 +tp1186 +Rp1187 +sS'>Epi_102' +p1188 +g2 +(g6 +S'n\x00\x00\x00' +p1189 +tp1190 +Rp1191 +sS'>Epi_103' +p1192 +g2 +(g6 +S'v\x00\x00\x00' +p1193 +tp1194 +Rp1195 +sS'>Epi_100' +p1196 +g2 +(g6 +S'k\x00\x00\x00' +p1197 +tp1198 +Rp1199 +sS'>Epi_101' +p1200 +g2 +(g6 +S"'\x00\x00\x00" +p1201 +tp1202 +Rp1203 +sS'>Epi_108' +p1204 +g2 +(g6 +S'E\x00\x00\x00' +p1205 +tp1206 +Rp1207 +sS'>Epi_109' +p1208 +g2 +(g6 +S'\xbe\x00\x00\x00' +p1209 +tp1210 +Rp1211 +sS'>Epi_95' +p1212 +g2 +(g6 +S'A\x00\x00\x00' +p1213 +tp1214 +Rp1215 +sS'>Epi_94' +p1216 +g2 +(g6 +S'Q\x00\x00\x00' +p1217 +tp1218 +Rp1219 +sS'>Epi_97' +p1220 +g2 +(g6 +S'4\x00\x00\x00' +p1221 +tp1222 +Rp1223 +sS'>Epi_96' +p1224 +g2 +(g6 +S'*\x00\x00\x00' +p1225 +tp1226 +Rp1227 +sS'>Epi_91' +p1228 +g2 +(g6 +S'\x9b\x00\x00\x00' +p1229 +tp1230 +Rp1231 +sS'>Epi_90' +p1232 +g2 +(g6 +S'@\x00\x00\x00' +p1233 +tp1234 +Rp1235 +sS'>Epi_93' +p1236 +g2 +(g6 +S'\xce\x00\x00\x00' +p1237 +tp1238 +Rp1239 +sS'>Epi_92' +p1240 +g2 +(g6 +S'n\x00\x00\x00' +p1241 +tp1242 +Rp1243 +sS'>Epi_99' +p1244 +g2 +(g6 +S'K\x00\x00\x00' +p1245 +tp1246 +Rp1247 +sS'>Epi_98' +p1248 +g2 +(g6 +S'v\x00\x00\x00' +p1249 +tp1250 +Rp1251 +sS'>Epi_218' +p1252 +g2 +(g6 +S'1\x00\x00\x00' +p1253 +tp1254 +Rp1255 +sS'>Epi_219' +p1256 +g2 +(g6 +S'k\x00\x00\x00' +p1257 +tp1258 +Rp1259 +sS'>Epi_212' +p1260 +g2 +(g6 +S'n\x00\x00\x00' +p1261 +tp1262 +Rp1263 +sS'>Epi_213' +p1264 +g2 +(g6 +S'n\x00\x00\x00' +p1265 +tp1266 +Rp1267 +sS'>Epi_210' +p1268 +g2 +(g6 +S'\x9a\x00\x00\x00' +p1269 +tp1270 +Rp1271 +sS'>Epi_211' +p1272 +g2 +(g6 +S'T\x00\x00\x00' +p1273 +tp1274 +Rp1275 +sS'>Epi_216' +p1276 +g2 +(g6 +S'\x85\x00\x00\x00' +p1277 +tp1278 +Rp1279 +sS'>Epi_217' +p1280 +g2 +(g6 +S'o\x00\x00\x00' +p1281 +tp1282 +Rp1283 +sS'>Epi_214' +p1284 +g2 +(g6 +S'\xbb\x00\x00\x00' +p1285 +tp1286 +Rp1287 +sS'>Epi_215' +p1288 +g2 +(g6 +S'|\x00\x00\x00' +p1289 +tp1290 +Rp1291 +sS'>Epi_191' +p1292 +g2 +(g6 +S'\x12\x00\x00\x00' +p1293 +tp1294 +Rp1295 +sS'>Epi_190' +p1296 +g2 +(g6 +S'\x82\x00\x00\x00' +p1297 +tp1298 +Rp1299 +sS'>Epi_193' +p1300 +g2 +(g6 +S',\x00\x00\x00' +p1301 +tp1302 +Rp1303 +sS'>Epi_192' +p1304 +g2 +(g6 +S'}\x00\x00\x00' +p1305 +tp1306 +Rp1307 +sS'>Epi_195' +p1308 +g2 +(g6 +S'\x94\x00\x00\x00' +p1309 +tp1310 +Rp1311 +sS'>Epi_194' +p1312 +g2 +(g6 +S'\xa0\x00\x00\x00' +p1313 +tp1314 +Rp1315 +sS'>Epi_197' +p1316 +g2 +(g6 +S'X\x00\x00\x00' +p1317 +tp1318 +Rp1319 +sS'>Epi_196' +p1320 +g2 +(g6 +S'\x8e\x00\x00\x00' +p1321 +tp1322 +Rp1323 +sS'>Epi_199' +p1324 +g2 +(g6 +S'\xc7\x00\x00\x00' +p1325 +tp1326 +Rp1327 +sS'>Epi_198' +p1328 +g2 +(g6 +S'\x11\x00\x00\x00' +p1329 +tp1330 +Rp1331 +sS'>Epi_20' +p1332 +g2 +(g6 +S'\xca\x00\x00\x00' +p1333 +tp1334 +Rp1335 +sS'>Epi_21' +p1336 +g2 +(g6 +S'O\x00\x00\x00' +p1337 +tp1338 +Rp1339 +sS'>Epi_22' +p1340 +g2 +(g6 +S'\x0e\x00\x00\x00' +p1341 +tp1342 +Rp1343 +sS'>Epi_23' +p1344 +g2 +(g6 +S'1\x00\x00\x00' +p1345 +tp1346 +Rp1347 +sS'>Epi_24' +p1348 +g2 +(g6 +S'u\x00\x00\x00' +p1349 +tp1350 +Rp1351 +sS'>Epi_25' +p1352 +g2 +(g6 +S'\x1f\x00\x00\x00' +p1353 +tp1354 +Rp1355 +sS'>Epi_26' +p1356 +g2 +(g6 +S'j\x00\x00\x00' +p1357 +tp1358 +Rp1359 +sS'>Epi_27' +p1360 +g2 +(g6 +S'o\x00\x00\x00' +p1361 +tp1362 +Rp1363 +sS'>Epi_28' +p1364 +g2 +(g6 +S'\x1a\x00\x00\x00' +p1365 +tp1366 +Rp1367 +sS'>Epi_29' +p1368 +g2 +(g6 +S'\x89\x00\x00\x00' +p1369 +tp1370 +Rp1371 +sS'>Epi_306' +p1372 +g2 +(g6 +S'9\x00\x00\x00' +p1373 +tp1374 +Rp1375 +sS'>Epi_268' +p1376 +g2 +(g6 +S'I\x00\x00\x00' +p1377 +tp1378 +Rp1379 +sS'>Epi_267' +p1380 +g2 +(g6 +S'h\x00\x00\x00' +p1381 +tp1382 +Rp1383 +sS'>Epi_266' +p1384 +g2 +(g6 +S'h\x00\x00\x00' +p1385 +tp1386 +Rp1387 +sS'>Epi_142' +p1388 +g2 +(g6 +S'H\x00\x00\x00' +p1389 +tp1390 +Rp1391 +sS'>Epi_143' +p1392 +g2 +(g6 +S'\xc6\x00\x00\x00' +p1393 +tp1394 +Rp1395 +sS'>Epi_140' +p1396 +g2 +(g6 +S'\x9d\x00\x00\x00' +p1397 +tp1398 +Rp1399 +sS'>Epi_141' +p1400 +g2 +(g6 +S'5\x00\x00\x00' +p1401 +tp1402 +Rp1403 +sS'>Epi_146' +p1404 +g2 +(g6 +S'w\x00\x00\x00' +p1405 +tp1406 +Rp1407 +sS'>Epi_147' +p1408 +g2 +(g6 +S'\x90\x00\x00\x00' +p1409 +tp1410 +Rp1411 +sS'>Epi_144' +p1412 +g2 +(g6 +S'F\x00\x00\x00' +p1413 +tp1414 +Rp1415 +sS'>Epi_145' +p1416 +g2 +(g6 +S'\x1b\x00\x00\x00' +p1417 +tp1418 +Rp1419 +sS'>Epi_148' +p1420 +g2 +(g6 +S'\x07\x00\x00\x00' +p1421 +tp1422 +Rp1423 +sS'>Epi_149' +p1424 +g2 +(g6 +S'\x06\x00\x00\x00' +p1425 +tp1426 +Rp1427 +s. \ No newline at end of file diff --git a/scripts/data_prepare.py b/scripts/data_prepare.py index ff59e4b..087e478 100644 --- a/scripts/data_prepare.py +++ b/scripts/data_prepare.py @@ -58,3 +58,46 @@ def make_shuffled_nega(cdr3, epi, labels, epi_id): } +def get_cluster(dataset_name, split): + if (dataset_name in ['seqlevel_data']) and split == 'cv-new_epitope': + cluster_path = './data/cluster/seqlevel_epi_cluster_0.5.pkl' + with open(cluster_path, 'rb') as f: + epi2cluster = pickle.load(f, encoding='iso-8859-1') + epi2cluster = {int(k.split('_')[-1]):v for k, v in epi2cluster.items()} + return epi2cluster + elif dataset_name == 'reslevel_data': + cluster_path_dict = { + 'cdr3': './data/cluster/reslevel_cdr3_cluster_0.2.pkl', + 'epi': './data/cluster/reslevel_epi_cluster_0.2.pkl', + } + cdr32cluster, epi2cluster = {}, {} + if ('new_cdr3' in split) or ('both_new' in split): + with open(cluster_path_dict['cdr3'], 'rb') as f: + cdr32cluster = pickle.load(f, encoding='iso-8859-1') + if ('new_epi' in split) or ('both_new' in split): + with open(cluster_path_dict['epi'], 'rb') as f: + epi2cluster = pickle.load(f, encoding='iso-8859-1') + else: + raise ValueError('dataset_name {} not supported'.format(dataset_name)) + return cdr32cluster, epi2cluster + + +def get_split(split_type, dataset_name, all_cdr3, all_epi): + cdr32cluster, epi2cluster = get_cluster(dataset_name, split_type) + + assert split_type in ['cv-both_new', 'cv-new_cdr3', 'cv-new_epi'] + kfold = GroupKFold(3) if split_type == 'cv-both_new' else GroupKFold(5) + if len(cdr32cluster) != 0: # new_cdr3, both_new + cdr3_group_id = [cdr32cluster[cdr3_this] for cdr3_this in all_cdr3] + split_cdr3 = list(kfold.split(all_cdr3, groups=cdr3_group_id)) + split = split_cdr3 + if len(epi2cluster) != 0: # new_epi, both_new + epi_group_id = [epi2cluster[epi_this] for epi_this in all_epi] + split_epi = list(kfold.split(all_epi, groups=epi_group_id)) + split = split_epi + if split_type == 'cv-both_new': + split = [[np.intersect1d(fold_tcr[0], fold_epi[0]), np.intersect1d(fold_tcr[1], fold_epi[1])] + for fold_tcr, fold_epi in zip(split_cdr3, split_epi)] + + return split + \ No newline at end of file diff --git a/scripts/data_process.py b/scripts/data_process.py index e7e4b5b..fb4cbd9 100644 --- a/scripts/data_process.py +++ b/scripts/data_process.py @@ -8,6 +8,7 @@ from models import AutoEncoder base_data_dir = './all_data/' +device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') def GetBlosumMat(residues_list): n_residues = len(residues_list) # the number of amino acids _ 'X' @@ -74,7 +75,7 @@ def get_numbering(seqs, ): # # using ANARCI to get numbering file # cmd = ("conda run -n teim " # this environment name should be the same as the one you install anarci - cmd = (" ANARCI" + cmd = ("ANARCI" " -i tmp_faketcr.fasta -o tmp_align --csv -p 24") res = os.system(cmd) @@ -105,7 +106,7 @@ def get_numbering(seqs, ): return df.loc[seqs, 'cdr3_align'].values -def load_ae_model(tokenizer, path='./ckpt/epi_ae.ckpt'): +def load_ae_model(tokenizer, path='./ckpt/epi_ae.ckpt',): # tokenizer = Tokenizer() ## load model model_args = dict( @@ -117,7 +118,7 @@ def load_ae_model(tokenizer, path='./ckpt/epi_ae.ckpt'): model.eval() ## load weights - state_dict = torch.load(path) + state_dict = torch.load(path, map_location=device) state_dict = {k[6:]:v for k, v in state_dict.items()} model.load_state_dict(state_dict) return model diff --git a/scripts/inference_res.py b/scripts/inference_res.py index e6d3eba..6fe8a15 100644 --- a/scripts/inference_res.py +++ b/scripts/inference_res.py @@ -20,7 +20,7 @@ import warnings warnings.filterwarnings("ignore") -os.environ['CUDA_VISIBLE_DEVICES'] = '2' +device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') class MyDataSet(torch.utils.data.Dataset): @@ -289,7 +289,7 @@ def __init__(self, ): 'use_vae': False, } self.model, self.tokenizer = self.load_pdb_model() - self.model = self.model.cuda() + self.model = self.model.to(device) self.model.eval() def load_pdb_model(self): @@ -302,7 +302,7 @@ def load_pdb_model(self): model_type = self.data_mode['model_type'] ), lr=0.1, weight_decay=0.1, model=deepcopy(base_model)) - model.load_state_dict(torch.load(pdb_model_path)['state_dict']) + model.load_state_dict(torch.load(pdb_model_path, map_location=device)['state_dict']) n_para = np.sum([a.numel() for a in model.parameters()]) print('Number of paramters', n_para) @@ -340,9 +340,9 @@ def forward(self, encoding_cdr3, encoding_epi, epi_vec): pred = [] for batch in np.arange(0, len(encoding_cdr3) // bs + 1): idx_end = min((batch+1)*bs, len(encoding_cdr3)) - input_cdr3 = torch.Tensor(encoding_cdr3[batch*bs:idx_end, ...]).cuda() - input_epi = torch.Tensor(encoding_epi[batch*bs:idx_end, ...]).cuda() - input_vec = torch.Tensor(epi_vec[batch*bs:idx_end, ...]).cuda() + input_cdr3 = torch.Tensor(encoding_cdr3[batch*bs:idx_end, ...]).to(device) + input_epi = torch.Tensor(encoding_epi[batch*bs:idx_end, ...]).to(device) + input_vec = torch.Tensor(epi_vec[batch*bs:idx_end, ...]).to(device) pred_batch = self.model([input_cdr3, input_epi, input_vec]) pred_batch = pred_batch.cpu().detach().numpy() pred.extend(pred_batch) diff --git a/scripts/inference_seq.py b/scripts/inference_seq.py index ecd5a1e..468c39d 100644 --- a/scripts/inference_seq.py +++ b/scripts/inference_seq.py @@ -14,7 +14,7 @@ from sklearn.metrics import roc_auc_score, average_precision_score import warnings warnings.filterwarnings("ignore") -os.environ['CUDA_VISIBLE_DEVICES'] = '0' +device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') class BdTrainerSystem(pl.LightningModule): @@ -103,7 +103,7 @@ def get_scores(self, y_true, y_pred, y_mask): class BindPredictor: def __init__(self, path='./ckpt/teim_seq.ckpt'): self.model = BdTrainerSystem.load_from_checkpoint(path) - self.model = self.model.cuda() + self.model = self.model.to(device) self.model.eval() self.tokenizer = Tokenizer() @@ -124,9 +124,9 @@ def forward(self, encoding_cdr3, encoding_epi, epi_vec): pred = [] for batch in np.arange(0, len(encoding_cdr3) // bs + 1): idx_end = min((batch+1)*bs, len(encoding_cdr3)) - input_cdr3 = torch.Tensor(encoding_cdr3[batch*bs:idx_end, ...]).cuda() - input_epi = torch.Tensor(encoding_epi[batch*bs:idx_end, ...]).cuda() - input_vec = torch.Tensor(epi_vec[batch*bs:idx_end, ...]).cuda() + input_cdr3 = torch.Tensor(encoding_cdr3[batch*bs:idx_end, ...]).to(device) + input_epi = torch.Tensor(encoding_epi[batch*bs:idx_end, ...]).to(device) + input_vec = torch.Tensor(epi_vec[batch*bs:idx_end, ...]).to(device) pred_batch = self.model([input_cdr3, input_epi, input_vec]) pred_batch = pred_batch.cpu().detach().numpy() pred.extend(pred_batch)