From fa4868bd002b726c9efbdcc9ae3a163262089f67 Mon Sep 17 00:00:00 2001 From: Tieu Long Phan <125431507+TieuLongPhan@users.noreply.github.com> Date: Mon, 4 Nov 2024 10:38:00 +0100 Subject: [PATCH] Prepare release (#10) * add graph_descriptors * update doc * prepare release * fix version * prepare release * prepare release 0.0.8 * update Molecule subpackage * update reaction cleaning * add graph fingerprint * update graph signature * add nx_to_gml function * update format package, transforming gml to nx and reverse; transformaing mol to nx and reverse * format * add new features, prepare release * fix format --- .gitignore | 8 +- Data/test.pkl.gz | Bin 0 -> 1813972 bytes Test/SynChem/Molecule/__init__.py | 0 Test/SynChem/Molecule/test_standardize.py | 90 ++++++++ Test/SynChem/Reaction/test_cleanning.py | 26 +++ Test/SynGraph/Descriptor/__init__.py | 0 .../test_graph_descriptors.py | 2 +- .../Descriptor/test_graph_signature.py | 44 ++++ Test/SynGraph/Fingerprint/__init__.py | 0 Test/SynGraph/Fingerprint/test_graph_fps.py | 59 +++++ Test/SynGraph/Fingerprint/test_hash_fps.py | 52 +++++ Test/SynGraph/Fingerprint/test_morgan_fps.py | 39 ++++ Test/SynGraph/Fingerprint/test_path_fps.py | 40 ++++ Test/SynIO/Format/__init__.py | 0 Test/SynIO/Format/test_gml_to_nx.py | 130 +++++++++++ Test/SynIO/Format/test_graph_to_mol.py | 59 +++++ Test/SynIO/Format/test_its_construction.py | 51 +++++ Test/SynIO/Format/test_mol_to_graph.py | 49 ++++ Test/SynIO/Format/test_nx_to_gml.py | 99 ++++++++ Test/SynIO/__init__.py | 0 pyproject.toml | 8 +- requirements.txt | 3 +- synutility/SynChem/Molecule/__init__.py | 0 synutility/SynChem/Molecule/standardize.py | 137 +++++++++++ synutility/SynChem/Reaction/cleanning.py | 59 +++++ synutility/SynChem/Reaction/standardize.py | 1 + synutility/SynGraph/Descriptor/__init__.py | 0 .../{ => Descriptor}/graph_descriptors.py | 4 +- .../SynGraph/Descriptor/graph_signature.py | 128 +++++++++++ synutility/SynGraph/Fingerprint/__init__.py | 0 synutility/SynGraph/Fingerprint/graph_fps.py | 97 ++++++++ synutility/SynGraph/Fingerprint/hash_fps.py | 130 +++++++++++ synutility/SynGraph/Fingerprint/morgan_fps.py | 87 +++++++ synutility/SynGraph/Fingerprint/path_fps.py | 82 +++++++ synutility/SynIO/Format/__init__.py | 0 synutility/SynIO/Format/dg_to_gml.py | 122 ++++++++++ synutility/SynIO/Format/gml_to_nx.py | 144 ++++++++++++ synutility/SynIO/Format/graph_to_mol.py | 87 +++++++ synutility/SynIO/Format/isomorphism.py | 48 ++++ synutility/SynIO/Format/its_construction.py | 213 ++++++++++++++++++ synutility/SynIO/Format/mol_to_graph.py | 167 ++++++++++++++ synutility/SynIO/Format/nx_to_gml.py | 168 ++++++++++++++ synutility/SynMOD/__init__.py | 0 synutility/SynMOD/rule_apply.py | 58 +++++ 44 files changed, 2476 insertions(+), 15 deletions(-) create mode 100644 Data/test.pkl.gz create mode 100644 Test/SynChem/Molecule/__init__.py create mode 100644 Test/SynChem/Molecule/test_standardize.py create mode 100644 Test/SynChem/Reaction/test_cleanning.py create mode 100644 Test/SynGraph/Descriptor/__init__.py rename Test/SynGraph/{ => Descriptor}/test_graph_descriptors.py (98%) create mode 100644 Test/SynGraph/Descriptor/test_graph_signature.py create mode 100644 Test/SynGraph/Fingerprint/__init__.py create mode 100644 Test/SynGraph/Fingerprint/test_graph_fps.py create mode 100644 Test/SynGraph/Fingerprint/test_hash_fps.py create mode 100644 Test/SynGraph/Fingerprint/test_morgan_fps.py create mode 100644 Test/SynGraph/Fingerprint/test_path_fps.py create mode 100644 Test/SynIO/Format/__init__.py create mode 100644 Test/SynIO/Format/test_gml_to_nx.py create mode 100644 Test/SynIO/Format/test_graph_to_mol.py create mode 100644 Test/SynIO/Format/test_its_construction.py create mode 100644 Test/SynIO/Format/test_mol_to_graph.py create mode 100644 Test/SynIO/Format/test_nx_to_gml.py create mode 100644 Test/SynIO/__init__.py create mode 100644 synutility/SynChem/Molecule/__init__.py create mode 100644 synutility/SynChem/Molecule/standardize.py create mode 100644 synutility/SynChem/Reaction/cleanning.py create mode 100644 synutility/SynGraph/Descriptor/__init__.py rename synutility/SynGraph/{ => Descriptor}/graph_descriptors.py (99%) create mode 100644 synutility/SynGraph/Descriptor/graph_signature.py create mode 100644 synutility/SynGraph/Fingerprint/__init__.py create mode 100644 synutility/SynGraph/Fingerprint/graph_fps.py create mode 100644 synutility/SynGraph/Fingerprint/hash_fps.py create mode 100644 synutility/SynGraph/Fingerprint/morgan_fps.py create mode 100644 synutility/SynGraph/Fingerprint/path_fps.py create mode 100644 synutility/SynIO/Format/__init__.py create mode 100644 synutility/SynIO/Format/dg_to_gml.py create mode 100644 synutility/SynIO/Format/gml_to_nx.py create mode 100644 synutility/SynIO/Format/graph_to_mol.py create mode 100644 synutility/SynIO/Format/isomorphism.py create mode 100644 synutility/SynIO/Format/its_construction.py create mode 100644 synutility/SynIO/Format/mol_to_graph.py create mode 100644 synutility/SynIO/Format/nx_to_gml.py create mode 100644 synutility/SynMOD/__init__.py create mode 100644 synutility/SynMOD/rule_apply.py diff --git a/.gitignore b/.gitignore index 14385be..1706557 100644 --- a/.gitignore +++ b/.gitignore @@ -3,11 +3,5 @@ *.csv */catboost_info/* *.ipynb -test.py -rebalance_test.py -split_comparison.py -fp.py - *.json -split_benchmark_process.py -synutility/SynChem/Reaction/misc.py +test_mod.py diff --git a/Data/test.pkl.gz b/Data/test.pkl.gz new file mode 100644 index 0000000000000000000000000000000000000000..e1caa718cd9b02bd11b086ba064e1c7ff6a95ce0 GIT binary patch literal 1813972 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ξ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 z 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ð(K!0vi#7h18~g9@tTbOkii~`ERH82Q~FV zP2H4t*2@(#H;f190I;KSm>_I&sSsV2P~1i@0z2x63G8f2NjIodQ%Y>H{ewa6WQa8F z*)7_}G7(})!h(ftyL~9wQK^d<$c&w_-^Z($fI3e|$&B~rQ&7WRN$kKvto$Ru&cXGw zzG+bpMFW*fg?NB-LLU1t+^ItyC0vauP?#y$?6zTPgT$59Yt-CSM2$6Zc-;w zb0#Wehk%8+TTXx+$*C;->O~Am_9~lHmbvQXU`HJwY4(9a{4B2mHNWgh)buRPQ?CK_ z_Uc4A7#HMR^$N7{%gQ@uzCmwBmW%fAE1C58@Da{YCkwX$q(vcnh37Imd&a3AoR<>09*iEw zfF3)U{;%*VS^%0%J?K^d(1NW20I7XMQT8iv(yy4L%!{fk<$N!K%AJ8f7t0?tfjQtT1iSjcpKHLbGWc^ns4Ig%H-fr8@aHD5s|^0!0%~e#5ieT? z9VMehy1K$xb*pe2AhiHNw}Ev!W&sMZ&c6j}2a(BOq+qq!4Dm~CXa-(L6A$}Zp zD1kq#(dtFmeqOh@aFCKFfrIc%g(@DS2L70Q8>dQ!*nK9^$L6)61qpvO;6z5APA?0p z-}@7i)D=*ab&s2@*|gq7E%8U{uYx6p6G{0?IRWuBnPz4X>j_%QJ1!!}uCDl|TqrxW z5j9roF1BHs)dhtG1#4F8p`PfeT&##etS8VaAd>ATD`d7_)fJOvgz_r`XtBy|m{(Qc zyYvvQtgp88jO}SVNfJ5$hwih&hrK+8|pAw)3poFl?6?9F`5C z=_^4C(NXf<$;C12XBD6_F^DYhAZFhhVdNW~|A}s?2aL&j#`y%6r*`(n)f1GK_0ML1 zbYy}TTF^_>7~R0kP}I_haD zlEse7VqdGp+2_}5fk;)L?J5Cu`OrC9fmtY>Nw1eE2v!LR4+dH_L&A+%-UozzRcwJs z^?>GiPnp3&yq?jXycUR5PZXaKX|X#{6sgz(k?IQg%lgT@WcctR4$yph?JUd7QB}e2 z?@fyjG%~fSz)=E_Jr7wJKu!!I%q8KRF<&+7G)Fni(6AgqRS6TF$QRA$(8`NsW1|nR0VU0_NS;ZBF-)!MN$PsAp-~knU{dV^8*O+q*w9dlWMd-@Zv!Rm znP^H}Ejx>S3zRfCVtX*9tb?sPaXZ-1h=^okBMa{VB~|=LN{vKEUaYML0g~?rn=;TB z%Eae)0{3s3i7)qkQ0{AR%MNu5m`qT2%E1O3-iWrew-Z+jSa~@pC#xrTH;q|dDd%pW zq3(s2FTDO5M_z2;?CsTmfIqdJNJ_Wxh=JN|$%E1&X<_W2fekg7NH$vEk)Xm~f|80x zG$jKHw^u(VPxUJ~n1I4@>QS`KRX@jpUu51iiz{qWbA%sFErEIJz^uw}?*EnB6Lm&0 zkl%xsos`X|8!i)<#v>rjVV*9b^_5v$kh+jPj8ZAwWJZxPfTTK(eBE826 z=>uC?rBl08>aD93sV*=v`PMQD`FybNPOAzJGBspoOuYp&OBS!>>it<@>kQnXVTFg% z4DocsFboqPJ*D0oKSL7Y3o6Z!_*g787@i>>LKRk<K!%5U(4;GbA3UQwPc#Mpa%Ng7r(BAl z>|qx*a#iVA>F(|#{!4CDEUv{JWo03Y~ z_50hxPZXTlnAas-&ikI3XPWJ0B6l}UNH25BYKb)c;5g~;{x@g%X18`pu?NTadCv@i zZ{RfYCwQSeL3qc!CSk%QH&CeGCVTz%jyC--e(jO*DfxEvOz^9{6nr~gdO}2OwSHeq zE*m|&eNF{`O>$isd7@JMNQjSLzh?N$H`BRLnA=UZy%j#CP@WKu4d=$+(CERUjwOf2vS40U<5q zlt-=qMA&0CG&VW#mwHJ82fef3Saq6+HvsrokjgjloUpKLKnA&;*ypIoSOZ5-P-lWV zIW9bp>^`VX|7)JCYvB2I^)|3`g4ml1n{~4BA#|uspr+E0(1C6RgGhFCc1%)dfgLr6 z6n6YBli;8>{V&`%`O|@gl)yXt7GX#2A%Pt+&z{+8ix3mMmK(i?=O)IcD&U(O_IQ1r}H9|kqQhe_0+kj(!fQ1dI7 zL=B3b>FOh(cCuKaI!cGXN*c?@Ks`l$NDg!{iMQwNa<0)luD%{9-3mpNfD0E)&t`qo zk_+@j2poMr`3kr$0Q#qJUW$r72(71hVD*90Bw+P=Irv~TTEZ#uPhHcw*&fVgwI62S zHq&|daY^45<2gz-8j0!r!+rPs`RNb+Bh05XI$}6;Y)TPGTB-DHrGkp|y;Nndibi?+ zUtyqsB>Xsqls#H~R--)fpYl(A^*UKNT+OwyQkks+*9wU$8klXqfw@sHgf46vQp5j0 zQunJEn90TO2ncO6Fqc#^{3<{V-Jfx5qZa3MX*JLQKoxlFwpnXFD#Z}O23d#?;jJ97 z8>3%T59c&almcM)|JeHyI6aCo?<6ysOzvcoKte(i5{`feD~L$YedXFQzT5%iW5qB@ zhRl??oJkN^Z$%g#4|Kp4WtBq?K|mKdJa~~yK#qh{E>T%@6?x$p#l=L%Zgn^X|Oy zV{N`2_y2?q?W%>heEI87`7haC+Vi&l%C4XGJlp??_so~l)1o{^7Yi69N>HIf*PSODH)WMoZgqoz{8K1)=8~UWDqQm;+ zB=LJt2kVo(HAt;2kz$;Azo|+M2vVs22)Jl{@ys~mda`()4*E-6FQ6^b{4qiN z1=PN_nxrp+?Ik*t@~?mkRX&6DPWc&F$_oBpz?ElhY5pO>#adg&5piN|8O!I?Pn707 zn$Mv;w~8@1&neHB(No$f#ZSlmG^xwcQ6)INJvk}IGp?9P(iEi5kDWCSCXeI9>m3xx4NMM;+=G% zOdlLvsDSJ;zMYvYxI{cm0A>p&SP4-DY6z2cfai9)Ea<5oVGsE5DEXhSx=Hq$bUq~m z#5DtW0k>MvIWb10m?(vWDKi%?VJp`L#>%ldrEH~(g3N_;Wb2j_{}9AdIiV6kER_>g z5yVnC0T@9n#aPw@V>J{%jTR+sekY?l+uluiK&+(&Rj$~B2G;DV)R zUoKcM^1N7ER~`op%fgjak&`)tk z7QDRg$hO7_;u%n~WF#q-rLs=uHE(^M7wedn{{ak3JKmHkUgZylkNvr5dq; zL55gtQAJXQKBASTkGI7?%@L#xj^48Q^j;Lbox>SHwgcnJ2(raEFU&)Yc{%(8fW)<# zmt#1*@M4SoaukH+u>9^+4HAcz)8TK0<%k>H?}zoWyTiTxW0}PD{_n@%fzKN62QL^N z-a+gApwBLmd=ZjF>)5dBzeSw?2=3@z+>_r4=_J}qzaOpQO+)^E_~(|1eX*zgp2TJG zHaZ*jZDfB9*UoUmzoA^H5ie!LVcuFU({NWY+z@Xva;UE1TeI*qblZ)*_4jdWrNLrp zPE|BGBym6r8(n&IiYCVrB?G<~teqxoOuTclrBF^2A!;Y7=o z%YdcjN-;Knsg@_JxOA2{lnz>+JQ!`;h{MswdzM2Yd<*?3CBlEf8RseEj3h#CaO5eY z-Ig~i+>+)g&z5=0d#Z2He?)zQ{%Vz{{L~^sdJ|mQaY=S z*-WF=-+bijx>pYzGG|SH>$0PkxA$~x>>B85+4Um>^kWz4xm~OmK_TjIS=H6iv!-*P zI;y{=Yt@F$>o?)FwWDXlx{giVs|Nb|$91mlT-QnMU2Ca*(}r~`)^%(gs7~u|>F(XI zuCr&LYgYf1jU7Fkx;xgcPhPyxVC#$_ofvmb*$}Nzlzux-9NQ^ooY<^8Na@>drjBM4L!XBv0$*Hqb#KuqNIJ zVftVY*u&BYp=~e-?DPi0S zr8FoU0#NusOC`z}3#D>5e`$Vujk2eO(qf~)cbp_avm3n-Og&Pw1!g^xIGOsT(Gzia zg$dFmjA_;;pJ=oNQu*e$UpM8L<~jUC;@>hL&GrLzq1)INXM&72L1syiu@*>es|pv# zT+Tg7lMRAi!$+7|$To3CG0qwColy_dV&PQ2qdxm>iR0?I@fJ?ya{kuyuKv%% zG2?8~%Ok0EO^wk68|nIEr&09t@8v5rX8GaP8{`-xdyioLng)|>kdsXi&uPH+FB8W#Jd-V)%1yuHPp0_~kC;B0-1REWIu9mC zh%b^a>=X;HcIR6+;(O*2FS{ya_n)?oMEaslnoWxRV>k4yrp;E{r2EHrp1LC4fyb}h zuzvN5O{Z+^9O!RZzUs#ax- zxB{TOW(HBS{60>68`QiK22q28%(hp9npZbTome}J2TrG2(p}O%9R#PG1=j$M7dfU* z%DUR~GWq&E=4ArOOCwciyq?-r>DKY$THK9SnIK-+(mqN20Mu;Vm(+D1J$cK>RB#p1 zCEvEMft_3o=}NTP379LWiHzN6gVw4Rh!%GOrj`;Tg~OcuF&wgCPLdiC4QYjDHRt~+ z(J*SSR#h;(MYfXnYPn3AGJ%JnGjQt9={v#y<}ZN6$)UBcs!}rEoyT%$jAR`w@zN7T zX$sGrHvhUKejC(tIk|d_sbjh2>d$kk-@a~<%~!6raNKfrQZA84C@UJer4n zW3r)^`X-xEE|ZN6HxR$3O^0@s-^jx=bm$YmrGLpn^DNq?i~qr2v&3`wYm|6i9)3rM zKJk0`#~=8hOg@cnI5psgY=3EV!#4jLDuXF)rwt_HygaMIewxHfcvv=Vu&m&cr}Nb1 zNyD!Yd%b`oY4|UEuB72t!FRMYJo;v$4wbJOh|exLm<6&H(FC|)fsD1;Ao-6VDDSI< z(DX+D#sNA~h@K=SfI3uw_m;X7(NpJrO#)nfCB@atpdg8VDyUmTGaYo{^vP&T#qy*= zs414GT0p`Nhwco40?ez5T9{@MBdNYSi~gcTXd60+ZSl`+`lnAw0%B+8Ra`$&>V{#+t@#?WBk zAC)J;(N&F@8id(jyqy zR17Uu2{ozD0#n=73ie9yW_Wf~2`&%CiB2JvLuUPnJ}Jj9qL?vL?&KG+vMpe#EEh`B zLspJYy$_g0=~2NRmy|7!yq_2qGTb>6#8O#)oRle2YL2JZ9+}AXzDk=@Pp!??t)7~0 zACYy(IMvgHEpug(XZD5H0~yq|3`mvmWj^)E60tLbWSFNjm9q1 zg3gJuV#Rr!Qoho;B<)+APin3ZNi#TP^`=Nt8ZtMPWR7oV4Pvf^SW@aS6)kfUxx7Nhys5d~xz%S`ngjBpXKV!JZc< zF0&sJONo)-WzGgR6CCvWp}%^V15G9( zeZm7*Q$*E&g0f9~4+r{=868yZ((&R^w1xG%GRWKu%1PqqIPk*d*%gU*?7xUm>A|Ls zyM&ra$GwaWwl54V^2=HM6F5BX$jxgzdmS-y!@DnwPec12=ABl2mO+M5a~3^}FpLHR zv5^smQQH=q7-1OoXK@k`)Fw#tN)EfU^0vx#-77}GKzy< zNg*wgUOwesSkmYnewFVqnAnd|wJ zTG<@|1lqVem1eXmNM3G?pv?ZSbH+oaPDAl(OCO2)^P4+ z2WYIf11sItsQNxOCA<>iTlj~?a;>1H@29xl@hh(nO#4&)YgPoEAePXJk-n>`(oYb(pe;qZ)0N#e zE}bs^3FJiyCEL-DVo4MIvm?%SP0lExgc}?QC1|%3O19^gG@)dUOeon)C6s(zC6rvN z5=xdMb0kS9X)a1A5y#VJc*to-hijw=j%rj2v1 znJnQG?#iAC&on+v!cd$r($q&?m1V#*%?kzNRT?8e;+`wHg>LP0cubpp(7ANy=R~JX+ zT5o6J)ZDq1bzalO0BK|k3^0ExI{_3%S*#@>oK_Z-3m}l+L#5IVr;|=BmAW8msDV@j z;*+3eRV|1b6xD4-Kd4y&3!(-^b+-5ns9CKFq6S5Ej`$p?SyhtMUOocquQP~F)$yAt zK98HQ9u#mBSv{IQMmYd#4!!fBPVyDatUnK)&mb!eJHy+=*??mO#{*7=7gIhZ?|4j* z*qSUy%!Oq1upBW`hoT7hF99wM)=#WP7IiLt*6{oI5a8(mL7B2&0URqk-cQ#@)a-n3 z7GDK5Ta6{PBjYq5%x#ABdl9He@3G=Mz_A_^0H8gfO@PrpAO2m&?L@9n~^@?IjKQGw!?3Nnx%8ej~6w$=)VX$ zmKp=-lyP&CxDwPXs|QiDxpcbtHmF$w526MI<)&W^YL=@5sH?nL1^HqCLGI9N;yQ|B z7p92oK|M)aMF(C=Xk9pm&U;zLl>(@I3a|I4$`Vlkfs}Epi^LDW2g{*B)S#&DAZ`RT zOP4{^pr|esH-VaE#vp1?R2PU_KppY3slRR@y3I^j-Co>| zo3QA{H}TyEKvA71?gTXpWI@zKQJpL9BH~_5UYd#5;yjnnQ9-Mn<^2|FqR5uh=wL^- zpv9f#Jz}L#zeX8iBO9^Ox7S9j^a$S`vC^wbY6W&BrARvLaU)jxq~~IcJ|kB8_J24l z{q^j+dxzW7?0SQ!?j5Y!5mx%j38r}|>v?ct5l)1azJd=U@4Naq?`Lva=`C}aGRtMG z^vRczox8ZpEXQkigq=R>i6ZRuQ6m&%XuNI5ClGhxHfZK%0?oK+Q{#njLY?O+9b<96Ftk()zp61ljtgF7PkW}@>iZr>d>phrMEGoC zd>k?3Q;I{)%TmACKd$(1W2xWaR#K!n{3^(fpe*$}f;!q#zcZ+#E%i%49c`)K4b%~q z`b9*iE%mR(O`Ih5y8$cIrsb2=_XiNRUppLfG9}4PV zOMPl+t?vO#thF+mne3y7$90sl)Gr71B=HV9Y-VFG-SG&tg_>@I&CQzuLAKsw2(4Gz zoac&n0@^Tp`x&moy&P;OpC^t39LuBuduxPI9}r|wKOS%_ng+mWXT}Mjj&^3O1a-7C zV>PIwof#*BdVBG1IwbC(H`2MZ@Xr(fiu0U>{}E~7f3)if{zyaD&%^>;XWRTAk~V+* z;;z_Kj)gz1N8nKdq@0lbAePFB?hj(A92Y|nOXcJY1hG_BdO^xmT5y9bNV#eo+=fyc z)+@F1Gy zZ@3MNu`XgVX4#(CV<4+1=shk9nAePF>B?)4woU{|g60P6X zWabs!YQgj_FGD5iDP#4<$Ds7msn_|W73@X0%L<&^^=$AdYaWYdgl8=x|HZ+Q?kUYA zTF^`7q{`HrSH|Ean@ohiZn*m?!nHTtv#A8VqA0K=|@2<#rTb5GL=%Mj5Sd$-Ig4j zEZ#ZCxusDJRbrE3%TnrC=FN%;c<*9D6T)+#lAh860iqRb1y4pW$n}Yhyyp63_0y0f zOev0%8qcbpsr4ti$IDmipH-z$-9^*WTIRW8>Nyv$jGb>>T9FMgo)_yRtoPhTc2Tyy zc~dI4?nY3uiOic4S5xv;FDTiPm;j>0*1{co|Hz#(Il|GJvqr$9M#EH zrvrwKAHFcUdXVmAed2&oNmc!TVS|Pzj83RJ6O?Rmkd%#I99AhkFV=}v1At*Gf;T0u zrkX`x0wpW^-jukyI$nGQl&q6`Q>x^tuYxk{IdL`lVb5kvaXuZiJN7eZV--{K;qex6 z(o~!HI4CEIi*R5i(DMdn{ZbD!+?rg9mjZ?rJ5Lx@S8BSr0+g(Oc~hz+sc(Ujl_XC} zM}m~A#xZZ+xMlr9%Rnao>DAzZ^&(F$WbJI~v&)!&@jW^ujF~vPNu&gMd zJtjAfSGTU&=$l@c&43pzs zDDw_hHxM6Ukm0o+iT40R$*MF8j>WQmjm}=oT_a*6nOIhq_J!FTZ;sNSh>hnkF@RZJ zES|-AVL?u>84?hI8Kp(}2Y8E#^e#ANh~@Tj&k+BxYcZ8Uax=tIy#^cPFUA7Im?8O9 z&SQqq;z7%iPc`KvD#@5r$GwCJ%MWDoZ4L1dF=^RwE2|Jm%78h|D z)MT2d*N%UESpQm6TQaGFa%aSR}pG9+7epErpUJG zXe+8k+DtzRu0=WtXIzUEXH<)n8yvMr(Qelw9mg$cEz)MLMOyuZ*rSQciGD$qBK?sn zMYiZdA( zat+0tebQRcRE?}md8GTCWsBU!cMwN`T8#y!S@lE;CsXd}jxXWAb23?2Zk(=#REsNT zl9mr+8}9AeRd&T9-EDPzWaPGwv&UOyJAIG{C&m>KlR?5;zA0Y0!VMPNHJC1Ho{bWh zK^ZK)1?mfefu#J69a8Ki=D2q3vQ zM-#+&m`ruztIaGqotdd{To02A@pR1uyVP>!s;5ubuW#>zGY{i26JjDIgQp$MgqZNh zEB30q|JgIU{2z*NVqzL&o~OXmU@xe4X}0)5V#PeaHpnf)n0a=|xmxhdi-^9gPzLCo zH-4tDG8ay1&2gnI*u|Y|TX+67m7x5i8_AUk%KK3+I>bU!F@JW+)5;bznc8DN zl0}#6$78BRC{sv!>)zGdE`IJmGS5_J5z0lDxK?hvvT9{hXlg6HM+HK)J-;(TbzSTb}i}JogaMZu|->+mi^}=pXA~= z3ny!jqBvT}Fh8sXFRaHsgIjVrD?kM^Iw@`e94y^D} z(ZBRawgzdUkjpE@i+sZ zW-Tm;TE*m?4Qke{f~Y}3#gP9U)T}H?YOjHesOSJ^({|zdv~zKeAMq4DSN@Y&=G z0c|*AJnsYwsvUbVs9AFe=qDA^GgVv)YSsokW{Dmu7D$5N06{S?mjRAdf)F?svY5bc zSftibZ4p-hj`e~7X3g||&!OP>qgL@Pz=hVaP;pP=#nqr@p+A6G6*)9PTmx#Oq=Fac zft4SyeRFAniQ+oIu`nOREC(>k8cjbYO}ZzH({YO;3g^nuu0qmY8EAfsELAVBi};Ay^wS$sO5t=&n3ez zLaUwnzJQu2ZsR06*l`{-3nJy-sGR6$1?y!B z`dZH}x6^Al?2aVu7upqY+z&CHo!vlPo@eLvfMcaO$c_aH^6b0;)X|=uJwXjWjS9l| zGTCir3i9mi1!}lmLa5_CJ9`6eq1c@ciD&1{bl%Ip7}K5O^%M~<6)2gM;`|oy!8%}o zEiS^X!A>es;YU=N&Tj*Bs6Qsy55lEWmsDqp0{|E5JPP*s$S6T_+WZUPB0XJm#4=EC zE8a>6j^?Kuw$phpKR!Lof%v^VZ_XirWA!HBwGMXw=%m)e0T=DTSq|!G56;n`4t2-` zyL{9)Ime230xrTFe<;zZRQG0a9B#s~{yaSO_p>B)Ai{o65EQNQE<)>NYWm}NK*!qh zPvAQ#U)Hg>Q+d9uRe&qcmvtiGqJ3H2ppN!sy$96g`LfmlF4~v15!9_>4IL6+)_OWm zd|9jcTzY+v;B&Zw=8M>b_i@PpzjF%=RFGv+)p?a*k zbPt?2c1aov1LZapf+;7BNU@dF?~=JiV2WC}o*yaivP4b^=|(9t5_+LsOl+y*B*qhE zRS@ztT_ro>}A6&QQi)|s+p6Y`-9l+0kYo9$m*biXVyPUjWDrZGcxA=1!l}i- zEdiqzPkcl}a4jyoBc3FvH7AO-vXwUNb}y17qc6GNx>KO!#t= z9)nmaF+VcpE1mN)b22xGNi)WgO<0W-oIxj5rp$SaV>$VkK`fP%swr9G(Xqvt>62~2 z1_L(^ZZ&h@tiX;T@kgsJYP9#o1RBMpex@U)XSl8|ZLC|e4PC@8fWj^ss!UPER#H)# z*K}Sutrl%xjEF9ZNGnbH%J>YGuEVWAHGvlN6T2GBej54=)Rdp5>L@M(qxQV?PjKQD zn&6+Ns!(IAaHrX=R+NBF1kF{yG)tGN9FRH}v(<#}oH&=-lat(?b>zYq?jTb>+k`Ei zTt#Dbd_(<;pST$r`_I9RHHl{1bz^?708cm0a(v?``5&d>aAnr*#aXy9n`kA+%K6@2 zQ75@)l@SA;7wi1j3jxDsS8qxcA#o`v**fY?iK{8^^>R?M5!0IzS5sufm7rwfq9>({ zijWsKoLaJA6oo=u#0-jW(;myhO*yT%gObf2lCt4oNrQwpjLc>I zF`=kj)>)#)%!<2lU?YMjvd&}O3QE@UJ=rj8z&CuKb^huDfMK1TVUndIw}z-Cgr+R3 z)t)@DIe=1CA0ZT-xB3_$SrhiYi^^Gj5|pg4dQ;+Rs-64`P_jlTDI3oKmY}?0aBE6B zd>SyUANs7E&d*4QH=TL2U&k%aY!dbTy@)P9#E3KZP9f z6|k{De3cHe5~@`!`~wtFKuM=(;#aF!I9lo!3+FyDgWJSoFVqoAs*(5&?-?5rcJ@}g;@IxN&rG?5l2lZ(!Gz7q zUUVx3&h5@)jd2g1Ei(IkzSv`^XGlQlDe*p9!&qe%@5lOIo*Lr=23aB~vwKc!h(r;I(tv%^1%%YGol}w~j z+)<_0HM{L9wUukluK{?xuXvuE3(19Jm+-87p8D;uC--%~uLT*R1%4sB>aJbCvvR)k zn*;Sm2+6`Rp2TZzzj~izr>zW_3s~z4;tTC(vJ1dhf-4F0d&HJga}9F6M|SvU?b2;d zf6bUl@9=*ndZNYHuo~fHB45AB3F>o#aB>c4`4*|3Q@g|jd#$^>9*(R20zFU8_io{+ zm2SL+Q@MpR)bI6v9+}yn^A1}`N@>n`hkxL#rBr`ihzWD}(R1gb?*g6(vwK{2E?7^b z#we4<`(tw_&#v7CW0Z?1an0>a_39s9`pU1?e(FHaC!+7@((}|0sZq}})|v~oTeukR zE^Zvh^8klUl;%6+>NmT-Z%r=Tle}@-_=(u|WFomF2D|QV#ab2g9#LGsOCqtY%0%+; zds-`910;${b~vG3AenN-!63PCS=W9y+nNQHv$2pa`>q_F22XW8++j zuXgNntTzt!?}ETqyRw@7wT9Y53^UD*Qy`Dz!c$#y&5lj2+``|A`A`O@c>hLfkt0Oj z)pMCIo}6IHjCzEMk?=X6Twaw6$Nt_@?PAD1tB>=3BH-jqOfH;^v4Gd>X0@k!K2I+F z$%SLvKq{9yzqVA|Zy29~ZX3#xsUu=iu@VoZHU&ws%td87kO1fIxqm`~tFCm^GA@8^W>!>W}$JBk>s&a{xu1 zDllIJYF4EKu+7YJ4>(jB1qAt-F995D)B$kvlUP)t;WALOo*YCC3W`DaCa78W^``El zq!e)>(P;im z`MP7JnPs&mh*?08KlvKK8Hw|C;nJC?+{o91+DP2>qy`1KlD`LPRx-T@7jFS5s#C-d zK+TF{z;g#DHLLQzlSB=0MmN`eR6Q=?`P+b?YP>fAj#bEzr<*RWB|251WG8VeZW2C^ zK|yune+23o;@f;jJP5IMGul`~3t&s?bmWr06V$AA1yBcP_^T4h6M!>qU3~dEFo9a}_CdDcE4? zK7b8Xmu0s28K_xi5298PQ@;Q;OX5M)pr8^i{{?CerSztzt&7FI00Q;#*16)BfMX#$ zh?+x5=ZRl~nnmXzYEaM@MVClq; z{&?wO-C6ve?vO7ku^g>-35mn0i9$Wj1ELk`ffjdt@e#LEdu_z+1od>p?IcKCZ?BEG zoiH0%dM{MEmBIXP>vlS8^r+Dsmypr&i>(%Tuo3?gPxBG~6Z_Lf{7+c&M*L4$8Akk1 z?IZrDzia;!M@JQXG~N+!5$k`ls^@DfeX(!Q>3_2PLdr^?@jpG%e#OjFfByE&{_VEX zvuE%h&9xEZOuJcrjy%(8#X`@BGcBpf9^*{QIiFn9I^%qL*y$XsGp#xNb?D2Bm+XH! z^v7iH;IPjiTZ{5P9Rcd{{7=gP7wvyK2Gr61r(;1K;eR@e=(PXoINYQ>|I@nw7wvyq z0qXMnPaS}Z_CKu#b+rHKL{LZjpSnO@p8rVzt~~$KI>1HvpH>o`_CIaJO``ozJ)oW; zj^{fn|I>Q3Mf;yNgStHb)B6BN0b=|B%KvmS+RF1k{Ttw-{ZAhRb+rHK!=R4#KYbL` z5&oz56P@-yeH=F_&HwZXLQDKlr}Me;KOF@&qWw>w0(G?i>C>QQsm01$t?$lIABhk3 zr$jh^lmq5Wa2e($Lnr`y$rg$MPzQU-SYGs&e-ID@2yzph4Y+78*_S{a?Irs%s27OO z(?NQw=87-Ux%5A6Cq9ewTv7ACO8=8l)cjyvXM3bxksc}h;x1}lj{k`>-6$f{sO_UF zwPjjRQKy^?DF;ilWbrtICA5I0vXZG3Q?snXdaBN4t__T_z~0DBFzDQ?puS?Ez7b1< zPSbL*R6L`~a;>FIr8VQo%&qE1W!f-&WhHeosvCtoaOEA1QETaNnlWu=y- zOzE0!^s$A6txOvRv7Aga#a2?;F0I*?Z2?Q=cn_1FG8RnznF?L84J}})ocuNiOZxrO zETIJ~mF0>|n6lnJRogDt2FA+DoO3d!c0r4=WFKTz)m+=Hlp5ug9)d(WCu3?LEyj|e zWTn<*OqvPp48TF><)v(StXHfeH)3hfDSSaJmE&zyELnxQdHKw?V5*mu7?}2xUcu{E z;w&eRP_ebtoYdS`*%tIwSt*CkzRE8P$mWv^DVsjbsctO`LzSTzG_T5WCZ|2676jQR zv^i@5ChaA*xispfLFYX>dPxqQ`Sv9P$A+9nEDb@5q=PAB=Rq(w*^+IT>TDx28ME9z zYNHu~jLKvH)hDc2s#1)RvYM{)daASC$z;rx8#&raC#(hLMy5Qam1bFYPX9y~aX@t= zP6n5y>B&hsshlY@T9A`7$h0aX6T6(OPX|lI0&qDAqKc)gQsDSXTa52JCXqDlB>g(U zC7xA^Wg8|o+x*OlZRH!PcYn}%rzu-{Iu&aQ<)o+vu~berYYR(A{wmeJ@|Cmlo{>~yl2E1zkB+dV_pFd{t34VGPY=W z8Yf|SGjx_lt^lZ6e^{k36<@6LbH9HVS=rf=>j|TCbAJd*Hnn zu=&&zM(5++0ZO)VdQ;+R%Bj79F~watur<>A2Dq9&L47YM*<2_o8`jU2zGKgeb^h&r zfMFA$HzlsFwuy&9$u>IAM>Fe|H+&lXvFb+w!*(}M7-^-eP7_aplFeh@lq%Qu7ocP- zmNzA?raarHLCIz&N!jo@gNhF8{M!Ep3>%F+84Rqaj9XK_^W*$9;#nNn66E<%I;P?G zpk#xMHzls7K!yhxQ@lV2Ro;1`cn)oB*zmp^uBKetmq5vu2T#hNYT7D?c9QrFGbsMT zOsg1%zoLy5d0%K&9z8GCxwB*LCKy)Ey(w{Zb(|OnO4gyhDRDLB%uWDh7`M2ZGJTsF zQ%uHzRZP7NzT}96Exb{^ve8AYePO5I1J!z`Akq&M#9(eJ^IY3>VjDMuiLP z1ZG$*@VvjQb5orsUJFW=-n}VRGVSi5WFgy|QYF&v0ZNvIy(u|{W3JeRF~weVP@m|S zD|SVj9y{ItjuDonT`1*w5lD6x``|V*lHvZY2Y3C*0KFw$KM@yEcmn0kei!SJl{br) zx+T(wSE&|fB9m86W>bl98Ka_0E{QKN$ndHK;;RfY#BzU9wwOjCFwO@Bu<5m?nQ<^p ziC%nH#xbMn$1^4A*@xi{g(cE+GsGIa!RAGXw;-}6YKHjd5s3X6BsW7`PZAvpFW$i* zUNa=TL^@_je#K}szL+8W)ByoqaxTpk@8)?$m^8=U6*fa$HiAs%jDO`e@c~-HSV0ya z#rhUCSN!d6;^P{wkKuB&W=PEq;tCD-pA6?Ue*!HF;(FX#l}N|?Ec*~!nb?7bR@O*& z6+U0Ae>JL^D{*2i{g!^uO6=yk6rD%0fg5nCp1xwKzEorCjcy&^RlJuDg*DPwf}U%n z3!HI{bevI*bZ&6eNJqO}BfXPb(i-Vwxkh^R1z95f-0`wR`n{?|`d(BWU6n|$Hh0MS z==-3J>!Xj}OwZZheB|r8R}UQW@~8S+mmRgdy{BVi*FaZ`+N4QA>4LtmS#-wsT!4wRg2q`=$-+R;=sTI8Ytm z-_qT?VO?j>K-aAPDH}U_Hg$KbU7_yQUOBU?=ct9fN_X3^exSc; z`QdvG^pERazoMsm{TjOcw9b<^uI*mcy=lcs9cw$+uOe2O`=@rVQ;i8vqx#3M@9bXF zwQ@sG@4)dSYsi|A><9libzpUrI1Ps};uCb}6Q|R^U2WnFv`r9w_-mHP~~n_k(i(6T$)rSj$^jr1LLZ) zu8HKD*JEv@t55woWr6;iyWbp0sO-(Uw25Oq(NZ}+%@$6L>v|t@zZ++aJw8d#vC3VD zqk3+Pg;V*Fs=e;pa|^rhM69BlNKKA08f_zO3h24CuC57Ub=yMOZA}(P?LKqa$xeh! zw=u{#TBJoIka0H1*1o-~w_W_a92*}HHZ_|d^4&SZT0m#oAXgagj?f@y)LlT?BHajQ zhK*w_)SftOzcz8?$k@-*X5m!+bJO?52VZ(D(`j{{hhhj+B)N&?>bY$#Bzx=ed?F5_ zZ-ldrjT19MoIlVAXO@kVlvlQ2(K+AGof^S8%J%~1&cL1 z3JP)5k~7W1soZ1C?EW#!54Sdj+!896YW5Tq;;6M?s)bYgF^XTmdoTC%xYhz#0iCki zr~+ASttqQbsVA$E$$8+ulge5lPz{o^}NU6Bfn<5zB2 zzk0={Q#N)E^tUWuc4+&-2MzR3ShZoj*u17=Q|Ib|KDkw@aJhSF@6@*vTj(#6=(b`* zy$}D~PyZwY`tywUP@|OHf~Z+Mo**6qHA`ec)a;msG^pA1??Igmr*vj8f&L_$ zG5-B62Of6x{xo@b4y2IEXYeaPvYZnDDJ3JSv-u3DS$YYgR!)OwLCq3L0JU@+6h5x_ zHQh8b-KF#3Ir<@S9z4(IBtnqa7ci zHx!bIKP4Q=&PVE>@+rSSzet~Q5H)sja>=~}YWDL7P|FQQ5+qeojb}_(i*%-N;eeHu`ZE42xC zb9&Q=e#@Vi*Os5&YPSq?@_dfJol_i56D z-Y0%YA{TivZjy(a>Ch)`p?|y9id)e(Tik}fW{Dr+uTkQ5d0=Hv+$sO~F&`4W-a~)L zD*_P$vC3Ljm!~-_16;J`a4@K&HHSk%JyRS+2dz2018u41kT^Hp zR+B_?kfF{`(x9himY>mIG)aC=2k{I1^A!ElClZ^0QZ$&`MB8n}Ak>dWcOxE;U%0e@+BkwE3qS)Y0aj_kg-I^Upd$OUys( z`COWR*6=xW`RU?FoaYJA_Cm3=)GRv2DZAMguvAu=0b9n4;`mdD0XH{$!SGSmymh0`PHCB3Pk z(cV3%S`W8jHkA;fqd2k_X-?PY_l=iuaN=c~o8oPoQ>d}&`qCNzbD?GR(dM5|4D?Uw z-PEyubw|(Y6)KpAzY|9PC=-1Vq1f$SvLoq>bwth*YL+$=Z%P%7^LkLSmf}r`tI1aK z22ipx;Z2FFDGKL}pk$ffn^HyK>$qzYo1CgTiL2~%MZU^Nc2LHb*Wku1 zW?MHl#w^$MxSC>bDxhRJ*ppI97<_ROd(fVoP$h@#2rGlj{(xcG))Pj@+O&g`MNn@_ z6=(AfP_m5ZNh!rR??qJulV~HAmx7 zS(NamR5tPBK*@W(C#8&}krz7>rR}FtB{tf`@qpp|+Y?4d(5wU{Z?oQ%96d8rypu6S zCmpm6dd`4)7#GY)iTqeMP}9ZPvA74BR8+@>~-Y&4Dr6B7Oi31=fw|b zIUMfn5%FaP8D1eud>0@p{4g zSIKEOFU+p>njryRL;30j&Jh0q7_kU;XxW=4$dHDmh@BZEH$z+?(IG=(AwY~7!fN~tOe@!Y{2%&$~_m}TA&8`dSH=11+(?RX)v&GkC z+a+k@)l4i#`s+^gk1j)T4*e+ea?i&Z=jGyz@^ZPsk(Y~hJ1_TKZb|cUn`K_^&t+cj zi>)#*_W}RBT=4}R9=>rI47HJe;r|dL#&TQq1y(;g2_ROx#Jg66_j0ngGw{Y#tUw>-(i}yU@ zk3={zZr+W~l;+|mLS$mjck7Y{GO6GXAls|*0r&G1M8d{6WMiHu#>*NrJ~8f!EemfU zsH5C-JM#|l@|H8w$`{p6|Fn&?6)T_FCn>Xk%mHf$XePwCJ^r18m0!+0QSpq!8$qP68jQt92XGeI)xT$1;I!A)LLQ>N091E#- z&oRxj@e0|g80!5gSV?pKE!X>FXKGh&`rW0k{A%r|+&KANm6rt0%VAw7-+gk7_%c}? zV7C2SS8_f^t9vetwu>t8FroI1)p@RoJ=X%MT;<&EieFW1cU-2g=y@nKlq;;vvv6t; zI$zW}gT#vu*WfdeTu-#Ug;YttwruTRNLgW~7G_Q2HuO&n_}Rg3mQ8|N-(rcp7D%rx2|JLfDUwf^j2A=S2;8j9Xs z-HSF)?40Y@1TkKqOv!_*xrW2yOwTDC*9)`=57Q`2exkQ4F43OZRe)Q2SXPpl;9mB6 zR7Z<3TS(t!wJCr)IJz}B`j%BWa)2}wd%b|8^Rax+KA$n71$?ve;=y-ffKo}}W5one zhejheND6mF1hWUNMN9%5Yb74c$|0f@Xcm(L2&CdeZnvp`3ybqc0yW2Zj~8vA4vR4d zwep$H1T`xX0i4UiQ^jkDxEGw0mu?q6=Zb?f z#E!Tt*HRAXKv}6Uhz&qc&C1;Y7n+Nt+^KWK9-wBSG60(<BpU!*XOQ-Ri&*vnx&^o&< z&U0BD*GUVu={WulY~GKEQMjk&I7W-RBEyIkno2|l8;D1&&{0 zv_@#LeuPluI8*o8r@scpz%qJE9VEhuFm+c3oHY)Mah#@ZQx!{e|BR{IEUcL(;VT@M zfrfi7!q^@4L@~zhm=TIHIc<6Rg#G&VmNP+X%5_GF?M*Qj@9%_GoJlO+vAVf)?$y!F zV=U`m{PbZcYU15}BbN2FB=U%59TuBH8`|H}vhFNBRJC9g8hr)eqOH;20(GmngbvCUH&I-PHWs+0J;~1y z9cpQmuJcldXbae`fay`Z4L z?8k7|oCW%Dv|4uNFUl6vCVdDskxd%Exa$a&V1ZV7vs6DQE$-l`^-x~0bjpyCpHH#6 znWW|AcVLT!RJY_7c{6JP;#aN~dJyuT0c*>S8)}xuSTEJ3-$-NdHjqPBmxE578 zf#`~*Y^?{bNTuhQti*zTiZJ94cR$70{KEs>9Ya?TL=M*6(!^~TtQb>tc=m!~YnI6tGnH)tOHp3uutW#(8-x_i zaxCV_FWDZWLQHBU&l%Ota02mLy75q?M#vuH+o|PAPAxG&dy1-}DdpdCykyD5GAck8 z%XDRBTO`xUSiq$WS0vY!lbjLMSLNh!I9Mu{>&i*_2x5tiPkE1-{e|Qq$PP)F(%XN& zC>wdFbx}69YZWp!B*`R-r$#bx-KZAvs$Q1{mvJJQ;oI5k(tCMb;$G8Y`4A_ksE&xO z6Gs-gpt@W-pXK4LWN&0Mm6cAAtHC6#)i7GJCCT?Ko+N;VyMQaTLRuF`re5aE{fD|!K$!m9rSF2ec@SCg0US>|87N{7VB``>hK zrmn~bYg`nL7bD+Z(9hRiX?SOyt}^C6dQ4VfJ$cfpD&s-PI;Jm!EWLZfs1%h+fMJc% z7lzdpzBq}quUDuLx2Bws>40G^&=W?drECLAR@S^JWlG8%B24^uGx%Kj@2236tWn52 zHXKdq?DK}lt;zp0A24B)23OO&@iJ!kEYZSzip4mvIB#*_cm-uB4f&jQ1_^I#AgTX8 zLNF(87lMQ(Vhg2s_t04?uLUKGte%w8N9TF5&Q94KFf4|8Q{rmMOnD93djVOd!Wg<89i1IH}78} zM%=|*^J{E^NNw7#(-2+NK>QjYX+&PxN0svQzVb&)uV=NCO9&8s7E zUcYXk*$rl2v(E1{D)>k0iL+<|drp#oV7>e#F|8p5lf*x{LY&B4M@;X> zW0L6gU9ZuNhMOp8h*$D(W9XS-j~JFD+N&27v<7vCO%k)Ohh!x=lNK}9vc%a~=;Tf} zbkzmqtsmf9^E*{E;|nHE!0NI@KgsJDE@}#S8x_STHQZ+bmrkZ7sh}cuq0!COAk=eB z?52OMsilb$NO^CXEqdva9t`tcal|AsPc)>tXa-7 z%|(K^MCQph(#Or*MLpr_^c;Q1YIC)|*K(;8N$nzPwYnw83SQQn6H@k_tpwO5)GAh3 zlE)L_d2-HjSI=e2=zU`zzpI%=p!&#}g&Xl7Gmy3XM;n*cZYcV*vI3^d)Ol$Fp>bG2Qk_#tOEi@)m zG8e4kT6!`SFRgjtvGia;i1E^Y%~|NMcpf+l9a{aSmV->8!$+yAFV)w~Y^!c*L|P3S z=KIYnH{b6jQZW9G^Zjmt{-g5!Zsl|3t-B3;v#1(iEYKC_?gaI)<@+VJiNqCj7c;KB zcy|LjINvWUwFd>1070IqEr4T*(W9TzB1X!icR#3E4h*6OMRkIB5Y#N)1yL(++{2(| ziOrk3PpuZ-1n4Ms;Y|{c0FK2rN$r>0$BSS9fs_oZlf~nJW9co3TKRFF1htWZ=EbaX zU(FFe2Q|xC9vziTW;18a6OR3CQ^iw&OS1tJhl5p(FZTf(qvBje8FefIUA`~jkL5Y~ zR>Us}ja_U@=#O6kngt_|CrxI*nfF*1Iw4R#t~T)-z_EN30H?A`XNzY+9hUBi`3nm2 zuRRB9BRAEPb5K;b5x)bqkvZx~4GQuK{sGiRwx}mHD5^8X3!rWj&(J}A_+zU0FSJb- zPjDN%11E_`(bg)qavQk?9S*)m)@E`EQi-*f=??kiwNIdRrRBQ%7&VdW>P8@1t}C>- z%cuRLNqHms3+!l?-0Er8_(#)U{=pRU@+=x<*=WkLIhAKci?IxzY<^(F=T&9nNsO)Y zBKakPjPh5kWI~yZvE5#1S|EL%h;Slo(X~y1I8d7Fr;sZ1R>r#i06wm9$o=kqE2zg4 zV+805oC$cIvWyxOQES&5bA2vkv~3IuE=oEk3u3uGlqq$L1ycFm>f>Ox%?wVlDHR#% zBj5UZjJ`c+`=LCMR;W0OlNu^cRJ%huy} z;lI1xNG?Nnj5F^Jd}8H*v;9Fhq_0s_#rDA#G*)9m^_K``ODR12-w%ZcFK3XN2ns6T zeh{dGb=pvMU+c8(fQ!~?-vR1qo%Uc*N9(kQf_kPnfDWo0eVceY+JbEnhNY#hYMZr1 z96@NkY^Nbx#F2mwwfIC>UD!l4RU8etPg4!^?d0KqfmbRTZ4%A_WKQi5g z+tS!lI9a?4aG_Spz-mdbw6Ixol2`$_NR#SBu@cmw_FrYrogh|&nuV^QrGstH@P3IMPKTO|dom;dHcl!JNR?Y@uFY#P# zej@=s0FL^d`2@{d^lDK1V;<>yg7DxEwj1#3>GcC;efd!+nRmsP+EeZm=mW^Amb z@+eU^^P%4GAUQQ$NnUCFIum8Z)8*!n470OmkW>j|`g@GT9vFU?=_r|q-<9;6&UVdN z5v);jTM=Sn^b|W(%gB7qWH|*@86X);Or{7UN<=_kI&QiiNO66D82eGU@!G*san5^; z=`1`lXyJ1X3Vaimdh#Acyb3SpgGt8*6Os5HBX4MdiOU#z$XyZ08R*vmhv9;7> zi=f)VjHSLJT?_)xlD+5LJ$oCt)d5KafO&ObZt982?sykZZzHaVe^^MvofJ*}de} zNy>KR+y~YOy4?pMfw77!TEKZ}f{;Szy!mPk!OQUPA3CcbORtBs{DH(~<(a%c{Pl2- zA(j$5)v{Q2rS5{sy}pdoj;WTwI?qFhIsL0cKc{^Sr+d8=wL^?*%36Ti%pxvz{O}fs)lCZ%Q_< zPZaM1CF?DoltEpm!*5Ro3~M10MmZdGU7Jq~$h2KqdLS_<3(t#n*zJb^!b9v z4py8IH!#Q$%PVowBK}#~;`88I)n1@c2=-6)qFWua$S)xKhnN_^q}{QG^TKK`xfx=G zvbZh9{_$pFH+ZG;GsFUM&k+B38Sxed@tPq4p)7L9%z14Y(UqdrVn=)V#}kRA;M$lW z`4ywlSYw8S`aOFwr)XB(t7phOu{CUlSl!^BA^yGuaXobdYY*ZE_gooLvd+sBIO94mIHNi* z+~BD5f_A&k%TKr^t@F~tbzTl>87&LFyt!2tdO55~ys?Qu_QF4JqJNGbs5Wk z!*(HrO5G~yxhTgZoj>O z5xG_BQnXzmoItYrq8}>S2s>3WK+61)q2us)7ajc29>(gAU8blLgR^Y z)w*57Gv7k0ZQ(DC9O^$jIb)-o)pj`y+t^sU@`jUcC!7pO{V@KVGr@(Esp{~}-M6Fa z1a}1C6u3|9=gGKF&M|8s=vd@B&%+52Is3Zni89p|VxA~xGV6CH-%go|wS)AO84a>hH_{Dl2 zrA~~uajr#ioO8eJ-ER^p=WVo*RL^A!%G_OVF)ir1obG7hs3)>>l`2*akw?$rBN|-x z!QQ=HV>Hg{yP6dea+C;7-?*F$(i zWd-4a+(w3lM{39!O5*m8-A390AgT+*n;s<9j+GpyPVD-!K| zFS~N+kEMWSmBfSbq$-A^NO^q=kx`U9(a!4=NHwWCSG*Pcu|X<;Kc)E36Z?Uh)sv8p zT_E-*I@W8bp8ElG-pjUoGqKAnYsM_Q;YF~SAt)2mcIMciup|8@W=R)a+-UAWi_a zk-6wa?VVhejtd~jIlmHclf`j#ka_XcwhC<=2@%kFW^$(&&r;wd6XuD4W1%nrPKuG$ zaiSa4MnaVrwiG=iT-`S!?Jq!7o5gzo$MRkfv!JLpiS?jn8O{ScS&SljmQ&QkMndal z>gpKrUO=~sHFS`Y7d^~cw584szs;HDDf)iYX1+U#J+zhmGoSCk=M|jivaJ3fjmM_P z^?8_^9}#b)>urxKTHJMta*~|OZ;_GYLV~&+AIWvez9Y7{>L~F!+MbW6s5hj1LD?Fy z#kEISWk+mrwGmq!Y*!<;xc173EiT>`cku-No-( zvBg;ht9@)_^hD*^;>t3UvAk${J6$f6Ox2}en_q-2&aN-0ho{&UhY6Q+MN8waZS$LJ znPe;9LAC0x-hc^L=VJyoQpShB1-|GdfAU5`8kr;K&w8c;A3jPVz52%tlIlB`eK9KZ z0UoZsDj5*9A{6)=*dS%jHtS)Ozai^e5Aty(zV(=BfwSvhg?=_W&;1sJIo>;T@%n ziuZ$hhPaas+NgLh+DbDjK168RsQ56Tqm7D>g1S7T;^TmeHYz>|>S&|l&p{n+RD255 z@ye&!7%=PlkH=lzVcnco}fP?n#!# zJS@1W_lh9MBl#-#lk~ufzXICV{g>W}<9-*2(GL-I=wk=_3ze^Od(i~Ax#AV#IdL8~ zQ&TTQ3ChN~jUNp5-xl#BoagMnA498^S96POF)hL$rY5oo;}>_8ttcTlIR01V*-|kC zT}wlz_-9*?16@|Auwu$AwpG7~MG29`il;_JEOI)ZWwlo-MMmcf4?j*jNY{!`HBpSZ zA8GBF80{lGR#`E%)MP={j>)uODn+SY^=5Z2NKUF=X-}!b9W>S zsC3dnnUV*jP-a@tIpsuE2eDLE0Cvh$ra}z&RHhAmRgRA+Wh=9OyN0iv(C#3XSh+Jz zFfJeDprgQpSSrg&l`v&)yl^XGpdC6@|35hDtSD)x(Bn9{s~UX2|`!QWF?U$ zUD+0}R93ut(nCg-FNCpY3%AKOFvdE2qZvNv@b;7~y$)!mtQN3Tj`uAYKBK3UXqjmN zOXUR32lWzLAk2Yt#cmHle0|E4v5V-z%e0}d$_d908osh3_nm#EYLc0=irjDoB~)Ge z%b)}OQ?~TGrkS!@Fnkey$f%rvlqq8lX|^(LU@XRM8J6aqu zt^`MA!c$*0-FzK;aXGHpgqe&|;2yOI2Wv#KL&B0FD=n1!u+fsN1G#8A%hfj|c@c`A zyoEp&O~WhZ(XS@Q#9-E4oGO^ayslUY5 z9B&wD_#E{xY=vy%-A;_5Kcwl>^DYj5rK8S|BN4-O6~Bi7rmAPj(PxOl$+7UU6#60CBAZ_)+sQ? z%A@DSIwxZraLHB!Z%UPqF&C7q)_YQ#)yP!nwXWWjjDyh`xOH{9m=73M)jeT!4#r|o zhIIudzl8=T@Ak{+8i<7*I-3UdyNM8#`*5thJf~%`j#6N+O zRV~j>lTx(j#X8qwPr$JHJw4*cX(njCfP3{EB}DC2I?wl#Viw z^(HLmRZJFpF@s`1I%pT@0ccArOeUF6bzWwcV?6oP`4sJdVS(D45?50$#lfItiPw`- z=26It8@>usm?jV5VSr&N))PiX^-=!BQJ`co(-TwrMZIC@*5uB7C!wgkiB_?UnHB$s z4k~YAu9$?jW^n`#EJQItvbLwYPSQe)I>+6N74HTK3p^mHS9mks&gxwyr6<~`TA3Ho zL5IyuN^KKl+bXn4hn(qbn?@THIon>MgPneX7Q4>R3~q5$5yCxW6(JDGDndA;Dni_# zst9p~pp);V_Lf~gGC*^!i(bYqUId0%_><2rhA?e*n6s3{?r?SvbBeNf1A`2&A5OeN z`8-LjHMoWIf@1x|*j~)r2r823f|HnJ-M+En!}M+_!E~W`Ki-!e#0T~JLhnV~g#B9v z`o&DxfKXoXpY923`E=d7qkkrrIL$p_Ed|x>IQ9<~7T*DgQnxT+)1}-mlUq*Ma4Jk# zemOXVB-tda1n68!JWp7P+!UXclk`kXQrv}NX1+k@#l-aYphB zH#n*wqTQB`&f%7{3SyhAg7~beg7~%ZvI^qU&9VyO^6dyoRzakM;%alJEQEM8nz<0- zn9bBl{mn0aG^D&1|v`hotY<%jPv&_Aww{feIM^=s(%(>hPy zxVC#$_ofvmb*$}NzlvCC?w{JdPBo@HjbGo{y{2pBhMwMm<2iLye(IT3jvr7rQd;Q^ z@=&8gpSY3!?OG^)h_)ti6aJbdZl*(fZOg)2zWnv4juN-fU*cB$a~u8BCw@f#k_>-4 z4x_{!bYPb)hbk@+CPWRi#Na2IS3y%rn z8k`mj#2OrN4-Isqv0<&>1Q}zFjq0;)Es)ybD-mGz7ujbT>HqQMAob{2G9iMQIP?NnB@LS67DcdYfBv;SPvXClVU+<;I+(-p; zjxC%fj%zN=v~iMzQC>nl=C&++$02xyNUHB9~4GSm-$9sSrs`g(((N?M_wb)%i>XQ-Q7D zg*dA3CR;d_yQdt}Jo^iqy`Kod)G9Ek5z-_Z>3o!zUi&F;B)OzQmbSzZ`NG=sVFwGT zcF8pCM&Iy9q9Be!a+On!6J5^02*EE=K zA=NDD$8%z{_qP$w_BPHpzx_H|e&+Z;5xqd1kkANco{bYT-4=(cjB8Dmv9+GcNLpt` zSEQEudg3UTo|srHpxv@Rs(Pv`NsVgKBi|JY>NKn|*MM~&A`k`0l$SvY?cC?KVJJKK0P8)Prww^SLC7@=tjHwgj zh%g>RETn5Jo}_it11@=L_9v2UWjAJ=6f`=24WF}%la(Cr+ffNombn86RKnr5Vs|_) z>pDTyps3Ckdw`ntmjG%RFc3hX;%VlHHv*2;m>_CUP=eszpbqaS4w9HF_5n3390Az$ z)v$jeIvp>uFK)uxM8HipGevclcq^z`L-3~VBSlv1#Vl~N%S=(hO<4T*xJmlXaYV`t zu^*^eq-Sc+w}Zv=AUJ}cz?1_Bt(PN0=#K*d&EmJb)1ReH(|j@eTlYKiutWAcYS{sD zjgjor>%q%^A(?nP-P(AcQ4tkD)oG#~pe%_8P*-`M4j@n;XqzgkfMbC?h+2iD913a< zNs-i!H8{VVN{4w693UtI{cymsq#ZylV_5%Klx?4wccISUtgzow{E~?BBF3{NvfbIatUvLXDUS|35VovXWLf6Ob_qQvHA%$DyG}f8yvYk}Iwy6Lge(>x}1u7EzU4pFv{fAtroktNNOwJ>lvo z575lTR8snAzE6{f>2&B5ZS-%~S}_A{i^WX*HA~FGU!%k}^1$l2m@WU9!-vGg&n9iw zbxJk6>{3oD} zFr9B<7L@7yQQRcjbpAM~OEaDSl+d*4{7FF9H=XBg;1MP znkDl9+hMSkU0X|k1Gs2w>9e4Yu$KOk=(M%;Iou@LTKYRsM_Wt(0P1PtDdtD{5uQO? zd47aH0WR8)@Diw_{Rppsx;#I^tALC4BaC{4s3(aR=_cBb@K@ZCB|Hy_BK01Ef(+wL zxFbt#9@JVMVF`>0{M?Nkhd==WV+pMn5e{_T!sjGXP-f}v^bC3P{HbWQjPN(g7Smw= zK58O^J$`Z5P>m6ORVIM9@C);N|2V{B^tQhpf&NCdOZ;Y+nk2g#x9NI2d9`yWQvt-b z)YD74@-<0FVpZkcz)6hgZsrT5(ba{byW)g;r*1WyoO8fZSKQ8l@SK87w@6(H14SLh zRf$N~koBXY96U0YBxnYu-NPdTj$D&RwqeMkTs2{NB$-~~KFQ1_a8iP2D(#)RlcyY~ zPs)rgzN@OW^;NAFbWS<>5e}AAp)Z4_q!dzFsT3(wX`wH!%f@SDrVV{nj^`<5OAl6Y zUzL-j;b5tFMzP*kxN9iG(GcWwD5j{^re2W{&5czu--h8UC;cO+ugc04NtrUHwI0Gu z8~TcMUvm&$*1tg~mZU?NvXBg*)dH5v%0Wr{O3y1P64|0tDkhbXvZ8ouBqo)W*OGKm zuA(J%QLYVR$HoM6I$5qP<-iz%G#Dpi^-7hN<26)l%`*E&&htzQ`l_r18%JO1d2X4_yzrBAtvnU@oqp!iv6tVUA4 z%eG(^v60k#<6K+J5F|ULgJw)`WkoR=)mD^pa-&kVJf?R!X;eWhv5D9mKGzyP=!~l% zme`}%$jjR5?PXQi!L@Kz#Td4UvTc){oQZ8yXJLI}pnpp5rjGTiJ9<{HP#Ib>UvYET&uT% zl66t0^qA?aE_%bL94kW6j^cv=$-14q%b(>MVir-&EG@judtR)ws+IwUH8oF4DGYdC zth1>O1q^Fn-jphnYB?xbJ(83vaHh^8#sZW#jPiUQ0~l6zJSn9!&+}rPIrXoAVFkvU z5?52!)Cr(uJ;R$4S63H_RiI==z>`vDOUa8HcDK%yIuS4|+B_JMDcD^}7tgdm-5dRc7@lkMX%n;}{B515J zLt4exc&st*d6lKn9K#G*EG`I}AwyaXMm$D~9BYN*XLL5~tI0MRZXUyV%^Lr8MLx-R z>d;|dVP31B8OAF_Sovx}DZW)1^pk)W2$tR#mod6<5)3>5LL>u1nE* zGy}h7UpiM`sxf6}&|>tTxOB1j4jtr%=cwU+5$KmR(LYz_K-v-RN*6%)s0;>(mKz4+6IJxTS{GO;f8 zk~xrL%FBs~{S_C6O;8#U+9vmQ!y zo}E@!dtf#yVtz<=UiOI!IxpuY-(C#o~+=tZg@U7;jCyTWI9-OXGio~bVJG9|0M z+Qo%y$!7$dNm!%pYOkDx6%j64yV9(>sV8<}xTyNpxVcA|4?{^DGCH0>r(`IERM|ugr z2mu62?rIXh2OMv-LDb5B@B*lL=M12ZtM9gi^4eYmTv+`ps#nF!Q2>APQ{D8Dsh0s~ zWct+2_|xUFc&%W#x2gGNja{zXoi^mY3OFOvr!JhFXeh1)3aa5V>M^3`y-_}@7qyu_ z;YA<=aOjI|V*tlnWB{E05ZhQ#8@Uvo*r1>!igBPe5KuhY;WZa}l{DIqO+K?^quXLV#@#oKcP74XCN6+&)oDA$Y z@$U1!&Ap(gwuu=8mQU2U1^2b zDpjzE5tYsjE!oOX6r@eaTlVw@*6D99^)2&jVhMXV6qgQAw~E7Y zm?Hj_4s4hrt>G9t?`18X27ftz4}GnS(5S@YQ{P3X3AjsPUuj^w{6(d1SnQ&|Vic|zhmwmk()jWjC1?Xu!{7U@VshXG(8Ws)}vKgLYRbwz7#EoEMuL#1cJQX?LYuB$+{~u7R{qAX^CC zRgNPpWlJYq>(p4Q1uT{0GYcBQa@=b{y~GlL=^L@;xpJ2dfhR6y%9v4VWw2&cvNFV2 zqhcI)31hi^h9-Ef4fCoTKVQmL+F!{!YPEo+5{v+fpGJAjIi=Thgo&qV_ZkYnp=5?{ zrxtXX0Vnn&=}OHexh|EU=_e!Apd1ay`uH?@pqGt^C zJ^oQEHjBfJ_!)%DGLWB~oj}GsD~E^<)y}6t@d$fftR0*GOY=kuk)EN|fwA(CPe~DJ zew<)fF!Y3xaYht#Jsy-SwRuuXN2b*ejv7;sRdS$= zXT_;W+U(ZC(BchrNURUr(K-7p;i8{{-?iFbf5uB|!DuGOQcdL3EOI^R9j}!%o05It zO(1C#OX(mZN3E~IY?3B`SJ?#6^=Q`<(tz+YffhS5^nKjoh&#nSWZWr;WZWsv$PB>^ zD(;kHN>8KhHXj2zj2n^o4IvI|G>rHyBMh&yE$(8FVV7mZFM*?WJ{X&Lu15INkKk!b zoe~_*lKA(J!W|0pFL=r{atiz{y$t#A+#&T)iGAq}bCjnubtRTPox-iZM@Q@r9AiQl zvV&Sz8`&(`PD$$*=X>ils}U8ZPMhf9X~ectv8wTeXe2zwMbwGsv96)mq^Os5uYaLFtY(`l@;`4@WI6#MF56KgyLdf{i9 zF+KEKDtU^%^`%Bq1#sxn_u7|E)t4G~MSoOhh)uY3tT>4dau;>%gKI#~`4<~-#`zaG zqkWJY9QhY$w|7~=EouJ6HZuQW@fewZ@kp!8zj!$`|Kg)3735zaKeNAORaZyPn$7|G z%5O{8studhZ^CJ7N6&_J9hs;Hpu9Mok7MfoX-oD;fgxhO((#OXaZFxHT zG2#BE<%jPv(BOl@V_Y8;?jOItvwKa~$_+ie161O5DFwQ6BJ1hYZSlHV`nQi05j1ZS30sGi%-Mmk*O$=Od-ypQ9FxExa>oVhm6*EoLgVD}R_ zdJfOSMn@Azt_k+so@C?nvjB98KMt=xY(+JZTs=40Mv8eNw(~Z^nPTI_j1U`LO&r&{ zJ<-NVLfOOCZ8p-HNUn8zf{k>AN}%;dqPf7P*hVO?8*`3r z#*J`VZJZ>AC**n9i(=xqMrfRcQwbJ>`NM)-amPe*jnF&`sdgUv?TFt7^&FcG@;K^k zRhvVLjgyo^v3pMGV6JtJMu?-VOdM-HRjXXHg;TkU^0j-e+9C5i3dgbf$m9vOMHC__ zHE*niRNLCOclEZ5pLZi=)x0(m896h^1aU2LV=R!0d+8~D9GP^?K1ma)$=tnF$Bnj- zYDp{@4^RU+fi(vX&T9nHG)RzLp*A$K{Dy~vlO2Rj3H@VL{maCS*FV1V)D_*m8`gF9 z40O%vAHQ6j6wlFLBmz7SmF#!;=lAqaLM=(bzD^zzDqn{vZ*8PL1K~ddFG=Z9x z`2fx%dX^xlWXxDX>t$;CqXp1Ah`-R&Z${@)Py8>P_u`{;H1aRdA^`3Cy)0tvA;8=|efKvrm=ZKl0 z4(}*g4pwXf>TSeiI>;=W>P*pwHrC7no<;^|1rTWC`W(RV0&KbF>-%zKFc{g}w*xh6 zUP0KPs7@F2LCyM95H%<$2Vfznxniw1H7#c>vIh{T%C%F)BEYe#6hy76*X{&rR)B)2 zK~bG6b^$djH38HzRKuH~j~p(5pmg(H0Tjb?>g zMuJGj96M2dOOaJ30|-=s&xvAp@WQ%A5H%>O6T}{%W(^{U8Wfaq^+r&$UJyjhQBkep zO`v93KY&_#$s|GDRZwo$|ChZl0kf;9^6w?-boRBgvLql7L`6|SP;3^Nh)ra75Q!ln zJ#@}wGo2P;a6v~&kL@zrC^9U98zLwoB7;C9xUtEOtRf;JA~L9mpy>bnPSvejb#J}* zs;ay1AN`ViU*GrY-E)7n-Kw(}hFnr|j-%HBZX&&sFUkbXaW#9QOxW|NCxU_vE^h#} zu-rnO@m@B|lk-SfeH8l~0GBaU;>*UaY;R;VNff!5zjOjx*yD&NsW_Afg6yEk{REmB zWzJf#zkKH9lnsnq;d3dB=fl{L-TVU|C zv1;}$24Cfalw|t+)d ztg>=Eg1t#NoTD}zZ0#z+wVzy=;Q+oSqE2oE@{i+$R+Y<<=xoc~=DM`}qxox9w8mtiP4 z3HB)sa3d4k&e0i}SWgkH($Q+1X1V}s98nEKXk~&GR=EaAsctS5)r}~xTIeD`M=P&H zBoC--rtQj|IxFZnx(slM`qg&&Ur>vb ztU4`78Eg)3`YxzN_Kl*Jki-de6{zDB^8HF%N>Om4!JkM&fQz*rM63LjFBfa@uLWGJ zZA6lLI@WrSU_=sg!&JH+aIv-#6AgP4s3*~Ne9@7@Q|Shj zi8vVWF6YY#DA+7@3#diNi=qYvo5XGdwPiZ3`}Swp(dNQFfnfXH9e|6rwZ>YK`vih* zn|A{)+17e5sFQ82_k&ubt*G}`Oy_gxK~TrH8x(BdeF)UE=%;)!hSxh$CQ?k)JP{9+ zne+=#i(Deq^{p#ro{X@|iqEPpPB-*Ru3j%h8g@Z=R6Z|4Pi#ZKLcL>MN*cJXlnsW; zYlYn+egilW5uyei6nqNdlc0VHf7VNW*vlC2gTfH($?=r*6R7#i{{dRq^Qel0g8fnc z0BT{nqo_f_zA(>#TDWLM9oFnc^aRsoJ}A%f=U!!8oJiN;f#c{q@;m%e*gzH;I|`H9 zLi!7yS~95}ic%*t-ubG;&W!g~E@C4ae(`6>qY7`Nna$Dkl1J&2f}p%HuegkE85SFpkye|DwjRu40HTGQBiB#gOhLJkIWu#q@bkFO_sVwq}_wHdS(UJF$U` zx=MIlRwdbb=u1*1c?Z>!RgEtZGh#UP$l?Th;PPS-VTU zM5on6UFOwtR&W1$UQK{zRFy=8Y&4^W9m^S2r9`8!GpUM(Gfx~0&J)b)<>bRO2~P77 zl}xNy$x9YJ$3?<#(Tj`{)pgaHqz+gFu8URJ460%6&SJ#Sw%4vBfS@)?v#$xaD|uNq&> zs49u|tPy)KY&X=XD#5tdP{lC<(ZzYCtl6U{x--kNjiwqKcwQ}M{`eVAm{Fa+vd!gL zeuiPkE$b@TEQ(sAiY1ujFe*D$vZcJ9kqdFo`pMdQ>z_X$7H)g0I~5y|h-h6WqvV|7 z>OAokT~t-9LEc6ARANa>v?~rrj51WLf=G+JPOV){oB~aC5g(P3e??8$O~IW-zIgB9 zg<=QRMAY|Q!c0(hDVev4;$Hj^n2X zlBm3bDRFmK2OSAY(MbhT=9%Noj4>ZdFPQNvI0`VLX9|Qd(c8;FDe9nLN{QT_O@|34 z9m^LJxqURsL|dYs)^PGGCzHUNwd24x^eVv2pjEh-nPR%hv&NWc?SBJ_s4Idob)@zh zP>NO|m{PofrqOy(ir61WsU*6LC#U`pK00oNY~rHD$wl(?Hu82oQg#MzM>EOYGsu@vw#X*FL|%4X-_gE2o7504%3tK$uV5`FE&BXwp%}gNiQh6cBU&aH-O30 z>k53Xc|1XBlGu6$v7{;+yKAbAaKooBvo$twl0NwSb`km1JAONAr++tehPNjJw$5?i4%683z08?SOAFw;Bu zQ{Z$7UsKehci={j`s(s=(~?h1OH!s#xZ4{|GjJV%%O?|yUD<4+S8~JEAq82AHr>P6 z!sxB$SL@^fy*J&@zvZhCk-618NHg#|(}TD*$K1`_YCRP{^L)Keo=Ok#MeTT=LkeyM zy&O_-4?f8u1^C2=6i9*RkOGvuhZNi)CHWx*lhq*wS2wFe3U(T&4k`Fs>>&kPT~XtZ zf|4o8r_Cy)Xmt`qH!ycg_QDiH+Iv2|iBlXu?++67+SHL}v}A_zHK&jXHo7?phNaH) z)_wM42S4=sLL6$Hq^S}&o?>vgEH+`h#EqBK^=id*<2PM(edouMBGgODZl5DjA^oQl zbsyrj<4b7j!*LUu4#}K*?*8ymVw{pb*w=HeKDhJh=$>21NC`eXog3^#)PX%$a?J6y z$aT!={2Cuda_qkS;XNnwyM}{=o^{%%rI5t?F65kD_ya$ZCrVvqX-)7B>Ad(0Kb^4m zhA%3l2J0Lf!K6hc#~5GVxoOrrzaBjskS@IBBj_OMzAGGxaI3wj7H5O6?-(b+@vk#G zoA=`^RD>L3g7%cW`F!td;ZTGx$F6mZQ}Uzo;S~7rl+@Zae97DuRUIL~+`pV3FqD$= zx@59b^FSwv*2Y6O)A7(lKe=}{cU|Ef(wUA6>69_Ev9%^x;5xtctN;bQK|KpO`$Ea+ z?=(i6XkDX!=UwOCaLtEitoJv@!zrj_663*a+Txglq`R$LnsnBi0_|)+9 zaL1;Q#{Fl)D69$xsT%@9(8qq!snDeG~%Ir7<-G19w6fj)VICo<~hvx%7@g zW9qOyQeU2JB{APw-Sk9oW&FOmY4@Kqib!b@N*_DDKu{E<2!d?0c^#wm3N?S(6VM`2Dd;~p$v-C( zYAKDn9e*E0&?gXVWq1SNM68N|lMOJSYx3L`fZ(XkPQZz56$2-%eguI&v%HP=1Dx1P zqNqW^r#&73Y7v~Gs6oNDkR_mw4POt=f0FksAoyVS0|6J`QDUKR5}C?NzSKm7^p?&h-rtFfFbbh5pRm=bOhi; z^oW2nz7qcmY7r=+sI|Yu+d(a2LKHP9IJ>|*Kpo$1P_R*L8K|ezk$h3!csv2$f-+&h zRegd+KeOT;%f!9HSMwsV51u5PuRLj=CiTx*0?mOL*^6MOhN%mk5r{i6n{$t2v|dp2 z=T-7q+^4vqF@gNrPi$N2;YTRGFk)D&L^fjZAB-7dK>z8zVyM5kb8a|f9^$ny5`Xd_*}|t@H?faxAPc0!9|?M;5B%T zW93GPKUw$|Rr^pSs`hiCAN>BA;VgNws{NbMNZzy19LJ&dxK|0G+Ln+dxb1q&{3iQae-V+i7=TNT@NxedmbBpeVHPJ@R>S#IwN2)5Jy((>9ivII99K!e1*@bt>uQnFVO^Q|V zzmi_qEmp-PiB`pbD*M3}6DgmAIJCt?s*JH!nc%82DOP17t;*zEl?l6KhI6bG+SXSv z!`=5zIZj#abw&QPVC(Bs(rhDD`}WnU+HYY=v^rJ$ZIF92Rr~FLu1?i{7vN$w=h3=( zlWqAPz=di*GNo9w+D)rV+Ub74#p-r+M9w_=8K^D2QlP3vN9Ft+)FKQ;C|jbnW=6O3 z3&17ob{++_NIDUfRe2t}wx-8GEoSEkYU}jj%)!)Arv3>IF!t%g%CgNGsK)_UoqF-N zfLlP1@FmlGJ;|T5hZ8>pHdX6gh3)gKwv7^qtCkOTwO-SQA^ zpc;dRBpayOKpks$iMD9zDAVcG4!A@k(F~dh>O=$8OqvYpMB~^jnhNSzOP=yK8x3+$6#`s}fuJ{-0dL%6I(YPa<4_sy#4ALshQt zd36F4YEvtCKH4v)NspBBMyM zF3R}Kg_7#du$}mdnp72Pl2^yz~4TIsUm+O*Bzd zm8$V!QdKG~n~O^&nAqY5+{kbm9;2kYBQ=Mq32ky5lWV6GGht10e!*JNnB;JgIq3M& z9Kkf7QH+gsD?o~hN>x^Sx7W!#Dk5v(%_fX#Az(z|6iBHUtH2I4`PX&;jHr)7VMH?! zc(VyxdMRK;B@|4lLzZ?0rD$$~DRDQ4EA0kKQLO}0Mka{EquC1dTEN703hw4mqnAkq zX)j#j<_PZQFr)1Rn)b#;)DNnm+JIL3^)W}i?gL8E5(HD?Za(I9e^81TAKJMhrv=`u ztsc|qUjQSbc`zmJ<}*jTKq(S*FeUD0OUqk9DS~b=CGO@Bq(ea&*G}BcW}P<+CLO^S zW2oE%Wg@q!dIStB-_1z_k77a-dbAUsBBG5vWuGSXuXcWDJ3FR^^dwcy^V-%=(yL6{ z$4HGJ*07!Xov4xQKd4cCauc`|*aaqN>3Dz$FRmyXuhPOd1m0}C2?#L4PzO>*<U zNGPeBXmfN`A2c6!Sv3l_csHW*0liE>Mpr{Y+X#qEhmqq^vp9Mlh3L@AUUaKxe%6nj z%YraJi-`eho>ZU1=bBkIQ)Wnbj1qm?KSLb#l3#)h4^N`g{4>OvhJGDZxbG+37(PSd z-9IryV*L!&3~8sY$XN6HkuX~@LnhD#BR)gIGxgB7d2thAj;;_-lhM^S&>s!la{@QY z>&kTo?#BW*!YhpGxLG`Y)>^|G3hz3St(BJZPsRM2X4j+@=2t5dCVpn7>2m%ppHcJy zb8F`Q*r#)kx6^mrTf5Dz)>F}NUW~55trO@J@92>!&U0yg@}w4NUGiaplI?@Lv|Y+ z7`J-e@{Oz49nX)S*8QFhYgQk(deicEuUON)?l`W>n1QLQ*XqK&PUF{guRgwK<@$}i zgUh&$E&DO@3^rP5lfW(9i<~OvR$N->Hoo-J?fjR|P`U$U6X;HS>!7>%vZV784#(w; zaCA3+L#19lNcZr^e!7?cvVeRaE=_blUvf0Y62~ALtI5KWN-4OB4&2bUJCUZVSK#O& zeyEMs?4q$sQTzGS!s%J4K*qTsw=cc@>979fF$MC|0!WJoL`0ujAXa0>yErFb*#4>= zA3rg?F(RnhIKBaDc0f9_TviyMyvH{C$44yv`lP5vI4v$tmPRiW2NSN9Umvn@>`9Of zPOF16bdQdf_Tm%H56=*6L2`tl!|^7`3vku~)XXdMg_*j)f(SOX@FYO}^!d_Jow%WUaG>q*1K+yjpaTX6CLFhZ9rYc*VpI33!G5)*=%r)q zBfQG()1>}U8-L^e9mkh}wl^Jou+f_zpwkxB9y%ZAcB20wbUQr=Pofz~NC(@eBPUhODqQ1Fg38`Pr3 zjiMG!ZY#|NwY-K=)S%$aYCfpt<%*&P1t-4R3e?Rs3m18FhCdVk&WmuUo!# zxUhd^X<)tUR*}CL#{PA&PNp1+le~ZNmj9kR|5oTRy&sR@{*}_6l>IAZd`kP5v+w)& zuPp9a#>X&ay5D^Jm*n~oU57p693;)swmUmz=gq?Xt@X2iz8NRXvsmkDBKaB3+mQI> zEC1(5D$E7pW<|=gL3}SzfkVIag+E+&z_~XTCfsN-=ylP247vnSJj)9fO9_8gm*@D> zPtRi!TSI?A*(CZazID(G_|`;!Qx{ntsR;{i6E({v;|H++$)mUBV#5p2LjJ~&S;QCG z4u7`iKmDZE*VmBG_@%0oe&yi*g1jBNKhy5l>Z89c{Ky}+07Y0)=UR8 zosQIPqqpNB^47^id^{RWnOG7phAC;&BM=!6YquIe59BvG|OQF08RMS_iblH%2t z%agF9kEet1xs;M@SCl$h|F@_Tdyjt^7x5mCU;J@WDNCQ$Hux8$;?hSC;+=%*U|<~h z>E0!8X0-_WV)EO#j0HRMb8UCXl=aNkIOGCtjrEKkmO6IRdhREwoI2e;E7w)ig$JNd zGdJYA8VY)ZpF0v73RN+Aoa>pmgzI9Lz@a8(kBL-f=#I+Vdvl*n8C3a-nv~c@dtaqr zo6Z@Y#zS`w9%pyOVtSQyj=1<)M@To?7z>t5$4WwOp%+ zv|5LG3Rzi&FykYP(udC){Q)mGOY)m#@pDkbg+T7gv_4vYg1cPr6S>Q>l3)vDmf||x zC|i#6V5|CtT8IjrRX;Z~VW#@|p?pU5_=!Kp6AcSozY@8IC=gxoet|a|&Cp$_k}N{O zlv*ovA1Gz52&U8;p$9=JuXHda?q+S!&p|0~UN9x@=B~d1l+E;0fu=`rF#};n)H7$) zJH>qA?E+1|;)}AGIqIF&T+FQB_wcL3CZa?+hYU;*Yt>Hm4)gT@Pzt)B6c^}JYHrFOxB&yJ`C=eBz9j5pQpI&0wWo&cck3}CuovHs2NnB z*X*6)>aggIsI@goWE~2aB$=SACP{hKX*4k~oyOCoUt(%ulCV7ipGS0(M64w1xEq8q zpiTbiV$aEukUQw32Jw@E7&LJrxg5Gi9xY>PPa%8m51Xr_Z=04}0l0iJ@j>pqPZ4%C zx*mUOaV~VD`PJfBG=DLl=S9A)(H*{9(Rnn$=AuUXR_tfXd%$9p538N`OFLCtcYqK64qDhX|{aqJn9d0BKgI72^$S?|Y} z`lmy|GNHtIeQ2ePF~Q1(2^k5g1Q_NdJF5(i`BsP=4DZc2LRo#WsP-N7ah zK1opF1Y3_Ju*XJH3$#Yk@9bO$sq=&Sq&2Uds?;Kt%U0a;8sW@yaE3l_+bfGL^5Ecf z0`bweah#sh?V0c3bY5sXDTUyO-A&>M8X+xkk*=L|;1!&h)jvk%77euQzlMG0xLFb) zS_V^oYjT@f^0spDhQ9IoRX9}8Klgm5Dv1Lq7ZYvZ5^DU8+k+8|Fl#5I5pZMAu=^_^t4;(;B;PV`4v*Y zv{NlAImr2TBUcSP^f~!=hJP9qrkxmJONw1*J=M)AD0aWAk5CTWB1F&T^)T=?sNf+N z-Jp^V)(7J1VB>qOq*Zl#P20y^-?*U%=zY)Kzuj$x$)-2f8oN-5sdjMm=(xUdo%ij% z0mni6aSBs_wV^%gl-c?QHvRgz^6}6er=8OFk_UG!AT{!0klOZP|Dj_@;KH6(-UH{)2N|)(RuSf?|)Yd z6GGnAk`d3>a|Ivc(?yy8d;z3Rb9l*4Fk}vW9*3&$aZnVF2yS+#`P$>^N;+fPgDo}1 z(&*pn{BNra<*m&$6^s&-G(+umK^Ha9Pq)Qc!@pBs25(3PsmcI+4XfCDcSvt9aZP z0ueJJ2t?50km&z_)CxHMe6oC&u;6L*UesG8im0bbIPy$71=J!ZL{Wo+Ly|uPYKha1 zq6P(rLVp<4!qZ1lOMLrmIu+Eyrz`6096;Msw|(Ek4qm$N5eM$Ce07zIj6Gb1FR4jJ z|HY5CoJTgZAEt!k&!K*R3ez4%Enzlu>0_W4Ry>Lt6dX?T2~Z1r9YLMYR6umir~d|= zFxU!C$M)9OP^*a9i24Z+&ne6Y8Ld~S`O9g57G5~&Nuc1A@27)WINT^|P;m6_8K91z zAE4;kmd*tA9Qr6O^XXH3(IxFraKc6R`#e~*EUqHQuBMW$Hrn=U;z_IidPz#q8K^^T9W*o}C3OHf40^rof z!HbCO$Pol`d^L=O7XnT=t|)3zsZOD9fLd6nU}`=TRM??l0<3s|U`x?A0Vn&lV+*Zs zO;C7DeF>=JJnw)lrtyh%8K~pCS=7`M=yFiE(?xtyzI<(T0e|k5141X$rTAR(zwpdRA$u9vFY?6RdSfQ6>2m<+T+eP#`2J z$2Q6IF7%wn@#&Ujc2}qHt3)YMm7cUpEp{bp`I2+9PmBEzp(?LR$(N+Gw9Sqos}8RP zDN5MQ2};-$``q;~IiCEx@HL0qlVqP`L&mL-9_z;`@d(x0=SucdTkT)letIpphZWeW zNoFeOjjmunl@w@=mA#9qRrXGMlx0InO&Kf`vk)z=C@}=7%HA1Vy-e9VQ$A~D?<~|i zS=l=m)XB=;`Jhf#_HG60WM%I*ppMnbHP8I_% zVU~h=A-zQE!)!{l3RyG2U?G| znwMV1HCT~{Fv@|8s!+$Cs*>w*n+o)->jX@%<{L-Q30T!kp6bR4N+|VWx{={LKOlrq zcrRNs<&)Wl;XO=y__|ICovynj@4C@;G^V|LRgyxdO1I}#68_QdC7;vB@O+YKZ-y&H z$#am8l>Kig9!b8JxQG@}&j zL5eGPUMZE;Lp)PWwF+ezz7*wrq~|ximDeA(p_J>E{UQsNb$V7l?Mu22Tcb~h@PkLf zS6tOh9_J>mn8;j2f0vcGB1LEAceJacC(nAydEw+ls$vO7FiE{7VH`2;=lS62xec9{ z9yg~1RjS5QU012tCxydU^~RTCC`@r`&-=-|Y*tSd%FtI8DBH6-Wv4KzBL>YWjQEP0 zRA*wyD`YwZnJP>slu{|GSAoGGuUFku(kpPl53ETw)+b$=Fy5&u`(EBddbaSUQJO(n z8Rk!ti8I0fUstT0gr!zumJ}Ore7Hc~UxowM3%KDn)w$8=s|W-4a3c%ydgV-0K8}Sl z)U9OXx6L0}eB|%~5pDyxqzDdc&6lFWqBu?_jK zndzk2Olvx2x!J0*kb0_Adxlrw9FWfbRa7CtPt=hYhk{Zx z7QvJ{>f#7ciee#{Qb%0;D=0<&52n=77Dt0p1aw8|Iq~cVoZP|6l_hL);LRq!Vi{mW z=nkgTu@x&pDY9`erC8tQQ8y?>cnzdfhRDF1jg71aFd~F1O8fLX={l1VLm9>bpRYDC z-0UR!I<2XxS@M>t6dzU+4^)9;EY_krvS5^GOC)lz*#cS*5|I%D>!u`14#_wHlp@Ln zQ|fSxlRz0am9!0aIVk572{gTzFIFgqs)pydI(HJAFpN|16cHN&DWg)BMP?~eW~Be* zDrKP;ACb>G^kOsWD!g-GT}{}<$3Q8}Z6IY-_B<1A@kzi4s~QR;yMEx!Cd}eAzzF*p zOo_X@rqCIn6y`9HGBSUkHe- z*2&KbCY{fh%zpbR{w#L3#eCl3Cj35`&cp92tin!O{B~AwrKleW)QgQZI*PCt6ud_b zVQv7kYY|G8rODKj}ClSF26fb&M?M4~3iBD&d3k_B|j@Fz)l)VYX9v>!u``kHbHrUDX~ z(|2S*rH5+`=!mQ?|7#Gh_D>;us@9l7;W-;<0r#S6;6n6gzT)uC!h5pHSl5S}gh4ax zY`!4T7tF7Qk=DF-{)Bbqd#opHG{2hX>*IhI(S!UOuSh@Viw=!kL_bqy52H+0CQrt? zJNQSHvF?6+l8klu#2M?Pz>~2K~o);&8;WvqL&H8Nw}UQ23Z ztb>G_e)`v}dZ&LG0kL=pSkGP!4gqWS9RfDsoN3szhST7QNc{)yG0rXVM|F9IFa7i< z{@b&Lo<&&){Tbgn=sCWaI??ke+>8Fgmwx&y|K$km7jWT&NBFXAP!NPeE+cGK2s0Ey zyMxgA^~(=^;=|iqE(q!fM?u-FP{z0@=4?j9aEa8>2(8sc`<~90g7#4BWBdnAssUzF z4vE#KjHG*Rp=wu)gEaJzPUGex>CS5@Gz&=FqGr6&Hcl&9Bc%JU*}>`jmOjJ|IQq0n zYm^H8*Rzo4ftXfolx9J3M`?_MGL$8AcUx1Z-?%kmIBA44*2T$=7>vOYiLMb&n~Rgh zZ^htC#$2SkA zx*#e2CZ2bVaHb6(M--!taHhLBPN#*e2RyIE9nQv4K!IQ437P@yNS0$-x`?f)2Y3?mkgD)WTsdP(UWQAh+pMw%$e+ zb_huhC7K}{#P`BZaY4R1`_x@pCcQ zYg4ai)6^FJYW}{YGs{x+8ve%Y$7}gAU}Y)VgTHT9o3&0bqR6u3I~E!3&i4`s`W3^X zb9dFmq1R^w8G>Ri*zJEW{zW-$1i&e34u_H*HVO_LMpr9!0#3Mq0JyAmnJfK%Oe}g& zJZT?1Np|3^S!*;k{eLBZ*wmw;M!%P4A4aJa*Ppl+wV`646DpWncrdu6{; zS>(a1uY8O$#fLpWR(tp%VxaN@Ctzm#IY8D{2bzZ)yR&F zok;JH*7AbgHIa^y&!{{rXy1;iOr^K-MeAvA>bXTlLEKJHGkaZ#g7_U5vF7%bxZly- zqQsy6ro`H*6}+^Y7g)ROXoryP$g}6UAe`#gmk;0``B^6aA1u6=Y1%_Lc3Mul#c~1)m9QgtzaltzCue8g>HiTN*8A;)Omh)P%}W}T=eBSy=Z z6B0=*V-$OZwdAncv-uab>jvU^gM!Zoyb#o~uSE@?^8Wb$GTn_4FY4r+F zCrhhWf;wJWrAwKv4}>gsUd^9-v2^j-SZBy*D2pc1nfP2vM*8n4b!4v7Rf+9c)5Aq9 zpWzpOl)5bHwm!{Pv}XpfS&lv}JMmO_mPQ7#f}1d#$Pmos_Zo(m@@O0AV(XJ46xrsy zhWbVtiy?yTOIK}17ND5_QjA;7o$ymQ^%VPGv2Lhv7Cn*G*OXx#t6}VQwZbBXhHF_2 zkO8u8$|B$v%4|0gaQKSOsYZ^=Dr3bmn+V-J-bKePRwKejRjC^3J*rA6ii>#jXH=C+ z>NI-+r`f!?C{0&Eo#se2Md7yS*Dyn;8Ii}ik;`itz=>S0Mr4fYqH2t&njI&%H7QSew+3-zU=<_`MvmbUpUId+AvG>L_7Q;yP&G#JBdY z^tgZH8Or?|M9TdepV<9d3bgyTxOV%)pGH?ZL1Var+S8~e+cg3b2F($i(Pdd^Cjl9C z#)EbdoKe)P(cjtWVpKI{)QmRheV^x;+Ry{k*_m@nFDQ5wz5*`;mW*ikmR?ZsD|wYX z0Xk7(J)-IW?ddGK22ZFN8=JLJ*<7GJ3en3#}8Jls72cSA_Zm zr1S5laMc_(rkJG>r5Paz%gLtSQ$}FqdKppawX5pcqnBluahEL{WBdoOW zD!R*H-3P3EcUqjwo3s{+J1-qNutsoUf{kX#*^Y~UyBOiY$+`&S&4kXd4+Jc=;5hh z_i=+`+*r2G|FxalLWW1q+N+`Ua|3?dh?UOo@p*9zzkg=1!=5^`r=-gzR-K89>zQ>dpo?rp z(DccijNKz8`Wof#$VrWojAQoB@57nx_>l~y3{qWgMjEZ&C6}QYx`EHf|mZmvgeh@ zM{jzXOP}k!KT&>IIT6laKY}6xxNTI8Rt`Y<>SmK3f~kUO=r|PQjwWb zPzx^67VjP|F?}MJ)<}NpvKrC(s-DqIN)j z$6k*z*`?%(nLUcE7|n8MfcDiNM@NBL_MRwereOWV(M;Tn9YtkxRV@k{t6ora&81~{ zLdoO!uS!2)`xie4jl#Y33clYpgQ3J9|C#UHz7#y(o!i;zXh(juy>k~hgdS|CX504W z`OzTmo*fTTmB3Jy092hwSCzCNi<`~!__*s4kbWu^>8cWes?sDR=|*0^3c^-FWY8i| zVL?#NauBxad+X^{;h$WnyYaC#AKm}7Q^I?W`z=LJcC9ziy_S&5M?#49Dn<7ftG&YU z6KTp>Cj(efi{R5LiT)}{-3(2_j*qKR3PIu)RiZmj(ljSDrV>qaNm=3OO7(hBP*&WD zx2J6f|Hu?p9?4iFl6@mP_T2C&SH;vddf=S!2j-SEo8xR({E*GB4zwL{*nx)}bikmK zSSa)LI0GD?h%)iwQ@jWRo`^-5vl-Nu^#TP`a60TmcP^-7C6Z`KR*Nvx=nH_0mAAB; z>}>insN*|IWW5eLAJoD*M2G|2!RIhtCU0H9pR*K1^hG?-(jf%N7g{ASl`aBxtb}iC zNCF2M5FA(f4ZtM}hnIjlSvb5D)Rt~1u;!wwnMjv`T6V>lahpOHGo4P|KY=dCLt?dR z3F;;Bcy6OB04KX%Or2x(cEj8HI9BL&=B3n(U0)CB)YFg zspF@5x+<}S`G4ag1Pk-UA1qt}hmi#)WD%70&JeT(J7?$C*2iI+@bk(996nW*wLh;^ z9=ef*0_jLRCGljTKuIiHtQ&$A1r*R%6>xWXH`P63F-71=aW=@SV~v_QHmp#F2&ojA zE5$b4_Byl~#l|fg`Id+vLH^h{c%g|%h=qs}RvW}lK!)RtcN>HV$G-_F; ztU**c0(d1Tm7!wQs1);R>t%Tb%@(U_Tv18`XYDq6 zE~ygqQZ-&Ho?cR+)poyS+*CicULDIEo3nEJab8vk%|@8y0j$^a-Ri&N?3irN}0Mly-EnmZxi1&^YOQ z7%(Dl1j1wvI{(Fl#zE&)JVjXYz^B*&%>k7aZBHA095BLQD;TXSsvW1RR>;7cjYH0- z0VC{kXlrD<3Wm{+IHvGwEx95mqb^#%QU}lM2$se908Q7x8D~XmbXB z7hWOw$=b>0+n|&!J(yA)Y$niYf=QS2#W>h}5@oXc$;=|E75xZ?y8rtA=kdu zyUTd!TnTvD>>T(d`)I>SHZ)eCkMhpBjtRv(XEAH*uEtZ!YQMY@R`3sQW0Gq?GM9eD z7f)RJZAyptUi|9l`%vNr_uMHOKu_opo}ogAK%_#4@QFi*q@ZzJ`sgxA^b%+&t$gL9 z!THcm0y66C4DBp9qsSJ}%LQQ+86nyQ2%44Pv5)q9(?_9kAa>3hda(|Tz|$)?Q!%6`OL2~Zw9}Qo3M_o z;h(VK!5H)o1{ZOIj^$6Iz96qOaK{UrnZ%-l)TQ`U2^J>x(o zog!pEHe?ougrE7=HrzUgCh?_ac=Yq2m+; zWy}RCJbE7;9{nvH9=)RukA7r3M%tZkWCcnWOU>OXLi))0Tr3gNEq&a8fiZ`@eD$iq zrE{7G+7CS9@Fg2pZ0H#*pL`C(mG>CdmVx#a8`rO0v1#>jgZ%^Jy4Q5C?OwNOkWYkb zU$JTZ+U09kY#8inOFD*CovoQ4#kzT5TK9W4tXX~B>P^evy<$!Gy5qVByT&v=iWT-r z_~6Ngx-EArZ$k@lX`w}Y>8I`ZF9%3(kFs&}5`62R9r&_jC`&oHBY&fv@Mkgq*-Sh0 zUkg=`t)3Cey(I0q;2WbB2dPsXD0x_+ zMg6tsg3LOlt*X@~J?mOsq)V?Pjv(D$kW}a(W?gM0^qtae)xyzzH^#vk%ChlD-|fY; zGP^ZSq3^`IP+T(XZfms%NH?b01vyW<=DGvqZ;XJ*PHTfWvp|E4cR)IS(20=cUe#l* zhaa-rpxqSTiz6Ox!bBJ9Q+9jy%{r~lk{}aKsW2=gHQ`*ONe@m(rQ0xjI0(YbH)_M2VIXL>8jPB7IwNq1tgt$ISAHjVj!^{Da{k6V(y@G@75KA~ z|MV-~sL$w3mvN!uhN7s!KQSNH4Qk;!6I zU!tf%(KVCSfLdHwgQ?knvyF~pI_;P`me%1R!fnJnM0WHD0%K6y061YfggR41+fyU= z;LoQAdYq{^3cZ&f&jR*cT{wyw6r5-FgP;~;Sp>B*;wgg6#n|eh;!1#_me7YO^q+u}-8BNv7|u=w^+b9f zU&QZ@UF<*1pL<~<<-t2qKJzxD3|$fR%g)ChkSFjapp*(xPk;h=Hhlt5DEUEejnb7p zw%7A~E@H3ecksovn4rWT!Yods+w#x#livjCm(THh1yK&7WsHM5`ThxoHRly z^6?#`wg4C*KLP5q84MwtjoW(1;bIvd5DJ0Cgl6>sbVHD)!4|r#HZ6vRJ?BMw2 zH5o8_WC z#Tz}aBjSM~KR0^dobU%0#bpX+`k3X97xZ9zV1expbdT5vBH)ZI>uyk2ClTKRxMYd= zeo)7El$MAe1a*Q$d?(WxiTEKrq&kWCVZh}Qab_vBCE~J(B>r|IpsSI$P`}8(;)>+D zn#cGXzqG&R3q6iMzu`aqqzH`T>Myxa$xji~N?eK{$l_ps!Dtf64|)GyK##DzPbcw1 zEwLN2C?Hr|d>U}|W&N_yo*=wxDgTdvOP2DV1$DBN{~V~Rlk)!pxMV5+Z=jw?&+sLa z^8d=8Gb#V~@)=ToD?KWoA+NX66Y`l|T-hA^qUjRmuWbsxpS>m1^$FZ1F6~>N5cgW$3GFZ0C8kT1>UFN;xH{Qi2*GVOn{rRC`9H zXdF^3^14zT{p_hy7`}2D`bu~MTPZe52K>CYtT|-*t5AlDmGl{oIjph0pNe*Pk95uv zQsx~r{bed;<`qg%r3zdF3ggFm3LPFLm65NgiC7!#Q5$*xfxKs0F_UyncxlSNq9((2 zG6+?oVXK25 zfV=rf^9Uw7Mw;Txpu4`e5Mln2|w4U#I6B|aDvj*OqEz_YW_ON<{&p`&9@IFF1`+0 z74|d02w$gQJOSV?rPA&M-fSFQ9s!J~z=A2YlgqC`DJ)emrFL+60+hn)1X3#J7Im{H zgx>83g`*jh1y>ci>(#=gcgSxLv7O zHbGd+iQ8EHbq`2p(Q|y!vDU407s_NWaGL3T3~uAc+y|1`^a38Elxeo2Y%&+KqU>Av z)lsUUM1`shOpuV0!}`{A_j=+=Mps&<*F%Lj%JMJmEg+-F6VVZZFp69by-g5Ck#C`+ z1Ys085jq+Onz!J2Wtn2Kt->+IY~tH3zt#ReNzBP_+sr5N8bZ@7JsxbS!xNZ--@4iI z1n8%wy-`nK3Vz|{;R!WEgG+CXOEex*azO|CjOn)(cH{nqNJl4&7b;)x4^m{9@#< zD&1SYHGePZ{_?M?7QB=0<38wlb8EIb<^1aYxOEo&3ttSsx-ZJ4m!-LX^O56cewW{b zTW8aOAeUF#lW6AE{G$rO-W#9fjB0%1AZ#h{1Yx7x4Z_}CO7b(R=cyp<*Xkhb59=W8 zP921OIHIkyAnY++WBftbG?#~S>65Rgd02bfc0Og0Th+rRiXIWvU^R(xArtMP?M2pH z&x>ry&=2_B-^I^dS9B&T#$S6K%9?!+Wdq~ab+10YXXW~hy@O(c(e}Edx${`-{0?{wr1M^V^5_cwMl12>IR4X5tN1UEc{eUi^lyAw1{1k7 zJO7jU7S{q*cM5K+gPZjSd2yRvT-Mj>#XA6J%rJ38y<_9FP`MMwIv^%$+1r?MCrZq+ z_&3-%O*T%48mu-4XXti5r}}@s^hlx8HmkvEbvum*OS_bcj>AUswP>P))cKK9cWIe) z;1zzP8Z8p_NF$sHE>6ZVyFI5{R0BuMiZ)KOr{~5yI74^Nh3EYH{q6Df9M5cVtFUo= z{nqZ_bf&aNJW3kjjB{~P#z#_Z*f^@+HapA1TnA_9LVaK`#s_N^$9!Xbs69YP&M=SH zQfdS=&jq^Zl9zKJz&tfT?`4PpocTo@^$NKSn(yMA_p~f{;W!eiv2_v2*L7RFNGUDa zCIn|27snnV3hX)A@a+-u_1qj6$C+{=IMQ>%EZRuEmuR+w)On?xjJ~Mwvew*_B+Gy> zz&4JvoGw($X@`R|^ibCizw*>smlWoL#%b{^r#!cXsW0QWb8eP{(|L_jAs2A!yhG9= zu~0NZn&~2CVHC2Q29J@LTx=xY7|n2zF3=}{#Vp*S!?kgoG16P!bO&eXPTubhfA$uC z-}x49nRTL+wvn7ILUTgX6w+Rr6S`8)XFIVl>*|dXLY{UgzOhc5G|~=En>ufKNX|O+ zx5>BZ$$Z$cE|Q+%J32^1xAkmfmf_3-l7EH^m$g$7#OXLaL_4`4w?Dk(>$6UJxB#L% z&NoEdZDOgg2guiLlO3GSo9tyFU~+dzw~6VcCX(*9Neqk4Ch^EzHzsS$3!EXsSeK2$5l=p)tEq>?TgdEH$2-rIGwj1`oxE~x%{v~ zr`2wc8lLU^NbY*Nor{!3^Tn-li;76TJ$#XaH1yTk;Dg^1+$L~83qx=gx;QDk!nPqe z+qyV|C*fWFkEr&%q=@6p1^oiO#KpO74{WVx7jWvlKnsc>z87eL1JZe>cfr;m#btD$ zWxtK=sL129RT0W=kKCr1g{>U4q077ykw)_gtc!uuNC!PWT>^E4}uYhXAw!C z4JzVd&`eh_*R5O(zRRDC1(dGjZ>%r43QYOc_%p0OUAN5oS;OtoOBT$Qo98As8X(F>l5a`I5Ho6{gA}L2vgMtG$ zZUVK)zfshn;M44X0&0tIIwMf>E9c|B8#NFaGm07%UGwNZP>b9cLERUesYLU$XsMSa#Tn!Xm9rPHeMc#^NewS>(5d=Ds(JXo#a3XXC zR8}ptyyOU{6a@ze&V2M+z=`Y?0jGUvX3$fh7I`X|nr)uKKn4)xFC8HG0N+}1UX{s=gctb{tV@z{G_p4KQ|R=9;CDFs00Eo7Lk9q3s`>=kPM@*Lnr z7K(b3cy8@Pe+9M3H#I9yf989v<&7&YvPuA4*16(h#_5dyCKcDNUw;R5e6NFoGYhr+ zj;W{7GyD)WRe0ckk0)AlyzcUsb!wL|rxC4JuTj_bG!|75kwA5YXGbY-4g4}aDRl;6 z*LKv7hX}tP@em~;bSXKLU==X5dA5L^Hp6dOsG41dUt8>gKty)}Hri2p+c;ayZ)NkMPihkBz#c50 zAh^Z+#_zUel@)_xiuuja>6;g+j?RYV=aTu&ndVwWSTMic0b}AjUt4&W>Zk}sQWsIB z(Of7P;8I#7GD;(y5ir1|C^Vez-v`Ic<4^J%xbEq1;oL(z6VF(x!JiY<;dia~1;Yp2k8 z(IK=)Xh@8;Y$Nn95+oEstwIoD2vV(On?!@d@kMMo>yyvgTJ~<#8@8{QR&yeJXr0E= zNuaLIT6QwvlC5R$2X(Tw>=aOo2pT+Itfh}P-~fWvY##!gNTLyNI_SQgJ_71CdM{s8 z9r%g=i89N6Rac{$*>jcj$SS~oP>X!0>Jz3QjWu{_W7~ZCDBwiQi-5}vgY#~Jz zTXQ~QhA5RNNFLWX-_`#Io0U#v#MuJbhOx{SRHhS(*8Ulpx`g!(=*;28okevfbK61V zJG>CJs47)sPRobX$&1M$XoZxz7&wtVY7JbbdK!ViH(jZ6YSYC%7hEV${%8V@1oVRLCVN z*)pBM#5 zOBBj5yF`6sb27G!m^l%SKs;$)F|&LjAg>^L^{6sbOcXseD>fqGr@BtrYQPp(dvTDj zs7W=p>wHS(qa@wKlgueWm8uG7jUKfMqF)0?ts2vL-a$qZH3yV9B^Wi)!`V~XCp8Q^ znl`FRRR!MWl?r_QMZ;+KmCvVe1mbkFij{Ua;r2{r73Y9K6kViUu~7-@&8y|S`+gR* z8qa{JDv7$ZQ7;WUSU9Rmtb47kE$bPPxME$OMjJ|sUv5`<9fc!bRi(6{-aBN3{sdPyGVDvY;fO}5_b)FC&lA|J_+W<5OF5d@2AV+*$ke`KTe zm-9Pch=i8x<0f3$eE7&n^L)Lgx)MV*T9>z;O57QCCr!20syZv#ZAMK`A=TKuYC(5O}i*XnqDTqNfa|#N8as{5&W{ofu4s zyE%~g1yG94FObsX9OTK!t(-UT$ok3Tfz19DP3%w+*=JA+vYW=UQhyr956D~?_y;|Y z8z+bt6^Ckh!<$Vs^F-8EbX&ocI+A%BC`I`cNSXJed8N#U(pzaFm}de;6iR_GCVF`; zDC0T>cXI^tWWl5bxQKp6LGxGqt5<2<-8F}{0i|e9f+=w~r_o#lN>OqIQ|f5tmw-~V z5P=<~jHQ7$n<(X-03$kuzzQlWbTEvLPJS6+L{AV1VJThM;tGa%4*Mv0|6-#TkumP+ISkh9+XpPDPN4&#O^2)nI`aQ zD$+QxwK~dpCcOeM+tZ=Ah@hg-0#qCTmcecB0*Arlf`Yk$+idz zt>TMHI^1KsTwJeQE`G`TsT*>P5_LERwSo68<@=RdG;&0a$j(y^iyTqAD4oEq(B7rC z80XViB&SKDO9W)pr4G6bIGT&+f$%Va^)t}R89rT$=>(n?GA*M6-FtPQ`$>30&HVI1 zlO)1hy*x>5fiClXC>YPfV`phMxE?9)D{_*Ahndpr1f(=c?CDOB9KE7xc;r4U1dcUH z%1ceiB#HIMR?}%b^~=;^OrB<^4u6t_uOuQA(<4~X%G1T}P>Pnoi0zMGx?%+JWrbakAZ%1EB`qSpCrvb zKC!E!6nN6?qufoi|4Avy)9g1%ntj$e?8XmXdS(l~8rS`Gmi^ZPO=a2d8nc34hp&6$ z&tCketGN&TDJk}sPpgw+-*JCzwexoCRH=m|9FmChb2<~JNl@Sqe@{-r@!eHNZ^gL; zgJbNGSbZT!rI%a~eGMx3A4WH*k{gNVw?-ZJc0G1JAmSvQ96w|mXF;pm~M zkv&-ySv7I=6mWh2I)CoX0PLRv>`H+DJT@iwD_@J;oDM_R-@o0hj~=_9ngQ(ZY%jfI!L-j?pXmz6QRCcQn$#>%G;Ux znwE^SzBkCtH9Qpk29?a4J`gtpa6CxKVCe%X7%Zb(Qt~{p%jiH_+o65TuD|_avSuCW`(3Hn{g<``<^dsJav+;aEnSVH4aax-yAoI zdS^6_Bor$7$T%(1IRbPNb)8(nUEPZNbs-nHETIWbOGDAk;ciRt+8X-u7&$ehupiVJ z9+?Ow$2B!T?v!&+2yl+s2+dVf^4as@6iz%y$^TsPTlBp`g%cdE+VF*+PT2ch5j}@J zyX3m*Ol`gS6i%i1`M&*}Yx?{Gl7Bmu2`55MBgN0O=m_*?mJ}tJCOCQ*M_GcRtC=2Q zPW(k2Oa3SX1=v7YHu#l%*2c-lP;cSs0$QzdHX_F$DA+*x1gM2i6Y70LeaHfZo$$7t zzEXIuC^&{-o7;_u1ss2VPCoOK`1AAfnRyWwp8qJH z!7{`Lq|551>J=2hZtSH^PjkP?rXJiX4*!o0gx2Bq^QaYYiGjxRsSVW8fyT1;MzqeD z#M%KT3#p^}udk2m6JsK0dL0jHtD|^y@y~hh3wh=@^Qr-gt{F5L)UwA$j4J2j9>a7x z;qy$IiigMs8u1XFY=byfbco*7LcD<5M5zi)$=Fi9bJUC8AT3EC@+`-~IyUTuUhcg^g0#{PT!uDU$jF z^uFir-|n^`W=Tb7cy!Q?IOx|s+$Y&SJN-DtlR4mHE-IUnyy38aHRKJ^-0kE?D##mI zi&7*gM?1twdZ)QLCi9LMd9Wo8;fkg^689_GBT^)ffBpcUvqV>=~j@ z92SZF#cKh9_U^g+gT_DGe3C36uiEkP_uTn6KTc^o%`6}#Gs|Bd zTl3NVKjUvs!Eh9=vRM$VvSH>nTCDCB3ieGq8eF_^lL1_OCX`1@$-!EN3_*_fVDb4F z5fGFpy-YrXU*sR&iFzk$J|@yiP>0HyMs|_4Rk~>(k@O0(UP;HJ<;?N43UF~kG4xBI z;513cgF05mjTZThSi2f<$ztsqP)DcRi31Dvo}5dv^R-zcRGy$f)O67yWz z1nO96JzB&zXGy&qaPd703O-BfL{QJ9^?VVHHcRU#@aJCXJk~>O#P8FIXzS! zr9pl_o+|zbG0TzctT6=QClEo9g}0m{EmRuh56Wk)LH-cxovcAV71Xf`;b@h!KG3d> z`T-ZO_EP%i|B_}iHJ@!afX^kB&2}htl8hatN^FnUZMle*IQS(n$=JyAm^yBYlRLE{ zgBS17I)E+zipWecht%|r(3*o5=g^%*8-HFQW*wIy$Awn-6vNq-8b}4RRp7mo*DLQC zuAJR(=%@-9+`yVt;|HWGlZ9m}*4Pg9&q~laNepv>%TV4!dJZW*+MPjJ87h{<`o?(} z6*@}4Xj#9>SJb4$={qVqKc^q>hE%9bHb#=YMS`MDeX4R-3K}w{T~x1piq16N&8=QX zzqSB0adCIC~W>fSm*>>|4a!zfkC@lsh( zvMb+eK#IiSJjD}+oU3l?M;>c0zqNRx`JNW1$U~oeekFuZ*be$J0hsMr4J+ z$|%W#{r^q`rLggVl*+0Rdb2RYfj4J9e3OA$@#8Zf5oRP9Q~den(Z@kKgU-Z7n17~IVhre84WOSs5Z8Qf~+zjr

U;|Av>s2HMxW!03ixzV9DGJ8 zeBXv&9px}e>ZUjtU9}K>7k-3lWR&*ZQG9PqrJ;U5;Wj4_4#Y4Dt0X@tY zwb6Mp8{7_h$!u^RK1pT+eB#UoQsBvKfO0pp!Cg|4XEtb;%mz!}(5zA$Jl3vK8ypv# z+Tf{A{==m4yd+Tae`E@eQp>$=YwUtG#d)}Cyb*DLc%FS?f*>`!*x6#eDgvIt6?&YP_=)Oj|snI*X6&unr(6axU zL2gtjHN4#@xk;r>Tj);nOU2QAd;eSOYgEd?Oey&_N@gCX^YlAgNOo`|+`msd#s4nV zcxMxAH=S3%w)138w&TYs&F~I+W9u7abbH)n2SY!phf||HCHsogZ+bIwQyp~5RL-tzKAB~Qcj8sw%4ylq z4eyk}3V)GG#(Lk- z8-=ror9*0zW@BP>%*L>sq<8-VPly+1GAuOCjLD=UA0-cYso!$gEVe_M? zLBWc!C7_PQP6*He1fOAWAmG~R0KVu<9~0;;D3dqGu_x451!kEM@WKVOJJSV5M>wdR zL?HyG(f~)#u@DENS;BQk)KA;KX3*iFh6YKuE(lv4BoI|uQBqB(BLOE2brdxy*obo! zsI9QDpvo%7x@#&O4Qkgn3B*9~f6<)Wy?xYt3)gIXB0C~8n}u+M5x3)2-r z9UY3LPtBM^{|-3eykg*H(xFVJShlXMX&oLS9F=+qo3HTC*&+%VSvcj7utpK6lHr#1 zzZ)1$heIu(cL6#!?oEfW&8JPE7M3Qe9?GqN-VN$Gw1zKoju?AOEalJT$ejOE8fH5V z=Sk?K@1@s()-lVX#Gg!sd6ySy^!FAeadBvr=%TIIT9a1DfBWKA5|>Q7PK#>jZ&@nm zq#%Ai-zUf>>u)b!_Tkb?!1)*c7>tvyzfEaTNq_5%kzarN5JbKo zUs@O=zy4N*=p+i}$PP3A^97vRBcysRMcMG}Yd>+!;%BalK!UO%Ni7YaYd;Z;q*Oxx zd}`^cl!O12n$=2m;8iL1MZB_AcRuaY2pB4=(&=weOE0NTEghXM8@qW`ddL*L>V;lo zd7ZtF+moUvmh9i9{6Y0`Dlz_-lw}Dy&h5+&3=nrF6$|jA*9e}G&D||QL zlC{G3g1S1b@cl9r^i#eVt?&aVvs65FwKLi9Xx+|4dI;3f`lxu_4j|y%2RLEQBQ!Dz z+BS(E*qVL`IN{J^rmnCD5%tqy4m0U7z$I(4e*@}Rm1(r-`c?|zrx{H`f}jxoJ)mP%@X>m6&u*)@1(;)XAFcrav-uta6pL$&WIsKGu2;wcsI%`rWxS z2GsFu5hys`stwc&=oeBS-mcg@c_)8XXFtZ8*?M7^V|RiH{Lr$7_(OQEqX+(xDzSCO zAK)U^8RM6K%G^y!YGfUd%Sn-}&}3+n+{`<9vJ!-HSKywU*Q>Q&lB<90+)eR1Y~3wc zJ`g7hP(FYI;}+3Zzgd{lAb=n&stZ9(^}-C zq_dQi%g{yDxMk-fXHr{qWN*Gxf+|(z!JSts&moa7NQE*~OymPweKsl%-+8s1o{>53 zl%Pr_+k!2^XD2!q4)Tli4cGN4CveDTm|h2xl=YE*&`{QAJ!EAhL2)q^k19hiRioS2 z)hecxS=>`BL6xfVPWSW`97cStgn+mY1GrNwLAk=B*XBjs$=A{Hs-bQm$dY26G17u z4Qb^*;>FA9AF>bSG*O~{2<(z9#AAw77L=?|od!tJ6$Cy-3Cn>uo6wF~fD!pWm{Nyz z%mbwe=z)|`Ip1`ewRV~<6{M~BVhnfNpscKC_Txfel|F$An(6c^z=)_AOo_WWnqzlRibNMo ziMu(HV^2_uq@^ge&9=^ZBQj7hjEdlR1EZJ-jyD2Qb}{3>V=XgCBsqIWFNPQcwCJ(^8U}Jw-@;0 zhHIdtZWg`KRisioOZI`jP~luwqRV%1EH=GVYCY;g2E7b8I=K}OL_RgmLRvpIQWo;Ax#>xY z0sFym0rWrqNn#r!L{Rhw>WBLh(hmxgB-T|*TlRTr(OG6Q2dl@JAM5F$Un5)E(XE|MZwK?Ml}-;^Deq06GV+UrqlbBl;r93 zwo>Wz_H9w=^sX4M(&@b~Je}Uan8RMadez|4$(IbYA9%#!OE#|9&@3e!H&c3jVjjmLKnb~O#O^&GdpZ`~%Amt55nwwud) zW^nnY^=p@}U9n-XYwAGT>fZHhyEhK@bPP<{uwvt;)hpI4*H2qA^nsO2Z-4r$e;t_I zbK=U4t5>Z)iJ!K9-QYm$;fK6>aA4f(b;~!dUU&T9=7DM5@7b_s^>M2=Er0ilHQnou z%{bl>c&q z+;5|7GF^sm9rPW(EE&pjGhNQ#P@mlf=?eb1nZC<^yT;I!xHQpKe9=I8dL|pHnaWU8 zT&PT=1t_`(e;OchlSJHagfrg7`GzEHJBng(MBZ2=6vdi?m4N=*d0J!RgGR9;D~~xABZadqf#$6nK7RRVYIBmnn5nW&-oN>d)5jA2XoOTx{Wqd?~YvcIdpjHH4Rd5<(& zv-`fX?Oo~Xyt`>rjooyOy_-(2x0~|bT-Zjr#B8DczAd!Lw}ob$m+0THa}JDMzi}1s z;6~mX7~g%;@_bt#zjFP$Rm(S>xS@M+pzZJj-@4?W0|o~s9JhWQ^&P)rQ}?RDezl+J zrRr&3Zp@?T_xz3b+&^Fq`Xl~4!+$aYwR5v7@Bg?^DFGFAmeR$d9%$e9u!EQGd&GhJ z56Uw(XP~m;*CeCoGSG}bXM&kbe+H=Rvr*KbV2}2{f?9UZC~B=S{~M@fPmH1#j%@-p z{fVjL+YJillv_Y8%4CI|iDFh~=R=kC8naK&bDgzbc@mAmLu6|Tct|$h;tMtc)9nea z2@W9#KC4LEP?xFnC#fH{F_n-wqGy%aDuO`eJZ3g=DzIg%iJ}GtpXDqzSe3@nY*5Q$A4Lrc&Z#vQ)Utpp>bjFijX$Te8AH>UPObc1tu!AGk)=7} zA+ngWJ#Q-}?!}Da888l?ONTvwgC_(_S+RN^OZ0@Da_Ydu}rvdL@CVIm&eS7WZ`Fr zJR-AKOtLvI<_ttOFNjG$MNZj`7l(^U(xMd6?~6LHK3ISe(Qml=h9D(?v`I{=_TuAX zk*B&$t5&)cMyZZsBT>lwjF&mCjf2@BhF-fpJ|T09`ovW{ala+0Pxw`RAE!PDp4*Hg zeh-hR&F+`#@+e>W=~w)>XAM1uvKjPieCwdc@r_mX>LOej{Z@T>QZAXS!F#-VbUSa< zxo|L^zwu)x@P#Jg&m{iSPl~-0znv;sxx*Mdos~Nh)XA*ezk)iMm3up=lUccUfI5Md zJDlkZE4K^}2^A_beo#vjEwmiemOxXNn=~RxtoWfFiKf#Ez{w)6_)d?wS(Y0U#5F*4 zO`=tRla*Y-)oq=Tm1L=msGp9to=nFBF1~L>n3_ri>glwSFGf=CL0Ph-ycX2SlJa^` zCrirj0`(;7=8G(DUCnd|e=f@kJEPQ*2;QnnZ0TV~E@J5czxacTtJ$sx#z7g=yX4I< zfCQaAUKPVar*PL4{iW-j(_RffkXI|fXSo{7OH`GrG15d;DTyJ`Cwhc4BvDmL;s4_m z*Bk-qo8l4RW`PQd; zn{bLMD9R2;KVxZ-SDvh9*=mrLOIT=DC}--ZHL9-Fj(*M$9SN(Qs+By>jR@U^nVJ4B zE5a&BI-VXZ9qaB$4b(9PJaVLJBVK=Ga9~RBrWNZ}t=PC~xi<0XXccCLW&N*3NX^f( zoNjJ5cDlcFk0>3EqV$A2xRgq$3%uFL8)F$=$s56x+A22zl)^3rQ)-LcWKarM6HJM_ z`IM1qpcLjKm=brhMQxm5(o9^0Nl*{a@}V`5rSZVsEZ58iWz0x=v@qh>E~94L-;_20 zm2utEPGdn~mLV5in&d45rjJw;e$#J615IwzusJ zO4(R~DRFn#IC>cnfS6pPBRu2f6BDk9c`K<+-cEd&1Q|AGm!B@@_ zY+!pWNMy+aN&T6C+Zb$tpwR31qTD4NSDZsr{&PzM^m%8$063q2^c9`(JF9tMtf+vS1Cr-oUmsDVP4X9-V|gLroIVlqdY zetSW|GxK0Pp=O{!X_Abn#fjd4>8lz)f{JqWayOF43eHgB_Bh&0YF(Nnwk?~$?|2!i za9cLL3^>*#ku^(cF$2_|aQVk1DKAuwrWU5tbUH?+7A6TF?-(~p?4GD$mJIjaq)X71 z;KS)V=#a4K627LWNB>nGEj=7Lal*NG`i*JHQvz3-LiXD=5&X*k8 zibq#*MINq&wlTk2+=||#*6?rn1fxBDx1vvZI<0kY-QC=3F!g3RgVy8L7J3(7)XqoS zw{i`4;6K{q{vKKhdI=ODe3C!`eBwX>Dewdepxg}<=$4W^P@qWy1sHlahFW@7i;5HY zV0fGWUBK)5()H8nYkV!o2Y?TW@@RD816u2OG%o49OU}dnLD8{M`QtZmZVZeMSjbuB z^cMUor!zZv7&t02!Uh`S0`)9pFH_M<*(gndvRSo8 zql|S?zVUj=Xh?2rHmlYYKv)-s|J-lFVcST}9;7x0Y3O|I_-Fwq71{G-S2+rP&_;nR*MgXn>69MyU5%R0uzxkbAS zxt-^KS;bRZ!sl%e)fg9~!v(p2h76Iv#|kR~&ELMMi91b_L)bWWW8@~aD9m!8Iv=Xn zo>q5o@VcsHP9pnlFkho)J4iz*jgn-OHjZz4&vbA)Pmfs^q+|3NgngTAFyFMB;eZW& zU7r{3PKP?H9Zx%v8yewEcX2Xb!WbOU*EGVJ=HjHZM~u;paHhIAgW4Z1rafZAwQ+ot zVTyxe&W#VokzHKO*kvU5ot^9;4L$UeduOwwT44e5FATEp@k|h9o{i(%#V0v9o!`3b zfOBuS=0pCqp|HPV6W465sCmF{4%;n$vs%72cW@1_=eb<|J^sdg&9zwMufw13^B+SX z>#Y!ENsP!M7-)Ob!AI`LF&_?*ar_zLCn|hbp>Kv2^f<8cW&7z-4g(cb3EP4pgvd^d|d8S@@4k<%O1c6cm z@Oc%#0Gw<$QPiMd#m1wcmQ5szT9ozE=`m2t)(}N4#-?fXIH+a8kD>+zN9a5OYFWe; zb=@gzmZzEY2-9gB)D(IW50Mo*;33((mo=R&E>AIW+4<`OD0Krx-pfU-tGowj`F^1J_Mf9ziW&vNBQuSx3T+vpMN7Pa+FHENM|Zj+Lb8Ad`o*32`kY+jLDet zBvvn0fM!M_g>`krGNX2=&$^B}KW-EP34-m=fR5P>XZE0aNRc+PaE@Rk#z|48M5`V| zP8S29%~sl?Ag8GiA-&aQE47Bq|JD}R%3KZ=&AR&+(H z?s!(GD7wD(rAH3u#k4Tj>aRR0!rwLeWb)v*RD{12aW>0?5sbt=SCx34B+TjzFK&BA zL71(#r+VH|EzAy!{eKxV-SO;ytN@g;|F2-QUWiXD3hXMM6?Y9?Qv_?9z=vxy)T_~4 z*|#I$)S2uo1MCiJOLPq5q~jTPku_)1>i`!kV#1v_Qg|^)gW&Hb+Q`dAW)B|H}FM!0M4X6Q5GwuMvIo_c*=tTmnc$C zrNclyon9jiz_QNiK@LG#s+4*p6PKmbzlh}7b6?McVo~n-IlUD3xpM2D`6iZI@ryr1 zsVXM45TwMW(q&>Lg-ogaeG6qcQ=uBhl~!^0Ebhq;ic@M|RH|5lDh=198^Gi0`fw~) zE4qofUfo0aSJWg$Qi}ca(h~4Bx8!w5wsB^J)b++gD>yKJC*NDktfv zx~1^u@kZ#VDkX^ZarSCD2MZIN3i5iX_dowdCcSrp)m07Ax!5d6z{0I+CXaIi0mkrh zp-YqoNlp6{4Mn^?Jnyf7XX^Wy=A9S^{wY@%LT!EKF)=l*pW37EMt`u5nKe;y>$^GxV(0e3zt9}KT%u8Y%gBvf27XIS#l33EoPscw#f6B%8 z=xu7>Z2Tf70;a4Gs7I-NBBp_|tPH3}iMu&UY9=TxrIv0{Jxb9}@ySr2EUN-lbQAw( z`q<|wQv3P2ey$MxghyJQKIM-x z)i)nXqpZCsCeT7Wv4eKNrR+>m`vG}d%{`v(%hacfrIO-3F`l*t)+~A{E@dZ*I^A2= zN7laCI8VF+FtWia1z5l=QL0^fH7Ltko_d(Ln^ilzgR-oSsz-^t`FN{6K^fOh+|5oR zuM|vr11@Es2{TBgnP40xIzd@hLDi$=yV*%%KPJ@bCp-JiJGrM3zQ-5WB?2Y-e4l+G z<(1AD7+vX-&Sp@3a(ykE=Sawibe`ahE;meH7m!gGRplS*l$mZktwv(*L^vGKWXxvO_?mME;=fnF5bktX968R(sL(5t3{__UO-n$ zXGq77x|WL0G>GR4;waCj9~!tD1uk)Bg~u|`jg^b-5mi%$~! zhff^)Ck39^Ka{(%f9s?qkNumZ4hcHDSq1<7LLU3V22_haBG32xozdlhPhJwW|@%RxVD;_{h1R zHjXdEV~&H8C7{TSC6iWF6vNY_}3f4Rh z4F(=%kw}CfX<0-J2tf!6L8Bj3zNjck1tFESEM-S*fl_Dz3Ch0c`JI_NcjnIA`=6P< zcf*JBf%|{cIrq%WJ$LTR@BGf0eUF=RO87}tS?}U#2$?kJMd$DCYsC4tFZ{y zgJkHQA2?)rZZPsdaVA=~WG1@HO&LNBjHM@U zyk}|(a^w0}+;$Pp^PL{omF#(z2FKl9n@Cr_%$FmKAD}w46@A6FmfJA1HT**$MY2HH`@5G zo3!kUr_z&<_EG+B(vaXi^3#y^!TWB~8o+-R(msISOSQetF*_FT zOyT_gfQ5(TA#s%Xd$`j?dIgt0dXq15QZk=Mw-MF66X2Gk)Fnt?%0=wOx*M|2c@HQF z2ljg03$@T}+(+dEz{=d@FEqPt4%e*yRIe_d=L*X~J67{b*SOGq5 zXq!_3Ebp54yQ$w_dvHZhJtzSRS|9*2q^Sak{X8{vRFHxkh%YBRJ`1wU2>18gaUn!v z7$DdjNI3`g&jF||)u#eR&pu)aIp|bgT7ew6;IHeKTzPl3aOEY5dA`t} z&G;0EgaRk0;8Qgr8N&`AdeLE_$!8eg(3ap`je_yoJ9*DOBoZL9eaQQS)V+7c{!?wx z=d!jTNb_d>K>6J=gf}1E6&H5`j-;I8ogL{=NM}QMheJ9W!aD-e*%01Qkj{Yc4q-V1 z;Vr;TvLU=P)E11*gttVSP^VXgUjb z%ESZ5(7BLK1uspw#`%!$qtp1JC}@KZ4z5yZ0v@A2E@c$VN*u7iDzVw!W4MTMG5kw7 zaX>rJN)hoBbvj==w6UZnwZkw=YEnDcPEwQF;jJY#sV$0I*{I0Kzbt?$nGvU(6&Lx} z7I`jtta5;nWRi;&yy*n~hC_kd!Gy|@ifB?695%Ai$vH@1I@vF2lv?BkmhI9hF(RVg zGo3{_OhVN>aj_Ix3z!8eTR=K#oVeQ~`<&c>NXBy>{;8C^%RR)?=Z(Z%6w7NL9kpnV zZAwg6u0Ay|SJk&TlZBDUURBMK$x^QsRDvkGM3FV5Rn1&iLvQnf+yh{7ePzROJ@g|+ zNqm63NmBD$kA$QTjyFl7c4rzbfTRzMH%V$<>#>mZLGdO@;k52Rhl@@+0T&+^Z%P1w z+RSG?8InF2-Xw|I%w=5!NguAQZ*%}Pudi%4tfxYak101vqBdu#7=)ycWj9HpHgi`` zhold>H%X#4XX`x!lD>DKNm4kg{j^wg(wVsU)YU+OjuPZ=&Od^iae9igabus(TK}K} z?zD!=GUot?Zf=Y?`RIIZOF?$MKz<9x?1Rho;}*c#>np2OF4GAw#vu44*Ct8S=HWXB zlDrJY#rG)G-yq;)3_MHYLbwd~_p#xI`}_We`pOza?xU-q#s{#QBvHFFmac)M55YG{ zqBdtwz7CQ;k+n%ulUQ$nr0*wau*S4O(f)y(pvLzP)T=3otGBSACazATOK_Jyx*C_! zbTeOsxQa}{KS0?yx&md2z-q(t7b{r)5d5nH;iIH6>B`9B7j!EKv?IJJqu+~?5r;bH zHqkTUD{Q)s1F0W89Noy}y{ z&5l@tXRP~&-FD*Rsp&Z$2H9lL8X0&QhHm?<>>yg&g8Qn}P2gWG1aQ-fri1IHgPE2U zzi*?trjPT{$I{05^Tc0i$0oooKpO1h#KNl){?m9|D#nyOYN z73kp^>M6JCg{G=?SBwXLFP}x#t>}5asLy8L!1ae9FG*LPz%NOtySq$?gA+#5JU+zoRdaC{*qYPO!~4W74$ z@rLwNFy5cp?A{1H;EgsKFrP{)nY$}7vyZJ6>Ut&iL-(f|)1o2Jz{?rxQ6;rPPLDjd zMo5o)4sF&Gs^KcTK%0vtt$5l_yHb5ZHL(TW92)9RWe#;B_KhAL4;~1ih9!6yc}Pzs z2f-cB?efUFMc=4cLcJbXwg-8K0Lsd#^^K0PnsM`R>`svh7RU2ig*3ULS_3!S zEI!)=);f;e^Ok-g8nGMw;hrQPd1PUZ$2a*f3+_)l&hEVQJHJhRLfjvZ;t;X~H=WSH z4->Oqz@bzN^Sem43-b>oAHXOXHat&9$mZP47b||b@kcZNeB|r#*3CWgoID{tl}sL2 z51#dhS@+zSq{s6{IP;wT;*E0BWvzJTJcMx`RMDg7xyl!hA@!x58CaUx3*S&@X1Gdn z@-XFawVdTheS)Ix?`$(i;mKGF8I_etdNcEqH@#gHqiEsvDHL;(^{t^Z&ANpUOL{^;8yG zGSSV3dB5}yZ})oWWp!D{m*w;d|9@}^tw-4?dKG{5(`)#vhc>9oM!qbk*VP|y$feld zR-FrtAd1RLuuQS+U_6QvpSP_{7aCw!1l%d?7g1(8SR(F-BNHLP zP{CIrZMjb(r6IwX{Q#sbuSlbG89JjqBVUKK6@nI(IV0doafaSY@S+bg+=32(I$6S} zM1T1H+HUHgqBEHef;!(N+D%&AqEl!-qJG@t5_|(NO36=p5;QVTqq^ zG#vx!EoiQE0P9;mO>_auWOg3+u7wNIc>arL;t71AiTK|n{@-$vxtQNdEL;POh~|cL zWRa6#)JsK0X9k^!R{GS9W_2nfMrS8l2x(a`Cg`>~CXLfYIq^b8XF4r{I$1X+s9P!$ zomq4$q|*lq5}loCF{EeENqo^kq0{NxD3hg_YEMLO_`73et&0*+d0Ut)GYEC5(l$pX zLLEK~P{BFxPKUZ_bei;7b7z*ItR&6sFS*g!hVSCV5F7Q~K)VB{^J?PE_aI#oXJVyU zg1IwivhWaIC|=DRkKbNCqm2rkwjIQ;0?&Si_T>7mgBT^@d`6phj`LP*-Z=u|`3&wH z`5jZ+#`7d&$%l#C#+;p;Y)`*)LcAs(xrFVh>CvqWRb2SNbMblv9P{>!3g>CuGd{5h zUVxS1Jyr!w+LS%xYV>E9N5gtNCqVyT{;qLVF#f1v*N8Pr03LIPt%AWl9?W9Yyw$ED zLpP$Nze!0SF5azR{*@5mS4BxP(95<^(#_rzndmlqPk1_&eOxy%yOKGpE$@kgUm5_e z8-CfA53((vYFj?y_Sgb#@gLgabF{@4Xp8+IaHl;dgh2UWU~>q9(G6doos2KH40GJg z+r504<6cO&2Xm~1x@?%^en@A-91lWz2K}8c2Ilw&%93%1R9r;k4%28A)TK*9f)jN; z25H$9L}N0`xu^7q^jO0jt8tSO<|wFm4$R?Ui5Xy@#zmflx>Q^w1M5^k$}_BONTeB6 zc^0ZIthNy%Dp6CR|Bs@7LOL0wO$U}WNc%6S%LZv*gtX{WXY(rNBc0Jo4}kKPB6wgST%-)ZB!P4%B@-|cw%2-Juhy=M$FBbj41hUP!0+Tin1~(iljOr;oVs$$S$Pn9wld5%jehqxbX zn4Z&}siIiA$UfR0u^11QP3Vn5-xrt7ig^3ladss&$@5$~xaY7$59s#rI!@NWDn-vA z|LKevY^fctNYePU6OfS9q_$!g%0^XQ`?{&1olu9eS&sdLzjy6KMI<$;9U4qhlUj_m zDB5Me{Y6GWuMBfS0{3N8Lo_n9;j{9 zECp=0}7XOJ9Huj1tT)>Ne<20 z1c4wq9s;d2QuV}euuXF$eCoeDONtgMgT9Z$WV7D#BcB=8?j z643|Av_U~_jzakuUE7i-@C{5b${5^D0E*~#pfPCBmSAgGa* zccdB5|lLN9voQ+gSLeWaky7$ zdQPcbfNtuln0A*|kL+%Mc7+nXaO9^Dm`$6*^NRSRbHq&8<}9XBVOtJK$cu#=)w$KIo?v3z4}hg4a+G zc$9^R89Vc3H@njF*QGM$@E0N`ioVdPHqo8gv<%YQ(Pey56BbWQW96K)IfKj%8I-+} zXIsMxpwjg``^lD$Zopst*y z=9JSE?Z=N+?Ptp`qznU$jlN?3)mr4u#(HBET?gARc1epuRkaab?^a!Csv4cf;%-3I z?dV3nD2of^8N3qml4tN*{E|F__{Dh!r67=J5an*3!JkM;nP+f}>CC", "CC>>CC"] + expected_output = ["CC>>CC"] + result = self.cleaner.remove_duplicates(input_smiles) + self.assertEqual( + result, expected_output, "Failed to remove duplicates correctly" + ) + + def test_clean_smiles(self): + input_smiles = ["CC>>CC", "CC>>CC", "CC>>CCC"] + expected_output = ["CC>>CC"] # Assuming 'CC>>CCC' is not balanced + result = self.cleaner.clean_smiles(input_smiles) + self.assertEqual(result, expected_output, "Failed to clean SMILES correctly") + + +if __name__ == "__main__": + unittest.main() diff --git a/Test/SynGraph/Descriptor/__init__.py b/Test/SynGraph/Descriptor/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Test/SynGraph/test_graph_descriptors.py b/Test/SynGraph/Descriptor/test_graph_descriptors.py similarity index 98% rename from Test/SynGraph/test_graph_descriptors.py rename to Test/SynGraph/Descriptor/test_graph_descriptors.py index 0b350e3..0acdc42 100644 --- a/Test/SynGraph/test_graph_descriptors.py +++ b/Test/SynGraph/Descriptor/test_graph_descriptors.py @@ -1,6 +1,6 @@ import unittest import networkx as nx -from synutility.SynGraph.graph_descriptors import GraphDescriptor +from synutility.SynGraph.Descriptor.graph_descriptors import GraphDescriptor class TestGraphDescriptor(unittest.TestCase): diff --git a/Test/SynGraph/Descriptor/test_graph_signature.py b/Test/SynGraph/Descriptor/test_graph_signature.py new file mode 100644 index 0000000..dc6fb59 --- /dev/null +++ b/Test/SynGraph/Descriptor/test_graph_signature.py @@ -0,0 +1,44 @@ +import unittest +from synutility.SynIO.data_type import load_from_pickle +from synutility.SynGraph.Descriptor.graph_signature import GraphSignature + + +class TestGraphSignature(unittest.TestCase): + + def setUp(self): + # Create a sample graph for testing + data = load_from_pickle("Data/test.pkl.gz") + self.rc = data[0]["GraphRules"][2] + self.its = data[0]["ITSGraph"][2] + + def test_create_topology_signature(self): + signature = GraphSignature(self.rc) + self.assertEqual(signature.create_topology_signature(), "114") + + def test_create_node_signature(self): + signature = GraphSignature(self.rc) + self.assertEqual(signature.create_node_signature(), "BrCHN") + + def test_create_node_signature_condensed(self): + signature = GraphSignature(self.its) + self.assertEqual(signature.create_node_signature(), "BrC{23}ClHN{3}O{5}S") + + def test_create_edge_signature(self): + signature = GraphSignature(self.rc) + self.assertEqual( + signature.create_edge_signature(), "Br[-1]H/Br[1]C/C[-1]N/H[1]N" + ) + + def test_create_graph_signature(self): + # Ensure the graph signature combines the results correctly + signature = GraphSignature(self.rc) + node_signature = "BrCHN" + edge_signature = "Br[-1]H/Br[1]C/C[-1]N/H[1]N" + topo_signature = "114" + expected = f"{topo_signature}.{node_signature}.{edge_signature}" + self.assertEqual(signature.create_graph_signature(), expected) + + +# Running the tests +if __name__ == "__main__": + unittest.main() diff --git a/Test/SynGraph/Fingerprint/__init__.py b/Test/SynGraph/Fingerprint/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Test/SynGraph/Fingerprint/test_graph_fps.py b/Test/SynGraph/Fingerprint/test_graph_fps.py new file mode 100644 index 0000000..4a84908 --- /dev/null +++ b/Test/SynGraph/Fingerprint/test_graph_fps.py @@ -0,0 +1,59 @@ +import unittest +import networkx as nx +from synutility.SynGraph.Fingerprint.graph_fps import GraphFP + + +class TestGraphFP(unittest.TestCase): + + def setUp(self): + """Set up a test graph for use in all test cases.""" + self.graph = nx.gnp_random_graph(10, 0.5, seed=42) + self.nBits = 512 + self.hash_alg = "sha256" + self.fp_class = GraphFP( + graph=self.graph, nBits=self.nBits, hash_alg=self.hash_alg + ) + + def test_spectrum_fp(self): + """Test the spectrum-based fingerprint generation.""" + fingerprint = self.fp_class.fingerprint("spectrum") + self.assertEqual(len(fingerprint), self.nBits) + self.assertTrue(isinstance(fingerprint, str)) + + def test_adjacency_fp(self): + """Test the adjacency matrix-based fingerprint generation.""" + fingerprint = self.fp_class.fingerprint("adjacency") + self.assertEqual(len(fingerprint), self.nBits) + self.assertTrue(isinstance(fingerprint, str)) + + def test_degree_sequence_fp(self): + """Test the degree sequence-based fingerprint generation.""" + fingerprint = self.fp_class.fingerprint("degree") + self.assertEqual(len(fingerprint), self.nBits) + self.assertTrue(isinstance(fingerprint, str)) + + def test_motif_count_fp(self): + """Test the motif count-based fingerprint generation.""" + fingerprint = self.fp_class.fingerprint("motif") + self.assertEqual(len(fingerprint), self.nBits) + self.assertTrue(isinstance(fingerprint, str)) + + def test_iterative_deepening(self): + """Test the iterative deepening method.""" + short_fingerprint = "1010101010101010" + remaining_bits = self.nBits - len(short_fingerprint) + extended_fingerprint = self.fp_class.iterative_deepening(remaining_bits) + self.assertEqual(len(extended_fingerprint), remaining_bits) + self.assertTrue(isinstance(extended_fingerprint, str)) + + def test_fingerprint_length(self): + """Test that each method produces a fingerprint of exactly nBits.""" + methods = ["spectrum", "adjacency", "degree", "motif"] + for method in methods: + with self.subTest(method=method): + fingerprint = self.fp_class.fingerprint(method) + self.assertEqual(len(fingerprint), self.nBits) + + +if __name__ == "__main__": + unittest.main() diff --git a/Test/SynGraph/Fingerprint/test_hash_fps.py b/Test/SynGraph/Fingerprint/test_hash_fps.py new file mode 100644 index 0000000..b9bb3a3 --- /dev/null +++ b/Test/SynGraph/Fingerprint/test_hash_fps.py @@ -0,0 +1,52 @@ +import unittest +import networkx as nx +from synutility.SynGraph.Fingerprint.hash_fps import HashFPs +from synutility.SynIO.data_type import load_from_pickle + + +class TestHashFPs(unittest.TestCase): + def setUp(self): + """Set up a simple graph for testing.""" + self.graph = nx.cycle_graph(4) # Simple cycle graph with 4 nodes + self.hasher = HashFPs(self.graph, numBits=128, hash_alg="sha256") + + def test_hash_fps_default(self): + """Test the default hash generation without specifying start or end nodes.""" + result = self.hasher.hash_fps() + self.assertEqual(len(result), 128) + self.assertIsInstance(result, str) + self.assertTrue(all(c in "01" for c in result), "Hash must be binary") + + def test_hash_fps_path_specified(self): + """Test hash generation with specified start and end nodes.""" + result = self.hasher.hash_fps(start_node=0, end_node=1) + self.assertEqual(len(result), 128) + self.assertTrue(all(c in "01" for c in result), "Hash must be binary") + + def test_hash_fps_invalid_hash_algorithm(self): + """Test initialization with an invalid hash algorithm.""" + with self.assertRaises(ValueError): + HashFPs(self.graph, numBits=128, hash_alg="invalid256") + + def test_hash_fps_negative_numBits(self): + """Test initialization with negative numBits.""" + with self.assertRaises(ValueError): + HashFPs(self.graph, numBits=-1, hash_alg="sha256") + + def test_hash_fps_large_numBits(self): + """Test hash generation with a large numBits.""" + large_hasher = HashFPs(self.graph, numBits=1024, hash_alg="sha512") + result = large_hasher.hash_fps() + self.assertEqual(len(result), 1024) + self.assertTrue(all(c in "01" for c in result), "Hash must be binary") + + def test_fps_rc(self): + data = load_from_pickle("Data/test.pkl.gz") + graph = data[0]["GraphRules"][2] + hasher = HashFPs(graph, numBits=1024, hash_alg="sha256") + result = hasher.hash_fps() + self.assertEqual(len(result), 1024) + + +if __name__ == "__main__": + unittest.main() diff --git a/Test/SynGraph/Fingerprint/test_morgan_fps.py b/Test/SynGraph/Fingerprint/test_morgan_fps.py new file mode 100644 index 0000000..01304ee --- /dev/null +++ b/Test/SynGraph/Fingerprint/test_morgan_fps.py @@ -0,0 +1,39 @@ +import unittest +import networkx as nx +from synutility.SynGraph.Fingerprint.morgan_fps import MorganFPs +from synutility.SynIO.data_type import load_from_pickle + + +class TestMorganFPs(unittest.TestCase): + def setUp(self): + self.graph = nx.cycle_graph(5) # Creates a cycle graph for testing + self.morgan_fps = MorganFPs(self.graph, radius=2, nBits=128, hash_alg="sha256") + + def test_fingerprint_length(self): + """Test that the fingerprint is exactly the specified bit length.""" + fingerprint = self.morgan_fps.generate_fingerprint() + self.assertEqual(len(fingerprint), 128) + + def test_fingerprint_consistency(self): + """Test that the same graph with the same parameters produces the same fingerprint.""" + fingerprint1 = self.morgan_fps.generate_fingerprint() + fingerprint2 = self.morgan_fps.generate_fingerprint() + self.assertEqual(fingerprint1, fingerprint2) + + def test_fingerprint_variation_with_radius(self): + """Test that changing the radius changes the fingerprint.""" + new_morgan_fps = MorganFPs(self.graph, radius=1, nBits=128, hash_alg="sha256") + fingerprint1 = self.morgan_fps.generate_fingerprint() + fingerprint2 = new_morgan_fps.generate_fingerprint() + self.assertNotEqual(fingerprint1, fingerprint2) + + def test_fps_rc(self): + data = load_from_pickle("Data/test.pkl.gz") + graph = data[0]["GraphRules"][2] + hasher = MorganFPs(graph, radius=3, nBits=1024, hash_alg="sha256") + result = hasher.generate_fingerprint() + self.assertEqual(len(result), 1024) + + +if __name__ == "__main__": + unittest.main() diff --git a/Test/SynGraph/Fingerprint/test_path_fps.py b/Test/SynGraph/Fingerprint/test_path_fps.py new file mode 100644 index 0000000..0fc9d8f --- /dev/null +++ b/Test/SynGraph/Fingerprint/test_path_fps.py @@ -0,0 +1,40 @@ +import unittest +import networkx as nx +from synutility.SynGraph.Fingerprint.path_fps import PathFPs +from synutility.SynIO.data_type import load_from_pickle + + +class TestPathFPs(unittest.TestCase): + def setUp(self): + self.graph = nx.path_graph(5) # Creates a simple path graph + self.path_fps = PathFPs(self.graph, max_length=3, nBits=64, hash_alg="sha256") + + def test_fingerprint_length(self): + """Test that the fingerprint has the exact length specified by nBits.""" + fingerprint = self.path_fps.generate_fingerprint() + self.assertEqual(len(fingerprint), 64) + + def test_fingerprint_consistency(self): + """Test that the same graph with the same parameters produces the same + fingerprint.""" + fingerprint1 = self.path_fps.generate_fingerprint() + fingerprint2 = self.path_fps.generate_fingerprint() + self.assertEqual(fingerprint1, fingerprint2) + + def test_fingerprint_variation(self): + """Test that changing the parameters changes the fingerprint.""" + new_path_fps = PathFPs(self.graph, max_length=4, nBits=128, hash_alg="sha256") + fingerprint1 = self.path_fps.generate_fingerprint() + fingerprint2 = new_path_fps.generate_fingerprint() + self.assertNotEqual(fingerprint1, fingerprint2) + + def test_fps_rc(self): + data = load_from_pickle("Data/test.pkl.gz") + graph = data[0]["GraphRules"][2] + hasher = PathFPs(graph, max_length=5, nBits=1024, hash_alg="sha256") + result = hasher.generate_fingerprint() + self.assertEqual(len(result), 1024) + + +if __name__ == "__main__": + unittest.main() diff --git a/Test/SynIO/Format/__init__.py b/Test/SynIO/Format/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Test/SynIO/Format/test_gml_to_nx.py b/Test/SynIO/Format/test_gml_to_nx.py new file mode 100644 index 0000000..b6c3f60 --- /dev/null +++ b/Test/SynIO/Format/test_gml_to_nx.py @@ -0,0 +1,130 @@ +import unittest +from synutility.SynIO.data_type import load_from_pickle +from synutility.SynIO.Format.gml_to_nx import GMLToNX +from synutility.SynIO.Format.nx_to_gml import NXToGML +from synutility.SynIO.Format.isomorphism import isomorphism_check + + +class TestGMLToNX(unittest.TestCase): + + def setUp(self) -> None: + data = load_from_pickle("Data/test.pkl.gz")[0] + self.ground_truth_its = data["ITSGraph"] + self.ground_truth_rc = data["GraphRules"] + self.rule_its = NXToGML.transform(self.ground_truth_its) + self.rule_rc = NXToGML.transform(self.ground_truth_rc) + self.parser = GMLToNX(gml_text="") + gml_formatted_str = ( + "rule [\n" + ' ruleID "Test"\n' + " left [\n" + ' edge [ source 11 target 35 label "-" ]\n' + ' edge [ source 28 target 29 label "-" ]\n' + " ]\n" + " context [\n" + ' node [ id 11 label "N" ]\n' + ' node [ id 35 label "H" ]\n' + ' node [ id 28 label "C" ]\n' + ' node [ id 29 label "Br" ]\n' + " ]\n" + " right [\n" + ' edge [ source 11 target 28 label "-" ]\n' + ' edge [ source 35 target 29 label "-" ]\n' + " ]\n" + "]" + ) + self.parser_gml = GMLToNX(gml_formatted_str) + + def test_parse_element(self): + """ + Test the parsing of nodes and edges from the provided GML string. + """ + # Manually parse elements for testing + self.parser_gml._parse_element('node [ id 11 label "N" ]', "context") + self.parser_gml._parse_element('edge [ source 11 target 35 label "-" ]', "left") + + expected_node = ("11", {"element": "N", "charge": 0, "atom_map": 11}) + expected_edge = (11, 35, {"order": 1.0}) + + actual_node = self.parser_gml.graphs["context"].nodes(data=True)[11] + actual_edge = self.parser_gml.graphs["left"][11][35] + + self.assertEqual( + expected_node[1], + actual_node, + "Node attributes do not match expected values.", + ) + self.assertEqual( + expected_edge[2], + actual_edge, + "Edge attributes do not match expected values.", + ) + + def test_synchronize_nodes(self): + """ + Test the synchronization of nodes across different graph sections after parsing. + """ + # Simulate parsing nodes into the context graph + self.parser_gml.graphs["context"].add_node( + 11, element="N", charge=0, atom_map=11 + ) + self.parser_gml.graphs["context"].add_node( + 35, element="H", charge=0, atom_map=35 + ) + # Running synchronization + self.parser_gml._synchronize_nodes() + # Checking if nodes are present in left and right graphs + self.assertIn(11, self.parser_gml.graphs["left"]) + self.assertIn(35, self.parser_gml.graphs["right"]) + + def test_extract_simple_element(self): + """ + Test the extraction of an element without a charge. + """ + element, charge = self.parser._extract_element_and_charge("C") + self.assertEqual(element, "C") + self.assertEqual(charge, 0) + + def test_extract_element_with_positive_charge(self): + """ + Test the extraction of an element with a positive charge. + """ + element, charge = self.parser._extract_element_and_charge("Na+") + self.assertEqual(element, "Na") + self.assertEqual(charge, 1) + + def test_extract_element_with_negative_charge(self): + """ + Test the extraction of an element with a negative charge. + """ + element, charge = self.parser._extract_element_and_charge("Cl-") + self.assertEqual(element, "Cl") + self.assertEqual(charge, -1) + + def test_extract_element_with_multi_digit_charge(self): + """ + Test the extraction of an element with a multiple digit charge. + """ + element, charge = self.parser._extract_element_and_charge("Mg2+") + self.assertEqual(element, "Mg") + self.assertEqual(charge, 2) + + def test_extract_element_with_no_charge_number(self): + """ + Test the extraction where the charge number is implied as 1. + """ + element, charge = self.parser._extract_element_and_charge("K+") + self.assertEqual(element, "K") + self.assertEqual(charge, 1) + + def test_transform(self): + self.graphs_its = GMLToNX(self.rule_its).transform() + self.graphs_rc = GMLToNX(self.rule_rc).transform() + for key, _ in enumerate(self.graphs_its): + self.assertTrue( + isomorphism_check(self.graphs_its[key], self.ground_truth_its[key]) + ) + for key, _ in enumerate(self.graphs_rc): + self.assertTrue( + isomorphism_check(self.graphs_rc[key], self.ground_truth_rc[key]) + ) diff --git a/Test/SynIO/Format/test_graph_to_mol.py b/Test/SynIO/Format/test_graph_to_mol.py new file mode 100644 index 0000000..d7f7479 --- /dev/null +++ b/Test/SynIO/Format/test_graph_to_mol.py @@ -0,0 +1,59 @@ +import unittest +from rdkit import Chem +import networkx as nx +from synutility.SynIO.Format.graph_to_mol import GraphToMol + + +class TestGraphToMol(unittest.TestCase): + def setUp(self): + # Define node and edge attributes mappings + self.node_attributes = {"element": "element", "charge": "charge"} + self.edge_attributes = {"order": "order"} + self.converter = GraphToMol(self.node_attributes, self.edge_attributes) + + def test_simple_molecule_conversion(self): + # Create a simple water molecule graph + graph = nx.Graph() + graph.add_node(0, element="O", charge=0) + graph.add_node(1, element="H", charge=0) + graph.add_node(2, element="H", charge=0) + graph.add_edges_from([(0, 1), (0, 2)], order=1) + + mol = self.converter.graph_to_mol(graph) + smiles = Chem.CanonSmiles(Chem.MolToSmiles(mol)) + self.assertEqual(smiles, "O") + + def test_bond_order_handling(self): + # Create a graph representing ethene (C=C) + graph = nx.Graph() + graph.add_node(0, element="C", charge=0) + graph.add_node(1, element="C", charge=0) + graph.add_edge(0, 1, order=2) + + mol = self.converter.graph_to_mol(graph) + self.assertEqual(Chem.MolToSmiles(mol), "C=C") + + def test_ignore_bond_order(self): + # Create a graph representing ethene (C=C) but ignore bond order + graph = nx.Graph() + graph.add_node(0, element="C", charge=0) + graph.add_node(1, element="C", charge=0) + graph.add_edge(0, 1, order=2) + + mol = self.converter.graph_to_mol(graph, ignore_bond_order=True) + self.assertEqual(Chem.MolToSmiles(mol), "CC") + + def test_molecule_with_charges(self): + # Create a graph representing a charged molecule [NH4+] + graph = nx.Graph() + graph.add_node(0, element="N", charge=1) + for i in range(1, 5): + graph.add_node(i, element="H", charge=0) + graph.add_edge(0, i, order=1) + + mol = self.converter.graph_to_mol(graph) + self.assertEqual(Chem.CanonSmiles(Chem.MolToSmiles(mol)), "[NH4+]") + + +if __name__ == "__main__": + unittest.main() diff --git a/Test/SynIO/Format/test_its_construction.py b/Test/SynIO/Format/test_its_construction.py new file mode 100644 index 0000000..0b34ebb --- /dev/null +++ b/Test/SynIO/Format/test_its_construction.py @@ -0,0 +1,51 @@ +import unittest +import networkx as nx +from synutility.SynIO.Format.its_construction import ITSConstruction + + +class TestITSConstruction(unittest.TestCase): + + def setUp(self): + # Create test graphs G and H with predefined attributes and edges + + # Ethylen C=C + self.G = nx.Graph() + self.G.add_node(1, element="C", aromatic=False, hcount=2, charge=0) + self.G.add_node(2, element="C", aromatic=False, hcount=2, charge=0) + self.G.add_edge(1, 2, order=2) + + # Ethan C-C + self.H = nx.Graph() + self.H.add_node(1, element="C", aromatic=False, hcount=3, charge=0) + self.H.add_node(2, element="C", aromatic=False, hcount=3, charge=0) + self.H.add_edge(1, 2, order=1) # Different order + + def test_ITSGraph(self): + ITS = ITSConstruction.ITSGraph(self.G, self.H) + self.assertTrue(isinstance(ITS, nx.Graph)) + self.assertEqual(len(ITS.nodes()), 2) + self.assertEqual(len(ITS.edges()), 1) + self.assertEqual(ITS[1][2]["order"], (2, 1)) + + def test_get_node_attributes_with_defaults(self): + attributes = ITSConstruction.get_node_attributes_with_defaults(self.G, 1) + self.assertEqual(attributes, ("C", False, 2, 0, ["", ""])) + + def test_add_edges_to_ITS(self): + ITS = nx.Graph() + ITS.add_node(1, element="C", aromatic=False, hcount=3, charge=0) + ITS.add_node(2, element="C", aromatic=False, hcount=3, charge=0) + new_ITS = ITSConstruction.add_edges_to_ITS(ITS, self.G, self.H) + self.assertTrue(isinstance(new_ITS, nx.Graph)) + self.assertEqual(len(new_ITS.edges()), 1) + self.assertEqual(new_ITS[1][2]["order"], (2, 1)) + + def test_add_standard_order_attribute(self): + graph = nx.Graph() + graph.add_edge(1, 2, order=(1, 2)) + updated_graph = ITSConstruction.add_standard_order_attribute(graph) + self.assertEqual(updated_graph[1][2]["standard_order"], -1) + + +if __name__ == "__main__": + unittest.main() diff --git a/Test/SynIO/Format/test_mol_to_graph.py b/Test/SynIO/Format/test_mol_to_graph.py new file mode 100644 index 0000000..8dd765a --- /dev/null +++ b/Test/SynIO/Format/test_mol_to_graph.py @@ -0,0 +1,49 @@ +import unittest +from rdkit import Chem +import networkx as nx +from synutility.SynIO.Format.mol_to_graph import MolToGraph + + +class TestMolToGraph(unittest.TestCase): + def setUp(self): + self.converter = MolToGraph() + # Example molecule: Ethanol + self.ethanol_smiles = "CCO" + self.mol = Chem.MolFromSmiles(self.ethanol_smiles) + + def test_add_partial_charges(self): + MolToGraph.add_partial_charges(self.mol) + for atom in self.mol.GetAtoms(): + self.assertTrue(atom.HasProp("_GasteigerCharge")) + + def test_get_stereochemistry(self): + # Test with chiral molecule + chiral_smiles = "CC[C@@H](C)O" + chiral_mol = Chem.MolFromSmiles(chiral_smiles) + chiral_atom = chiral_mol.GetAtomWithIdx(2) # The chiral carbon + stereo = MolToGraph.get_stereochemistry(chiral_atom) + self.assertIn(stereo, ["R", "S"]) + + def test_get_bond_stereochemistry(self): + # Test with E-stilbene + e_stilbene_smiles = "C/C=C/C" + e_stilbene_mol = Chem.MolFromSmiles(e_stilbene_smiles) + double_bond = e_stilbene_mol.GetBondWithIdx(1) # The double bond + stereo = MolToGraph.get_bond_stereochemistry(double_bond) + self.assertIn(stereo, ["E", "Z", "N"]) + + def test_mol_to_graph(self): + graph = self.converter.mol_to_graph(self.mol) + self.assertIsInstance(graph, nx.Graph) + # Check for expected number of nodes and edges + self.assertEqual(len(graph.nodes), self.mol.GetNumAtoms()) + self.assertEqual(len(graph.edges), self.mol.GetNumBonds()) + # Check attributes of an arbitrary atom and bond + some_atom = list(graph.nodes(data=True))[0] + some_edge = list(graph.edges(data=True))[0] + self.assertIn("element", some_atom[1]) + self.assertIn("order", some_edge[2]) + + +if __name__ == "__main__": + unittest.main() diff --git a/Test/SynIO/Format/test_nx_to_gml.py b/Test/SynIO/Format/test_nx_to_gml.py new file mode 100644 index 0000000..9095836 --- /dev/null +++ b/Test/SynIO/Format/test_nx_to_gml.py @@ -0,0 +1,99 @@ +import unittest +import networkx as nx +from synutility.SynIO.data_type import load_from_pickle +from synutility.SynIO.Format.nx_to_gml import NXToGML + + +class TestRuleWriting(unittest.TestCase): + + def setUp(self) -> None: + self.data = load_from_pickle("Data/test.pkl.gz")[0] + + def test_charge_to_string(self): + self.assertEqual(NXToGML._charge_to_string(3), "3+") + self.assertEqual(NXToGML._charge_to_string(-2), "2-") + self.assertEqual(NXToGML._charge_to_string(0), "") + + def test_find_changed_nodes(self): + G1 = nx.Graph() + G1.add_node(1, element="C", charge=0) + G2 = nx.Graph() + G2.add_node(1, element="C", charge=1) + changed_nodes = NXToGML._find_changed_nodes(G1, G2, ["charge"]) + self.assertEqual(changed_nodes, [1]) + + def test_convert_graph_to_gml_context(self): + G = nx.Graph() + G.add_node(1, element="C") + G.add_node(2, element="H") + changed_node_ids = [2] + gml_str = NXToGML._convert_graph_to_gml(G, "context", changed_node_ids) + expected_str = ' context [\n node [ id 1 label "C" ]\n ]\n' + self.assertEqual(gml_str, expected_str) + + def test_convert_graph_to_gml_left_right(self): + G = nx.Graph() + G.add_node(1, element="C", charge=1) + G.add_node(2, element="H", charge=0) + G.add_edge(1, 2, order=2) + changed_node_ids = [1] + gml_str = NXToGML._convert_graph_to_gml(G, "left", changed_node_ids) + expected_str = ( + ' left [\n edge [ source 1 target 2 label "=" ]' + + '\n node [ id 1 label "C+" ]\n ]\n' + ) + self.assertEqual(gml_str, expected_str) + + def test_rules_grammar(self): + L, R, K = self.data["GraphRules"] + changed_node_ids = NXToGML._find_changed_nodes(L, R, ["charge"]) + rule_name = "test_rule" + gml_str = NXToGML._rule_grammar(L, R, K, rule_name, changed_node_ids) + expected_str = ( + "rule [\n" + ' ruleID "test_rule"\n' + " left [\n" + ' edge [ source 11 target 35 label "-" ]\n' + ' edge [ source 28 target 29 label "-" ]\n' + " ]\n" + " context [\n" + ' node [ id 11 label "N" ]\n' + ' node [ id 35 label "H" ]\n' + ' node [ id 28 label "C" ]\n' + ' node [ id 29 label "Br" ]\n' + " ]\n" + " right [\n" + ' edge [ source 11 target 28 label "-" ]\n' + ' edge [ source 35 target 29 label "-" ]\n' + " ]\n" + "]" + ) + self.assertEqual(gml_str, expected_str) + + def test_transform(self): + graph_rules = self.data["GraphRules"] + gml_str = NXToGML.transform(graph_rules, rule_name="test_rule", reindex=True) + expected_str = ( + "rule [\n" + ' ruleID "test_rule"\n' + " left [\n" + ' edge [ source 1 target 2 label "-" ]\n' + ' edge [ source 3 target 4 label "-" ]\n' + " ]\n" + " context [\n" + ' node [ id 1 label "N" ]\n' + ' node [ id 2 label "H" ]\n' + ' node [ id 3 label "C" ]\n' + ' node [ id 4 label "Br" ]\n' + " ]\n" + " right [\n" + ' edge [ source 1 target 3 label "-" ]\n' + ' edge [ source 2 target 4 label "-" ]\n' + " ]\n" + "]" + ) + self.assertEqual(gml_str, expected_str) + + +if __name__ == "__main__": + unittest.main() diff --git a/Test/SynIO/__init__.py b/Test/SynIO/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/pyproject.toml b/pyproject.toml index 79853e9..2557ff3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "synutility" -version = "0.0.8" +version = "0.0.9" authors = [ {name="Tieu Long Phan", email="tieu@bioinf.uni-leipzig.de"} ] @@ -20,12 +20,12 @@ dependencies = [ "scikit-learn>=1.4.0", "pandas>=1.5.3", "rdkit>=2024.3.3", - "networkx==3.3", - "seaborn==0.13.2", + "networkx>=3.3", + "seaborn>=0.13.2", ] [project.optional-dependencies] -all = ["drfp==0.3.6", "xgboost==2.1.1", "fgutils>=0.1.3", "rxn-chem-utils==1.5.0", "rxn-utils==2.0.0", "rxnmapper==0.3.0"] +all = ["drfp==0.3.6", "xgboost>=2.1.1", "fgutils>=0.1.3", "rxn-chem-utils==1.5.0", "rxn-utils==2.0.0", "rxnmapper==0.3.0"] [project.urls] homepage = "https://github.com/TieuLongPhan/SynUtils" diff --git a/requirements.txt b/requirements.txt index e9ad7ad..f4e805f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,4 +6,5 @@ drfp==0.3.6 fgutils>=0.1.3 rxn-chem-utils==1.5.0 rxn-utils==2.0.0 -rxnmapper==0.3.0 \ No newline at end of file +rxnmapper==0.3.0 +rdkit >= 2024.3.3 \ No newline at end of file diff --git a/synutility/SynChem/Molecule/__init__.py b/synutility/SynChem/Molecule/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/synutility/SynChem/Molecule/standardize.py b/synutility/SynChem/Molecule/standardize.py new file mode 100644 index 0000000..16569d7 --- /dev/null +++ b/synutility/SynChem/Molecule/standardize.py @@ -0,0 +1,137 @@ +from rdkit import Chem +from rdkit.Chem import rdmolops +from rdkit.Chem.MolStandardize import rdMolStandardize +from rdkit.Chem.SaltRemover import SaltRemover + + +def normalize_molecule(mol: Chem.Mol) -> Chem.Mol: + """ + Normalize a molecule using RDKit's Normalizer. + + Parameters: + - mol (Chem.Mol): RDKit Mol object to be normalized. + + Returns: + - Chem.Mol: Normalized RDKit Mol object. + """ + normalizer = rdMolStandardize.Normalizer() + return normalizer.normalize(mol) + + +def canonicalize_tautomer(mol: Chem.Mol) -> Chem.Mol: + """ + Canonicalize the tautomer of a molecule using RDKit's TautomerCanonicalizer. + + Parameters: + - mol (Chem.Mol): RDKit Mol object. + + Returns: + - Chem.Mol: Mol object with canonicalized tautomer. + """ + tautomer_canonicalizer = rdMolStandardize.TautomerEnumerator() + return tautomer_canonicalizer.Canonicalize(mol) + + +def salts_remover(mol: Chem.Mol) -> Chem.Mol: + """ + Remove salt fragments from a molecule using RDKit's SaltRemover. + + Parameters: + - mol (Chem.Mol): RDKit Mol object. + + Returns: + - Chem.Mol: Mol object with salts removed. + """ + remover = SaltRemover() + return remover.StripMol(mol) + + +def uncharge_molecule(mol: Chem.Mol) -> Chem.Mol: + """ + Neutralize a molecule by removing counter-ions using RDKit's Uncharger. + + Parameters: + - mol (Chem.Mol): RDKit Mol object. + + Returns: + - Chem.Mol: Neutralized Mol object. + """ + uncharger = rdMolStandardize.Uncharger() + return uncharger.uncharge(mol) + + +def fragments_remover(mol: Chem.Mol) -> Chem.Mol: + """ + Remove small fragments from a molecule, keeping only the largest one. + + Parameters: + - mol (Chem.Mol): RDKit Mol object. + + Returns: + - Chem.Mol: Mol object with small fragments removed. + """ + frags = Chem.GetMolFrags(mol, asMols=True, sanitizeFrags=True) + return max(frags, default=None, key=lambda m: m.GetNumAtoms()) + + +def remove_explicit_hydrogens(mol: Chem.Mol) -> Chem.Mol: + """ + Remove explicit hydrogens from a molecule to leave only the heavy atoms. + + Parameters: + - mol (Chem.Mol): RDKit Mol object. + + Returns: + - Chem.Mol: Mol object with explicit hydrogens removed. + """ + return Chem.RemoveHs(mol) + + +def remove_radicals_and_add_hydrogens(mol: Chem.Mol) -> Chem.Mol: + """ + Remove radicals from a molecule by setting radical electrons to zero and adding hydrogens where needed. + + Parameters: + - mol (Chem.Mol): RDKit Mol object. + + Returns: + - Chem.Mol: Mol object with radicals removed and necessary hydrogens added. + """ + mol = Chem.RemoveHs(mol) # Remove explicit hydrogens first + for atom in mol.GetAtoms(): + if atom.GetNumRadicalElectrons() > 0: + atom.SetNumExplicitHs( + atom.GetNumExplicitHs() + atom.GetNumRadicalElectrons() + ) + atom.SetNumRadicalElectrons(0) + mol = rdmolops.AddHs(mol) # Add hydrogens back + return remove_explicit_hydrogens(mol) + + +def remove_isotopes(mol: Chem.Mol) -> Chem.Mol: + """ + Remove isotopic information from a molecule. + + Parameters: + - mol (Chem.Mol): RDKit Mol object. + + Returns: + - Chem.Mol: Mol object with isotopes removed. + """ + for atom in mol.GetAtoms(): + atom.SetIsotope(0) + return mol + + +def clear_stereochemistry(mol: Chem.Mol) -> Chem.Mol: + """ + Clear all stereochemical information from a molecule. + + Parameters: + - mol (Chem.Mol): RDKit Mol object. + + Returns: + - Chem.Mol: Mol object with stereochemistry cleared. + """ + Chem.RemoveStereochemistry(mol) + return mol diff --git a/synutility/SynChem/Reaction/cleanning.py b/synutility/SynChem/Reaction/cleanning.py new file mode 100644 index 0000000..5e685a8 --- /dev/null +++ b/synutility/SynChem/Reaction/cleanning.py @@ -0,0 +1,59 @@ +from typing import List +from synutility.SynChem.Reaction.balance_check import BalanceReactionCheck +from synutility.SynChem.Reaction.standardize import Standardize + + +class Cleanning: + def __init__(self) -> None: + pass + + @staticmethod + def remove_duplicates(smiles_list: List[str]) -> List[str]: + """ + Removes duplicate SMILES strings from a list, maintaining the order of + first occurrences. Uses a set to track seen SMILES for efficiency. + + Parameters: + - smiles_list (List[str]): A list of SMILES strings representing + chemical reactions. + + Returns: + - List[str]: A list with unique SMILES strings, preserving the original order. + """ + seen = set() + unique_smiles = [ + smiles for smiles in smiles_list if not (smiles in seen or seen.add(smiles)) + ] + return unique_smiles + + @staticmethod + def clean_smiles(smiles_list: List[str]) -> List[str]: + """ + Cleans a list of SMILES strings by standardizing them, checking their chemical + balance, and removing duplicates. Each SMILES is first checked for validity and + then standardized. Only balanced reactions are kept. + + Parameters: + - smiles_list (List[str]): A list of SMILES strings representing chemical reactions. + + Returns: + - List[str]: A list of cleaned and standardized SMILES strings. + """ + # Standardize and check balance in separate list comprehensions + standardizer = Standardize() + balance_checker = BalanceReactionCheck() + + standardized_smiles = [ + standardizer.standardize_rsmi(smiles, True) + for smiles in smiles_list + if smiles + ] + balanced_smiles = [ + smiles + for smiles in standardized_smiles + if balance_checker.rsmi_balance_check(smiles) + ] + + # Remove duplicates from the balanced SMILES list + clean_smiles = Cleanning.remove_duplicates(balanced_smiles) + return clean_smiles diff --git a/synutility/SynChem/Reaction/standardize.py b/synutility/SynChem/Reaction/standardize.py index e9ec452..2a48090 100644 --- a/synutility/SynChem/Reaction/standardize.py +++ b/synutility/SynChem/Reaction/standardize.py @@ -124,4 +124,5 @@ def fit( rsmi = self.remove_atom_mapping(rsmi) rsmi = self.standardize_rsmi(rsmi, not ignore_stereo) + rsmi = rsmi.replace("[HH]", "[H][H]") return rsmi diff --git a/synutility/SynGraph/Descriptor/__init__.py b/synutility/SynGraph/Descriptor/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/synutility/SynGraph/graph_descriptors.py b/synutility/SynGraph/Descriptor/graph_descriptors.py similarity index 99% rename from synutility/SynGraph/graph_descriptors.py rename to synutility/SynGraph/Descriptor/graph_descriptors.py index 5e0a871..f34cab0 100644 --- a/synutility/SynGraph/graph_descriptors.py +++ b/synutility/SynGraph/Descriptor/graph_descriptors.py @@ -7,8 +7,8 @@ class GraphDescriptor: - def __init__(self, graph: nx.Graph): - self.graph = graph + def __init__(self) -> None: + pass @staticmethod def is_graph_empty(graph: Union[nx.Graph, dict, list, Any]) -> bool: diff --git a/synutility/SynGraph/Descriptor/graph_signature.py b/synutility/SynGraph/Descriptor/graph_signature.py new file mode 100644 index 0000000..68a0173 --- /dev/null +++ b/synutility/SynGraph/Descriptor/graph_signature.py @@ -0,0 +1,128 @@ +import networkx as nx +from collections import Counter +from synutility.SynGraph.Descriptor.graph_descriptors import GraphDescriptor + + +class GraphSignature: + """ + Provides methods to generate canonical signatures for graph nodes, edges, and complete graphs, + useful for comparisons or identification in graph-based data structures. + + Attributes: + graph (nx.Graph): The graph for which signatures will be generated. + """ + + def __init__(self, graph: nx.Graph): + """ + Initializes the GraphSignature class with a specified graph. + + Parameters: + - graph (nx.Graph): A NetworkX graph instance. + """ + self.graph = graph + + def create_node_signature(self, condensed: bool = True) -> str: + """ + Generates a canonical node signature. If `condensed` is True, it condenses + consecutive occurrences of elements, formatting like 'Br{1}C{10}'. + + Parameters: + - condensed (bool): If True, condenses elements with counts. If False, keeps the original format. + + Returns: + - str: A concatenated string of sorted node elements, optionally with counts. + """ + # Sort elements + elements = sorted(data["element"] for node, data in self.graph.nodes(data=True)) + + if condensed: + # Count occurrences and format with counts + element_counts = Counter(elements) + signature_parts = [] + for element, count in element_counts.items(): + if count > 1: + signature_parts.append(f"{element}{{{count}}}") + else: + signature_parts.append(element) + return "".join(signature_parts) + else: + # Return the original, uncompressed format + return "".join(elements) + + def create_edge_signature(self) -> str: + """ + Generates a canonical edge signature by formatting each edge with sorted node elements and a bond order, + separated by '/', with each edge represented as 'node1[standard_order]node2'. + + Returns: + - str: A concatenated and sorted string of edge representations. + """ + edge_signature_parts = [] + for u, v, data in self.graph.edges(data=True): + standard_order = int( + data.get("standard_order", 1) + ) # Default to 1 if missing + node1, node2 = sorted( + [self.graph.nodes[u]["element"], self.graph.nodes[v]["element"]] + ) + part = f"{node1}[{standard_order}]{node2}" + edge_signature_parts.append(part) + return "/".join(sorted(edge_signature_parts)) + + def create_topology_signature(self) -> str: + """ + Generates a topology signature for the graph based on its cyclic properties and structure. + The topology is classified and quantified by identifying cycles and other structural features. + + Returns: + - str: A string representing the numerical and qualitative topology signature of the graph. + """ + des = GraphDescriptor() + topo = des.check_graph_type(self.graph) + cycle = des.get_cycle_member_rings(self.graph) + + topo_mapping = { + "Acyclic": 0, + "Single Cyclic": 1, + "Combinatorial Cyclic": 2, + "Complex Cyclic": 3, + } + + topo_code = topo_mapping.get(topo, 4) + + if topo_code == 0: + cycle = [0] # Represent acyclic graph with no cycles + elif topo_code == 3: + cycle = [0] + cycle # Add complexity prefix for complex cyclic graphs + + rstep = len(cycle) + cycle_str = "".join(map(str, cycle)) + return f"{rstep}{topo_code}{cycle_str}" + + def create_graph_signature( + self, + condensed: bool = True, + topology: bool = True, + nodes: bool = True, + edges: bool = True, + ) -> str: + """ + Combines node, edge, and topology signatures into a single comprehensive graph signature. + + Returns: + - str: A concatenated string representing the complete graph signature formatted as + 'topology_signature.node_signature.edge_signature'. + """ + if topology: + topo_signature = self.create_topology_signature() + else: + topo_signature = "" + if nodes: + node_signature = self.create_node_signature(condensed) + else: + node_signature = "" + if edges: + edge_signature = self.create_edge_signature() + else: + edge_signature = "" + return f"{topo_signature}.{node_signature}.{edge_signature}" diff --git a/synutility/SynGraph/Fingerprint/__init__.py b/synutility/SynGraph/Fingerprint/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/synutility/SynGraph/Fingerprint/graph_fps.py b/synutility/SynGraph/Fingerprint/graph_fps.py new file mode 100644 index 0000000..58b1214 --- /dev/null +++ b/synutility/SynGraph/Fingerprint/graph_fps.py @@ -0,0 +1,97 @@ +import networkx as nx +import hashlib +import numpy as np + + +class GraphFP: + def __init__( + self, graph: nx.Graph, nBits: int = 1024, hash_alg: str = "sha256" + ) -> None: + """ + Initialize the GraphFP class to create binary fingerprints based on various graph + characteristics. + + Parameters: + - graph (nx.Graph): Graph on which to perform analysis. + - nBits (int): Size of the binary fingerprint in bits. + - hash_alg (str): Cryptographic hash function used for hashing. + """ + self.graph = graph + self.nBits = nBits + self.hash_alg = hash_alg + self.hash_function = getattr(hashlib, self.hash_alg) + + def fingerprint(self, method: str) -> str: + """ + Generate a binary string fingerprint of the graph using the specified method. + + Parameters: + - method (str): The method to use for fingerprinting + ('spectrum', 'adjacency', 'degree', 'motif') + + Returns: + - str: A binary string of length `nBits` that represents the fingerprint of + the graph. + """ + if method == "spectrum": + fp = self._spectrum_fp() + elif method == "adjacency": + fp = self._adjacency_fp() + elif method == "degree": + fp = self._degree_sequence_fp() + elif method == "motif": + fp = self._motif_count_fp() + else: + raise ValueError("Unsupported fingerprinting method.") + + # If the fingerprint is shorter than nBits, use iterative deepening + if len(fp) < self.nBits: + fp += self.iterative_deepening(self.nBits - len(fp)) + + return fp[: self.nBits] + + def _spectrum_fp(self) -> str: + # Graph spectrum (eigenvalues of the adjacency matrix) + eigenvalues = np.linalg.eigvals(nx.adjacency_matrix(self.graph).todense()) + sorted_eigenvalues = np.sort(eigenvalues)[: self.nBits] + eigen_str = "".join( + bin(int(abs(eig)))[2:].zfill(8) for eig in sorted_eigenvalues + ) + return eigen_str[: self.nBits] + + def _adjacency_fp(self) -> str: + # Adjacency matrix flattened + adj_matrix = nx.adjacency_matrix(self.graph).todense().flatten() + adj_str = "".join(str(int(x)) for x in adj_matrix) + return adj_str[: self.nBits] + + def _degree_sequence_fp(self) -> str: + # Degree sequence + degrees = sorted([d for n, d in self.graph.degree()], reverse=True) + degree_str = "".join(bin(d)[2:].zfill(8) for d in degrees) + return degree_str[: self.nBits] + + def _motif_count_fp(self) -> str: + # Motif counts (e.g., number of triangles) + triangles = sum(nx.triangles(self.graph).values()) // 3 + triangle_str = bin(triangles)[2:].zfill(self.nBits) + return triangle_str[: self.nBits] + + def iterative_deepening(self, remaining_bits: int) -> str: + """ + Extend the hash length using iterative hashing until the desired bit length is + achieved. + + Parameters: + - remaining_bits (int): Number of bits needed to complete the fingerprint + to `nBits`. + + Returns: + - str: Additional binary data to achieve the desired hash length. + """ + additional_data = "" + hash_obj = self.hash_function() + while len(additional_data) * 4 < remaining_bits: + hash_obj.update(additional_data.encode()) + additional_data += hash_obj.hexdigest() + return bin(int(additional_data, 16))[2:][:remaining_bits] diff --git a/synutility/SynGraph/Fingerprint/hash_fps.py b/synutility/SynGraph/Fingerprint/hash_fps.py new file mode 100644 index 0000000..3febabb --- /dev/null +++ b/synutility/SynGraph/Fingerprint/hash_fps.py @@ -0,0 +1,130 @@ +import networkx as nx +import hashlib +from typing import Optional, Any + + +class HashFPs: + def __init__( + self, graph: nx.Graph, numBits: int = 256, hash_alg: str = "sha256" + ) -> None: + """ + Initialize the HashFPs class with a graph and configuration settings. + + Parameters: + - graph (nx.Graph): The graph to be fingerprinted. + - numBits (int): Number of bits in the output binary hash. Default is 256 bits. + - hash_alg (str): The hash algorithm to use, such as 'sha256' or 'sha512'. + + Raises: + - ValueError: If `numBits` is non-positive or if `hash_alg` is not supported + by hashlib. + """ + self.graph = graph + self.numBits = numBits + self.hash_alg = hash_alg + self.validate_parameters() + + def validate_parameters(self) -> None: + """Validate the initial parameters for errors.""" + if self.numBits <= 0: + raise ValueError("Number of bits must be positive") + if not hasattr(hashlib, self.hash_alg): + raise ValueError(f"Unsupported hash algorithm: {self.hash_alg}") + + def hash_fps( + self, + start_node: Optional[int] = None, + end_node: Optional[int] = None, + max_path_length: Optional[int] = None, + ) -> str: + """ + Generate a binary hash fingerprint of the graph based on its paths and cycles. + + Parameters: + - start_node (Optional[int]): The starting node index for path detection. + - end_node (Optional[int]): The ending node index for path detection. + - max_path_length (Optional[int]): The maximum length for paths to be considered. + + Returns: + - str: A binary string representing the truncated hash of the graph's structural + features. + """ + hash_object = self.initialize_hash() + features = self.extract_features(start_node, end_node, max_path_length) + full_hash_binary = self.finalize_hash(hash_object, features) + return full_hash_binary + + def initialize_hash(self) -> Any: + """Initialize and return the hash object based on the specified algorithm.""" + return getattr(hashlib, self.hash_alg)() + + def extract_features( + self, + start_node: Optional[int], + end_node: Optional[int], + max_path_length: Optional[int], + ) -> str: + """ + Extract features from the graph based on paths and cycles. + + Parameters: + - start_node (Optional[int]): The starting node for path detection. + - end_node (Optional[int]): The ending node for path detection. + - max_path_length (Optional[int]): Cutoff for path length during detection. + + Returns: + - str: A string of concatenated feature values. + """ + cycles = list(nx.simple_cycles(self.graph)) + paths = [] + if start_node is not None and end_node is not None: + paths = list( + nx.all_simple_paths( + self.graph, + source=start_node, + target=end_node, + cutoff=max_path_length, + ) + ) + features = [len(c) for c in cycles] + [len(p) for p in paths] + return "".join(map(str, features)) + + def finalize_hash(self, hash_object: Any, features: str) -> str: + """ + Finalize the hash using the features extracted and return the hash as a binary + string. + + Parameters: + - hash_object (Any): The hash object. + - features (str): Concatenated string of graph features. + + Returns: + - str: The final binary string of the hash, truncated or extended to `numBits`. + """ + hash_object.update(features.encode()) + full_hash_binary = bin(int(hash_object.hexdigest(), 16))[2:] + if len(full_hash_binary) < self.numBits: + full_hash_binary += self.iterative_deepening( + hash_object, self.numBits - len(full_hash_binary) + ) + return full_hash_binary[: self.numBits] + + def iterative_deepening(self, hash_object: Any, remaining_bits: int) -> str: + """ + Extend hash length using iterative hashing until the desired bit length is + achieved. + + Parameters: + - hash_object (hashlib._Hash): The hash object for iterative deepening. + - remaining_bits (int): Number of bits needed to reach `numBits`. + + Returns: + - str: Additional binary data to achieve the desired hash length. + """ + additional_data = "" + while ( + len(additional_data) * 4 < remaining_bits + ): # Each hex digit represents 4 bits + hash_object.update(additional_data.encode()) + additional_data += hash_object.hexdigest() + return bin(int(additional_data, 16))[2:][:remaining_bits] diff --git a/synutility/SynGraph/Fingerprint/morgan_fps.py b/synutility/SynGraph/Fingerprint/morgan_fps.py new file mode 100644 index 0000000..4bef1fa --- /dev/null +++ b/synutility/SynGraph/Fingerprint/morgan_fps.py @@ -0,0 +1,87 @@ +import networkx as nx +import hashlib +from typing import Any + + +class MorganFPs: + def __init__( + self, + graph: nx.Graph, + radius: int = 3, + nBits: int = 1024, + hash_alg: str = "sha256", + ): + """ + Initialize the MorganFPs class to generate fingerprints based on the Morgan + algorithm, approximating Extended Connectivity Fingerprints (ECFPs). + + Parameters: + - graph (nx.Graph): The graph to analyze. + - radius (int): The radius to consider for node neighborhood analysis. + - nBits (int): Total number of bits in the final fingerprint output. + - hash_alg (str): Hash algorithm to use for generating hashes of node + neighborhoods. + """ + self.graph = graph + self.radius = radius + self.nBits = nBits + self.hash_alg = hash_alg + self.hash_function = getattr(hashlib, self.hash_alg) + + def generate_fingerprint(self) -> str: + """ + Generate a binary string fingerprint of the graph based on the local environments + of nodes. Ensures the output is exactly `nBits` in length using iterative + deepening if necessary. + + Returns: + - str: A binary string of length `nBits` representing the fingerprint of the + graph. + """ + fingerprint = "" + for node in self.graph.nodes(): + neighborhood = nx.single_source_shortest_path_length( + self.graph, node, cutoff=self.radius + ) + neighborhood_str = "-".join( + [ + f"{nbr}-{dist}" + for nbr, dist in sorted(neighborhood.items()) + if nbr != node + ] + ) + hash_obj = self.hash_function(neighborhood_str.encode()) + node_hash = bin(int(hash_obj.hexdigest(), 16))[2:].zfill( + hash_obj.digest_size * 8 + ) + if len(fingerprint) + len(node_hash) > self.nBits: + needed_bits = self.nBits - len(fingerprint) + node_hash = node_hash[:needed_bits] + fingerprint += node_hash + if len(fingerprint) == self.nBits: + return fingerprint + + if len(fingerprint) < self.nBits: + fingerprint += self.iterative_deepening( + hash_obj, self.nBits - len(fingerprint) + ) + return fingerprint + + def iterative_deepening(self, hash_object: Any, remaining_bits: int) -> str: + """ + Extend the hash length using iterative hashing until the desired bit length is + achieved. + + Parameters: + - hash_object (hashlib._Hash): The hash object used for iterative deepening. + - remaining_bits (int): Number of bits needed to complete the fingerprint to + `nBits`. + + Returns: + - str: Additional binary data to achieve the desired hash length. + """ + additional_data = "" + while len(additional_data) * 4 < remaining_bits: + hash_object.update(additional_data.encode()) + additional_data += hash_object.hexdigest() + return bin(int(additional_data, 16))[2:][:remaining_bits] diff --git a/synutility/SynGraph/Fingerprint/path_fps.py b/synutility/SynGraph/Fingerprint/path_fps.py new file mode 100644 index 0000000..b5e4e92 --- /dev/null +++ b/synutility/SynGraph/Fingerprint/path_fps.py @@ -0,0 +1,82 @@ +import networkx as nx +import hashlib +from typing import Any + + +class PathFPs: + def __init__( + self, + graph: nx.Graph, + max_length: int = 10, + nBits: int = 1024, + hash_alg: str = "sha256", + ) -> None: + """ + Initialize the PathFPs class to create a binary fingerprint based on paths in a + graph. + + Parameters: + - graph (nx.Graph): Graph on which to perform analysis. + - max_length (int): Limit on path lengths considered in the fingerprint. + - nBits (int): Size of the binary fingerprint in bits. + - hash_alg (str): Cryptographic hash function used for path hashing. + - hash_function (Callable): Hash function initialized from hashlib. + """ + self.graph = graph + self.max_length = max_length + self.nBits = nBits + self.hash_alg = hash_alg + self.hash_function = getattr(hashlib, self.hash_alg) + + def generate_fingerprint(self) -> str: + """ + Generate a binary string fingerprint of the graph by hashing paths up to a certain + length and combining them. + + Returns: + - str: A binary string of length `nBits` that represents the fingerprint of the + graph. + """ + fingerprint = "" + for node in self.graph.nodes(): + for target in self.graph.nodes(): + if node != target: + for path in nx.all_simple_paths( + self.graph, source=node, target=target, cutoff=self.max_length + ): + path_str = "-".join(map(str, path)) + hash_obj = self.hash_function(path_str.encode()) + path_hash = bin(int(hash_obj.hexdigest(), 16))[2:].zfill( + hash_obj.digest_size * 8 + ) + if len(fingerprint) + len(path_hash) > self.nBits: + needed_bits = self.nBits - len(fingerprint) + path_hash = path_hash[:needed_bits] + fingerprint += path_hash + if len(fingerprint) == self.nBits: + return fingerprint + + if len(fingerprint) < self.nBits: + fingerprint += self.iterative_deepening( + hash_obj, self.nBits - len(fingerprint) + ) + return fingerprint + + def iterative_deepening(self, hash_object: Any, remaining_bits: int) -> str: + """ + Extend the hash length using iterative hashing until the desired bit length is + achieved. + + Parameters: + - hash_object (hashlib._Hash): The hash object used for iterative deepening. + - remaining_bits (int): Number of bits needed to complete the fingerprint + to `nBits`. + + Returns: + - str: Additional binary data to achieve the desired hash length. + """ + additional_data = "" + while len(additional_data) * 4 < remaining_bits: + hash_object.update(additional_data.encode()) + additional_data += hash_object.hexdigest() + return bin(int(additional_data, 16))[2:][:remaining_bits] diff --git a/synutility/SynIO/Format/__init__.py b/synutility/SynIO/Format/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/synutility/SynIO/Format/dg_to_gml.py b/synutility/SynIO/Format/dg_to_gml.py new file mode 100644 index 0000000..b2d079d --- /dev/null +++ b/synutility/SynIO/Format/dg_to_gml.py @@ -0,0 +1,122 @@ +import regex +from synutility.SynChem.Reaction.standardize import Standardize +from synutility.SynIO.debug import setup_logging +from mod import DGVertexMapper, smiles, Rule + +logger = setup_logging() + + +class DGToGML: + def __init__(self) -> None: + self.standardizer = Standardize() + pass + + @staticmethod + def getReactionSmiles(dg): + origSmiles = {} + for v in dg.vertices: + s = v.graph.smilesWithIds + s = regex.sub(":([0-9]+)]", ":o\\1]", s) + origSmiles[v.graph] = s + + res = {} + for e in dg.edges: + vms = DGVertexMapper(e, rightLimit=1, leftLimit=1) + eductSmiles = [origSmiles[g] for g in vms.left] + + for ev in vms.left.vertices: + s = eductSmiles[ev.graphIndex] + s = s.replace(f":o{ev.vertex.id}]", f":{ev.id}]") + eductSmiles[ev.graphIndex] = s + + strs = set() + for vm in DGVertexMapper(e, rightLimit=1, leftLimit=1): + productSmiles = [origSmiles[g] for g in vms.right] + for ev in vms.left.vertices: + pv = vm.map[ev] + if not pv: + continue + s = productSmiles[pv.graphIndex] + s = s.replace(f":o{pv.vertex.id}]", f":{ev.id}]") + productSmiles[pv.graphIndex] = s + count = vms.left.numVertices + for pv in vms.right.vertices: + ev = vm.map.inverse(pv) + if ev: + continue + s = productSmiles[pv.graphIndex] + s = s.replace(f":o{pv.vertex.id}]", f":{count}]") + count += 1 + productSmiles[pv.graphIndex] = s + left = ".".join(eductSmiles) + right = ".".join(productSmiles) + s = f"{left}>>{right}" + assert ":o" not in s + strs.add(s) + res[e] = list(sorted(strs)) + return res + + @staticmethod + def parseReactionSmiles(line: str) -> Rule: + sLeft, sRight = line.split(">>") + ssLeft = sLeft.split(".") + ssRight = sRight.split(".") + mLeft = [smiles(s, add=False) for s in ssLeft] + mRight = [smiles(s, add=False) for s in ssRight] + + def printGraph(g): + extFromInt = {} + for iExt in range(g.minExternalId, g.maxExternalId + 1): + v = g.getVertexFromExternalId(iExt) + if not v.isNull(): + extFromInt[v] = iExt + s = "" + for v in g.vertices: + assert v in extFromInt + s += '\t\tnode [ id %d label "%s" ]\n' % (extFromInt[v], v.stringLabel) + for e in g.edges: + s += '\t\tedge [ source %d target %d label "%s" ]\n' % ( + extFromInt[e.source], + extFromInt[e.target], + e.stringLabel, + ) + return s + + s = "rule [\n\tleft [\n" + for m in mLeft: + s += printGraph(m) + s += "\t]\n\tright [\n" + for m in mRight: + s += printGraph(m) + s += "\t]\n]\n" + return s, Rule.fromGMLString(s, add=False) + + def fit(self, dg, origSmiles): + """ + Matches the original SMILES to a list of generated reaction SMILES and + returns the parsed reaction. + + Parameters: + - dg (DataGenerator): The data generator instance containing the reactions. + - origSmiles (str): The original SMILES string to match. + + Returns: + - Parsed reaction if a match is found; otherwise, None. + """ + try: + res = DGToGML.getReactionSmiles(dg) + smiles_list = [value for values in res.values() for value in values] + + smiles_standard = [ + self.standardizer.fit(rsmi, True, True) for rsmi in smiles_list + ] + origSmiles_standard = self.standardizer.fit(origSmiles, True, True) + + for index, value in enumerate(smiles_standard): + if value == origSmiles_standard: + return self.parseReactionSmiles(smiles_list[index]) + + return None + except Exception as e: + logger.error(f"An error occurred: {e}") + return None diff --git a/synutility/SynIO/Format/gml_to_nx.py b/synutility/SynIO/Format/gml_to_nx.py new file mode 100644 index 0000000..7e6d4f9 --- /dev/null +++ b/synutility/SynIO/Format/gml_to_nx.py @@ -0,0 +1,144 @@ +import networkx as nx +import re +from typing import Tuple +from synutility.SynIO.Format.its_construction import ITSConstruction + + +class GMLToNX: + def __init__(self, gml_text: str): + """ + Initializes a GMLToNX object that can parse GML-like text into separate + NetworkX graphs representing different stages or components of + a chemical reaction. + + Parameters: + - gml_text (str): The GML-like text content that will be parsed into graphs. + """ + self.gml_text = gml_text + self.graphs = {"left": nx.Graph(), "context": nx.Graph(), "right": nx.Graph()} + + def _parse_element(self, line: str, current_section: str): + """ + Private method to parse a line from the GML text, extracting nodes and edges + to populate the specified graph section. + + Parameters: + - line (str): The line of text from the GML data. + - current_section (str): The key of the graph section + ('left', 'context', 'right') being populated. + """ + label_to_order = {"-": 1, ":": 1.5, "=": 2, "#": 3} + tokens = line.split() + if "node" in line: + node_id = int(tokens[tokens.index("id") + 1]) + label = tokens[tokens.index("label") + 1].strip('"') + element, charge = self._extract_element_and_charge(label) + node_attributes = { + "element": element, + "charge": charge, + "atom_map": node_id, + } + self.graphs[current_section].add_node(node_id, **node_attributes) + elif "edge" in line: + source = int(tokens[tokens.index("source") + 1]) + target = int(tokens[tokens.index("target") + 1]) + label = tokens[tokens.index("label") + 1].strip('"') + order = label_to_order.get(label, 0) + self.graphs[current_section].add_edge(source, target, order=float(order)) + + def _synchronize_nodes(self): + """ + Private method to ensure that all nodes present in the 'context' graph are also + present in the 'left' and 'right' graphs. + """ + context_nodes = self.graphs["context"].nodes(data=True) + for graph_key in ["left", "right"]: + for node, data in context_nodes: + self.graphs[graph_key].add_node(node, **data) + + def _extract_element_and_charge(self, label: str) -> Tuple[str, int]: + """ + Extracts the chemical element and its charge from a node label. This function is + designed to handle labels formatted in several ways, including just an element + symbol ("C"), an element with a charge and sign ("Na+"), or an element with a + multi-digit charge and a sign ("Mg2+"). The function uses regular expressions + to parse the label accurately and extract the needed information. + + Parameters: + - label (str): The label from which to extract information. Expected to be in + one of the following formats: + - "Element" (e.g., "C") + - "Element[charge][sign]" (e.g., "Na+", "Mg2+") + - "Element[charge][sign]" where charge is optional and if present, must be + followed by a sign (e.g., "Al3+", "K+"). The charge is not assumed if no sign + is present. + + Returns: + - Tuple[str, int]: A tuple where the first element is the chemical element + symbol (str) extracted from the label, and the second element is an integer + representing the charge. The charge defaults to 0 if no charge information + is present in the label. + + Raises: + - ValueError: If the label does not conform to the expected formats, + which should not happen if labels are pre-validated. + + Note: + - The function assumes that the input label is well-formed according to the + described patterns. Labels without any recognizable pattern will default to + returning "X" as the element with a charge of 0, though this behavior + is conservative and primarily for error handling. + """ + # Regex to separate the element symbols from the optional charge and sign + match = re.match(r"([A-Za-z]+)(\d+)?([+-])?$", label) + if not match: + return ( + "X", + 0, + ) # Default case if regex fails to match, unlikely but safe to handle + + element = match.group(1) + charge_number = match.group(2) + charge_sign = match.group(3) + + if charge_number and charge_sign: + # If there's a number and a sign, combine them to form the charge + charge = int(charge_number) * (1 if charge_sign == "+" else -1) + elif charge_sign: + # If there is no number but there's a sign, it means the charge is 1 or -1 + charge = 1 if charge_sign == "+" else -1 + else: + # If no charge information is provided, assume a charge of 0 + charge = 0 + + return element, charge + + def transform(self) -> Tuple[nx.Graph, nx.Graph, nx.Graph]: + """ + Transforms the GML-like text into three distinct NetworkX graphs, each + representing different aspects of the reaction: 'left' for reactants, + 'context' for ITS, and 'right' for products. + + Returns: + - Tuple[nx.Graph, nx.Graph, nx.Graph]: A tuple containing the graphs for + reactants, products, and ITS. + """ + current_section = None + lines = self.gml_text.split("\n") + + for line in lines: + line = line.strip() + if line.startswith("rule") or line == "]": + continue + if any(section in line for section in ["left", "context", "right"]): + current_section = line.split("[")[0].strip() + continue + if line.startswith("node") or line.startswith("edge"): + self._parse_element(line, current_section) + + self._synchronize_nodes() + self.graphs["context"] = ITSConstruction.ITSGraph( + self.graphs["left"], self.graphs["right"] + ) + + return (self.graphs["left"], self.graphs["right"], self.graphs["context"]) diff --git a/synutility/SynIO/Format/graph_to_mol.py b/synutility/SynIO/Format/graph_to_mol.py new file mode 100644 index 0000000..0cbbddb --- /dev/null +++ b/synutility/SynIO/Format/graph_to_mol.py @@ -0,0 +1,87 @@ +from rdkit import Chem +import networkx as nx +from typing import Dict + + +class GraphToMol: + """ + Converts a NetworkX graph representation of a molecule back into an RDKit molecule + object, taking into account specific node and edge attributes for the construction of + the molecule. An option to ignore bond orders can be specified, + treating all bonds as single bonds. + """ + + def __init__( + self, node_attributes: Dict[str, str], edge_attributes: Dict[str, str] + ): + """ + Initializes the GraphToMol converter with mappings for node and edge attributes + to their corresponding RDKit atom and bond properties. + """ + self.node_attributes = node_attributes + self.edge_attributes = edge_attributes + + def graph_to_mol( + self, graph: nx.Graph, ignore_bond_order: bool = False + ) -> Chem.Mol: + """ + Converts a NetworkX graph into an RDKit molecule object by interpreting node and + edge attributes according to the provided mappings. Optionally ignores bond + orders, treating all bonds as single bonds. + + Parameters: + - graph (nx.Graph): The NetworkX graph representation of the molecule to be + converted. + - ignore_bond_order (bool): If True, all bonds are treated as single bonds + regardless of their specified order in the graph. + + Returns: + - Chem.Mol: An RDKit molecule object constructed based on the graph + representation. + """ + mol = Chem.RWMol() + + # Map for tracking RDKit atom indices corresponding to NetworkX nodes + node_to_idx: Dict[int, int] = {} + + # Add atoms to the molecule based on node attributes + for node, data in graph.nodes(data=True): + element = data.get( + self.node_attributes["element"], "C" + ) # Defaults to Carbon + charge = data.get(self.node_attributes["charge"], 0) + atom = Chem.Atom(element) + atom.SetFormalCharge(charge) + if "atom_class" in data: # Set atom map number if available + atom.SetAtomMapNum(data["atom_class"]) + idx = mol.AddAtom(atom) + node_to_idx[node] = idx + + # Add bonds between atoms based on edge attributes + for u, v, data in graph.edges(data=True): + if ignore_bond_order: + bond_order = 1 # Treat all bonds as single bonds + else: + bond_order = abs( + data.get(self.edge_attributes["order"], 1) + ) # Use absolute value of bond order + bond_type = self.get_bond_type_from_order(bond_order) + mol.AddBond(node_to_idx[u], node_to_idx[v], bond_type) + + # Attempt to sanitize the molecule to ensure its chemical validity + Chem.SanitizeMol(mol) + + return mol + + @staticmethod + def get_bond_type_from_order(order: float) -> Chem.BondType: + """ + Converts a numerical bond order into the corresponding RDKit BondType enum. + """ + if order == 1: + return Chem.BondType.SINGLE + elif order == 2: + return Chem.BondType.DOUBLE + elif order == 3: + return Chem.BondType.TRIPLE + return Chem.BondType.AROMATIC diff --git a/synutility/SynIO/Format/isomorphism.py b/synutility/SynIO/Format/isomorphism.py new file mode 100644 index 0000000..fa3ab10 --- /dev/null +++ b/synutility/SynIO/Format/isomorphism.py @@ -0,0 +1,48 @@ +import networkx as nx +from networkx.algorithms.isomorphism import generic_node_match, generic_edge_match +from operator import eq +from typing import List, Any + + +def isomorphism_check( + graph_i: nx.Graph, + graph_j: nx.Graph, + node_label_names: List[str] = ["element", "charge"], + node_label_default: List[Any] = ["*", 0], + edge_attribute: str = "order", + edge_default: Any = 1, +) -> bool: + """ + Checks if two graphs are isomorphic based on specified node and edge attributes. + + Parameters: + - graph_i (nx.Graph): First graph to be compared. + - graph_j (nx.Graph): Second graph to be compared. + - node_label_names (List[str]): List of node attribute names to consider for isomorphism. + - node_label_default (List[Any]): Defaults for node attributes if not present. + - edge_attribute (str): Edge attribute name to consider for isomorphism. + - edge_default (Any): Default value for the edge attribute if not present. + + Returns: + - bool: True if the graphs are isomorphic considering specified attributes, else False. + """ + + # Prepare the operator list for node matching + node_label_operators = [eq for _ in node_label_names] + + # Create node and edge match functions using generic matchers + node_match = generic_node_match( + node_label_names, # attribute names + node_label_default, # default values for each attribute + node_label_operators, # operators for each attribute comparison + ) + edge_match = generic_edge_match( + edge_attribute, # The attribute name to compare for edges + edge_default, # Default value if the attribute is missing + eq, # Operator for comparing edge attributes + ) + + # Use the isomorphic check with node and edge match functions + return nx.is_isomorphic( + graph_i, graph_j, node_match=node_match, edge_match=edge_match + ) diff --git a/synutility/SynIO/Format/its_construction.py b/synutility/SynIO/Format/its_construction.py new file mode 100644 index 0000000..8176ca2 --- /dev/null +++ b/synutility/SynIO/Format/its_construction.py @@ -0,0 +1,213 @@ +import networkx as nx +from typing import Tuple, Dict, Any +from copy import deepcopy + + +class ITSConstruction: + @staticmethod + def ITSGraph( + G: nx.Graph, + H: nx.Graph, + ignore_aromaticity: bool = False, + attributes_defaults: Dict[str, Any] = None, + balance_its: bool = True, + ) -> nx.Graph: + """ + Creates a Combined Graph Representation (CGR) from two input graphs G and H. + + This function merges the nodes of G and H, preserving their attributes. Edges are + added based on their presence in G and/or H, with special labeling for edges + unique to one graph. + + Parameters: + - G (nx.Graph): The first input graph. + - H (nx.Graph): The second input graph. + - ignore_aromaticity (bool): Whether to ignore aromaticity in the graphs. + Defaults to False. + - attributes_defaults (Dict[str, Any]): A dictionary of default attributes + to use for nodes that are not present in either G or H. + + Returns: + - nx.Graph: The Combined Graph Representation as a new graph instance. + """ + # Create a null graph from a copy of G to preserve attributes + if (balance_its and len(G.nodes()) <= len(H.nodes())) or ( + not balance_its and len(G.nodes()) >= len(H.nodes()) + ): + ITS = deepcopy(G) + else: + ITS = deepcopy(H) + + ITS.remove_edges_from(list(ITS.edges())) + + # Initialize a dictionary to hold node types + typesDict = dict() + + # Add typeG and typeH attributes, or default attributes for "*" unknown elements + for v in list(ITS.nodes()): + # Check if v is in both G and H + if v not in G.nodes() or v not in H.nodes(): + continue + else: + typesG = ITSConstruction.get_node_attributes_with_defaults( + G, v, attributes_defaults + ) # node attribute in reactant graph + typesH = ITSConstruction.get_node_attributes_with_defaults( + H, v, attributes_defaults + ) # node attribute in product graph + typesDict[v] = (typesG, typesH) + + nx.set_node_attributes(ITS, typesDict, "typesGH") + + # Add edges from G and H + ITS = ITSConstruction.add_edges_to_ITS(ITS, G, H, ignore_aromaticity) + + return ITS + + @staticmethod + def get_node_attribute(graph: nx.Graph, node: int, attribute: str, default): + """ + Retrieves a specific attribute for a node in a graph, returning a default value if + the attribute is missing. + + Parameters: + - graph (nx.Graph): The graph from which to retrieve the node attribute. + - node (int): The node identifier. + - attribute (str): The attribute to retrieve. + - default: The default value to return if the attribute is missing. + + Returns: + - The value of the node attribute, or the default value if the attribute is + missing. + """ + try: + return graph.nodes[node][attribute] + except KeyError: + return default + + @staticmethod + def get_node_attributes_with_defaults( + graph: nx.Graph, node: int, attributes_defaults: Dict[str, Any] = None + ) -> Tuple: + """ + Retrieves node attributes from a graph, assigning default values if they are + missing. Allows for an optional dictionary of attribute-default value pairs to + specify custom attributes and defaults. + + Parameters: + - graph (nx.Graph): The graph from which to retrieve node attributes. + - node (int): The node identifier. + - attributes_defaults (Dict[str, Any], optional): A dictionary specifying + attributes and their default values. + + Returns: + - Tuple: A tuple containing the node attributes in the order specified by + attributes_defaults. + """ + if attributes_defaults is None: + attributes_defaults = { + "element": "*", + "aromatic": False, + "hcount": 0, + "charge": 0, + "neighbors": ["", ""], + } + + return tuple( + ITSConstruction.get_node_attribute(graph, node, attr, default) + for attr, default in attributes_defaults.items() + ) + + @staticmethod + def add_edges_to_ITS( + ITS: nx.Graph, G: nx.Graph, H: nx.Graph, ignore_aromaticity: bool = False + ) -> nx.Graph: + """ + Adds edges to the Combined Graph Representation (ITS) based on the edges of G and + H, and returns a new graph without modifying the original ITS. + + Parameters: + - ITS (nx.Graph): The initial combined graph representation. + - G (nx.Graph): The first input graph. + - H (nx.Graph): The second input graph. + - ignore_aromaticity (bool): Whether to ignore aromaticity in the graphs. Defaults + to False. + + Returns: + - nx.Graph: The updated graph with added edges. + """ + new_ITS = deepcopy(ITS) + + # Add edges from G and H + for graph_from, graph_to, reverse in [(G, H, False), (H, G, True)]: + for u, v in graph_from.edges(): + if not new_ITS.has_edge(u, v): + if graph_to.has_edge(u, v) or graph_to.has_edge(v, u): + edge_label = ( + (graph_from[u][v]["order"], graph_to[u][v]["order"]) + if graph_to.has_edge(u, v) + else ( + (graph_from[v][u]["order"], graph_to[v][u]["order"]) + if reverse + else ( + graph_from[u][v]["order"], + graph_to[v][u]["order"], + ) + ) + ) + new_ITS.add_edge(u, v, order=edge_label) + else: + edge_label = ( + (graph_from[u][v]["order"], 0) + if not reverse + else (0, graph_from[u][v]["order"]) + ) + new_ITS.add_edge(u, v, order=edge_label) + nodes_to_remove = [node for node in new_ITS.nodes() if not new_ITS.nodes[node]] + new_ITS.remove_nodes_from(nodes_to_remove) + new_ITS = ITSConstruction.add_standard_order_attribute( + new_ITS, ignore_aromaticity + ) + return new_ITS + + @staticmethod + def add_standard_order_attribute( + graph: nx.Graph, ignore_aromaticity: bool = False + ) -> nx.Graph: + """ + Adds a 'standard_order' attribute to each edge in the provided NetworkX graph. + This attribute is calculated based on the existing 'order' attribute, which should + be a tuple associated with each edge. The 'standard_order' is computed by + subtracting the second element of the 'order' tuple from the first element. + If any element of the 'order' tuple is not an integer (e.g., '*'), it is treated + as 0 for the purpose of this computation. + + Parameters: + - graph (NetworkX.Graph): A NetworkX graph where each edge has an 'order' + attribute formatted as a tuple. + + Returns: + - NetworkX.Graph: The same graph passed as input, now with a 'standard_order' + attribute added to each edge, reflecting the computed standard order derived from + the 'order' attribute. + """ + + new_graph = graph.copy() + + for u, v, data in new_graph.edges(data=True): + if "order" in data and isinstance(data["order"], tuple): + # Extract order values, replacing non-ints with 0 + first_order = data["order"][0] + second_order = data["order"][1] + # Compute standard order + standard_order = first_order - second_order + if ignore_aromaticity: + if abs(standard_order) < 1: # to ignore aromaticity + standard_order = 0 + # Update the edge data with a new attribute 'standard_order' + new_graph[u][v]["standard_order"] = standard_order + else: + # If 'order' attribute is missing or not a tuple, 'standard_order' to 0 + new_graph[u][v]["standard_order"] = 0 + + return new_graph diff --git a/synutility/SynIO/Format/mol_to_graph.py b/synutility/SynIO/Format/mol_to_graph.py new file mode 100644 index 0000000..e76acf9 --- /dev/null +++ b/synutility/SynIO/Format/mol_to_graph.py @@ -0,0 +1,167 @@ +from rdkit import Chem +from rdkit.Chem import AllChem +import networkx as nx +from typing import Dict +import random + + +class MolToGraph: + """ + A class for converting molecules from SMILES strings to graph representations using + RDKit and NetworkX. + """ + + def __init__(self): + """Initialize the MolToGraphConverter class.""" + pass + + @staticmethod + def add_partial_charges(mol: Chem.Mol) -> None: + """ + Computes and assigns Gasteiger partial charges to each atom in the given molecule. + + Parameters: + - mol (Chem.Mol): An RDKit molecule object. + """ + AllChem.ComputeGasteigerCharges(mol) + + @staticmethod + def get_stereochemistry(atom: Chem.Atom) -> str: + """ + Determines the stereochemistry (R/S configuration) of a given atom. + + Parameters: + - atom (Chem.Atom): An RDKit atom object. + + Returns: + - str: The stereochemistry ('R', 'S', or 'N' for non-chiral). + """ + chiral_tag = atom.GetChiralTag() + if chiral_tag == Chem.ChiralType.CHI_TETRAHEDRAL_CCW: + return "S" + elif chiral_tag == Chem.ChiralType.CHI_TETRAHEDRAL_CW: + return "R" + return "N" + + @staticmethod + def get_bond_stereochemistry(bond: Chem.Bond) -> str: + """ + Determines the stereochemistry (E/Z configuration) of a given bond. + + Parameters: + - bond (Chem.Bond): An RDKit bond object. + + Returns: + - str: The stereochemistry ('E', 'Z', or 'N' for non-stereospecific + or non-double bonds). + """ + if bond.GetBondType() != Chem.BondType.DOUBLE: + return "N" + stereo = bond.GetStereo() + if stereo == Chem.BondStereo.STEREOE: + return "E" + elif stereo == Chem.BondStereo.STEREOZ: + return "Z" + return "N" + + @staticmethod + def has_atom_mapping(mol: Chem.Mol) -> bool: + """ + Check if the given molecule has any atom mapping numbers. + + Atom mapping numbers are used in chemical reactions to track the correspondence + between atoms in reactants and products. + + Parameters: + - mol (Chem.Mol): An RDKit molecule object. + + Returns: + - bool: True if any atom in the molecule has a mapping number, False otherwise. + """ + for atom in mol.GetAtoms(): + if atom.HasProp("molAtomMapNumber"): + return True + return False + + @staticmethod + def random_atom_mapping(mol: Chem.Mol) -> Chem.Mol: + """ + Assigns a random atom mapping number to each atom in the given molecule. + + This method iterates over all atoms in the molecule and assigns a random + mapping number between 1 and the total number of atoms to each atom. + + Parameters: + - mol (Chem.Mol): An RDKit molecule object. + + Returns: + - Chem.Mol: The RDKit molecule object with random atom mapping numbers assigned. + """ + atom_indices = list(range(1, mol.GetNumAtoms() + 1)) + random.shuffle(atom_indices) + for atom, idx in zip(mol.GetAtoms(), atom_indices): + atom.SetProp("molAtomMapNumber", str(idx)) + return mol + + @classmethod + def mol_to_graph(cls, mol: Chem.Mol, drop_non_aam: bool = False) -> nx.Graph: + """ + Converts an RDKit molecule object to a NetworkX graph with specified atom and bond + attributes. + Optionally excludes atoms without atom mapping numbers if drop_non_aam is True. + + Parameters: + - mol (Chem.Mol): An RDKit molecule object. + - drop_non_aam (bool, optional): If True, nodes without atom mapping numbers will + be dropped. + + Returns: + - nx.Graph: A NetworkX graph representing the molecule. + """ + cls.add_partial_charges(mol) + graph = nx.Graph() + index_to_class: Dict[int, int] = {} + if cls.has_atom_mapping(mol) is False: + mol = cls.random_atom_mapping(mol) + + for atom in mol.GetAtoms(): + atom_map = atom.GetAtomMapNum() + + if drop_non_aam and atom_map == 0: + continue + gasteiger_charge = round(float(atom.GetProp("_GasteigerCharge")), 3) + index_to_class[atom.GetIdx()] = atom_map + graph.add_node( + atom_map, + charge=atom.GetFormalCharge(), + hcount=atom.GetTotalNumHs(), + aromatic=atom.GetIsAromatic(), + element=atom.GetSymbol(), + atom_map=atom_map, + isomer=cls.get_stereochemistry(atom), + partial_charge=gasteiger_charge, + hybridization=str(atom.GetHybridization()), + in_ring=atom.IsInRing(), + explicit_valence=atom.GetExplicitValence(), + implicit_hcount=atom.GetNumImplicitHs(), + neighbors=sorted( + [neighbor.GetSymbol() for neighbor in atom.GetNeighbors()] + ), + ) + + for bond in mol.GetBonds(): + begin_atom_class = index_to_class.get(bond.GetBeginAtomIdx()) + end_atom_class = index_to_class.get(bond.GetEndAtomIdx()) + if begin_atom_class is None or end_atom_class is None: + continue + graph.add_edge( + begin_atom_class, + end_atom_class, + order=bond.GetBondTypeAsDouble(), + ez_isomer=cls.get_bond_stereochemistry(bond), + bond_type=str(bond.GetBondType()), + conjugated=bond.GetIsConjugated(), + in_ring=bond.IsInRing(), + ) + + return graph diff --git a/synutility/SynIO/Format/nx_to_gml.py b/synutility/SynIO/Format/nx_to_gml.py new file mode 100644 index 0000000..c257da1 --- /dev/null +++ b/synutility/SynIO/Format/nx_to_gml.py @@ -0,0 +1,168 @@ +import networkx as nx +from typing import Tuple, Dict, List + + +class NXToGML: + + def __init__(self) -> None: + pass + + @staticmethod + def _charge_to_string(charge): + """ + Converts an integer charge into a string representation. + + Parameters: + - charge (int): The charge value, which can be positive, negative, or zero. + + Returns: + - str: The string representation of the charge. + """ + if charge > 0: + return ( + "+" if charge == 1 else f"{charge}+" + ) # '+' for +1, '2+', '3+', etc., for higher values + elif charge < 0: + return ( + "-" if charge == -1 else f"{-charge}-" + ) # '-' for -1, '2-', '3-', etc., for lower values + else: + return "" # No charge symbol for neutral atoms + + @staticmethod + def _find_changed_nodes( + graph1: nx.Graph, graph2: nx.Graph, attributes: list = ["charge"] + ) -> list: + """ + Identifies nodes with changes in specified attributes between two NetworkX graphs. + + Parameters: + - graph1 (nx.Graph): The first NetworkX graph. + - graph2 (nx.Graph): The second NetworkX graph. + - attributes (list): A list of attribute names to check for changes. + + Returns: + - list: Node identifiers that have changes in the specified attributes. + """ + changed_nodes = [] + + # Iterate through nodes in the first graph + for node in graph1.nodes(): + # Ensure the node exists in both graphs + if node in graph2: + # Check each specified attribute for changes + for attr in attributes: + value1 = graph1.nodes[node].get(attr, None) + value2 = graph2.nodes[node].get(attr, None) + + if value1 != value2: + changed_nodes.append(node) + break + + return changed_nodes + + @staticmethod + def _convert_graph_to_gml( + graph: nx.Graph, section: str, changed_node_ids: List + ) -> str: + """ + Convert a NetworkX graph to a GML string representation, focusing on nodes for the + 'context' section and on nodes and edges for the 'left' or 'right' sections. + + Parameters: + - graph (nx.Graph): The NetworkX graph to be converted. + - section (str): The section name in the GML output, typically "left", "right", or + "context". + - changed_node_ids (List): list of nodes change attribute + + Returns: + str: The GML string representation of the graph for the specified section. + """ + order_to_label = {1: "-", 1.5: ":", 2: "=", 3: "#"} + gml_str = f" {section} [\n" + + if section == "context": + for node in graph.nodes(data=True): + if node[0] not in changed_node_ids: + element = node[1].get("element", "X") + charge = node[1].get("charge", 0) + charge_str = NXToGML._charge_to_string(charge) + gml_str += ( + f' node [ id {node[0]} label "{element}{charge_str}" ]\n' + ) + + if section != "context": + for edge in graph.edges(data=True): + label = order_to_label.get(edge[2].get("order", 1), "-") + gml_str += f' edge [ source {edge[0]} target {edge[1]} label "{label}" ]\n' + for node in graph.nodes(data=True): + if node[0] in changed_node_ids: + element = node[1].get("element", "X") + charge = node[1].get("charge", 0) + charge_str = NXToGML._charge_to_string(charge) + gml_str += ( + f' node [ id {node[0]} label "{element}{charge_str}" ]\n' + ) + + gml_str += " ]\n" + return gml_str + + @staticmethod + def _rule_grammar( + L: nx.Graph, R: nx.Graph, K: nx.Graph, rule_name: str, changed_node_ids: List + ) -> str: + """ + Generate a GML string representation for a chemical rule, including its left, + context, and right graphs. + + Parameters: + - L (nx.Graph): The left graph. + - R (nx.Graph): The right graph. + - K (nx.Graph): The context graph. + - rule_name (str): The name of the rule. + + Returns: + - str: The GML string representation of the rule. + """ + gml_str = "rule [\n" + gml_str += f' ruleID "{rule_name}"\n' + gml_str += NXToGML._convert_graph_to_gml(L, "left", changed_node_ids) + gml_str += NXToGML._convert_graph_to_gml(K, "context", changed_node_ids) + gml_str += NXToGML._convert_graph_to_gml(R, "right", changed_node_ids) + gml_str += "]" + return gml_str + + @staticmethod + def transform( + graph_rules: Tuple[nx.Graph, nx.Graph, nx.Graph], + rule_name: str = "Test", + reindex: bool = False, + attributes: List[str] = ["charge"], + ) -> Dict[str, str]: + """ + Process a dictionary of graph rules to generate GML strings for each rule, with an + option to reindex nodes and edges. + + Parameters: + - graph_rules (Dict[str, Tuple[nx.Graph, nx.Graph, nx.Graph]]): A dictionary + mapping rule names to tuples of (L, R, K) graphs. + - reindex (bool): If true, reindex node IDs based on the L graph sequence. + + Returns: + - Dict[str, str]: A dictionary mapping rule names to their GML string + representations. + """ + L, R, K = graph_rules + if reindex: + # Create an index mapping from L graph + index_mapping = { + old_id: new_id for new_id, old_id in enumerate(L.nodes(), 1) + } + + # Apply the mapping to L, R, and K graphs + L = nx.relabel_nodes(L, index_mapping) + R = nx.relabel_nodes(R, index_mapping) + K = nx.relabel_nodes(K, index_mapping) + changed_node_ids = NXToGML._find_changed_nodes(L, R, attributes) + rule_grammar = NXToGML._rule_grammar(L, R, K, rule_name, changed_node_ids) + return rule_grammar diff --git a/synutility/SynMOD/__init__.py b/synutility/SynMOD/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/synutility/SynMOD/rule_apply.py b/synutility/SynMOD/rule_apply.py new file mode 100644 index 0000000..233faaa --- /dev/null +++ b/synutility/SynMOD/rule_apply.py @@ -0,0 +1,58 @@ +import os +from synutility.SynIO.debug import setup_logging +from mod import smiles, ruleGMLString, DG, config + +logger = setup_logging() + + +def deduplicateGraphs(initial): + """ + Removes duplicate graphs from a list based on graph isomorphism. + + Parameters: + - initial (list): List of graph objects. + + Returns: + - List of unique graph objects. + """ + unique_graphs = [] + for candidate in initial: + # Check if candidate is isomorphic to any graph already in unique_graphs + if not any(candidate.isomorphism(existing) != 0 for existing in unique_graphs): + unique_graphs.append(candidate) + return unique_graphs + + +def rule_apply(smiles_list, rule, print_output=False): + """ + Applies a reaction rule to a list of SMILES and optionally prints the output. + + Parameters: + - smiles_list (list): List of SMILES strings. + - rule (str): Reaction rule in GML string format. + - print_output (bool): If True, output will be printed to a directory. + + Returns: + - dg (DG): The derivation graph after applying the rule. + """ + try: + initial_molecules = [smiles(smile, add=False) for smile in smiles_list] + initial_molecules = deduplicateGraphs(initial_molecules) + initial_molecules = sorted( + initial_molecules, key=lambda molecule: molecule.numVertices, reverse=False + ) + + reaction_rule = ruleGMLString(rule) + + dg = DG(graphDatabase=initial_molecules) + config.dg.doRuleIsomorphismDuringBinding = False + dg.build().apply(initial_molecules, reaction_rule, verbosity=8) + + # Optionally print the output + if print_output: + os.makedirs("out", exist_ok=True) + dg.print() + + return dg + except Exception as e: + logger.error(f"An error occurred: {e}")