From 97bca9b220c9f52bec5f9bc67ec106f99013a1f5 Mon Sep 17 00:00:00 2001 From: SuhasSrinivasan <32346517+SuhasSrinivasan@users.noreply.github.com> Date: Wed, 28 Jan 2026 11:22:08 -0800 Subject: [PATCH 1/5] Fix LD_LIBRARY_PATH export in BUILD_NOTES_tch.txt Update LD_LIBRARY_PATH export format for compatibility. --- BUILD_NOTES_tch.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BUILD_NOTES_tch.txt b/BUILD_NOTES_tch.txt index 7fe0b15..2a2257f 100644 --- a/BUILD_NOTES_tch.txt +++ b/BUILD_NOTES_tch.txt @@ -9,7 +9,7 @@ Then set the following environment variables: export LIBTORCH={path/to/}libtorch export DYLD_LIBRARY_PATH=${LIBTORCH}/lib -export LD_LIBRARY_PATH=${DYLD_LIBRARY_PATH} +export LD_LIBRARY_PATH="${LD_LIBRARY_PATH:+${LD_LIBRARY_PATH}:}${DYLD_LIBRARY_PATH}" You can check that everything is working by running `modkit open-chromatin predict --dryrun`. From fa5d7aa761efd0ead3999382c0ee8a23d4e466e6 Mon Sep 17 00:00:00 2001 From: SuhasSrinivasan <32346517+SuhasSrinivasan@users.noreply.github.com> Date: Mon, 2 Feb 2026 14:23:16 -0800 Subject: [PATCH 2/5] Adding image version with no alpha --- docs/images/chromatin_stenciling_3_no_alpha.png | Bin 0 -> 97791 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/chromatin_stenciling_3_no_alpha.png diff --git a/docs/images/chromatin_stenciling_3_no_alpha.png b/docs/images/chromatin_stenciling_3_no_alpha.png new file mode 100644 index 0000000000000000000000000000000000000000..7e49e2923b380fe2491f7b28ad3c161132a6cc95 GIT binary patch literal 97791 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%0DVR$-CCdZ$6 zBsciz>YO$frp=gsmO$pUwfHkj0bJ#g!NMf2*HC3sITp_dj*xU+9HE~s>}a>_a+YxU z{bHRJ5NCUdW2GxP%OV?0HoUWHqsEgIwSQKc{)}3TB&pauy1Q0G=x!#8#=Jp#4?7Qf z7o#HON_Z~%g7?Dz)~#tuzJ(b)^N;9*Tn~OqvyI39UD@jIyycWK37b zz8ricSK@2Q^fUF+k!hX?Pt3NuSnl;sxo#l6RqhlIf3kQk*kgDqXUa?pZe>v#_(&Hb8)~vSW`_1Z0O7wQ zMnOD0r10%o%iLop= zy<|Jt_!}nj(tmsOksxf=U;&Ot)EIo)rkN_`Q)-1zwJ5GPePLz?%VrTN_IKyak-j$^ z`iTr#0UK4ZHJZ7tK%D{^AWNlsYsnaBNxzYNwM1&H7W^&2QRqT5Tu>Wlz+HDR+%=!j zuxl=ou2A2%Q(+k#yMFa~{M_2}=-cU+!bGEOkptyT^!(F*YylU+C5dR`2R6^(?F1@4 z$=%L$bNX7w1hxWZW?6#B0JbFgEcE94}ry)a&}+t#7ogp%I3(lcmZ7Jec=nhi-+oM_Hcz*xVV0p z@Xt0rgn)rTi?QnrzYdG-dpHP>hk^38%VW($<3xT4TIE^n^0aZ}*_{6Cio45HF61KX zV_r>@SH4vh4!Of$?6;ZS9&!|=I*&@FZv7C~a5(Z9eK4Vyv`I%tbMR!EeaZVmpZ#ds z4lilpo7rwG z2G=pJgQ6|%>yVCdXuRej0vB5=Z%;AP{2&~EoOW0#?eCZ-jF0$oKR|lk-zHe}R=8r5 ztUGOXE%6carwB`l%@2$vOFt9~9HWC0n~(b#2PLI$$R|e|<~msjCnAo3i{|mz53Ohe z6k);Z8wkv!)0qave<&OdRV`FcL9Vc)U=%3C(|omZFk_a!@cg=G3<}g-k?VB%$`@PR z*OuV7@pe)4N!>>&VGEp|p|TU16wy=tK%U`;Y5H`OPzcuKntVk{^+m`eklnmwzF?|| zITm;oM0b-#-l@f3JbV+T_pxM}Gpz_i7vR{CNb}u4WX@*oDGU~&{vdZde$kkw#X7NA zbws(cGN`5OhmJJx4DLn#WS2Aos3l(J?hxw=L*M&sB4UT`pcs>obqNq;Bj>c%ko<%P zbBzVF0iaWX10*+oTS+jm$C76g2OHmARt-Jy|x34zSOQX&$iCM0w5drA;j1l2G zX=i3Go#AFK^zD0H4A3>oM zxy6{-vmU%BPY4U{X`~8=6HHBP$>#Cd8?h?#Z5Y&drG7IlEG~1_4Pd#wvNog$P8LDo zwk=ndb~dHW;;pC3(j_T8P8*kT+%3{mQT2O=C|K-m`j{Z<%w!Nj$8wT&VDm{r)>@S~ zhns#2P|-Bv4UiUTQyRd=d8u7q6nEdvO{ML`GRK1Sc9|G3%ySf+H=l7*6%FTB7k~wAN=Y3KtDfs*TKM&4{-Ua^1$ROFkhlMW}d75 zbiIkEN&YkelLp+dt#`J5;oIUJorUOMRX6~7cauYlKixWN>H58l7&i$qElp%JEaR{k zIC_gu!r7m1D#KPq#Wl|fPsu&EGJ$&44drq;(z{bt5&86`;%BjD@4n7vT2Ts6mz-DT z`WEZAvH{sZ$Mz6bSH~QQZJjbjFf>BM5Tufc8^%%@ARR(5~)rwH?N zKc}J7lvZ{>f0lT=_Ef*g?Ry3j9a^39VSr88&=n_xjU?YB5fRZq;S&X+PoHG>s%ScX z4l}pj2B!?*Y71@4jE|tacRxqLPIY~R*pu_pVw5J_BqRU^5(PjtGgn}Rh^J?p)vj88WnN<7TYLdCyk3%*c8mOc z%*AbmZ6m4err;KDmgZAsJ)LJ#PZEP%PvhL)<(-=}X7YVcJ7^k%ow@M6s%=Vv7!0R1 zbJ}XvJ8!GtbVktOg&cSVtK}Daz><0HOmpeJIQD6h6PHQY4Eqc+?-sM7a0u*Ld5#xp z-_06Fg2~t*&k!Gj3)*V#&Pr>+-owRj-;d1bXKx5Ti5TzV2am<{thp~gQhj!i&2f&u z;XMdUN}*+mFZ({W?}diDrzc|lP8vWm(o{>m{=hxnLA20hH?^b~H!T%xf3i7@B|y0< zeXAKO6T{Xm>h!%~qp|gZo$(l>j6lJjJ^9{q+=EiMO~q|RSev%5VUT+T+NI4MSw{7q2L)! z-%n~q4=5u1>mBo}$(f#~=y~&nJ4Pf7J#9{TXF)FLb$Ptr?^KkSHOtj{C8uXjed4mC zCyl)yLgu+eo1mj?LgF2BTtYZ86j1Cd!zZB;V~K-Gh6~_t?@l>_rVBkZ{q(A+W|P_R z10cXYHKZbM}_Qu{U>DRe+7(A;sGDvuWYK+^Qp z%YfAgUf09(=ainB5bXumhdBb-LN~Y}Ur%R)WYB=nuZjimfG0%Z+{75#5tpTH0d${O zczPpz0mMPO*~rtUUfSD*zDU##p{1WW!cNiPRQC>l`z%uu5g07m6EcI@Zxr3jq=52$ zExCm@MSemeDIU(6%vX zw<7(-!7eFFO}tr-&2lN1kA!czWivt?e&o!QDDnrp8_82u%^B%kQz*1}g_#x5sTqu<@D=f~{4t@>d#6DJt407O4mP4}x%ZHoz| z%{O{1U`kj;>Kv#MXH`7>&_3WGECBDhb?DDC*;m5pYM=W2GRmHjNrU3LrKKe;O7C%B zZVW`@{t6q)C%BWB+r6nf?v<@UA}ge#4>J}V z=pVU%+LiUr8%~o>b1fHiiR!CxjeYmN`a4jLG`#I|Q5xhdoJ}@s=NHdYiaMr1^i<}kysckE_%D%$u z(MP{7q{5mwp{p~QA8#@9z6}oSgC4)L7(P82Qty4UQ5y$_KU3MfUHwYg?3ABaDj)Z) zxw7?pg5Aa3M2J-28GCg{Hv#%I8}&@A`eDkzRtFBXIRDjJENkZ5slYb*a~a!ymL1`Y7ubUl232AqO2U-kE9(NplVC( zJZ;Z3`zh6oXfsHyu=7m^jgO`vHD6v5#HK0j-V9n{W9O`mkl&-8(f#}adi(xit3q?K z3?=;RlgOm{e2-1pKCx;Rty3HHNz?kT$w`_$f%e&p+A-dN8d#KzH|uG!Uud+Cu10e< zYKqFFsFkDuCIrZqUMOv(M{U7@`KMmLaX)F6@Z~KPaNM=jYdU~gS&OlDWX!wH*$fU2 z7QHB26lXc^<5u{>*Do)t3KRGKyG|v82>Z}5x{r8lKlD2wp~a{{Dl#NfcblK|s3ZBc zw-+i{3RYz>1C5Ms#n@LX%ZK3U&zCSaAP(j&KwMlnBoL`8h*zdHhI$YXzvYs$A9dxu zj`tkwk>?KLl3@Nps7I&}!Bk|sWLEz9&5y>{6){9t4v=4L$ua(Ia!w6L-slqFpc(Qate^_iQdck)DJRj+UI z6uz!$3S3fIse#Y6DOyT?&WZ z%kUsMIVPwp4!awM1wg`wQIJ=CC-SX6w`lU62+>;0d9Ea;bOfRmW4pjTVkqro?`(J9 z{~#jDtaLo+LQe~$H{$iyY@yk(_3U&_^5bd|Rp@u)7Ly<^>#M+7i+GfeOn~qz6d_!$ z$Mty8$VWsJvIR3Ppp=g_sut5Aj6}0;;6K3hKwD14SP9NKC832hDR>x~8Zu-`@8SCQ=qG*`rW4V3oVe7q zKISW0NL<5d6fqB1L5uCvkO3r;8kRSO12J+p2%khoiWWS? z`#Y;5Z1&nuL;fXC_HnjYe1~g$pzG%r)%x^9|W+V+$%fwS3yneJ!!JlL`&{RkHS~oxYaX^xW1m7HmBS~)Lf{uJTUJRVd9HWI4w4kB>B4gLl9c?q zo}-+ECh4QE$)WCYgMNd|0U2f9jMzm$BL@cuv#;@$(@&&qF0j|x(U0cl{*qiRJd~M2 zGv7{i38aBeEWUEzR^9S+jA**c=A0inkBB|&KVE1y!-CU&&QHnmXDnD{UU3;t;b#mY zKUL-M$KlG*wO83{7y<2XiabTQgw49mIw}Z{dpD1j=sl!zVX0S>@$U1a9BGp ztd5K`;s6j2S5w!;OS&FQPg~Vj?Rg$+a@ZCSLv5Z6fM6=#r4mZEhSj~L^PX1Og{}3X4qPh6E zL1jR@MCqKc|Gm+(*P+_7FUBn`yAylJr=_+m;szzLsW|cmn22@7`|>#r4UWJnRhgNx z9>)C9srfENnWkyEFOb~9_Dp5p2(xv`LqCDc9TPbMX*!k}EPZ5Epy8(3pYsW%23_f; zOnCAS%ned|>(Qzy>KvX^eSaR377TyEEg`4a^)|8$ z|I)dDHO@y~{C54ZL`E0ekmB{?o4zXZrv_gqZ=XM*;INP#X=nQuabz#`S2hI5^IazO zvDiSP5BNGFHC`N{ETPj9_`#Jg;?wIDG_kpn*X)|vHGscJ!7j^X_RyqaNR=^o;8HtbAEvl_2b;ip zuk$G1n2=@52egkF@y7Qk*31dhmL-3V-(LT{v~5CGa`|uYR3}(+$;o z&7K#m^L+cPK4TmHN#h#a%Rxvo6r#S%V=AB>X6!=wADz)bPPGhF^N-N(-H$UaAnFlI zaO}Vj(u*%toM|;y<1!c46e!xBYAiZ$jB$``(`k4Tgc`zt+u?}xBIfb4jW);N!jTB^ z3YC~-x0D8)*I)YDlv8UmUVc(~#KhB=$$ZBpk;0luiN-Be4YGQj!;GRsL95=FkVEMvKOMDg-@=?djg(O(Jh06+M8y1b z{0z15JuyjJDAwNNYeOSr_A5P+OYZ5BjHhwiB8jS#R3h23sDgnarTD#D8mJ{NuK6Fr66lQ7|D=$e5<==a4cr!D zuj}IipKs=$vkJ+)sXpOHsokZXp)`?*6eR7as;4DDuHC}!$M`1bJ-bNrshoFYe=LV{ zeDaf)J2?JrsIdE)ZKE7zcfG{Wd03Ze|DdkhLV~0#dyv=UX>@-5EEK2>7~djF-^E0A z%FzuDqekbkJ>|_Z5Tt*I&@A;ihH1DtPz?-l%4$r1Ard8zEF3cbgJt39 z8C1fVsEW;9Ja|(R`FIzzIfL%RJj-D5jS>x5sDo&#&6U0m@q0tU>ga5B#jCVQR7NdEhuduk%T}kUw0>)mI;-!biL-E zefRngjxE64#mJz$Ni%uwgRri8VjkGhl=wd1CAsHE)`HtXF7V9;SF4oB-ux%`!3sbr z)@B$%^nL7#@z{oq@^^Q$iXM{{L91&lFP}snCl;8m{AJa$@Pa{Wemypn<^zw_b;+V2 z1}qRYfhJ(3*Kzf>h<|u!e#0lG!H9sQKUz;BN&5-lw(!%ikN1$j*?G*)S2%QiNMOSH znAsjGb^tG2(Fzn)#U!itP6<93+&ZKaliQ=5{7R5W*_C~|oCA+bGL2}6&uXB{{;(d@ zk=n>5>)k$Ia`1jl6|p05xB_Na-H~9e@zC&@6A3O-^77DvU>NM_5vy8}1uD?(c*(nT zsK|;M`?R6y{hA{+_CY{jVb-L{@L9@zKMgN7e4=!or4!s^e#HUBC~>{4*gl4@2Cr8% zgz3>{IV$O}Ss-EV`T|>Rpz97-8>8X{R?BHwYJnrxYL*Sk_gv<9&F>SGhK9~PtyDi^ ze10H$pvPm9LfA!YR@cm7s+*DaV0~~7kH5|_sw`A<#|#tCgR7%*Eq@5Er4(;lOf=Tp z$i0N0=z9-SF89Wis+X?Hc~ErA_U|xL4acp|2E1C+oH8K6_kO$uz<4=FhbG9?^iJ&ojdYDZblU zIrZUNbiFd{Mt?$qm;^GJ7#6D#rC^Ptz_KIksH)`pK1feB^OUY*beR9dbCHsQTi}db z_Tn&gIFZf!Me-Ju&K;|bGe(YfCbL76rT1qGdBh0XQ_!^UMD5mkG<8JTSf2jdwD304 zlz5CSUCu1i2WswfvegvxnmnsV@KuzS?D_dktcZ!doXhOZCQ(%+Z(nP0TU^lL3o2TJ z`jHvjpt8(Jq)@NEnBu~08LBqb<)xao?3J3{Dh%Z3IyXN@M%tW#nR8a9eggxjF7*}$ zp8~XzyOZ{GA2(ngs18)R)rr30U7Et;D)nfUw3;adL0c9e)y~zdh#3R|DgfXjH%Way zI>{dPYR{unHtn#mtMCne9$virx-9411R%TL*jKgk^Uy_w)O;$VHaIAh=tV~Bo>AhC z8C%d#KIC(85jIXyUGy!?Tz{t!nc=4M$BLpgI0S>-mGpV zAjkCi6o-CL5`CR6VpqA4^x68&ufpgNB@~(@=L!SSl|!#@LH*66Hsqe~eK)Kb$v_Q@MQzRi4^yrtW(1D~m z6CSg7d6M|3(jB!gj}nu#N9%Fjuq$OroC`iJxCxcJBYnwp4K=9ry$fg!W~v#(#3e+} zd%8t@*VlN}`IWR2`8kGWr{adY`Z8>lo@R2X8g)5Dd-$Q0_!GI)nSyct*M62*s@&T~ zUnS3(n{IlT>-8P0hV9!nD&Mc{#R`VT-L`yRYq%DW6^DD|tL2A5-Mx?k;!rSQGQjTn z(u*>`8~0pAnC#}~aCXk|JkAmlf>jdlvJ)GE-H_Zz+F04n_8!w~;dP^QE*FEjD^=58 z_SkUJZB=3fS;9~|+eoj^PxS@IZ@!?6^YCOPsuq#6Gj}TaoeX?YOh`eRaF*}4hLO==;66{mF=yQEoW9^X6L8P*PzS$&)XQW>AdI^Oi!w+Ek3iGX*=EL<(I=s*$%PEbpvG zb+i-W%y6C5#@4SC9{m~&RyH)3OHe$_1P@?4KJrjSw|%DN(uS$RrlP}xj*-oC>?dj_ z;Vz!$zP|N1_vb*EJoPPPmGC)qJ(fwQwRNpfY|@$Gp2EjQ016?7PfQH3^lT z3}@{szV3yWu<6n%Eo}GM2zEt{0W|5 zt$Pv{Z42yr_oNzoyVJ7#W)hGk|dh(uw~B`u*nqp5R5s#gp9yC!F^?2g&< z8PI9&9s}iGHAm@;MF`5WUb}|yAPp%BJcN>6O|KTWj^>ioE{fI3eNTtbULXC|=Qc7x z_#)_H!B@_ESpDl4$aF};g=KwD+12+U3I9Fx{adA-Yl&CL(vp5i2&CuC*!xLT^UJQ9 z4HWP3#NYcfWdP_lP2|D_vo`?r{NH=iYwf*HX#rQF2UX1EjWQBxCD2X-~@MfcXtgC++Blf(8gUGcN+Ol zuFTB+W~%yEDpeGmx6j`D-D^DyTBI`K=sc`pAuHSC+Q$RjH7;sXs6BQFtg-Ie9*ee0 zpLw2vVU-wIqGJhKYV%WJhBVY0u8%!9S15>@qx(h&$~PV8Q}}FRbHrtT+>rbO4lKUo z{&W3R;i}%e-^!iBZ8#gfnAaygg6LX$SF)CO{TV*3ur}#)`da8=qN={T2#l847#e%w zRX^hE#GALe>JHw`HBe`f4UEO#;pM+CIiAyxe&A}5LU0@r`c!{Bd_9EB3<^Q9I+VuV z{aN|9tpRTSbB)k9=uozx=o9vfqHhW_>QOfSTF0H7_Y$hsx$}MAwBJI+j#+eC#wo^x zpJ#;AKxueKv@Z&Y!P z25Fk_Dr#tZn?;ZwdRI&sJxnkzjh75(%T40Rrt*5NDKzG3yqj*}bn)Ula3PFPz-2xh z_rW5G@aY4w`7gnqGwjc(UaFT6YtofZ*_5bAXe4;9Z0j?mN<(IFu|IsfipbUDk)4Jy zHf~(^_h9%GMt;}Loqmp_{(X*g@oEP)h582$1z)D@C@#8RCgV)v9(eL}MP ztV@{)&(3h;7?H8Ms~-(t_JB*B==G^f<(!Xus|zgZ#Py~DRnl$19T#uy6;C-&1@50V zeM=2`Ly#@;hlY%zd}gcwC}S$loPD@WPOnUlKg~41ykfs8&ZK-!N1r(&3gzsGTQMmJ z7Q+&~aj4RIGj6Z1j?$Ed1m;I@_im5P3*#jnbem;NwdM(VzAD4|3T;U&gXHiQsyxbU z-(km#T52N4H106M^_KDeApRf6q6}>Vt}NbG)&8@7rh$rUEJ~E86& z$Y1B@y=Y2WR@Gr>?pTKs0KG_7d%R}zKprxK%*?7%cit4UbOEH4@EuT1vQz`+K;juD z_EXTqyAYK!{aby9sX-x|0rXteh)IcUL~!)uBvq5*H(SAxiS^g*m3CyGEhL)Nn-}<=}#(d=ECbVR)ZYl zYpC&a_~R8G*|!pjkbnjGG+;9H%J)gFP8w%+C&i#1o5pIZgQ-h zYOc;hx(|Zm3WS9$pjlMxmQiot&P_zbO#v zL~Vk1e&(VA8zsl6l(LJZn!GO(g|c}D*ak+Cf6c|R83-#+@oJ#nsD)0nhcxteS;)g0 zN8SL)4TnW{%yVexw%VZ2dEM*oZ=Tv&$K78J&3QOQdTiQJ@TCNvP~dv=~*(oRStdME;*NsjY?4O z&J*`N6&dv1UY7hGy}7a02#zdcShHfr?#9FLb$kP8+MMNr=a9AKncpcn^;(4M_#1P! z;2I1P4bYTd*^B5r`wd@uO6SgspWV=v|8AbG_a4gEGzfu5v-UJjJ--6JnCvWR!jaUQ zCz1H+Qx>YsJrvzUkVuY+Y6+#b{;ly}ASD957K`zt2XL+Q?JKZSb>>phU;VySvwoTO zoF@b#ffOdlg-dvrU1bM0t(P~laWTYk^(*hdM%S5+U8Wi93u}<&~`nrkT8xg2IK4#aO3gIJ&N6P3Wq7_AuvwP;qZf^sE_u^K0k& zEN|nV(mBKItcgGa#E!@9XVe7Jq8-7^^N9grfybX|H%yuaJ^oE!5$-AGlMbAO_R%D5 zJ?-7r^Jn7K-C>%;?mOhop+?R!9VY0!q_f5iqjzl0j#bHC><7)llAa|DmJ7IWO%bP0 zy#>@w&i=I`SsOV#d9be75|N}nQ}uXec1y-+ye-km>E6qYq~nF zO7)25MRHrQs9`JfuTUqeZYlXK09IZ=47rr*n4)N5Mi-x_(R){Cq*H<1rnH-jOI3B> z?ml4w|B@v#6jGlnci%e!$ZY^Vf*pl)QpLA&>jg`XM!zXl&A{0|OX~|0^~c2vbh_`@ zL=7d8GlL95zS2of<(J?~4x(>r*y#d`_Mg1Z}0VfkQM0?Y~I z>fIZ6y#3loQU1Oz_R)Qf9MOi$)*pJu%nTDg@Q(^%wvRw<%Gr=}_Xc5yI846u7;~T2 z9+!Ie+J&?~-!50IO0YuICSL})7CfDwTRoNc!ADmcw0S?|;>_ z9Q?-7Lu%9UC73modH8vG6H;0T%lua{`w@mz1>rF&=o0nw0<2@~Pc6U6LMI5MFx(DX_ zQ|4Xjy05%FEINeWjFpcr_)Ij*7)%rt&k9bBy2r6sq|u>oHl7;1jW}wYj|`Ox=M8FT zI!Z1WkShD6pQ=x}5gjHcD~koy^^R!Z%jcruGL4J#D zJd}KW+Rp!DVornmdUs{h&^d$6v{V{+NhU(s2D=%IH2oDP-YbKXC>w#3hg333c|40G zl9OWeys=oHSt9}#9vwZh54}mtcN{~N4lbC=k)^GaNh>$oi#s7i(l9;KRQ}jD9e(gR-^*md6d$bXrRfgn_9-UT=+E8H_7YWS;%01w`o9u?Z4uX!O`Q&*Y+jfaG zR75x#zUk6Pqj>RP%1!-5GP5?aus7^>q0Sz3NY;x0WV_^N2<9n@G9j$V5Y#v_g? zNn=Oe=9=W-3*s_GiKc!p#5#@a^gxY=a9r7rUUf(?N*?d-&n!WyO920$3I3BD6Z6JW z^9O>_oVt!gF&$I79FtB6*hVHIky3aTbkfwwZM|~+_@_wz%S=2cdz{x<-S8MgG#W1Q zNwo0h&^1}FAiN8TZdD$(9;Y&o<*K;ECg@P0NoSrMDF~;s&3aKILGAiiO}syBZS%^b zUR?!W`L2j8@FGWz$?94Tf@=-3P)BbmjBKL?_r z=9R&{LvKEQ-tPalJrs0(4d(SU?5}svCfaVXi(b>;AuHkRG4T7d7>F-d=AV}%wdWryK5u#(y_jLkFXw}wHt-voJKPCpG7Od{ z!(o%OM>NFTHK$z*^~+f7nrIJNb#)QY*ujNb$oD4MzV{@|OTqrOUyccf%%Mds*YATM zmCcuT}e6t|t5{v{|y(@R+HJr0_|InOcaFM<9-S1Oifv@RiL1668o2K}a)oAO< z&r0!oCJQ=uC##nFI;&IZ>DIL#Ts&14OHZfaSS()%X(Nh_-GK{6RDn5^;Z8ssUf>ds z%MLzk*~ev;)=VW)wJggyfs+4y^WzOcUz-BxWMTGn zh4nHP*nPW$^v*6g@E{7C=X-m0&VIIL*SrdSB=pd*o?aGA=b(`$Jv?sXV(d93t~O%> zsWsfkVYEk_=wv3XzZ%C6IX{Ww@kiFShrGH7?XKoTnSCtbUkUbKvga!bSq;vLi5Gj) zRZ5cBpRsGGDSe?}>g9V;a!|gEZiYFzI!{{R+n`4sw201x!K7bVNGfvW%SLrXf$wLO z*W3MVsc-^1ZCZBi^+PAm7uFo)Umh<>IcUH1ZlO=4)ZRHguSh(auRWs2P|Fl+Cehuo zvcq&*Y7mNy$E2L;Bx|-({_`F|G?$+O>e~b=u6@^i*0;L1fN+17KHIn?k9L17{N=f} zDSLbFFAZwI*e69mJRlA~M(u9hr)v@k;AN0t5~)m^x50NiULDA`MgmursG^VK7G#^9<=CezKyr_}xT7gc}W3IF3`l?vb1k908BKsWOHL~!= z1q$#ikEOsyvt78Fvw#P{U9}zP>F@;XA$)gWmyupp@qRC zEbFxdGrwQK4A~YT#XiUQYX}+^b#EX+vQl-VWa2OzQ&G4lGlreLuqyMnrQ>T$_{rD=@zRwm?f$+O5WTfOj!)=0 zaPbeF7;c$wIVVxT3iGu@n$F^6)Wm^+OdO@ryK)_~cJ{B~gwf6!3I8^P0)V*gUmA7k z>FGmyJoY<7wB~J2vG$eu0o0GGy6qcuFZ=E`bu*?01Cq>tchRaYKpHW1iUO&ljj3Ln0G0R(a$GWFu&|`{XYGPip zrT7Ie1fzvm(};&Gtcx}*R8VEPe;AJT!hHfRh$3`@&z(9V@wJ6jo`}n68Jq9K)9ibE zth$L!$y!`ZQz!vE4FhLv^7&Hi?=-`v1ljJ$gjX}b)&4L@xp@-UvXCvh=k@W9armyL zj{sv@wTTlU<^q7E+^bek-nNr~a@=ly;gNuR`pT(HlATi@Iy3o2;w%?EoAqOU&>?P4 zl&~;@FLY*zl7rYU!DEF7gUHGrGjmsf3F5K4yy_)Wyd_CMxDy@!HwEy(5kA)Z zFR>4>ZK4WZPXRWa9(mZ0EHC6rqP%LOaZyC%bJd#H?hrED;!H_b<5^Z8^FM`vEGMw` z=WV?2dr6r005vAj7>e4~RIEy*H@T1uuhbqUw<*^}5#&r;-QDP-;vJv@lOu|X@KDGtJ8OOt zj`6nP#Z$HyfHxAp@7ec~bEbb6k54ZwP7zef=IWX9Ss79x{Ja|{&-lBX&^kX%sNtYZ zrH4AX#+C|WBoOMlK886Y`DTnUs`vRp-vEBf_$#8LfF#1?5QU!^!MIx)WKUns%K~3X zEcD(bbVK)69h9?xfoWBKdRU?H#@7>+sIN*cm2F-a{`zJ$NVZ~a(�ET z1`3Ke0`2U5>4eX@XchCHPuwZejEiG=yK|>h>8EAHUi>hFS0_7U1{hRNy#|^NW)fGC z6QBJ*QU9zXnEo$s)+*r}jNWq@#G;8A7@s)lcyemYvX?e*fZ@67wOE

A={vcN0}C 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 z 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 T`Ekg3GT_lv)l(@~vJU$nkbQQO literal 0 HcmV?d00001 From a8f1c2f860ca382916e67534b7cc21c9a1786e4a Mon Sep 17 00:00:00 2001 From: SuhasSrinivasan <32346517+SuhasSrinivasan@users.noreply.github.com> Date: Mon, 2 Feb 2026 14:24:40 -0800 Subject: [PATCH 3/5] Adding image version with no alpha --- docs/intro_open_chromatin.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/intro_open_chromatin.html b/docs/intro_open_chromatin.html index e1f5a73..9e4c418 100644 --- a/docs/intro_open_chromatin.html +++ b/docs/intro_open_chromatin.html @@ -180,7 +180,7 @@

Modkit

Find regions of accessible chromatin

Nanopore sequencing can detect multiple base modifications simultaneously and we can leverage this capability by introducing exogenous base modifications at specific functional regions. One such method uses a 6mA methyltransferase such as EcoGII or Hia5 to label accessible regions of chromatinized DNA, usually by treatment of cell nuclei with the enzyme.

-

Chromatin Accessibility treatment

+

Chromatin Accessibility treatment

Predict regions of open chromatin

Modkit comes with a machine learning model that has been trained to identify regions of open chromatin based on 6mA signal. You can invoke this model with the following command:

From 97e691cb05b950f5930f69d92cc0be1d13cf24c6 Mon Sep 17 00:00:00 2001 From: SuhasSrinivasan <32346517+SuhasSrinivasan@users.noreply.github.com> Date: Sun, 22 Mar 2026 20:52:26 -0700 Subject: [PATCH 4/5] Script to compile modkit for macOS # What this script does: # 0. Installs Xcode Command Line Tools # 1. Installs Homebrew package manager # 2. Installs rustup (Rust toolchain installer) # 3. Installs Rust compiler (rustc) and Cargo build tool # 4. Clones the modkit GitHub repository # 5. Checks out the latest release version # 6. Creates a Python virtual environment # 7. Installs PyTorch in the virtual environment # 8. Sets and verifies environment variables for libtorch # 9. Builds modkit with macOS GPU (MPS) support --- mac_compile_modkit.sh | 742 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 742 insertions(+) create mode 100644 mac_compile_modkit.sh diff --git a/mac_compile_modkit.sh b/mac_compile_modkit.sh new file mode 100644 index 0000000..a193e37 --- /dev/null +++ b/mac_compile_modkit.sh @@ -0,0 +1,742 @@ +#!/bin/bash + +################################################################################ +# Modkit Compilation Script for macOS (Apple Silicon) +################################################################################ +# This script automates the compilation of Oxford +# Nanopore's modkit bioinformatics tool on macOS with GPU acceleration support. +# +# Prerequisites: Apple Silicon Mac running macOS 11 or later +# +# What this script does: +# 0. Installs Xcode Command Line Tools +# 1. Installs Homebrew package manager +# 2. Installs rustup (Rust toolchain installer) +# 3. Installs Rust compiler (rustc) and Cargo build tool +# 4. Clones the modkit GitHub repository +# 5. Checks out the latest release version +# 6. Creates a Python virtual environment +# 7. Installs PyTorch in the virtual environment +# 8. Sets and verifies environment variables for libtorch +# 9. Builds modkit with macOS GPU (MPS) support +# +# Usage: +# bash mac_compile_modkit.sh [modkit_version] +# +# Examples: +# bash mac_compile_modkit.sh /path/to/install # Install latest version to location +# bash mac_compile_modkit.sh ~/tools v0.5.0 # Install specific version to location +# +################################################################################ + +set -euo pipefail # Exit on error, undefined variables, and pipe failures + +################################################################################ +# Configuration +################################################################################ + +# Installation directory (mandatory) +if [[ $# -lt 1 ]]; then + echo "Usage: bash $0 [modkit_version]" + echo " installation_directory: Required. Path where modkit will be installed." + echo " modkit_version: Optional. Git tag to checkout (default: latest)." + exit 1 +fi +INSTALL_DIR="$1" + +# Modkit version to install (default: latest release) +MODKIT_VERSION="${2:-latest}" + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +################################################################################ +# Helper Functions +################################################################################ + +print_step() { + echo "" + echo -e "${BLUE}===================================================================${NC}" + echo -e "${BLUE}STEP $1: $2${NC}" + echo -e "${BLUE}===================================================================${NC}" +} + +print_success() { + echo -e "${GREEN}✓ $1${NC}" +} + +print_warning() { + echo -e "${YELLOW}⚠ $1${NC}" +} + +print_error() { + echo -e "${RED}✗ Error: $1${NC}" +} + +command_exists() { + command -v "$1" &> /dev/null +} + +press_enter_to_continue() { + echo "" + read -p "Press Enter to continue..." +} + +################################################################################ +# STEP 0: Install Xcode Command Line Tools +################################################################################ + +install_xcode_tools() { + print_step 0 "Installing Xcode Command Line Tools" + + if xcode-select -p &> /dev/null; then + print_success "Xcode Command Line Tools already installed at: $(xcode-select -p)" + else + echo "Installing Xcode Command Line Tools..." + echo "A dialog will appear - please click 'Install' and wait for completion." + xcode-select --install + + echo "" + echo "Waiting for Xcode Command Line Tools installation to complete..." + echo "This may take several minutes." + + # Wait for installation to complete + while ! xcode-select -p &> /dev/null; do + sleep 5 + done + + print_success "Xcode Command Line Tools installed successfully" + fi + + # Verify installation + if xcode-select -p &> /dev/null; then + print_success "Verification: Xcode tools are available" + else + print_error "Xcode Command Line Tools installation failed" + exit 1 + fi +} + +################################################################################ +# STEP 1: Install Homebrew +################################################################################ + +install_homebrew() { + print_step 1 "Installing Homebrew Package Manager" + + if command_exists brew; then + print_success "Homebrew already installed at: $(which brew)" + echo "Current version: $(brew --version | head -n1)" + else + echo "Installing Homebrew..." + /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" + + # Add Homebrew to PATH based on architecture + if [[ $(uname -m) == "arm64" ]]; then + # Apple Silicon + echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> "${HOME}/.zprofile" + eval "$(/opt/homebrew/bin/brew shellenv)" + else + # Intel + echo 'eval "$(/usr/local/bin/brew shellenv)"' >> "${HOME}/.zprofile" + eval "$(/usr/local/bin/brew shellenv)" + fi + + print_success "Homebrew installed successfully" + fi + + # Verify installation + if command_exists brew; then + print_success "Verification: Homebrew is available" + brew --version + else + print_error "Homebrew installation failed" + exit 1 + fi +} + +################################################################################ +# STEP 2: Install rustup using Homebrew +################################################################################ + +install_rustup() { + print_step 2 "Installing rustup (Rust Toolchain Installer)" + + if command_exists rustup; then + print_success "rustup already installed at: $(which rustup)" + echo "Current version: $(rustup --version)" + else + echo "Installing rustup via Homebrew..." + brew install rustup-init + print_success "rustup package installed via Homebrew" + fi +} + +################################################################################ +# STEP 3: Install Rust and Cargo using rustup +################################################################################ + +install_rust_cargo() { + print_step 3 "Installing Rust Compiler and Cargo Build Tool" + + if command_exists rustc && command_exists cargo; then + print_success "Rust and Cargo already installed" + echo " rustc version: $(rustc --version)" + echo " cargo version: $(cargo --version)" + else + echo "Running rustup-init to install Rust toolchain..." + rustup-init -y --default-toolchain stable + + # Source cargo environment + source "${HOME}/.cargo/env" + + print_success "Rust toolchain installed successfully" + fi + + # Ensure cargo is in PATH for current session + if [[ -f "${HOME}/.cargo/env" ]]; then + source "${HOME}/.cargo/env" + fi + + # Verify installation + if command_exists rustc && command_exists cargo; then + print_success "Verification: Rust and Cargo are available" + echo " rustc: $(which rustc) - $(rustc --version)" + echo " cargo: $(which cargo) - $(cargo --version)" + else + print_error "Rust/Cargo installation failed" + echo "Please run: source ${HOME}/.cargo/env" + exit 1 + fi +} + +################################################################################ +# STEP 4: Clone Modkit GitHub Repository +################################################################################ + +clone_modkit_repo() { + print_step 4 "Cloning Modkit GitHub Repository" + + # Create installation directory + mkdir -p "${INSTALL_DIR}" + cd "${INSTALL_DIR}" + + MODKIT_REPO_DIR="${INSTALL_DIR}/modkit" + + if [[ -d "${MODKIT_REPO_DIR}/.git" ]]; then + print_warning "Modkit repository already exists at: ${MODKIT_REPO_DIR}" + echo "Updating existing repository..." + cd "${MODKIT_REPO_DIR}" + git fetch --all --tags + print_success "Repository updated" + else + echo "Cloning modkit repository..." + git clone https://github.com/nanoporetech/modkit.git + cd modkit + print_success "Repository cloned successfully" + fi + + # Verify clone + if [[ -d "${MODKIT_REPO_DIR}/.git" ]]; then + print_success "Verification: Repository available at ${MODKIT_REPO_DIR}" + else + print_error "Failed to clone modkit repository" + exit 1 + fi +} + +################################################################################ +# STEP 5: Checkout Latest Release (or specified version) +################################################################################ + +checkout_version() { + print_step 5 "Checking Out Modkit Version" + + cd "${MODKIT_REPO_DIR}" + + if [[ "${MODKIT_VERSION}" == "latest" ]]; then + # Get the latest release tag + echo "Fetching latest release version..." + LATEST_TAG=$(git describe --tags "$(git rev-list --tags --max-count=1)" 2>/dev/null || echo "") + + if [[ -z "${LATEST_TAG}" ]]; then + print_warning "No release tags found, using main branch" + git checkout main + git pull origin main + MODKIT_VERSION="main" + else + echo "Latest release: ${LATEST_TAG}" + git checkout "${LATEST_TAG}" + MODKIT_VERSION="${LATEST_TAG}" + fi + else + echo "Checking out version: ${MODKIT_VERSION}" + git checkout "${MODKIT_VERSION}" + fi + + print_success "Using modkit version: ${MODKIT_VERSION}" + + # Show current commit + echo "Current commit: $(git rev-parse --short HEAD)" +} + +################################################################################ +# STEP 6: Create Python Virtual Environment +################################################################################ + +create_venv() { + print_step 6 "Creating Python Virtual Environment" + + VENV_DIR="${INSTALL_DIR}/venv_modkit" + + echo "Using Python: $(which python3) - $(python3 --version)" + + if [[ -d "${VENV_DIR}" ]]; then + print_warning "Virtual environment already exists at: ${VENV_DIR}" + echo "Using existing virtual environment" + else + echo "Creating virtual environment at: ${VENV_DIR}" + python3 -m venv "${VENV_DIR}" + print_success "Virtual environment created" + fi + + # Verify virtual environment + if [[ -f "${VENV_DIR}/bin/activate" ]]; then + print_success "Verification: Virtual environment ready" + else + print_error "Failed to create virtual environment" + exit 1 + fi +} + +################################################################################ +# STEP 7: Activate Environment and Install PyTorch +################################################################################ + +install_pytorch() { + print_step 7 "Installing PyTorch in Virtual Environment" + + # Deactivate conda base environment if active, to avoid conflicts with pip + if command_exists conda; then + print_warning "Conda detected. Deactivating conda base environment to avoid conflicts..." + eval "$(conda shell.bash hook)" + conda deactivate 2>/dev/null || true + print_success "Conda base environment deactivated" + fi + + # Activate virtual environment + echo "Activating virtual environment..." + source "${VENV_DIR}/bin/activate" + + print_success "Virtual environment activated: ${VIRTUAL_ENV}" + + # Install PyTorch + echo "Installing PyTorch and NumPy and dependencies (this may take a few minutes)..." + pip3 install torch numpy + + print_success "PyTorch and NumPy installed successfully" + + # Verify PyTorch installation + echo "Verifying PyTorch installation..." + python3 -c "import torch; print(f'PyTorch version: {torch.__version__}')" || { + print_error "PyTorch verification failed" + exit 1 + } + + # Check MPS (Metal Performance Shaders) availability for Apple Silicon + if [[ $(uname -m) == "arm64" ]]; then + echo "Checking Metal Performance Shaders (GPU) support..." + python3 -c "import torch; print(f'MPS available: {torch.backends.mps.is_available()}')" + fi + + print_success "Verification: PyTorch is working correctly" +} + +################################################################################ +# STEP 8: Set and Verify Environment Variables +################################################################################ + +setup_environment_variables() { + print_step 8 "Setting Up Environment Variables for libtorch" + + SETUP_SCRIPT="${INSTALL_DIR}/setup_modkit_env.sh" + + # Generate the environment setup script at the installation directory + echo "Generating environment setup script at: ${SETUP_SCRIPT}" + cat > "${SETUP_SCRIPT}" << 'SETUP_EOF' +#!/bin/bash +################################################################################ +# Modkit Environment Setup Script +################################################################################ +# +# This script sets up the environment variables required to run modkit +# compiled with PyTorch (libtorch) and macOS GPU (MPS) support. +# +# IMPORTANT: This script must be SOURCED, not executed, so that the +# environment variables persist in your current shell session. +# +# Usage: +# source setup_modkit_env.sh +# +# Arguments: +# installation_directory: Required. The path used during modkit installation +# (the same path passed to mac_compile_modkit.sh). +# +# Examples: +# source setup_modkit_env.sh /path/to/install +# source setup_modkit_env.sh ~/tools +# +# What this script does: +# 1. Deactivates any active conda environment to avoid conflicts +# 2. Activates the Python virtual environment (venv_modkit) +# 3. Detects the Python version inside the virtual environment +# 4. Exports LIBTORCH_USE_PYTORCH, LIBTORCH, DYLD_LIBRARY_PATH, LD_LIBRARY_PATH +# 5. Adds the modkit binary directory to PATH +# 6. Verifies that all required paths exist +# +# After sourcing, you can run modkit directly: +# modkit --version +# modkit pileup input.bam output.bed +# modkit open-chromatin predict --device mps -i input.bam -o output.bed +# +################################################################################ + +# Detect if script is being sourced or executed directly +if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then + echo "Error: This script must be sourced, not executed." + echo "Usage: source ${0} " + exit 1 +fi + +# Check for mandatory argument +if [[ $# -lt 1 ]]; then + echo "Usage: source setup_modkit_env.sh " + echo " installation_directory: Required. Path used during modkit installation." + return 1 +fi + +MODKIT_INSTALL_DIR="$1" + +################################################################################ +# Validate installation directory +################################################################################ + +if [[ ! -d "${MODKIT_INSTALL_DIR}" ]]; then + echo "Error: Installation directory not found: ${MODKIT_INSTALL_DIR}" + return 1 +fi + +MODKIT_VENV_DIR="${MODKIT_INSTALL_DIR}/venv_modkit" +MODKIT_REPO_DIR="${MODKIT_INSTALL_DIR}/modkit" +MODKIT_BINARY="${MODKIT_REPO_DIR}/target/release/modkit" + +if [[ ! -d "${MODKIT_VENV_DIR}" ]]; then + echo "Error: Virtual environment not found: ${MODKIT_VENV_DIR}" + echo "Has modkit been installed to ${MODKIT_INSTALL_DIR}?" + return 1 +fi + +if [[ ! -f "${MODKIT_BINARY}" ]]; then + echo "Warning: modkit binary not found at: ${MODKIT_BINARY}" + echo "The environment will be set up, but modkit may not be runnable." +fi + +################################################################################ +# Step 1: Deactivate conda if active +################################################################################ + +if command -v conda &> /dev/null; then + if [[ -n "${CONDA_DEFAULT_ENV:-}" ]]; then + echo "Deactivating conda environment '${CONDA_DEFAULT_ENV}' to avoid conflicts..." + eval "$(conda shell.bash hook)" + conda deactivate 2>/dev/null || true + fi +fi + +################################################################################ +# Step 2: Activate the Python virtual environment +################################################################################ + +echo "Activating virtual environment: ${MODKIT_VENV_DIR}" +source "${MODKIT_VENV_DIR}/bin/activate" + +################################################################################ +# Step 3: Detect Python version and set environment variables +################################################################################ + +MODKIT_PYTHON_VER=$(python3 -c "import sys; print(f'python{sys.version_info.major}.{sys.version_info.minor}')") + +export LIBTORCH_USE_PYTORCH=1 +export LIBTORCH_BYPASS_VERSION_CHECK=1 +export LIBTORCH="${MODKIT_VENV_DIR}/lib/${MODKIT_PYTHON_VER}/site-packages/torch" +export DYLD_LIBRARY_PATH="${LIBTORCH}/lib" +export LD_LIBRARY_PATH="${LD_LIBRARY_PATH:-}:${DYLD_LIBRARY_PATH}" + +################################################################################ +# Step 4: Add modkit binary to PATH +################################################################################ + +export PATH="${MODKIT_REPO_DIR}/target/release:${PATH}" + +################################################################################ +# Step 5: Verify setup +################################################################################ + +echo "" +echo "Modkit environment configured:" +echo " LIBTORCH_USE_PYTORCH = ${LIBTORCH_USE_PYTORCH}" +echo " LIBTORCH_BYPASS_VERSION_CHECK = ${LIBTORCH_BYPASS_VERSION_CHECK}" +echo " LIBTORCH = ${LIBTORCH}" +echo " DYLD_LIBRARY_PATH = ${DYLD_LIBRARY_PATH}" +echo " Python = $(which python3) (${MODKIT_PYTHON_VER})" + +if [[ -d "${LIBTORCH}" ]]; then + echo " libtorch path = OK" +else + echo " WARNING: LIBTORCH path does not exist: ${LIBTORCH}" +fi + +if [[ -f "${MODKIT_BINARY}" ]]; then + echo " modkit binary = ${MODKIT_BINARY}" + echo "" + echo "Ready. Run 'modkit --version' to verify." +else + echo " modkit binary = NOT FOUND" + echo "" + echo "Environment variables are set, but modkit binary is missing." + echo "You may need to compile modkit first." +fi + +# Clean up local variables to avoid polluting the caller's namespace +unset MODKIT_INSTALL_DIR MODKIT_VENV_DIR MODKIT_REPO_DIR MODKIT_BINARY MODKIT_PYTHON_VER +SETUP_EOF + + chmod +x "${SETUP_SCRIPT}" + print_success "Environment setup script generated at: ${SETUP_SCRIPT}" + + # Source the generated script to configure the current session + echo "Sourcing environment setup script..." + # Save variables that the setup script's cleanup will unset + local SAVED_MODKIT_REPO_DIR="${MODKIT_REPO_DIR}" + local SAVED_VENV_DIR="${VENV_DIR}" + + source "${SETUP_SCRIPT}" "${INSTALL_DIR}" + + # Restore variables needed by subsequent build steps + MODKIT_REPO_DIR="${SAVED_MODKIT_REPO_DIR}" + VENV_DIR="${SAVED_VENV_DIR}" + + # Additional verification of paths + echo "" + echo "Verifying paths..." + + if [[ -d "${LIBTORCH}" ]]; then + print_success "LIBTORCH path exists: ${LIBTORCH}" + else + print_error "LIBTORCH path not found: ${LIBTORCH}" + exit 1 + fi + + if [[ -d "${LIBTORCH}/lib" ]]; then + print_success "libtorch libraries found" + echo "Sample libraries:" + ls "${LIBTORCH}/lib" | grep -E "\.dylib$" | head -5 + else + print_error "libtorch lib directory not found" + exit 1 + fi + + echo "" + echo "To set up this environment in a new terminal session, run:" + echo " source ${SETUP_SCRIPT} ${INSTALL_DIR}" +} + +################################################################################ +# STEP 9: Build Modkit with macOS GPU Support (continued) +################################################################################ + +build_modkit() { + print_step 9 "Building Modkit with macOS GPU (MPS) Support" + + cd "${MODKIT_REPO_DIR}" + + echo "Build configuration:" + echo " Features: accelerate,tch" + echo " Mode: release (optimized)" + echo " GPU Support: Metal Performance Shaders (MPS)" + echo " Architecture: $(uname -m)" + echo "" + echo "This will take several minutes (5-15 minutes depending on your Mac)..." + echo "Please be patient while Cargo compiles modkit and its dependencies." + echo "" + + # Run cargo build + if cargo build --release --features accelerate,tch; then + print_success "Modkit compiled successfully!" + else + print_error "Compilation failed" + echo "" + echo "Troubleshooting tips:" + echo " 1. Ensure all environment variables are set correctly" + echo " 2. Check that PyTorch is installed: pip3 list | grep torch" + echo " 3. Try cleaning and rebuilding: cargo clean && cargo build --release --features accelerate,tch" + exit 1 + fi + + # Verify binary was created + MODKIT_BINARY="${MODKIT_REPO_DIR}/target/release/modkit" + + if [[ -f "${MODKIT_BINARY}" ]]; then + print_success "Binary created at: ${MODKIT_BINARY}" + + # Get file size + BINARY_SIZE=$(du -h "${MODKIT_BINARY}" | cut -f1) + echo " Binary size: ${BINARY_SIZE}" + + # Test binary + echo "" + echo "Testing modkit binary..." + if "${MODKIT_BINARY}" --version; then + print_success "Modkit is working correctly!" + else + print_warning "Binary exists but version check failed" + echo "You may need to set DYLD_LIBRARY_PATH when running modkit" + fi + + # Check available subcommands + echo "" + echo "Available modkit commands:" + "${MODKIT_BINARY}" --help | grep -A 20 "SUBCOMMANDS:" || true + + else + print_error "Binary not found at expected location: ${MODKIT_BINARY}" + exit 1 + fi +} + +################################################################################ +# Save Installation Info +################################################################################ + +save_installation_info() { + INFO_FILE="${INSTALL_DIR}/installation_info.txt" + SETUP_SCRIPT="${INSTALL_DIR}/setup_modkit_env.sh" + + cat > "${INFO_FILE}" << EOF +Modkit Installation Information +================================ + +Installation Date: $(date) +macOS Version: $(sw_vers -productVersion) +Architecture: $(uname -m) +Hostname: $(hostname) + +Installation Paths: +------------------- +Installation Directory: ${INSTALL_DIR} +Modkit Repository: ${MODKIT_REPO_DIR} +Modkit Binary: ${MODKIT_REPO_DIR}/target/release/modkit +Virtual Environment: ${VENV_DIR} +Environment Setup Script: ${SETUP_SCRIPT} + +Versions: +--------- +Modkit Version: ${MODKIT_VERSION} +Rust Version: $(rustc --version) +Cargo Version: $(cargo --version) +Python Version: $(python3 --version) +PyTorch Version: $(python3 -c "import torch; print(torch.__version__)" 2>/dev/null || echo "Unknown") + +Quick Start: +----------- +source ${SETUP_SCRIPT} ${INSTALL_DIR} +modkit --version + +For detailed usage instructions, run: +modkit --help +EOF + + echo "Installation information saved to: ${INFO_FILE}" +} + +################################################################################ +# Main Installation Flow +################################################################################ + +main() { + echo "" + echo -e "${BLUE}###################################################################${NC}" + echo -e "${BLUE}# #${NC}" + echo -e "${BLUE}# Modkit Installation Script for macOS #${NC}" + echo -e "${BLUE}# #${NC}" + echo -e "${BLUE}###################################################################${NC}" + echo "" + echo "This script will install and compile modkit with GPU support." + echo "" + echo "Installation directory: ${INSTALL_DIR}" + echo "Modkit version: ${MODKIT_VERSION}" + echo "" + echo "The installation process includes 9 steps and may take 15-30 minutes." + echo "" + + # Confirm before proceeding + read -p "Continue with installation? (y/n): " -n 1 -r + echo "" + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + echo "Installation cancelled." + exit 0 + fi + + # Record start time + START_TIME=$(date +%s) + + # Execute installation steps + install_xcode_tools + install_homebrew + install_rustup + install_rust_cargo + clone_modkit_repo + checkout_version + create_venv + install_pytorch + setup_environment_variables + build_modkit + + # Save installation info + save_installation_info + + # Calculate installation time + END_TIME=$(date +%s) + DURATION=$((END_TIME - START_TIME)) + MINUTES=$((DURATION / 60)) + REMAINING_SECONDS=$((DURATION % 60)) + + echo "" + echo -e "${GREEN}Total installation time: ${MINUTES} minutes ${REMAINING_SECONDS} seconds${NC}" + echo "" + +} + +################################################################################ +# Script Entry Point +################################################################################ + +# Check if running on macOS +if [[ "$(uname -s)" != "Darwin" ]]; then + print_error "This script is designed for macOS only" + echo "Detected OS: $(uname -s)" + exit 1 +fi + +# Check macOS version +MACOS_VERSION=$(sw_vers -productVersion) +echo "Detected macOS version: ${MACOS_VERSION}" + +# Run main installation +main + +exit 0 \ No newline at end of file From b37dcc68c97476293d3905008aea5be221218fb5 Mon Sep 17 00:00:00 2001 From: SuhasSrinivasan <32346517+SuhasSrinivasan@users.noreply.github.com> Date: Sun, 22 Mar 2026 21:15:05 -0700 Subject: [PATCH 5/5] Enhance installation script for Xcode and Homebrew Updated installation messages and added timeout handling for Xcode Command Line Tools. Improved Homebrew path setup and ensured compatibility checks for macOS version. --- mac_compile_modkit.sh | 62 +++++++++++++++++++++++++++++++++---------- 1 file changed, 48 insertions(+), 14 deletions(-) diff --git a/mac_compile_modkit.sh b/mac_compile_modkit.sh index a193e37..b3b864d 100644 --- a/mac_compile_modkit.sh +++ b/mac_compile_modkit.sh @@ -102,11 +102,23 @@ install_xcode_tools() { echo "" echo "Waiting for Xcode Command Line Tools installation to complete..." - echo "This may take several minutes." + echo "This may take several minutes (timeout: 10 minutes)." - # Wait for installation to complete + # Wait for installation to complete with a timeout + local MAX_WAIT=600 # 10 minutes in seconds + local WAITED=0 while ! xcode-select -p &> /dev/null; do sleep 5 + WAITED=$((WAITED + 5)) + if [[ ${WAITED} -ge ${MAX_WAIT} ]]; then + print_error "Timed out waiting for Xcode Command Line Tools installation" + echo "Please try one of the following:" + echo " 1. Re-run: xcode-select --install" + echo " 2. Install via: System Settings > Software Update" + echo " 3. Download from: https://developer.apple.com/download/more/" + echo "Then re-run this script." + exit 1 + fi done print_success "Xcode Command Line Tools installed successfully" @@ -135,14 +147,20 @@ install_homebrew() { echo "Installing Homebrew..." /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" - # Add Homebrew to PATH based on architecture + # Add Homebrew to PATH based on architecture (only if not already in .zprofile) if [[ $(uname -m) == "arm64" ]]; then # Apple Silicon - echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> "${HOME}/.zprofile" + local BREW_LINE='eval "$(/opt/homebrew/bin/brew shellenv)"' + if ! grep -qF "${BREW_LINE}" "${HOME}/.zprofile" 2>/dev/null; then + echo "${BREW_LINE}" >> "${HOME}/.zprofile" + fi eval "$(/opt/homebrew/bin/brew shellenv)" else # Intel - echo 'eval "$(/usr/local/bin/brew shellenv)"' >> "${HOME}/.zprofile" + local BREW_LINE='eval "$(/usr/local/bin/brew shellenv)"' + if ! grep -qF "${BREW_LINE}" "${HOME}/.zprofile" 2>/dev/null; then + echo "${BREW_LINE}" >> "${HOME}/.zprofile" + fi eval "$(/usr/local/bin/brew shellenv)" fi @@ -169,10 +187,13 @@ install_rustup() { if command_exists rustup; then print_success "rustup already installed at: $(which rustup)" echo "Current version: $(rustup --version)" + elif command_exists rustup-init; then + print_success "rustup-init already available at: $(which rustup-init)" + echo "Will be used in the next step to install the Rust toolchain." else - echo "Installing rustup via Homebrew..." + echo "Installing rustup-init via Homebrew..." brew install rustup-init - print_success "rustup package installed via Homebrew" + print_success "rustup-init installed via Homebrew" fi } @@ -259,9 +280,14 @@ checkout_version() { cd "${MODKIT_REPO_DIR}" if [[ "${MODKIT_VERSION}" == "latest" ]]; then - # Get the latest release tag + # Get the latest release tag by semantic version (sorted by version, descending) echo "Fetching latest release version..." - LATEST_TAG=$(git describe --tags "$(git rev-list --tags --max-count=1)" 2>/dev/null || echo "") + LATEST_TAG=$(git tag -l "v*" --sort=-v:refname 2>/dev/null | head -n1 || echo "") + + if [[ -z "${LATEST_TAG}" ]]; then + # Fallback: try all tags if no v* tags exist + LATEST_TAG=$(git tag --sort=-v:refname 2>/dev/null | head -n1 || echo "") + fi if [[ -z "${LATEST_TAG}" ]]; then print_warning "No release tags found, using main branch" @@ -474,7 +500,7 @@ export LIBTORCH_USE_PYTORCH=1 export LIBTORCH_BYPASS_VERSION_CHECK=1 export LIBTORCH="${MODKIT_VENV_DIR}/lib/${MODKIT_PYTHON_VER}/site-packages/torch" export DYLD_LIBRARY_PATH="${LIBTORCH}/lib" -export LD_LIBRARY_PATH="${LD_LIBRARY_PATH:-}:${DYLD_LIBRARY_PATH}" +export LD_LIBRARY_PATH="${LD_LIBRARY_PATH:+${LD_LIBRARY_PATH}:}${DYLD_LIBRARY_PATH}" ################################################################################ # Step 4: Add modkit binary to PATH @@ -552,7 +578,7 @@ SETUP_EOF echo "" echo "To set up this environment in a new terminal session, run:" - echo " source ${SETUP_SCRIPT} ${INSTALL_DIR}" + echo " source \"${SETUP_SCRIPT}\" \"${INSTALL_DIR}\"" } ################################################################################ @@ -653,7 +679,7 @@ PyTorch Version: $(python3 -c "import torch; print(torch.__version__)" 2>/dev/nu Quick Start: ----------- -source ${SETUP_SCRIPT} ${INSTALL_DIR} +source "${SETUP_SCRIPT}" "${INSTALL_DIR}" modkit --version For detailed usage instructions, run: @@ -732,11 +758,19 @@ if [[ "$(uname -s)" != "Darwin" ]]; then exit 1 fi -# Check macOS version +# Check macOS version (require 11.0+) MACOS_VERSION=$(sw_vers -productVersion) echo "Detected macOS version: ${MACOS_VERSION}" +MACOS_MAJOR=$(echo "${MACOS_VERSION}" | cut -d. -f1) +if [[ "${MACOS_MAJOR}" -lt 11 ]]; then + print_error "macOS 11 (Big Sur) or later is required for Metal GPU support" + echo "Detected macOS version: ${MACOS_VERSION} (major: ${MACOS_MAJOR})" + echo "Please upgrade your macOS before running this script." + exit 1 +fi + # Run main installation main -exit 0 \ No newline at end of file +exit 0