From cfd1c85ba0f96a0d2f95dfa993ab209a56f2b06a Mon Sep 17 00:00:00 2001 From: Saud Zahir Date: Sun, 10 May 2026 01:13:26 +0500 Subject: [PATCH] Update docs --- docs/assets/images/SOERP.svg | 9 + docs/assets/images/ad.ico | Bin 0 -> 9918 bytes docs/assets/images/deltaFlow.png | Bin 0 -> 878 bytes docs/assets/images/mcerp.ico | Bin 0 -> 14014 bytes docs/assets/images/nulapack.png | Bin 0 -> 7861 bytes docs/assets/images/pydoe.svg | 250 ++++++++++++++++++++++ docs/assets/images/pyswarm.ico | Bin 0 -> 11513 bytes docs/assets/images/qtop.ico | Bin 0 -> 4286 bytes docs/assets/stylesheets/extra.css | 15 ++ docs/blogs/index.md | 13 ++ docs/blogs/ruff-and-uv.md | 35 ++++ docs/community/index.md | 70 +------ docs/community/laraib.md | 22 ++ docs/community/noor.md | 17 ++ docs/community/saud.md | 20 ++ docs/contact.md | 19 ++ docs/contributing.md | 100 +++++++++ docs/how-we-build.md | 121 +++++++++++ docs/index.md | 111 +++------- docs/projects/index.md | 331 ++++++++++++------------------ zensical.toml | 27 ++- 21 files changed, 802 insertions(+), 358 deletions(-) create mode 100644 docs/assets/images/SOERP.svg create mode 100644 docs/assets/images/ad.ico create mode 100644 docs/assets/images/deltaFlow.png create mode 100644 docs/assets/images/mcerp.ico create mode 100644 docs/assets/images/nulapack.png create mode 100644 docs/assets/images/pydoe.svg create mode 100644 docs/assets/images/pyswarm.ico create mode 100644 docs/assets/images/qtop.ico create mode 100644 docs/assets/stylesheets/extra.css create mode 100644 docs/blogs/index.md create mode 100644 docs/blogs/ruff-and-uv.md create mode 100644 docs/community/laraib.md create mode 100644 docs/community/noor.md create mode 100644 docs/community/saud.md create mode 100644 docs/contact.md create mode 100644 docs/contributing.md create mode 100644 docs/how-we-build.md diff --git a/docs/assets/images/SOERP.svg b/docs/assets/images/SOERP.svg new file mode 100644 index 0000000..833da4e --- /dev/null +++ b/docs/assets/images/SOERP.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/assets/images/ad.ico b/docs/assets/images/ad.ico new file mode 100644 index 0000000000000000000000000000000000000000..2fca2a72e6253c63b34c35e63dec1bfe860b04e6 GIT binary patch literal 9918 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 pFl+JA)(!7AmDK;$Kk_T&g1`U( literal 0 HcmV?d00001 diff --git a/docs/assets/images/mcerp.ico b/docs/assets/images/mcerp.ico new file mode 100644 index 0000000000000000000000000000000000000000..4277c87d3540f2661120df6001a1f6eefe19c7b9 GIT binary patch literal 14014 zcmeHOdvH|M8NYyqTCK6gR+K;pc9{qA{v=PpRnFlo3neYyl$F72NtNfRXr?crz-lQxWyq_b)zsfKhY z5ft+C`ZEke8Y)BYpwKyxV$CCUCA3OYLYq*Y)>vo@+AnBI@E@uYdKtP`ApfPx;gy@~ zTTd%A{$TJ=`a-hC!cT(Bb`--Zd%^RU;Cq|SLN}>$=tt_L8!86_-eNIidG_=Bz`&MK zY^=fB599ToJ%*E7Y6dILVsU}nLpDDpw4m5HgSDT^fizD%2Vj@vUL z8f)wCD=&8QanrR*t;2B+_6i(%PGiaNYsA&9Z=pKid%Pc`Vqh#EizJmmM3F9CrR1oj7@%aUtQVYwC8H;a_9*UexC^X2RBwN8I>!}$!x&4-NvXXuRGTsjUDFd zU*L0qIE(RU{XySn_Gi7#DQSdg&sE19y;ldh_+nyl+-)|*biFxyS;pIxA-&pK<-Mh zmhoPGUV32L#PQKS>gC7vt()slxT8f>HkJ3sUb>n4EDfv=M^o&pUj9x!oiFIK-{RO8O_iSR^zmxbotE>{<>2)>{FY|@ zSmv>K+`meKNBz?1;cCWUogs-#tVIF$< zX}-|8I8V~1Z}6vHer|diD_}cr;rl1~fZr0damLFlmu##$>HZv3*?i6~rmSM&wJ4;h+JaLVv%5^v&|Ebt_in>{0GoVo9k#N<-&yAO6N2j%0Zyno`kD%`y= z$2B>;7+C*{(t~nLz-?snHWvB~bTn3*bQZieHF42c)DxngUVX#)97mxN@BMqgyc=uk zJ&_ygA3F1Iif!GEe-Hn|-2avo8)Lnj9PUSKa{rc}_pEo#mt{zr)yl9Mx*-$aZV0vIOVo zQpDMr<%fH-*e6xlQi3&i7qFYTs2utmx05Zq|JY}{wa>~Sjr)8W@}@O4qbU!|Hx@rb zMStp#^Jbi=6YHs}1z*E>wGkgtPxU0bVM;d7W}zK)Un(ZgcE47a|;>a<2>frZ~deL#+$x}>rM_G6Y$x7%+&Yc8%C zZO5Q@6;OIqzZ`U8DlgwX&xPBX%F5l>ptQmEHp+2~<)5mm-pJ;|&KQNZ)uu_69GeXvyuCN*AKP16VE~1UqH7{^RwGF z*Vms0e#=FE7$?`et%P+5ZZY^CLfKGT`%*#oA}2nrQPym10XEBNPd3QYxSiIQ(@t%0 zx|{nDKkh^GTWyqA>VElhV7^l1S6bRNmixI$ypMADZyGo5?V@uQ3)?~g+rV!z^xH^4 z*>Cymcf*3Udo_=NwP)wCqA&1H75U+O7?4kk{=6JI7plo-04sw|%xsQ0RabMNX8n_+O6}u!E!!U+jCdbZ$jJ-CJ_dk`Az7+vekAUy5 z&O8hAwpFwz0_Hb2jtjZMS76UrKA!*1#mqO&{1fMS-rrmKbMlqWJpi~K7w{iN{UbHN zZrvC#zlA0meRBjma2t^0eqK2Z;m&_;4ZW++-Mhk&WifM^k>X|>9~)^;H99PI%;I)us)-=#E{Zs((&FAkQe&w(h=`u*8PRf*I z>e6w@TB9r-FOxDeNVZGHOiPx=%hGjilJQ_&Nu~_)l^LTRErINrDNUVFA{o7PXU?1s z*%#kBz7&%F+RIF7;qR*h&$9Lo!e_L%J>PpVWLw*o-lHV9{ymzBLw0mLWxLvLW{4SY6l;C~x#t%v{s literal 0 HcmV?d00001 diff --git a/docs/assets/images/nulapack.png b/docs/assets/images/nulapack.png new file mode 100644 index 0000000000000000000000000000000000000000..67fd42c5e4f04afbe8f3302266a7b51467df944c GIT binary patch literal 7861 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 Bp)vpf literal 0 HcmV?d00001 diff --git a/docs/assets/images/pydoe.svg b/docs/assets/images/pydoe.svg new file mode 100644 index 0000000..aecfd08 --- /dev/null +++ b/docs/assets/images/pydoe.svg @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/assets/images/pyswarm.ico b/docs/assets/images/pyswarm.ico new file mode 100644 index 0000000000000000000000000000000000000000..f7c2cf975b294085e69c37fa4c6bf33298bf2137 GIT binary patch literal 11513 zcmb7qWmuJ4wDkrg+(-z5G)Q*{0)m7{r!*qnrF2WEAV@bT5=u)6NJ~g<=}wUlM34>% zsXO=izF+s>J?D9p$CthKde@qB%rVBC2m}WFkNyt>frnV)Mj*)H=hqL_6$p@2NcfRJ zNl{h{{q(=zz=6Mv+zM?F2nK|b?0p@dcbh+a4Q}W+NbNXRy<}j(d%+l47|i`tGY8Mk z$RepXN=2yaiRwEi-oZP6bQ5=1Sa(_F)hukfC=@c%u)Q-xpHA|Wx!&Te%VvngL-w%x zk9r)PoX0B!DOs&adVVZU50o0z4(iy++}HD*{60QjFrX>WMS*uquUmfY3f`@r_n6Y* zWI6xmKdKU|cHh0D@mL#?8{n;*nx20DVuRb~P+?#&wx+x^+khCDqzJrDKtUOldTD)IO7d#!Wq`v+l+0s_}xzkY4^y`~iN z5ecKzqZZ6};@;{5E7saZMp3Z5c~26Di?_Feg#{xat=N?&lX4G-5ImO07-mt6eQyNa z?l^0m9&WZ5YUT`8JL)sDu{|gl<;WnpB~!TkmN>VpjPU*Y_jN&+%{2X7oUE)k)WS~E z^UVRt>Y>C+R*jhKTwIRHY*L8ayu8IXwwYfmt$VY_9g@|zb`T1_Bfwy()2gI!-*<8+g zk@;us{|+~MGn}=*PgmKh)zF9RkOX3958K71q;%2JQ&Mv9r?1=<7q|Q~R#fM+%ScEs z8MUxrX8z=I@bZjELR`8pbLV~QuV265vVS#DZ!Ir}eE7gv*Vq`T+HK}gO?7#ab@|$J zed4M;9~+y3o#riBp+$W}eSQ6`RA}g{S8bi0axU_(+}+&TW~v=49L70sZEj9iDJY7E ze3SFRh}%02+Ma7NcXsCEr(P=3;q1$jqTg;h%3Q8VNK9ONgkdoeax<8eP2B|raiL?x zNK&Z7$!*+lgGoLrZcN?5fwQN#7u#Ac+(!mKSg*J3ue z(cigq$Ed=%!Q**)dipnykTenJ%-rM1n|#Qg5aQhsasiD?@#Kvxw+X2A>!~fL33>B9!_aZO-&aU7vkgy7j<>@*@_qR)eN%i=GY4b zS%E)elJ{u8-*9^Jq~0>`8Z)EpQyC;8u@3nVj$bbK7Bxre?#l5f>#f+U90*TO&u`zp zEkx)R>EIC%kj1}pLhs7b*w`4`Mkd@q1}SZC&jI0BXYumIiyQtI^AD4glV>YdL>uDc zP$4%E9K{GZdHJ^CVNF@8N)8T=Mfh%f%v)}xT8P{zZ;>PF;8s4t(;eisYd8LTD-ML# zE5zeAWTTe6=;5Dn6*E>i#d<{HxI=D1fjcVwlt8*vFB1PIuL~-DpV(H0`DSoL1akS; zFV{}5ty#*<%uFrqI9*@g`dlT62JdZN^hqZeA$-^n7{TG;cuF}Ns<&8JLj4o8O-)UY z|NTP_gcG~MB3$}qE~qXPN@deTFG|2^wk}@0Iq32tV!%yRQ3akSvT3-XAX!Zvjw=0j z7BCJszoTfS%-gO!pC)F^%*BK(a{2p5ck8&!xKVk{#Ow0xx77P#yE+S9PBIb_k`7kc zaI*xYw5R8tBj@Fdi;JDTy@Zjb5@luOPZpiXt>fodxNU=j8fNk#;cP{S<>h4;DRxpi zx~DZF2ujQ2opvIY{uM#n0U9NZ>m(M)1Z3;q^~rk6rJp~uwTf~*_|mfi|6O&QC|Qhg zo-E7A^}TXcfK2JXI2e>XElDb~-e35N6-6&)qD5V0JNPOrEG#<;FP_L7W5}Vp?%Bz0 zZ`6+l&!w1T6nFoET=1hzGp}MBJ(%W$ZqW|@**G$W?u$Bd-iOoIlzCe%o^hB zIl!ZeNw;lx0*labn8CHJlaE_-O}!GD@&*PJ?=muc8_Bl-<|rimKIhs}1)FA`rHgx) zWtZT^(;txqC++UO#3d4rqz;Djp030;H#bkv2t-VMwkPdJ$Z{jS0TJ+aTAyRpTguf3 zo{PyxQ9SQXWXox8HgWTJU+Jp|uP4Aexl@LjJ-WuMhDkzB-bKsRxzw$an28yfiG8x3*@1dwclsVKCH22+O6BJe362 zeY@9HRe~{e5)tYdV%-yA0<>uz* z;-5cAK0ZDlfB*L0UVI1*JVL_2O3&@Nj4qMSw>i5iJo=jhPUF(j*cBwn+lPm*7ieU4 z2@c-NF(5qJ`q5rtiE{bbarK>4kjY5&qX+ekjZ9)Y7+Ue3Bp&LL^L!sQr^DpabIN~Uh~)hh_KjS>9@Rp|9%90 z80vAl@RO-;@l4Zy#)}{M`H79L|840$g^P9i`)7P3^rnd!9UYxUr}*8w6(J#4Y5>;{ zA=nb>^&M?IFoxFuI_)fcjc8d*n(;eW{kpfex9r37HYq*5mz>X}58~;@e9!}7A|fJT z-#x3tVFmh%<71zEt)go&p02Lu&MoJ{T)e!(YXUWT@;8IuzNL!vWr~=~S4;2uSX}(e zhc@%WS`#!h0_;;&vO-CCY42W1u3=E8j77STu0QrrUi}e-*b@dn{)Cq@QQzpETAT>30 z=g~Zgh`zr5;b73ks8zYXqqPnOJ2$t^S?JAbY;5d`diURzfDy0PJjCi_oO7tCsHR?E z+NgSZ|7pi`O+Yw2h9EN=l-spq#Wc0?iLgAB%*9g)uQR zcW~RRmX?)u(O>M~(ujMh)=0j4_im^_gI-oaA;)pD3=fHX(b6I{Q|nCR?d|>9eiR3a zHX_isusA;-r@FctUPTt-7l}m1Wn@Hu{wxHf=tE77UX795bj=g$jg5_+&D!}9(l=eV z^9|2-V}q8+0BV*%7P>Gac!}0{{5J^c%{Er_$F1u;7 zI`p2ETF&;VhZwE@>1J(cQ@5$#8jIKdidvp`q`+Zse;*bu;U`FJ&cHpXx#rU?@jRkP zIRPK}Y`~jU53vWAXCi&pgwp@a@}MCjs{nMRf<+=(Q;$ zCl{KVHzsTE(2O;5@ZmzTG&urN4-_Q+5~uRFWyHXmQ?`Z8|d zqbp-?)dLX*wNGh}x4)7QV{J_BFrI+r&A3>aBUSM~A|_6N?*EcMvT(y|>GRX2s@#zg7k ze)4(q_E&E_KHO9pw!o+jA24 z{0{K^n&=Em$srx(;BtYN#M*rS*3;8ARblD6IaAGg$to;N-kZv&U}W@e)%X)Pk1igE z;3SB^Zqv5D4nX;O`jod)LCqs;wPFs{Z~Ncf-4{XCSDan})HjE1X^R2N0zF*zLc?gciZQ0;!rxAWO^kA&ts)7j=Nio zTLRG%?`zh@K>=HpY;sD9#cZAHRLzrgts>5X`renbvqoFJmrw!Ut}=GrQ++G+`qY5q zuEP83G|7N}iA$Ty%N>=Kl~eEw1}-i;i9xkhRhBpTOmxI_6CDnb3{ZC(KXsr`?kGd5 zCX?8W4W}(1#|AB}o>bGo*J)`Kh!&%1DD^jis&#>)%H-ZH8+X`EZ8?+c7E&vl#&o$j z^WA!tlao_#$)on*0TvLWB=wgBt>BS0 z_K)3|JHSQUMI3rwGxR-I&Px!AI)X6#*56N-cHLgR+@z_*EwiUf=n*2f4`V1#<>r=w zij|`y*GVSogIr|EpDjTFqG<+_&|K)MhGOyVp}M_kXNwc;aHMcES-c*7$I%l#OKJ^ zSQJFRT{RcRe4Q&+e0)6XdbwJ?oQD%F2xP zXZ~)_X90^#9I&++0Ev+<6(o6d?|J?laG)s_zNQY~uNJz+cONy*&tBmM#Q~C2{}v?# z=Qt1691Sp#5~F$&w8BYN?_>bXL?i9aV*BFn-(l9hDepghdbsvEyf4tbYp%gFvhn@I z=Z~fA!otF768^%x#tk7mJ1%*n0tT+G0+PoISWpX>@={G4yh3R$rUSJRKEDxH%ru={ zwAX($ifCzTSNQ#Ph&;_~@?6&grf0b^Rq=V&i|Zg4q4)^<+xR#c5Zkr{hiDoa8vdY* zXE(^m%-2Tp$ZH7~G9~=c?2+5x6IyvH7d*J)yT>IB))%0zrlFyO2a|;Vp)8nk z%ujD2k3t4h7C{O@CENkKZ1H$^Nx8r>ZqhV}7JW=>e+FeVG5EE?*O;nxruW*Oiw1g@ z);aVu|I6Ww1`6KYMcB6>K@67Q|sh^j%=GC9AJ-6zi3?eRpmt^`Pod z)Io4R1e6TCII*RX3Zy~B(xZSQ^jl11CneoD*!-@)CKP_X5b+sPEQ8SA-d+RQ_L`LK z#!1gmjsnry+5VuO2uBG^4(1S2pvz^ci-1P*83is8T?f3J+Qbp;IC^cgAiYG2k$?=r z1(w9lQmm8(Du#BdIY1orrqwzZKR>aE^IS+(Rh3f!v1=j1fHFfp3}AH;YIfV!k4EdY zC6Ia$d}-WINGt5Fge6y0S9gYAXZqwg$&0?9-JhLpLG71&y?iV@Daxv0We7ZF6_pCB zZj!Ax*@1&Ue$awmNSIV%-pk=aV1lqMF>RrPye8TE(e&X1CIBVoZ6-IcqBAM(x-k!A zN^mX5|ALptpuAqMiNVk^T&&Lrrmo6Ug`QcG4v#`aTmfW+Qs$h5px`LCJX^xbu$uHp zA=L650H4`i06r+Bucl*>W9xtG0#1cTMn_#w51&|BTQ9=<_#E%tLJMv~Lu9q#`B*s> zXEJhYYisA=Ko&MNRAH%b1qbH?IMm_c;nJ$AQF60a@-U^T@`mk*X=(cd1ko=9Lc+z< zlkD9aAr=;v<6RWJ>%pof2yQz4a+BmzKA>$-KrO$;-9iJDnCBnn$EIIk->f`_pYgy~ zT8{8^agm0EnW=fgCCatL--V{?wBlZ7zXvkD_4Vm+r$XpijN~e%-L^(Hc&_Ig(6z{8 z2Meu%`2psMkbX&YGy!<&3tL;fqFn7@cA10BnEGV?@{zjp9NRX#@OH8^BrM6k9er1_2OjzcaHn-f#a2QX9#z- z87VTv2s4NGj;(e;d0e9s!dqKgV_i>0BH}|E z8yibVL-WCcpSI2FgyI;VoXqlAD&Gsp1mGqXXd2;eQ6wiKS4qo;Z13}+9uJyQ6|Olx=dRq$%T zkps#9z}NRK+T}mmGPbg^Vz_gM?Dt?+s%HieX$9z)5W)^gCJPyJh{C7Aj37K(Ncr@M zA1zLQ)S8srQj0uI@chD3-0x45$ zAi9J`o*JfD|29G#wi1C0x%o-p{j4-E}(!Mch(C9rpP9)w%9)yV>-)dXnXrhWl* z21FI}=yej?^@&oMLvNrB31uz-$_r3DHlW&BcyG_?ijh6KBP67FaU*akS|sX^HslvJ zJ~`gq>pYS5LAA;X&heb1wu$vbvIJsb24# z-#U+yvy8vLe-59*WXU6@I_Sf%lF^pbWk`Nft z@}DfEv><%Kz|71n2X_{Q3M(~kOljPE3l=^m$h4qt=VqXfdYYQ%E-ghxMF~%ZB?>CkxAy-|nu?@n9m#?%X9;ROA*LHDVDwfh>oI(Ozzc9AKYGmc zH@Ggn8Z!U5{bfJqtH_)X6#?}fhoogm+y1wm;9yxvYULk+U85q#tE8kPKM%+~6lFS( z5VDDkin7Xjw)c8SU`5Ng(JNXF+=Z#vM8O2q!hMD1(m;vhW`BdcOq0)v-&N!&fPnDa zntgLR1uag>b3tyhV4JfG9EQP(a#Ja^p_!7I`E>8B_~XZ^mHzZ;faTE4V}t>CLtH#O zcSKX6e02v9QVE5RkBxov=}4;e-M3Lft*)212!E8~M5x(q;V^8ktgUskYGn3-K5Q*B zY2rM)tp_m!P*;iW|J4)>Blyu4N|&6Do?c~K9I;XW4h~M`&z~0WQN1*}@Nb|Y-RTQJ z`%wSQChf-^LO0)zPfoh$2A4dSWn^TCDJa4ri#+~}U48oWsf(-Y^Tw9j!HoG;F!71Be{%9BVBLK?yTbcHgB0z+%vsb{%^e*h zq11w<{I-!mrP5)FAuf>8w_Az_{OHrre@bKIIu?{WJe6nJE#CFmng&1E&z6xzv543 zgj6%cbhW5c^1({^&o(&&qw3nlV>m-m*PkIH9BI+e#UzD{5cJE-1~^!R9_#G+zmt>2 zszFIo$;MCh?oew1ZoSXY3gY-J=53R11Ma&|5r#ikHa7aaHm1J*4OTNZzvb@ko;Y?1 zhNiWTCr>-tsEJLFjEwxsBv@MfnQ9e^CfYX^Bak~s1)bqmR#gcEp81sBxk%wNje%0M zbpeO<8mh*YkIK#K*S|J>Hhl7=bTKip$LJe(f_ec^Dq71#RyD0N?WwWH4seP?IK3`{8E;|Rk{(0voo*WR*(9(Lf%fA6`1<)@~m z%)m38skQ981MU&}NfmdK8>5mM?X9Zo{1#`V_ z=`j{AE-olqR}}S^*1{6&l4LNc&4Df3g2$$NmS{Le4%-)Yp5xxwU5SdirgU-uFgJeB zfoB|?AXETNfm*uFLwX&AC^`lqnJV;6d_$ptas)C`SAlt0`9{#T5>z%`#(jnI$twHN ze5IaEs5)(X6&_H4mLy|#cXx6A-p7`X19zb&@Z3+>^N$YsjT^bgN*AZ4u!{{aWUYaX zC2X3%1v^7&{#+r7V)!H7ZnAO@9|p)joTh<2o`t8@=pZK{dGV;q1_Qy#$?3A#hHX^u zh7CknQAI`Y%>NAnFiE;4@SNXg$BdbonL$+4;81e1^fB97<0Xnds4w7mOgXNe~ z@Cell99>^~`H{DVKwAWfj~}0yh;~!J$yZ~6pP4PdU{!I7Es7<7E=(&*&BAgjI zzF;p=d!KB4Ge!ljXhr7JPOnpM$V zquB}p0fE(#yvSB3!&Er7Edw?-wwEiK*_hIGP{206*T#wmf{IVr@~HLFqAT!ncNbh` zWh6tiZ34hSi)Fsy*$N z5XW~`x8W>!!BPI%tg^YW0pFL?sSL$5q*ugG$gD&oQJ6TyVquD!u z`h-HM-V%fdJeRysLqGRBVE5jLyY*nTyM=uD_iq&{T(eaIJx)Z29gIYPS+W#Ef7>b? zPJ@j@1aW?LcCESX1EzEoxVfQcXV12L9ymXIR0R&CI||ye?ckGVx4>COrDSCdO8iX) zyX;v&0JiN|1I&-03CJvD)9!%~L%fE%I-$1{NC<)pk4n9~yu5^F%#N-usV80hjZq)qj%_*|Cs|yF>lK*VG-tU$k4-?Z%@sz+z=V^$!I!o}EhRck_UtVS+ z5duidYv_@UU9FVHN*oA=gr^7?1eq;l<1RuF=YTt>RCPH*(7N*Di?8;`6)pg}JAby( zkI9 ztx@$iVlDDUyUjAAdPe);afmyIgUT&<3(f!U$`uG8)J{Qh)?0$gsMAYFpI;kAqLA?& zi7R7uP$D;G>l4KTJHoHapPwC3kRdFD9@xOFPR*U~_3muwfrX{teQzueen~<2QYhtV zDVbD8oTWhF=}G3QUlNDh!@$CE>C}Ra0;Na0xZYoq%85$Hp$WrGQ0Dh{Tz~QB&o(j@ z_;_bm*Q?Wh9O)73r;cMoL&0F0xT3z#%=}E&H(87+fUQ|T(F8v4f>NP;FhrGc*Ij<3 zrw43q1sD~oTSC7z&$sY-bzZVD!0C|F)ff2wxVe0JgU&?--oTL^%TS;Z8w&7 zL%)={|MYU!eGomXm9P)V7{zL>H3)8)GL`Zy6}X{9k>orHV_neW4UPJk3(svkWCGoZr-w(!-mhMk zA19Z0(3=FL6*E0RfC3-`ZYYyRFSU`j)D*kXd^PYj8gqrw#mk<;%MzW= zp!uMhF2tnz-8M)77O_}8X_7eBb#}5}pLOgQ6R}$+EnPxod5x4+wG~u%-A^n`%((dY z;XegWH=KZBPrx#T;kDl}rVSn(f7aKrZLB2WF9DeUQnEb9FoVv=>U32>c1b3H zw9Ed^PHV?&()uN5Xg_mqW7`Q)!J1h9M_b8b1Ay+~B6B_u9_mHs_#Cuf=*j`qC_5}cw^=ZTUW%8UX;jSrkeiW_k$HXxD;V1LSl2+D6_i z1P`o*X&{A^2&HtGn-cdsC>&`V{Q#;@*sK-NeR}Hi7|s`3Nv!ikoCw)8h?SMiO`hct zwBFDEc6B)6&mV`w0r71-@m-8hcimU`OZAGsT>uctfRxvtdL5sX)B%0E>;qmHlLSlx z!164Cq9CJj;k&=W;k73S?}?WWy8y@y&0vU$iP;#{kg|5DHjF>#;N!CeU*|^PPb@R& z&1jx+f~ve;mY*-bdSr>{>+Ov!HK=$2eqncJi+qkbSb;X+&V1NOyx2Vi-;q6VPq2$3 z`U-O;@$L;HZM35eCZEMvp(YFkk&M^?uB&I>dkrR|84P3%*$K(aJm~{85P)f;=@}6m zIMH-CiF^Bfg5dlomBs?8IM|-2N7r3wHHvv}T>~Le*VqWf{E ziP$j^$Lp%9UW2wonAheEM@EDN401$4$L;NpZlWPFgg`u$HJF5?0jp2Bz~VMoylCbM zqbRu^oN6Dq5EdlxPl`%PU+Y|#lGHnyR|Ya74-P!4Bu_9JFd10k&?~$)4dM0`)^x0f zL4lziM0hz^j2Qh3)|Qqp!CGYk)(ezCPmI?5#mkof)P&%R3|OcK1|t!gicol6VJzm^ z<@pg%=a(aEF8D}f8{i;Jr@jW(-`>?#sm}2aDSZPP*Rkcz|B#UID2VxFbrb^@&b8K` zosscrX?Ct`=jCuDHaXA%htVL^P19%3p*6ypF`x}YjA6iqv7y15@L9IuF3i~Wjck6e z-34En@$OwpU=b0&u7fCpoI^YMtCQtfazQg9ub{~K1A!Lx*Ig1OXvpS3sl+OW6eh5s4x;REiBXs3CTf z*!7thH6hqAA_B|0bkZ-kE#Y>U+c@gnOfm&*5lMP);n!H`*)l<`y$YQsV~rG zS~G_;9ajyeJA-i1V0s+n{}o)$t6VotrZY#2jquWC8ayL5D9V)erG0xPTd{87F?Pk} zbq!qq&%9Z;>#nRU;Vz!@Bg9q zI_^U`O9)THer%rk0OmAlFteJj&a|nX{+>FlM;&Rdv-qEWJ)J$*|7i#I@y-dX@2b&k zAYYda4b);Q&OC|pc@{MSpL>hlYyifLR z?2Z0MWD|(5iIqfmB9>T4^e572za*}Uq6ZO3xD#C5mEdBWMn8h9jmz&zaCwOYr>RG9ef({Gt~Sc&_!q&|-;Lnz zV-hih;9}f{xW2X#TrYD8?u^rjK?HZ!>j|#54@ zjBtSSsfpj828mFcI>{t6z(-)7l@gVDisVF8bow3F`Ob#;J=}jOs65Zm1@X9r>z+ zd$V=fUAGZ^3cXFjOA~Bz9_(_GN%uI)q~A=J$@V%+WqVy@vJ4m5gPqf*rE8~3#j!TB z2b&$Fb>F&3>yONk)gO10J^jH=DnId+^yw*gnf$c7RDNcbRDO20Onz>*tl`4!2MrhI zNaYtjWc8N>(nlxx*Q(Opd8HdC^eNvmh2=VGepKLPyt-_IUCZP1^YA2l0qSoo#M4_I zc$(t{`7JNhXM3XZ$SmZoaX{7PnRv0y7Oh*2q1ZDL?cbTB{n!{Nf3$@1)Ho>5SV4Ji zJVEws7tT+H;_^bY+(jk=8By2>r~PWcNA=G~7N-6)FIMWJ9Q3S+cT zxKba&RYoYHH6mJ*7iWgc{^lr(azfp7Z8VPUgO|1g(B$$Zn&*!|tB)btcxGr5j73}Y zL@45?L9u=&6v>OANb!PVn=ceQ1EJWugld|Jw)7x0?)w_jEiP%KKT{Mw`k9EYjeEWW zkQXordBMYwFVLe}Od(t`8o5yxxa4gH;W7u*y6NJXZ9g=-4noTUO|%9WqjlLh>e-(3 zW}$u860{!>KzSko%AdDGnSBt-+_UH?xCG^$vrt}4gW~jhy!>_@WSeFjxHm^nt0>Sc zw>ZiaqTrz@B5e_07vk74C|hTb@?>`ur!2%ZfgP>~Pr&2IDX4QBj29l%d$1l_;>Mvh z*@Zp}3!pq62IYk{P-g8w#~+8#QAoO_zoJ8O8y(g8=#bt;hwwbwZ+?fy-O=sRjSg{D z8z!;>PosIFAXAw*R0rY^4HSoyKHpST7C#P>R98qc{BeJqKduH?qHx7D)U28YdCWL8 zB-r5jHy(JA;f0n1-cVjiAl=Pm+<>Y&2dYPRpsL9y?m;EVM%($FsNFbM zSh3T=IDerb%bTm;t-#ZGywJxeN$6+rgV5i2zbMG4u57s>ecq>{`d|>M&m^K`zW}%6 z>`<`E7NzSQsTN0+C(T2BvKyL@`;hi#sEUt}?j_Q?4b_tZsHE4>c6kq4f6sv8Y6hAP zuU6G=nqMMGadf>|H&d>VDmd z`rC(4du=adXA@A8u@qS$Qy^UJj3-+h(0q>ci;_v3dat_%Gzfv`Wl%l-1JAdIs-&Bo zvt?V|cR$$Z7+0~?-b8%LO|2|rdZ+wbD-1Meh5lm(-{%>K%c8X**))mt1Mws)6%F@} zqEU1P&+nf{ea>OrN%BU)S{FRoGXqUOEkZ}xCgAZ2Kzi!dgXTQbZMfN&0Ur9#G-bB=| zTijTc>=bbM&Jb3y?eFP#mQoZljtN7ox(j)hpNbrpgm&eUgpV zr#H}4eHrq?!>GNo1~n%mI-Z`0S2i4sYpvPgE2>I$@h{yrrFZ$(X`S1Cuq|0WmK8@^ z`c)=cv_JmN9Szslqgi?eipE<|yv#%U3*z}bG~{HoNp{ZPBi*$qplYkz{L*CG5#lXY zY9+~&K3KEsg5nq}CXTYQuUKRGtS0j-JiERYE!Cv|G6%|*e4-G_=0eo}o+>Y0Z!@_f z_02z5T{rm$zIeGc6Gd5nUiP)swTHW%AiugC&6P)>czzwqHhQlr@1yncRa74eyj&b> z*1vq?)PJD%=cUCftXXNoL`K%JGRd~G_P94*V(Fct+vdjl`$J-Z{p+6Y?NyKY?R!Xb+e&(cglVH-ez4Mnr9pmiqm>c Z4qB(FqP6trs135%YGn1oD + +- ruff and uv! + + --- + + diff --git a/docs/blogs/ruff-and-uv.md b/docs/blogs/ruff-and-uv.md new file mode 100644 index 0000000..f3ca573 --- /dev/null +++ b/docs/blogs/ruff-and-uv.md @@ -0,0 +1,35 @@ +--- +icon: fontawesome/solid/pen +--- + +# ruff and uv! + +
+ ruff + uv +
+ +If you are building and maintaining Python packages, `ruff` and `uv` are one of the most practical combinations available today. Together, they create a development rhythm that feels both precise and lightweight: quick feedback, fewer moving parts, and a workflow that stays readable for individual maintainers and teams alike. + +## Why `ruff` + +`ruff` works like a careful editor that is also remarkably fast. It catches style and correctness issues early, enforces consistent conventions across files, and reduces noisy review cycles before code ever reaches pull requests. Because formatting and linting live in the same ecosystem, the codebase keeps a clean, coherent voice without requiring a stack of separate tools. + +In practice, this means better maintainability and less friction. Contributors spend less time debating formatting details and more time improving logic, tests, and documentation. + +## Why `uv` + +`uv` brings speed and clarity to the parts of Python development that often feel repetitive: creating environments, installing dependencies, and running project commands. Its unified command surface makes daily workflows easier to remember and easier to document, which is especially valuable for open-source onboarding. + +For package maintainers, the strongest advantage is reproducibility. When the setup path is predictable and quick, local development, CI checks, and release preparation stay aligned with fewer surprises. + +## Minimal Setup + +```bash +uv venv +uv pip install -e . +uv pip install ruff pytest +ruff check . +ruff format . +uv run pytest +``` diff --git a/docs/community/index.md b/docs/community/index.md index 0ec14b4..5ed3e13 100644 --- a/docs/community/index.md +++ b/docs/community/index.md @@ -1,82 +1,34 @@ --- -icon: lucide/users +icon: fontawesome/solid/users --- # Community -eggzec is an open community. Everything we build is developed in the open on GitHub, and contributions of any kind are welcome — from bug reports and documentation improvements to new features and new packages. - ---- - -## Team -
-- Saud Zahir +- M. Saud Zahir --- - Co-founder and maintainer. Works across the full stack of eggzec packages — numerical methods, Fortran extensions, Python APIs, and CI/CD infrastructure. - - [:fontawesome-brands-github: saudzahirr](https://github.com/saudzahirr) + Co-founder and maintainer. Software developer focused on Python, C++, + and Rust for backend services and high-performance scientific computing. -- M Laraib Ali +- M. Laraib Ali --- - Co-founder and maintainer. Contributes to package development, testing, and documentation across the eggzec ecosystem. + Co-founder and maintainer. Backend and systems engineer specializing in + Python and Go, Linux automation, PostgreSQL, observability, and containers. - [:fontawesome-brands-github: laraibg786](https://github.com/laraibg786) - -- Noor Mustafa +- Noor Mustafa --- - Contributor and member of the eggzec organisation. - - [:fontawesome-brands-github: Noor-Mustafa123](https://github.com/Noor-Mustafa123) + Maintainer. Java-focused backend developer working with Spring, Nginx, + IntelliJ IDEA, Kotlin, and Python.
--- -## Contributing - -We welcome contributions to any of our packages. Each repository has its own contributing guide — a good place to start is the `CONTRIBUTING.md` file in the relevant repo, or the documentation site for that package. - -### General guidelines - -- **Bug reports** — Open an issue in the relevant GitHub repository with a minimal reproducible example. -- **Feature requests** — Open an issue describing the use case and expected behaviour before starting implementation. -- **Pull requests** — Fork the repository, create a branch, and open a PR against `master`. All PRs run the full test suite via GitHub Actions. -- **Documentation** — Documentation improvements are always appreciated. Each package uses [Zensical](https://zensical.org) for its docs, with source files in the `docs/` directory. - -### Code quality - -All packages enforce: - -- [Ruff](https://docs.astral.sh/ruff/) for linting and formatting -- [pytest](https://pytest.org) with coverage reporting via [codecov](https://codecov.io) -- Static analysis via [SonarCloud](https://sonarcloud.io) (selected packages) - ---- - -## Repositories - -| Package | GitHub | Org | -|---------|--------|-----| -| soerp3 | [eggzec/soerp3](https://github.com/eggzec/soerp3) | eggzec | -| sparse_grid | [eggzec/sparse_grid](https://github.com/eggzec/sparse_grid) | eggzec | -| kronrod | [eggzec/kronrod](https://github.com/eggzec/kronrod) | eggzec | -| polpack | [eggzec/polpack](https://github.com/eggzec/polpack) | eggzec | -| cordic | [eggzec/cordic](https://github.com/eggzec/cordic) | eggzec | -| smolpack | [eggzec/smolpack](https://github.com/eggzec/smolpack) | eggzec | -| sdepack | [eggzec/sdepack](https://github.com/eggzec/sdepack) | eggzec | -| deltaFlow | [eggzec/deltaFlow](https://github.com/eggzec/deltaFlow) | eggzec | -| NULAPACK | [nulapack/nulapack](https://github.com/nulapack/nulapack) | nulapack | -| pydoe | [pydoe/pydoe](https://github.com/pydoe/pydoe) | pydoe | -| JavaDOE | [Java-DOE/JavaDOE](https://github.com/Java-DOE/JavaDOE) | Java-DOE | -| permit | [eggzec/permit](https://github.com/eggzec/permit) | eggzec | -| qqq | [eggzec/qqq](https://github.com/eggzec/qqq) | eggzec | - -Browse the full organisation: [:fontawesome-brands-github: github.com/eggzec](https://github.com/eggzec) +Want to join? Start with [:fontawesome-brands-github: github.com/eggzec](https://github.com/eggzec) diff --git a/docs/community/laraib.md b/docs/community/laraib.md new file mode 100644 index 0000000..0e72562 --- /dev/null +++ b/docs/community/laraib.md @@ -0,0 +1,22 @@ +# M. Laraib Ali + +![M Laraib Ali](https://github.com/laraibg786.png){ width="120" style="border-radius:12px;" } + +[:fontawesome-brands-github: GitHub](https://github.com/laraibg786) +  [:fontawesome-brands-gitlab: GitLab](https://gitlab.com/laraibg786) +  [:fontawesome-brands-python: PyPI](https://pypi.org/user/Laraibg786/) +  [:fontawesome-brands-linkedin: LinkedIn](https://www.linkedin.com/in/m-laraib-ali/) +  [:fontawesome-solid-envelope: Email](mailto:laraibg786@outlook.com) + +Backend and systems engineer specializing in Python and Go, building reliable, scalable services and automation on Linux and containerized environments. Experienced in distributed systems, PostgreSQL design, and observability with logging, tracing, and metrics to support production reliability and data-driven operations. + +
+ Python + Go + Qt + PostgreSQL + MongoDB + Redis + Linux + Docker +
diff --git a/docs/community/noor.md b/docs/community/noor.md new file mode 100644 index 0000000..e03c4f8 --- /dev/null +++ b/docs/community/noor.md @@ -0,0 +1,17 @@ +# Noor Mustafa + +![Noor Mustafa](https://github.com/Noor-Mustafa123.png){ width="120" style="border-radius:12px;" } + +[:fontawesome-brands-github: GitHub](https://github.com/Noor-Mustafa123) +  [:fontawesome-brands-linkedin: LinkedIn](https://www.linkedin.com/in/noormustafa715/) + +Passionate Java developer focused on building reliable backend applications with Spring Boot. I enjoy solving complex problems, learning continuously, and collaborating in team environments to deliver clean, maintainable software. + +
+ Java + Spring + Nginx + IntelliJ IDEA + Kotlin + Python +
diff --git a/docs/community/saud.md b/docs/community/saud.md new file mode 100644 index 0000000..7b9ef3e --- /dev/null +++ b/docs/community/saud.md @@ -0,0 +1,20 @@ +# M. Saud Zahir + +![Saud Zahir](https://github.com/saudzahirr.png){ width="120" style="border-radius:12px;" } + +[:fontawesome-brands-github: GitHub](https://github.com/saudzahirr) +  [:fontawesome-brands-gitlab: GitLab](https://gitlab.com/saudzahirr) +  [:fontawesome-brands-python: PyPI](https://pypi.org/user/saudzahirr/) +  [:fontawesome-brands-linkedin: LinkedIn](https://www.linkedin.com/in/saudzahirr/) +  [:fontawesome-solid-envelope: Email](mailto:m.saud.zahir@gmail.com) + +Software Developer with expertise in Python, C++, and Rust. Experienced in backend services, GUI deployment, databases, object-oriented design, and high-performance scientific computing. I work across the full software lifecycle, from problem formulation and system design to implementation, optimization, and deployment, with a focus on clean, maintainable, and reliable solutions for data-intensive environments. + +
+ Python + C++ + Rust + Java + Fortran + Qt +
diff --git a/docs/contact.md b/docs/contact.md new file mode 100644 index 0000000..ce30b6a --- /dev/null +++ b/docs/contact.md @@ -0,0 +1,19 @@ +--- +icon: fontawesome/solid/envelope +--- + +# Contact + +For project questions, collaboration, or contribution discussions, use one of the channels below. + +## Primary Channels + +- GitHub Organization: [:fontawesome-brands-github: github.com/eggzec](https://github.com/eggzec) +- Community: [Meet the maintainers](community/index.md) + +## Direct Contacts + +* [:fontawesome-solid-envelope:](mailto:m.saud.zahir@gmail.com) M. Saud Zahir +* [:fontawesome-solid-envelope:](mailto:laraibg786@outlook.com) M. Laraib Ali + +If your inquiry is about a specific repository, please include the repo name and a short description so we can respond faster. diff --git a/docs/contributing.md b/docs/contributing.md new file mode 100644 index 0000000..2986595 --- /dev/null +++ b/docs/contributing.md @@ -0,0 +1,100 @@ +--- +icon: fontawesome/solid/code-pull-request +--- + +# Contributing + +Thank you for your interest in contributing. +This guide explains how to report issues, propose changes, and keep contributions consistent across code, documentation, and testing. + +## How to Contribute + +You can contribute in several ways: + +- Report bugs or suggest improvements through GitHub Issues. +- Answer questions and help other users. +- Submit pull requests. +- Improve or expand documentation. +- Add or improve tests. +- Review open pull requests. + +> Before starting significant work (other than small typo or minor bug fixes), please open an issue first to discuss your proposal. + +## Reporting Issues + +When filing an issue: + +- Search existing issues to avoid duplicates. +- Use a clear, descriptive title and include a category where possible (for example: `bug - ...`, `feature-req - ...`). +- For bugs, provide steps to reproduce the issue. +- Describe expected behavior and actual behavior. +- Include environment details when relevant (OS, Python version, dependency versions). +- If possible, share a minimal reproducible example. + +## Submitting Pull Requests + +### Prerequisites + +You will need: + +- `git` +- [`uv`](https://docs.astral.sh/uv/getting-started/installation) +- Any code editor or IDE (for example VS Code, PyCharm, or similar) + +### Installation and Setup + +Fork the repository on GitHub and clone it locally. + +```bash +git clone https://github.com//.git --depth 1 +cd +uv sync +``` + +Create a new branch for your changes. + +```bash +git checkout -b +``` + +### Run Linting and Tests + +Add or update tests when your change affects behavior. +Run linting and tests before opening your PR. + +```bash +# linting and formatting (if applicable) +uvx ruff format . +uvx ruff check --fix . + +# tests (if available) +uv run pytest -n auto tests +``` + +### Build Documentation + +If you changed documentation, build and preview docs locally and check for warnings. + +```bash +uv run --with=zensical zensical build --clean --strict +``` + +### Open a Pull Request + +After finalizing your changes: + +1. Commit with a descriptive message. +2. Push your branch to your fork. +3. Open a **draft pull request** against the parent repository's default branch. +4. Include a clear summary and reference related issues. + +Mark the PR as ready for review when checks pass and the change is ready. + +## Good First Contributions + +- Improve documentation clarity and examples. +- Fix broken links, formatting, and small consistency issues. +- Add tests for uncovered behavior. +- Pick up `good first issue` or documentation-tagged issues. + +Thank you for helping improve eggzec. diff --git a/docs/how-we-build.md b/docs/how-we-build.md new file mode 100644 index 0000000..08eedbf --- /dev/null +++ b/docs/how-we-build.md @@ -0,0 +1,121 @@ +--- +icon: fontawesome/solid/layer-group +--- + +# How We Build + +Here are the tools we actively use to build, test, ship, and maintain software. + +## Languages + +
+
+ Python + Go + Java + Rust +
+
+ C++ + Fortran +
+
+ +## Frameworks + +
+ Spring + Boost C++ + Flask + FastAPI + Pydantic + SQLAlchemy +
+ +## Data Science and ML + +
+ NumPy + SciPy + PyTorch + TensorFlow + pandas +
+ +## Databases + +
+ SQLite + PostgreSQL + MongoDB +
+ +## GUI + +
+ Qt + PySide +
+ +## Build Systems + +
+ CMake + Meson + setuptools +
+ +## Package Managers + +
+ uv + micromamba + vcpkg + Conan +
+ +## Containers and Platforms + +
+ Docker + Linux +
+ +## IDEs + +
+ IntelliJ IDEA + PyCharm + CLion + DataGrip + Visual Studio Code + Visual Studio +
+ +## Code Quality + +
+ Ruff + SonarQube +
+ +## Code Testing + +
+ pytest + Catch2 +
+ +## Documentation + +
+ Zensical + Doxygen +
+ +## AI + +
+ Claude Code + OpenAI +
diff --git a/docs/index.md b/docs/index.md index a508590..42e6a59 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,128 +1,71 @@ --- -icon: lucide/home +icon: fontawesome/solid/house --- # eggzec -**Science & Computing** +**Science + Computing** --- -We are a community of scientists and engineers building high-quality, open-source scientific Python packages. Our tools are designed to bring production-grade numerical methods, mathematical routines, and engineering utilities directly into Python — with clean APIs, rigorous testing, and thorough documentation. +A community focused on open source high-performance scientific computing and modern software development.
-- :lucide-sigma: **soerp3** +- pyswarm --- - Second-order error propagation (uncertainty analysis) for Python. - Transparently tracks uncertainty through mathematical calculations using - the first eight statistical moments. + Particle Swarm Optimization for Python. - **License:** BSD-3-Clause  |  **PyPI:** `pip install soerp3` + [:fontawesome-solid-book: Documentation](https://eggzec.github.io/pyswarm/) +   [:fontawesome-brands-github: GitHub](https://github.com/eggzec/pyswarm) - [:octicons-arrow-right-24: Documentation](https://eggzec.github.io/soerp3/) -   [:fontawesome-brands-github: Source](https://github.com/eggzec/soerp3) - -- :lucide-grid-2x2: **sparse\_grid** +- pydoe --- - Pure-Python implementation of regular sparse grids over box domains. - Provides hierarchical index generation, coefficient conversion, and - fast function evaluation using hat basis functions. - - **License:** BSD-3-Clause  |  **PyPI:** `pip install sparse-grid` + Design of Experiments for Python. - [:octicons-arrow-right-24: Documentation](https://eggzec.github.io/sparse_grid/) -   [:fontawesome-brands-github: Source](https://github.com/eggzec/sparse_grid) + [:fontawesome-solid-book: Documentation](https://pydoe.github.io/pydoe/) +   [:fontawesome-brands-github: GitHub](https://github.com/pydoe/pydoe) -- :lucide-function-square: **polpack** +- mcerp --- - Special functions and recursively-defined polynomial families for Python. - Fortran-backed routines for Bernoulli, Chebyshev, Gegenbauer, Hermite, - Laguerre, Legendre polynomials, and more. - - **License:** LGPL-2.1  |  **PyPI:** `pip install polpack` + Monte Carlo error propagation for uncertainty analysis in Python. - [:octicons-arrow-right-24: Documentation](https://eggzec.github.io/polpack/) -   [:fontawesome-brands-github: Source](https://github.com/eggzec/polpack) + [:fontawesome-solid-book: Documentation](https://eggzec.github.io/mcerp/) +   [:fontawesome-brands-github: GitHub](https://github.com/eggzec/mcerp) -- :lucide-calculator: **smolpack** +- soerp --- - Multidimensional quadrature over the unit hypercube using Smolyak's - sparse-grid algorithm with Clenshaw–Curtis rules. Delayed and standard - variants provided. + Second-order error propagation for uncertainty analysis in Python. - **License:** LGPL-2.1  |  **PyPI:** `pip install smolpack` + [:fontawesome-solid-book: Documentation](https://eggzec.github.io/soerp/) +   [:fontawesome-brands-github: GitHub](https://github.com/eggzec/soerp) - [:octicons-arrow-right-24: Documentation](https://eggzec.github.io/smolpack/) -   [:fontawesome-brands-github: Source](https://github.com/eggzec/smolpack) - -- :lucide-trending-up: **sdepack** +- ad --- - Runge–Kutta numerical integration of stochastic differential equations. - Solvers from first-order Euler–Maruyama to fourth-order stochastic RK - methods using Kasdin coefficients. - - **License:** MIT  |  **PyPI:** `pip install sdepack` - - [:octicons-arrow-right-24: Documentation](https://eggzec.github.io/sdepack/) -   [:fontawesome-brands-github: Source](https://github.com/eggzec/sdepack) - -- :lucide-zap: **deltaFlow** - - --- - - Power system analysis tool for steady-state and dynamic simulation of - electrical networks. Built for engineers and researchers working on - grid analysis and planning. - - **License:** Open Source + First- and second-order automatic differentiation for Python. - [:octicons-arrow-right-24: Documentation](https://eggzec.github.io/deltaFlow/) -   [:fontawesome-brands-github: Source](https://github.com/eggzec/deltaFlow) + [:fontawesome-solid-book: Documentation](https://pythonhosted.org/ad/) +   [:fontawesome-brands-github: GitHub](https://github.com/eggzec/ad) -- :lucide-table: **NULAPACK** +- qtop --- - NUmerical Linear Algebra PACKage — lightweight, high-performance routines - implemented in Fortran with Python and C++ interfaces. Developed under - the `nulapack` organisation. + HPC queue and cluster monitor. - **License:** GPL-3.0  |  **PyPI:** `pip install nulapack` - - [:octicons-arrow-right-24: Documentation](https://nulapack.github.io/NULAPACK/) -   [:fontawesome-brands-github: Source](https://github.com/nulapack/nulapack) - -- :lucide-flask-conical: **pydoe** - - --- - - Design of Experiments for Python — full-factorial, fractional-factorial, - Plackett–Burman, Box–Behnken, central composite, and Latin Hypercube - designs. Developed under the `pydoe` organisation. - - **License:** BSD-3-Clause  |  **PyPI:** `pip install pydoe` - - [:octicons-arrow-right-24: Documentation](https://pydoe.github.io/pydoe/) -   [:fontawesome-brands-github: Source](https://github.com/pydoe/pydoe) + [:fontawesome-solid-book: Documentation](https://eggzec.github.io/qtop/) +   [:fontawesome-brands-github: GitHub](https://github.com/eggzec/qtop)
--- - -## Get Involved - -All packages are open source and openly developed on GitHub. We welcome bug reports, feature requests, and pull requests. - -- Browse our repositories: [:fontawesome-brands-github: github.com/eggzec](https://github.com/eggzec) -- See the [Community](community/index.md) page to learn about the team and how to contribute. diff --git a/docs/projects/index.md b/docs/projects/index.md index 05619f1..e5f9291 100644 --- a/docs/projects/index.md +++ b/docs/projects/index.md @@ -1,302 +1,223 @@ --- -icon: lucide/package +icon: fontawesome/solid/diagram-project --- # Projects -All packages are open source, available on PyPI, and actively maintained. They are designed to compose well together — for example, `sparse_grid` and `smolpack` share the same sparse-grid foundations, `polpack` feeds quadrature rules used by `smolpack`, and `soerp3` can build on any of the numerical outputs. +
---- +- :fontawesome-brands-github: **bb** -## Numerical Analysis + --- -### soerp3 + A Bitbucket CLI and SDK client. -**Second Order Error Propagation for Python** + [:fontawesome-brands-github: GitHub](https://github.com/eggzec/bb) -`soerp3` is the Python implementation of the original Fortran code `SOERP` by N. D. Cox. It applies a second-order analysis to error propagation (uncertainty analysis), allowing you to transparently track the effects of uncertainty through mathematical calculations. The result of all calculations produces a *mean*, *variance*, and *standardized skewness and kurtosis* coefficients. +- :fontawesome-brands-github: **vatic** -The package requires the **first eight statistical moments** of the input distributions (mean, variance, and standardized 3rd–8th moments). These can be supplied manually, or generated using built-in constructors or `scipy.stats` distributions. + --- -| | | -|---|---| -| **Repository** | [github.com/eggzec/soerp3](https://github.com/eggzec/soerp3) | -| **Documentation** | [eggzec.github.io/soerp3](https://eggzec.github.io/soerp3/) | -| **PyPI** | `pip install soerp3` | -| **License** | BSD-3-Clause | + Open-source risk analysis with predictive modeling and Monte Carlo + simulation for uncertainty workflows. -```python -from soerp3 import N, umath + [:fontawesome-brands-github: GitHub](https://github.com/eggzec/vatic) -H = N(64, 0.5) # Normal(mean=64, std=0.5) -M = N(16, 0.1) -P = N(361, 2) -t = N(165, 0.5) -C = 38.4 -Q = C * umath.sqrt((520 * H * P) / (M * (t + 460))) -Q.describe() -``` +- qtop ---- + --- -### sparse\_grid + Text-mode HPC queue monitor for PBS, SGE, and OAR clusters. -**A Python Sparse Grid Package** + [:fontawesome-solid-book: Documentation](https://eggzec.github.io/qtop/) +   [:fontawesome-brands-github: GitHub](https://github.com/eggzec/qtop) -`sparse_grid` is a pure-Python implementation of regular sparse grids over box domains. It provides hierarchical index generation, nodal-to-hierarchical coefficient conversion, and fast function evaluation using the hat (piecewise-linear) basis. +- pyswarm -| | | -|---|---| -| **Repository** | [github.com/eggzec/sparse_grid](https://github.com/eggzec/sparse_grid) | -| **Documentation** | [eggzec.github.io/sparse_grid](https://eggzec.github.io/sparse_grid/) | -| **PyPI** | `pip install sparse-grid` | -| **License** | BSD-3-Clause | + --- -```python -from sparse_grid import SparseGrid + Particle Swarm Optimization (PSO) for Python with a lightweight API for + constrained, gradient-free optimization. -sg = SparseGrid(dim=2, level=3) -sg.generate_points() -for index in sg.indices: - pos = sg.g_p[tuple(index)].pos - sg.g_p[tuple(index)].fv = ( - 4.0 * pos[0] * (1.0 - pos[0]) * 4.0 * pos[1] * (1.0 - pos[1]) - ) -sg.nodal_2_hier() -print(sg.eval_funct([0.25, 0.75])) -``` + [:fontawesome-solid-book: Documentation](https://eggzec.github.io/pyswarm/) +   [:fontawesome-brands-github: GitHub](https://github.com/eggzec/pyswarm) ---- +- pydoe -### kronrod + --- -**Gauss-Kronrod Quadrature Rules for Python** + Design of Experiments package for Python with factorial, + response-surface, space-filling, and optimal design methods. -`kronrod` computes abscissas and weights of Gauss-Kronrod quadrature rules. It optimally adds N+1 points to an N-point Gauss rule to produce a (2N+1)-point Gauss-Kronrod rule for numerical integration, allowing function values from the Gauss rule to be reused. + [:fontawesome-solid-book: Documentation](https://pydoe.github.io/pydoe/) +   [:fontawesome-brands-github: GitHub](https://github.com/pydoe/pydoe) -| | | -|---|---| -| **Repository** | [github.com/eggzec/kronrod](https://github.com/eggzec/kronrod) | -| **PyPI** | `pip install kronrod` | -| **License** | LGPL-2.1 | +- mcerp ---- + --- -### smolpack + Real-time Monte Carlo error propagation for Python using + latin-hypercube sampling. -**Multidimensional Quadrature Using Sparse Grids for Python** + [:fontawesome-solid-book: Documentation](https://eggzec.github.io/mcerp/) +   [:fontawesome-brands-github: GitHub](https://github.com/eggzec/mcerp) -`smolpack` is a high-performance library for numerical integration (cubature) over the unit hypercube [0,1]^d using Smolyak's algorithm with Clenshaw–Curtis quadrature rules. Two solvers are provided: a *delayed Clenshaw–Curtis* variant (fewer function evaluations) and a *standard Clenshaw–Curtis* variant. +- soerp -| | | -|---|---| -| **Repository** | [github.com/eggzec/smolpack](https://github.com/eggzec/smolpack) | -| **Documentation** | [eggzec.github.io/smolpack](https://eggzec.github.io/smolpack/) | -| **PyPI** | `pip install smolpack` | -| **License** | LGPL-2.1 | + --- -```python -import numpy as np -import smolpack + Second-order error propagation for Python to track uncertainty through + mathematical models using distribution moments. -def my_func(dim, x): - return np.exp(np.sum(x)) + [:fontawesome-solid-book: Documentation](https://eggzec.github.io/soerp/) +   [:fontawesome-brands-github: GitHub](https://github.com/eggzec/soerp) -result = smolpack.int_smolyak(my_func, dim=3, qq=5) -``` +- ad ---- + --- -### sdepack + First- and second-order automatic differentiation for Python with + transparent numerical operations. -**Runge–Kutta Numerical Integration of Stochastic Differential Equations** + [:fontawesome-solid-book: Documentation](https://pythonhosted.org/ad/) +   [:fontawesome-brands-github: GitHub](https://github.com/eggzec/ad) -`sdepack` provides high-performance numerical solvers for scalar Itô SDEs of the form: +- :fontawesome-brands-github: **sdepack** -$$dX(t) = F(X, t)\,dt + Q\,G(X, t)\,dW(t)$$ + --- -Solvers range from the first-order **Euler–Maruyama** scheme to fourth-order stochastic Runge–Kutta methods using Kasdin coefficients. All solvers are deterministic via seed-controlled integration. + Stochastic Runge-Kutta solvers for scalar Ito SDEs, from Euler-Maruyama + to higher-order schemes. -| | | -|---|---| -| **Repository** | [github.com/eggzec/sdepack](https://github.com/eggzec/sdepack) | -| **Documentation** | [eggzec.github.io/sdepack](https://eggzec.github.io/sdepack/) | -| **PyPI** | `pip install sdepack` | -| **License** | MIT | + [:fontawesome-solid-book: Documentation](https://eggzec.github.io/sdepack/) +   [:fontawesome-brands-github: GitHub](https://github.com/eggzec/sdepack) -```python -import numpy as np -import sdepack +- :fontawesome-brands-github: **smolpack** -x = np.zeros(101, dtype=np.float64) -sdepack.rk4_ti_solve( - lambda x: -0.5 * x, # drift - lambda x: 1.0, # diffusion - x, 0.0, 10.0, 1.0, 100, 0.1, 42 -) -``` + --- ---- + Multidimensional cubature over `[0,1]^d` using Smolyak sparse-grid + construction with Clenshaw-Curtis rules. -## Special Functions & Algebra + [:fontawesome-solid-book: Documentation](https://eggzec.github.io/smolpack/) +   [:fontawesome-brands-github: GitHub](https://github.com/eggzec/smolpack) -### polpack +- NULAPACK -**Special Functions and Recursively-Defined Polynomial Families** + --- -`polpack` is a high-performance library for evaluating special functions and recursively-defined polynomial families. The numerical core is written in Fortran and compiled via `f2py`. It includes routines for **Bernoulli**, **Chebyshev**, **Gegenbauer**, **Hermite**, **Laguerre**, and **Legendre** polynomials, among others, as well as combinatorial functions. + Numerical linear algebra package with Fortran core subroutines and + Python/C++ interfaces. -| | | -|---|---| -| **Repository** | [github.com/eggzec/polpack](https://github.com/eggzec/polpack) | -| **Documentation** | [eggzec.github.io/polpack](https://eggzec.github.io/polpack/) | -| **PyPI** | `pip install polpack` | -| **License** | LGPL-2.1 | + [:fontawesome-solid-book: Documentation](https://nulapack.github.io/NULAPACK/) +   [:fontawesome-brands-github: GitHub](https://github.com/NULAPACK/NULAPACK) -```python -import numpy as np -import polpack +- :fontawesome-brands-github: **polpack** -bell = np.zeros(11, dtype=np.int32) -polpack.bell(10, bell) -print(f"Bell numbers: {bell}") -``` + --- ---- + High-performance special functions and polynomial families with a + Fortran numerical core. -### cordic + [:fontawesome-solid-book: Documentation](https://eggzec.github.io/polpack/) +   [:fontawesome-brands-github: GitHub](https://github.com/eggzec/polpack) -**CORDIC Algorithm for Python** +- :fontawesome-brands-github: **kronrod** -`cordic` is a high-performance Python library implementing the CORDIC (COordinate Rotation DIgital Computer) algorithm for evaluating trigonometric, hyperbolic, exponential, logarithmic, and root functions using only shifts, additions, and a small look-up table. The core is written in C. + --- -| | | -|---|---| -| **Repository** | [github.com/eggzec/cordic](https://github.com/eggzec/cordic) | -| **PyPI** | `pip install cordic` | -| **License** | LGPL-2.1 | + Gauss-Kronrod quadrature rule generator for reusable high-accuracy + numerical integration. ---- + [:fontawesome-solid-book: Documentation](https://eggzec.github.io/kronrod/) +   [:fontawesome-brands-github: GitHub](https://github.com/eggzec/kronrod) -### NULAPACK +- :fontawesome-brands-github: **sparse_grid** -**NUmerical Linear Algebra PACKage** + --- -NULAPACK is a lightweight, high-performance numerical linear algebra library. Core subroutines are implemented in Fortran for efficiency, with convenient C++ and Python interfaces. Developed under the [nulapack](https://github.com/nulapack) organisation, maintained by eggzec contributors. + Pure-Python sparse grid implementation with hierarchical index generation + and fast hat-basis evaluation. -| | | -|---|---| -| **Repository** | [github.com/nulapack/nulapack](https://github.com/nulapack/nulapack) | -| **Documentation** | [nulapack.github.io/NULAPACK](https://nulapack.github.io/NULAPACK/) | -| **PyPI** | `pip install nulapack` | -| **License** | GPL-3.0 | + [:fontawesome-solid-book: Documentation](https://eggzec.github.io/sparse_grid/) +   [:fontawesome-brands-github: GitHub](https://github.com/eggzec/sparse_grid) ---- +- :fontawesome-brands-github: **cordic** -## Engineering & Design + --- -### deltaFlow + CORDIC-based trigonometric, hyperbolic, exponential, logarithmic, and + root-function evaluation library for Python. -**Power System Analysis Tool** + [:fontawesome-solid-book: Documentation](https://eggzec.github.io/cordic/) +   [:fontawesome-brands-github: GitHub](https://github.com/eggzec/cordic) -`deltaFlow` is a power system analysis tool for steady-state and dynamic simulation of electrical networks. It is designed for engineers and researchers working on grid analysis, load flow studies, and power system planning. +- deltaFlow -| | | -|---|---| -| **Repository** | [github.com/eggzec/deltaFlow](https://github.com/eggzec/deltaFlow) | -| **Documentation** | [eggzec.github.io/deltaFlow](https://eggzec.github.io/deltaFlow/) | -| **License** | GPL-3.0 | + --- ---- + Command-line power-flow analysis tool for electrical systems using + Gauss-Seidel and Newton-Raphson solvers. -### pydoe + [:fontawesome-solid-book: Documentation](https://eggzec.github.io/deltaFlow/) +   [:fontawesome-brands-github: GitHub](https://github.com/eggzec/deltaFlow) -**Design of Experiments for Python** +- JavaDOE -`pydoe` enables scientists, engineers, and statisticians to efficiently construct experimental designs. It provides extensive support for factorial, response surface, and space-filling designs. Developed under the [pydoe](https://github.com/pydoe) organisation, maintained by eggzec contributors. + --- -Supported design families: + Java Design of Experiments library including Box-Behnken, central + composite, and factorial designs. -- Full-Factorial and 2-level Full-Factorial -- Fractional Factorial (with aliasing, resolution, and optimal selection) -- Plackett–Burman -- Generalized Subset Designs -- Box–Behnken, Central Composite -- Latin Hypercube Sampling + [:fontawesome-brands-github: GitHub](https://github.com/Java-DOE/JavaDOE) -| | | -|---|---| -| **Repository** | [github.com/pydoe/pydoe](https://github.com/pydoe/pydoe) | -| **Documentation** | [pydoe.github.io/pydoe](https://pydoe.github.io/pydoe/) | -| **PyPI** | `pip install pydoe` | -| **Conda** | `conda install -c conda-forge pydoe` | -| **License** | BSD-3-Clause | +- :fontawesome-brands-github: **qweb** ---- + --- -### JavaDOE + Web interface for Sun Grid Engine with job submission, monitoring, and + cluster management endpoints. -**Design of Experiments Library for Java** + [:fontawesome-brands-github: GitHub](https://github.com/eggzec/qweb) -`JavaDOE` is a comprehensive Java library for Design of Experiments (DOE) algorithms, including Box–Behnken, Central Composite, Factorial, and other DOE methods. Developed under the [Java-DOE](https://github.com/Java-DOE) organisation, maintained by eggzec contributors. +
-| | | -|---|---| -| **Repository** | [github.com/Java-DOE/JavaDOE](https://github.com/Java-DOE/JavaDOE) | -| **License** | Apache-2.0 | +## Work In Progress (WIP) ---- +
-## In Progress +- :fontawesome-brands-github: **pyact** -### permit + --- -**License as a Service (LaaS) MVP** + Python wrapper around `nektos/act` for local GitHub Actions workflows. -`permit` is a minimal viable product exploring license-as-a-service infrastructure — programmatic license issuance, verification, and management for software projects. + [:fontawesome-brands-github: GitHub](https://github.com/laraibg786/pyact) -[:fontawesome-brands-github: github.com/eggzec/permit](https://github.com/eggzec/permit) +- :fontawesome-brands-github: **pydanticInput** ---- + --- -### qqq + Input-validation utility project built around Pydantic, currently under + active development. -**Web Interface for Sun Grid Engine** + [:fontawesome-brands-github: GitHub](https://github.com/laraibg786/pydanticInput) -`qqq` is a web interface for Sun Grid Engine (SGE) that visualises cluster jobs and allows basic job management. Useful for HPC users who prefer a browser-based view over the `qstat` command line. +- :fontawesome-brands-github: **codeCurfew** -[:fontawesome-brands-github: github.com/eggzec/qqq](https://github.com/eggzec/qqq) + --- ---- + Go-based tooling project currently in progress. -### pyact + [:fontawesome-brands-github: GitHub](https://github.com/laraibg786/codeCurfew) -Early-stage Python package currently in active development. +- :fontawesome-brands-github: **permit** -[:fontawesome-brands-github: github.com/eggzec/pyact](https://github.com/eggzec/pyact) - ---- - -### pydanticInput - -Early-stage Python package currently in active development. - -[:fontawesome-brands-github: github.com/eggzec/pydanticInput](https://github.com/eggzec/pydanticInput) - ---- - -### scikit-ode - -**Differential Equation Solver for Python** - -Early-stage Python package currently in active development. - -[:fontawesome-brands-github: github.com/eggzec/scikit-ode](https://github.com/eggzec/scikit-ode) - ---- + --- -### codeCurfew + License as a Service MVP exploring programmatic license issuance and + verification flows. -Early-stage project currently in active development. + [:fontawesome-brands-github: GitHub](https://github.com/eggzec/permit) -[:fontawesome-brands-github: github.com/eggzec/codeCurfew](https://github.com/eggzec/codeCurfew) +
diff --git a/zensical.toml b/zensical.toml index 84b8d09..e097d87 100644 --- a/zensical.toml +++ b/zensical.toml @@ -12,7 +12,17 @@ Copyright © 2026 eggzec nav = [ { "Home" = "index.md" }, { "Projects" = "projects/index.md" }, - { "Community" = "community/index.md" }, + { "Community" = [ + { "Overview" = "community/index.md" }, + { "M. Saud Zahir" = "community/saud.md" }, + { "M. Laraib Ali" = "community/laraib.md" }, + { "Noor Mustafa" = "community/noor.md" }, + ] + }, + { "How We Build" = "how-we-build.md" }, + { "Contributing" = "contributing.md" }, + { "Contact" = "contact.md" }, + { "Blogs" = "blogs/index.md" }, ] extra_javascript = [ @@ -20,6 +30,10 @@ extra_javascript = [ "https://unpkg.com/mathjax@3/es5/tex-mml-chtml.js", ] +extra_css = [ + "assets/stylesheets/extra.css", +] + # ---------------------------------------------------------------------------- # Theme # ---------------------------------------------------------------------------- @@ -27,6 +41,7 @@ extra_javascript = [ language = "en" logo = "assets/images/logo.png" +favicon = "assets/images/logo.png" features = [ "announce.dismiss", @@ -40,7 +55,6 @@ features = [ "navigation.indexes", "navigation.instant", "navigation.instant.prefetch", - "navigation.path", "navigation.sections", "navigation.tabs", "navigation.top", @@ -54,14 +68,7 @@ features = [ # Color palette # ---------------------------------------------------------------------------- [[project.theme.palette]] -scheme = "default" -toggle.icon = "lucide/sun" -toggle.name = "Switch to dark mode" - -[[project.theme.palette]] -scheme = "slate" -toggle.icon = "lucide/moon" -toggle.name = "Switch to light mode" +scheme = "default" # ---------------------------------------------------------------------------- # Social links