From e4ceda0eb8e2ad0abd3ff9a9f6f5e68acc030f96 Mon Sep 17 00:00:00 2001 From: Callum J Hays Date: Sun, 2 Jul 2023 14:56:42 +1000 Subject: [PATCH] docs: fix readme --- README.md | 92 ++++++--------------------- examples/imgs/showcase/algebra.png | Bin 0 -> 6620 bytes examples/imgs/showcase/basic.png | Bin 0 -> 4267 bytes examples/imgs/showcase/calculus.png | Bin 0 -> 3305 bytes examples/imgs/showcase/equations.png | Bin 0 -> 1804 bytes examples/imgs/showcase/matrices.png | Bin 0 -> 18131 bytes examples/imgs/showcase/solving.png | Bin 0 -> 1294 bytes examples/imgs/showcase/sym-funcs.png | Bin 0 -> 1766 bytes examples/imgs/showcase/symbols.png | Bin 0 -> 1703 bytes examples/imgs/showcase/units.png | Bin 0 -> 3582 bytes examples/imgs/showcase/values.png | Bin 0 -> 1972 bytes examples/imgs/showcase/vectors.png | Bin 0 -> 12837 bytes 12 files changed, 20 insertions(+), 72 deletions(-) create mode 100644 examples/imgs/showcase/algebra.png create mode 100644 examples/imgs/showcase/basic.png create mode 100644 examples/imgs/showcase/calculus.png create mode 100644 examples/imgs/showcase/equations.png create mode 100644 examples/imgs/showcase/matrices.png create mode 100644 examples/imgs/showcase/solving.png create mode 100644 examples/imgs/showcase/sym-funcs.png create mode 100644 examples/imgs/showcase/symbols.png create mode 100644 examples/imgs/showcase/units.png create mode 100644 examples/imgs/showcase/values.png create mode 100644 examples/imgs/showcase/vectors.png diff --git a/README.md b/README.md index 16a10f6..0407227 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ +$$ \dot{\vec{vec}} \hspace{1.25em} \begin{matrix} \hat{i} \cdot \frac{\text{m}}{\text{s}} \\ \hat{j} \cdot \frac{\text{m}}{\text{s}} \\ \hat{k} \cdot \frac{\text{m}}{\text{s}} \end{matrix}\normalsize \hspace{0.7em} \small\text{wrt. O}\normalsize $$ + + + # mathpad @@ -61,9 +65,7 @@ pip install mathpad - $$ 5 \hspace{1.25em} \frac{\text{m}}{\text{s}} $$ - - $$ mph = 11.1847 \hspace{1.25em} \frac{\text{mile}}{\text{hour}} $$ + ![Alt text](examples/imgs/showcase/basic.png) @@ -78,9 +80,9 @@ Currently the only in-depth documentation is `Walkthrough.ipynb`. You can access ## Showcase ---+++ @@ -102,14 +104,7 @@ feet.in_units(cm) @@ -126,9 +121,7 @@ c = m(5) @@ -145,10 +138,7 @@ y = "\\hat{y}_1" * volts @@ -163,7 +153,7 @@ a = "a(t)" * m / s ** 2 @@ -178,7 +168,7 @@ eqn = (v == a * t) @@ -195,7 +185,7 @@ sln[a] @@ -217,13 +207,7 @@ subs((t + 1)(t + 2), { t: 5 }) @@ -241,11 +225,7 @@ integral(a, wrt=t, between=(0, 10)) @@ -271,16 +251,9 @@ v2.cross(v3) ``` - @@ -309,19 +282,7 @@ I = Mat[O2, O2].I @@ -344,7 +305,7 @@ y_fn({ ``` - - - - diff --git a/examples/imgs/showcase/algebra.png b/examples/imgs/showcase/algebra.png new file mode 100644 index 0000000000000000000000000000000000000000..5a07e5037c204fc41a473146940106b538940175 GIT binary patch literal 6620 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 O3CK{_6kUtL#QX=-TNl;< literal 0 HcmV?d00001 diff --git a/examples/imgs/showcase/equations.png b/examples/imgs/showcase/equations.png new file mode 100644 index 0000000000000000000000000000000000000000..ac753bd272a5d44bad541e0fbffaf82652180b9d GIT binary patch literal 1804 zcmaKtX*3&%7RRGA$RJ9CN@96vr+Fi>KhtO`C5fert!j;6Y8wP2wbs6sSc@0cluGI7 zVjqgoqH2N?ib0BEs`hk{|*^|mO8ksU0}0d*{uHBs`dzu7f20H85n`ir-?DE}_Z%9RWN$o76U zF=pr!9{@mtZjCc@j3#nsU9B8R%92}_!^ZAUD~5&;!0a>HZk^BXmVB}@GsBL=cfDdPOtW%wii?XCO7*-`nqRyae4Q@sJKf-I5X1HPPFlL?$rHHs zwQK*RWA6+Ol^T9p9;S^=Oe}TIcql^+lwdIJ!-L(agT=+gSnNGHwfx<`=C8QB({}nr zWg&9bB_pQyKYG)zzTKZ`4dpHkfH_+^(0^PO3OF0+9dh&`Ghf}eJ4uWs|BksZ=@e)? zdUmEGs@~DrdE+C*(9g=kB0~ioZKrlIwhFmYQ-g@FtE$35VKCp#>BhpMBCVa};qi|l z@~7xAds}oBOaj5Zsx@?;IyiWl-S$i6&_hhu%u$`FT zbEoOgQ98CM@i<|C#gYwl&7dMJ@HMHU^L>0e1QlL|@L)K8lO%4^Z98)4X~w7UCE|7@ zzp=1L`yyHhbT8_!4{Mpz{9|U2Ty(Ij8GE%f$Udyi)CgWHcc1;6e-st9`+0603?i$9 z3VCZKN+kY5?+N zWAy4Thr$SUJGoko=}+iNco{s$xRHwMkq?I%Z*y`vkwE#^OC)>Qxko!IBO3&Xdb1zl z7>uV=9bv5nmR9gG{$Mg@!Z0UEUtgb9`MCjg${VjYS?95#qR4U3=nSyCT55prjacXw z1BDZbL@T7;k+p^*G)D)I#}^h9j6x(ly?x+t_~-#}q~2}vSW*y7VmINPYTeHM<~KZc z6DVPP#q_q|>I>4$uQM)sjD@2|`0SLi$udL#Jo1Q)aVSH|94xij#59TJJ-OlJjVI77i4lCeLS0fOBUSKHl2*-_Y91qpt)c!EuKz>8qr!^-i^w+ zz|A*mhJHCRYG@Z4xV%e!!Aa%ke%*je3nz>Sqpg0!P|y`u*HYsjX7lJ8T@}8GqBCcu z6VoIUcMuAbSuW*wJ@v-C)YT*1yhzd;xM@=IsbP*XlnYxnT49xq&jDTZ%8h<56tO}p zz`6D4?=qnMPkq^^p$Y_Z*=b61(3FlU3C*0PkfB`ZLBrtaz6i@Cj7f?IxXq^j-*W{0 z^wbQl%!SutG{RioC&<3|>AuB@o}=@@fgBMA`Zp85>Jq8>zhwX4;Lq%ja_Zc>PpP$J Qi#`~@8gGNEGxtjQ7l2`D$N&HU literal 0 HcmV?d00001 diff --git a/examples/imgs/showcase/matrices.png b/examples/imgs/showcase/matrices.png new file mode 100644 index 0000000000000000000000000000000000000000..2702eb548ef5c345792bc954bc15748ebbdbb2b7 GIT binary patch literal 18131 zcmeFZWmHvB`|eG%NjFG$gRtq6?vh495Tv^s>29P11W73skZzFfR6uf*5+WVSrqASg z#(#`6#`*HTW4!0v`+=q4-pjexo@>tg`d!yetd@on9ySFw5)u-gin6>85)!gI_>zTS zfS>Fe>lK4PkUeyiWRWT-sCL0OXf`tHGDt`@NjNuV=-_)SS7ieaBqaRahcDzom(P|+ zNQ$;9@-i>p7$4+f-Mp|^8a%RG^`XDcgDk`kb+ju>7^|lKexhpZ`={YtpQdU`j_8Sa zTA>z^_QzyShV*1X)n_k07c=l41yoH83yj}nZ{=ip+?`zqNuFI!=49QEW$|C!wpCrX zR$jL{Fr_}FkAT)#2_98JWn(fK=t;qm@&C#(>1pTfzij`Le$wThNStqsvXB}E!c$1y zn-lYkweUx+E}gft%Yhfm&WG@p6@FRB3F+b=&cd6^oqX%qxysi|KfgR53_KebcD_NJ zRI0pVac=l2aEDEQSI8tQX*b0LULtn%Bd+~qfO6&A>5pnNxucc1^ZkYCgU}!K6<^{5y;56c_SZB!s+f%^{uho zpsv*C1%y6BdrCyKFvj)Miq7S)Bq_M2)a|AOHqFZYUR9^JN#Nh~>%Vg*--<>t-pv@! zR2+kUo)L7I9s72D*tSAIAAyLk6*CMx2?AqZZkRLP!@#51lz0q-ya7XAX3Y=Sh{B`X zo{+dOx|mYs&T63aYFzPi@cH}mW!vq)rAaY{2xzdjH$Cg)U+FK6-O8&v{A``WO@c1_ zC9ZxK9fsj>xw7WHDZI|VzodP9>b%_Ak|cRG}v)wp_a?Dv&08Faqmw`%8sK);P4m zH#L;})(IsHBt1u+_lGON_kkXxJRD|P7XQv}&L-Oy>TH&5ppVyh2XStx=;bdz$A}A| zRM_NtWr%?RE>k#Em<=NKR+HG9gRI9tSbd3pBz5E3?M!F%(r4N0J>^r^0!l&qv?Yrq z3Ha4sl}lwsG>zX-;J*c%!(=&pw|A_X-WPC>q}Wa+eagW_Aj<1h8R|TEn^A+cxx2-&k9V%N&!H_QCLQ9Un zyy0$2M_K9g*;{GPHQbh*nsR-ZeA3=?1-Pzj6NVWqtaXPwm9lQgC}4@;oyD@|@%W(6 za%I@2h5P4F&i;_Wq_zy&a||^=X`&YM7PyFkMusdo?a$X7#&J}-lD_s#S#lrcd@0iV z_{T@{h#YD92379`D^i~^-oeZm&1@k~LS~fOP?vy-9FfBiRQ&22pPNnD2;}Y~j|q`M zo!7gRWBPkP%XcI=3N;iUA`BWBkjp<1hS8(z^W9%G{`zvc zrX#ebUU6jEzo!%MfxAU-J++{>@N#ZDXtc(wx0@cg>FehUyz-p;D2K^`nT=fuk@UY< z_PI!e6_uTF3O2v^tfFzuFUa;pUf*=T-eq-V*>hTbJBsMXr+rx(g$?fxS+wDs%d@YK zk`v2*_MH?kOh1Z*E@-R7An3umN2WHROURI?JQN9ydM4XPiq!&@Wu`Yzj1b?jB@NWZ zenH5vqCCWidnb2L$o(u7yo3_VSKed~)@-Pb~WPmkKq;G^7~73PWz0^rph@`^(z zpR`|PP|fPZ5O;`#acM`|{XQ9_J^C~A#UiODNJDg&sf}Bn>@$;mz!%@gqfN3=o<%!( z{u4q%*7w6NAURq(|H2C%7C*I1aJZVs=MXUME>HM}?Wv)h1sOseCO@z7P@8F`;Y5YRSZ$76P_ zMv%wTB@{~Nqv%7jU?*&K{UnAj;Pzs*UPJanm=zyazWE!jRr;Q7XLPDPqiU0@5q5mf z_1e+wnLg}Q{SbB<`TWH6KLo#toSFmI zw$t&Lx*jL`TpCWJf-@n;5Qaj}Y@NZ)Z!_V^sF+Z#ujeOj7ESG4UBFXme#O&Cx!7y5 zi0Ry+_?99o(_)B3m5C|}B1BEEChf4cpw7Vi5}c?w;Q%&O+1UEFj>1`c6b@1@-<(Si*gp$Bx)0$}G25Le-?eMB;kCZdT8?)97sRGC0U%N^rV6X5M!v_v`EFrehQVr^T5KXEVnu z8Z3Iu4%oB~1;=!2iRyd5NiXDoI&oZs_s1!wFM0Ku(FGfpisA?o#U3g3h zVWsb&Z{Vikc#hwL{(SkgFGBOYAa>G*WZ)>NKkPc@Ena3>Ediv{fa`KFfJ;wD$o8fF zh^4iwL|DXL|5z%lsM;RRud0xPT|-mO7{llk$zIZ23w?pI^q5tnK8w_eAfCM0q+E|v zH~`^FIfPaDZ*OiASGqZ{>nK+b4bMjN(%gFL4%(f(UEz|iC(G6Fr=JSCAR_lSXX6x7 zpmK1U9IbYSKvBg*m*`+Eo*Rwvk_VCKYRy`I3AUKdqCwd&ZW;$1Y`OcTJ7wBx zcQKvvB}dm%urr?WD`5mrutG-IH}zBYZG#u>K7D19_G~SHxz|cG+m3$_tfLHaM@ztv z9vt#w*X6QJ#&ymLaFYb%9WUr==$BH)>>U}j8Lxm`U@pyVq4GxbK-KsRK`>J%BOZmx)1VO} zO#DR@VGK_x>#+Fk?QECE%x5gsUDZYgmKhY^H$@q0>l>=|hWMsUyGCYe;v>&&CJho& z&8;~Xy3`-fy*?Lt3Fkm`66nD_``$NO-|c(oBAniOZ#M}pk~zHy9=V&=QIJ54^;MVgYA#eXr4Tye$w4#N-r(!tk-M+dvooaFE0YjowthWW!xz?=(;I;=AI)&seH0U7&RK$yU4w)b z$EQ_8k-U#Wi^1`#tvpf6YIbc^NU-rZZ?wis-fjSu(rECchSs_gBGwuCs0Q8ozP>^1sNExSy#MmB{$~oK z(g%!nA50_9`i3%iLXcy0dO1YYO3`(dVTy^+RkBO%d_9_02sQjR`~+(H=0|7vF+|>c zQsc%=Ej&|n%D2XT#E!Y@Pk?G{=d?sR5%%kzF=+)A6gZVM5~MsWYMd_gX^z_f`9CT= zynJzfBnq~>dD)ZK77*xo!hl+l`rpBq==b5ez4t_XF(;ROve4t1dFf1|Qwa~`y;Q@R zpk&LnPHaQqMnZ&m z7^0grOz@9#VH)%$U51XD6YWZPm*CN3Zxu)lE-1o!q_x67AD~(;*s|VE(bFeAT?{Zt ziwm&7PA(ycOof`011T9ESv>w;;YrtWil$ROTY3bP0O}rW`HBA0G}0Z0TTQ1Q+0T%| zrn&P})2RdY4813AjiJ6}=HCyEs~?46RWdd4`l)+(KCS5!e1EbCo}%l-GQI-=(ZB!x6?L zCzYtBpqaS3lI~BcY?FQ8}tkv;>?Z9r2RRL>W8J?<1@>)E2^=rJJ4R zt3yJ=N_KCU!zSvJnGw4U_@G46=~j!xBYP;WJy6|V3osL#_40WwQe)`)Va*$TWRhn- zEH=?gWgr#R<@C)Lb}=sWIa-PBk0)g%;WDyq)4?2vw|G2uTC7*Wr4gU^hS*@;=9_ySa4UpQ4+LwZ;~!xWYA1y;)A!Z`<_?xh}^^&2|$uFALOLQ*m8`wTsL z+PYScAlk69gU7)P^qXk3CkCibv@C74lqit#Q6$4Jn1g?EYsczN^hAK_bMY5jPlzJ5 z^E2~Q@1d1sM=q@)$4K$lH_4u_q`oCAU#EMcJy!Q(}Z31`7%}?)Kv_AducWg{NUJu@Us+qsZsv%&XnG zHu{ZP3GeHKckvCa>(Pgon)OCC+J?{YV3ewvDtzLuJT?0#!xGjRyjC+v<1mNLI~Xa) ziR&G)?(1!6CX_7Mj7?vtvJlx0^u0B~A)pBV$mnHf2)G(^u~A_7_F~me@3^a)+NIKx@E9;JmQOdalJ(Gev82*dx)Pf^8pq60hjceOc`HCVFy&*~b&VkU@62L3GFT1h zAWR)6pEs@tZ*Sc6K5V?|rj||S3uG>X7S_f_B*zoeOF+vPFAN_mncDm#U{uU3*x3_B zu0T*aH+SohEl70QOy)Un4yBOf7tja<`;NKg?RXt5H8t%-K!22CjEa4`{wQrdg-y?%ovOdttbT*?Vz-Gcg!zM?+|Vc% zSDL4kFisZJhHQ*lS|3A_XtAhup%DqtjGN&RMi8JI!*XRI1RhMA|Nrs-^&KD@2JC6w zIQZ5}*#Dm+AXp_OiVU$nCNH`R72@H?>%Gfi=s4|+69q9Z0ZgkS-gQnFLuwPBl#fvKi-QW5Md++PN1f@98UlMIU0bKOgOG_1; z)$e^EJ)^EcH79K| z?bA;$ve%ndgX%1PVp(IrBiIB9PwmmdM1aJ<0J~5dZ4jb+Ir#pzQZ5?*aF90m+*q3i zx?f(|I+7c7wR?CJeBbs^^tB;2;+Mga-u|+Ww!`9~Ci7MO=%5Mb{dF-J5Y~nv?jnw$f$80g5N@}^yaE8^hFu^&aX{VO0j7os%Dz%Fg4=dXa z-Ng>--(5J~7yzDUG+n9=#&Z$e_EYb96Jd!0Csz+$2bzHgI&wGP4d5RKCx8z)_lUTx zv`a^dgEM}+SXo;3n3OnN@jq%9OH>zLp7AgB>++JkIqu~oB$pr^H2wqp@h@{5JO6Wp28^yKZ}F68Ll3wHI&p@^`^E{|kKGOsJ#e z4gfK(fUkabSg74Pz4-$^%LR!$#4l&ST-*VK%Fh;Z`anHs-g(%%rzYQvgaAzb@c%AF!8ZP{}R2!CD`f=me(OYlp85`v_nO zsPmkdMI+0Oh2^Spf17D=US9OtpZ{^%VW9lWFvHS+ErU$JHkneyy;y8L;_;ZQjSzwE zQy+|j$C~0lDupXK;Q&kuF4Vr#e= zU{0~qlX7UCl`^daYNP8X!Tvo(tc5QRP`d0>zb2QbAjRD1Ps=2ZLHm204~m|efA?7t zH@6q7O>-I_1neRyxst0ouIwW%(0GQel#2O7y<&J=X>PACnl9En2v90o!L06{NIF|L zTJhbXu45u#B3UXX?DIV#$F=OR8n+3!yWDwj5DsG)6I~x5KlKtIi)y%1mz$406mI8& zZ(nMJ(;P*P{wWB@KTS--?>GYF*dcuCuFg_wNk46Oe19)u0%6n0sV08<(D8Pq{0RJFY!x z#h;{psf56c0{Ret!DN`pk#EnTD>dS`7QmG>ns%fcQ=;}t!~4A(zE!sN!J4u@5(&$< zYpt>1Ib&wWD2nRiY6>v-`P*m(0=PuRKIM9UxIXTE1dI#miWX!U^@(AV+!0@Q4Yi$K zLL6(PZ+?IIa3s^mg;xVwwqj!d++Nx~J;6ka(=xkMqQ+3PmR@qKdm9+7CS!p{+eC<3 zAa8*7HbUIA+WAXM_sFw=Y|k~oTU=YTBCV_#0uZZMQR}ae!^$ASdJR&U2uV8=HKy8@FE>uwp|94`PlbN%);&$s!c{{ zxpIsS1Fdi3<{!pS7QeW*%@I}6xAT+t#0xx)hCV?S25W4-CuBeKEYl-aaAJQ2;XN=;lFDr3H1@7!&S`@Y& z9olFpCl7APH^%a)$!tM~3@j7_ju_jrRf_TyWDJMgxsB5`FV0u>$Hq1G*dp8?$af+e z)ElJv`~pG;uy;D74A-ez^jeIo+)2kbMBOKD2DC5sFtIwH9Ke&Xwy^I9yVRdC$M(fpgYcywfd?EWm%@Qy2V;?tp&h7+1_%U*@C>FSN|L>ubXy`g+JsxB&dXuzKRa&=$>^OLRAjA zMJoPGl^LszA3}NOb29@Ue5ASG8?1IH*6phIfw0b0hO*qnjhLaLV#X?C(7|`osEag_ zpc|z|ji1aq1u=m|hw4CI*|Pm1UEZW3CZfH^6gz$?5}%OuA`*hXh}7-Vmqmu%JtY}< zHNQ6Dh@+Z~%TZh48eQ{!uN#xL-hix+BJ>B`sq!@7k8nISx*TZ+q~2p8jx2bVoR#Aaf+no;a4h9dVO|q^1V=MSejPlvYa656hOF1olNT@LuB&H5y)cMEdpo)GWG- zu8?UfdH)8@o0VzgiV8v2C?2lt5v1@0_Pv1LRVprdD)OiUh;3Omr?IF+<_JAf5cHoutE{g|FBqVsb^BTNeB++`B8bqw4)eP(eK6>XH7eRxaV z60n{bYTn@)5L!-D4~2(NaF82Zeu#f0nC@P=FOOuPt(uJAgu0VoC1}X?)a0~AYVZUwP1 zoMwh(D$PW8RK;KL7VfwAwXuQjAe{0(-0QGPk3=O^DsLzhm<-IKp1+fog&2;8_^c;# zvVKpM#7jI1?^s2USWDHi%nw2?2qWp|o~0z0^%I_Shhr{Tlm_TW>Ep?~ z6lLlSu@ehELywONd$lW5K{s^Ko*7j48+8;X|4A}d_uIjzv;lt+-|R5m-xDQ9v@5ewDfsG?tzKHPo2S)#!ldQAQ46Cv zOu@BnA1dR2UMcSh-Q}M)&lvm^j?lRX8^?aCL_3i(5^E++722a^$#P7tmQQZV22T$< z7()A4Ks1N*nSHo0l}(lc6a=|84KtB!%!H>5AJ23UnD=yaBQRRUwUc+K42xAJQguQ# zvf$>McGKO=?5hv+ZC2Ak6s*HKDYe*hI4C8L-_x;W%Uur|j7LA>Pmqb)3nk+ZaqU&Q z0;Twpq}1QD%pY2^1we1=5fI$7q2i-A6+$}PuwyUlaOt0ca@^GQ3!QRIo5?TAlkR7X zJc{_71pY#^3dc{x`_6@6LwMH2Ml2^qdFapWFsLiMrDFO;QbNNyN|T?Ql^t{1OD4Vc zfE3&wxCGbHx!LnFO)an;fWd0vyy0D|xiy>#i^Y{3t01$D8)lxK^RT8;8__i7w%R-(H6YNuH@gYC`VB(s)O zl=p`jU6C@zm7Txvy#!o$s>>zokTIZr6h7!rUO!m-moNgvgGV{R8;At?)9(5{2RQcs z#CbeSFNKqC`{{5aau}V7H=qlA#3NY^Jx8O0R<7Gd_hoMwW=xcYL!pia9Fp?)M*uI%>wG?NE5!|wy1(IfTMfKm zZuL1b){2m{D`8H}h2L$<=1T?=HZ6M_Zal270J<#`4pRFV6?*JU#1`|s@%6}`+FBq{(bfbuG7GQIp^<+(`>8}#@qAU9M6VaKgVkDB=t_!J@;DE$B1RL26h-Rv zN;Pur$;FHYH^(@B00VD}TrEp^!n>?p!{{9da?JZ*;!+C105gle^9v%lG^HXMq>y(iujX!7jXNCDYA*^Yex_w4<5?YIdR%kuQ4-*GH1gbJdX_ zXJ<9Z&cb;9rZYybR$c#_ElnLv4EM%rG2q^F$mU=7&n~slR$5C%*IWo$wAVN6(4+1$ zWoyHI=RU_CAMKLf3wj=nL-EVmg)YL2Wp`;qGyZqytKkbNP&#^U!oHX?Wo*{ezrJp$$)WpM=25nVt#t{tru z!@EpM#~aqpkeeRuY;lioi$l;n0&goQ^$_D({H!{X?j${~k}4bvMznpDwYjuhA_v9X zJ<_tqOo)OnHK8u=P!M--uf}4SJ9Oj;IMQ-8AYp{KR-{A`Quzl{*pc0vp!%;zMtAPK z^&Um*X75{#t4_8_q`d;dz7GCoLIg%er(Zf=5h==S`7_yHT~`cd1an4-wyfZZUuy@F z%f2o;z=xlm7*`&5Cg`6IOY`iaib({@9dV7l-WFq3T(NGJezj@$DX}L)rDaRCqvN+x z7x&?{lgQwYA|=+!_S0u=`5cjXq;4pBZ&+-QNGy)mMN0-qZ#>2niS)cTrkxjRt<3-J zFRY~WbSdR^^rRm}Yr;D_ZnoTB=+(uY7FDEE4Kq71Q|g=OZ+8$6)VD$}knS}}u<~gm z6qHJpA96kb2iRqi1SknXpB~gtpDw~1zn}HI?z&&MSNTTMu2g0ieXaYt%H8@aA~`a= ze;l`5>-`HrcDci3+J5gqWK;IIuH2AGF_ygOLz;DlezEAQKC{%nJK#}ax3BsY-nH0Pm^#6SO`zC zqj$yP)tc#lGYCT*H?U>;45~eVKw84qr5_13;t&aQi1ee~)W5C{t23Iue8z&^iEfv& z?=F{v{L;|=t_@nED4WN)`Kk_A?63R!hoMG?l5_{LD-pu~?~Y{z z`)yYn@!YMEIHZ0`^2~IgJo-=#5@bu_+2h#@@#zP@<*f?*Hf3L+&O4&2wu2q85>yJxRnG>ZtlX;#bmg-K6B6B+#B`Ex*EpK{(5) zD^tS1@xr7q2aNGE#u|Mt2xp0%^gUh%OAO2>0K~#B^2U>ZivQsH;D|YQg&;eF#FN{D zwrm4SvSas;X-%nvhnl_#5Qa9Oac4>BVoyP|ukb@ij0*_JIm4UXobPWhgg=g>6(;H4 zf;f`DlAa~t7e1J@0o9!B_A{STmfQxZm%)`E0Y8>o*z3;=pZ{SD2Vl$(j7aD)bW1^& z1}Q)2>We=(-Pdr4Ha>W(S;iRv3ghVRzduI%O;+Gmraly_e}UUAmYM||;zg&1pL*W; z7lR|KAcgQy2iXh;yudEFQ67r71aXbSFQ4+<9|#ZkxAW9KqcmbT2W)!PI@<|`PC)A; z3ONTO+rbyvgdQm$(rw4I#*l#hobG$L;7UiJzt82?`!;kOl6lV;G45T@G*Hr_X@iEC>Vgp6!`B%1ve%lk{H%iFa-x$oEKWIv8`kkiNAsumaS$h z3^D?%m%W!-9$?!|-sYVKV19si24xtR(q%w}9jIwX=)rvo{RuCSK`pnF zDMhl2S)ikfleYPQWM)=JL=m5DHTeL0x<3Ng^N;*fj(Z&EM%SNJuesOEn+zO_3Y~l@ z$)w#6(X{^X`AzRhi3?A#9JXAH#nEjnxB2)yz}0MCizpvYt9i5#VqeMPB<&sZa6F;o zL|Awvjcjqz>vIlLEMJ1;@@w#{wLJvO1RdwUlUQ1!#OJ~vqJu)^^EPs-g$i6yC0`IP zTLvugfU9{81%#q@T0pGH!0?+c1WXgNSjpVTI5!Zs%ew|ZwB6~btMo4xQ=c^R*Ud|t|5HvNM@j#h6d7G2k!5gqj)g86KQ`9k$a+Ts^|BRLg02r(+$A-|Pa;b8wHd=aC2J*mB1V;>kitHUD;ZO-`}4b!=otP2 zR!!})jfT{%r)u5iRf@gJUuBe@FNdE%{&NMx8bd&IE|S#PHk(HIxI9Yq$@5Y*H;^XM zcf`C7FtcG?ROk@2wha!v{^tcen2#+*&BnM9lj3Iy4~TqBD?#+7GOyvb zYanz-3;FsvcsNwsOyuBiFu z^9`BTph88!rleZkF1*7qd_V}qlj~OWxitR}-*r3slj!m7SKNUI@71{dX##<2z@hkn z->*9mfpePWslyXxpCb)5#bm0mfz29!^IJ%Wb{LDo5J2dL?nNB*4;^t^A;jR>U=9{GG64ZRSy_+7jEwxqWW{JsQ4(EHWJ={ZqdFC60jQ z6$PGtBO9{gAVY7D@|Im#{wNpy$^d8OoyTzhLA3R8);@D`2Nq_fcoJ{wjG9S%Xs358_A*Yb&8TBL-CgMedal#z=oNaFq<-Uo7G24LeSW>@* z#n8(|%?q+rk1BTR4|yIN(PhUZX5opl3XAgYC=Z&+ncd$Ss41`x9#IO!&?q8N3*kaZ z^o|%3&0213FLF9NTd=}1@Dk`M>@fz_((F;K``)d#07W)yVgOaDCOA1qUF+)$xvq~~ z?~Pt^QMm5q>7p1U?zuc!R&gJy=hqRf=UsdyM8;&BRKK8O-9s!}5lQuto;^vh3on07 z_vP!Y?aBNjKz=B$YgA=&giHn~EaSP+KJ4|Gh~m~!i88H*rXqP_%jarzAAtC*E2m+j z=Sw5E$XLQ~HtOX2$%Z@8BcN5r(W*Y8mV`A7)Ag9Ym;E}XMrVnNfm`j}E3NQ4Tg~pP z3>^BZHhZzbfwVb4e-%$IiV)w3BO?9hz(ULj#@Nj)8EOv40E$z*0U0Vs&&1ie(<032 zeUB%Y5zZLCsWi6X9q1EdZ?9YG`8!lA4|w0trN6T$-7h9s3ug{{d(E8PPe9}b56D7> z`k;5n+`u0qReG4zF%zlSg>UtzQ{vokjz#p1n)Uf^xgbyUilt%@rfw;3`~ECE)_B^D z#>|G01hMtnSQOyS@|!Kcs<$=c9|FnxuSAS&B$Zg5+90(x_JmSnxKdqU;JO})tGlrEGVzgL~}LX6&|)^gZArOUo+l9O$*sX)hODp-lF~Km!o50IFy&(*Jp~9eU zYu8qd{=|-f3V!UhL23CxZTYZTOkEU$)Wl9ZLaTa82aXWvM#T6AF2wX+UHP= zyrR0xI~{ox)ttoM`zuOQx_V18Q!ndQ`~a?5l7%Pw>InXtuwmLypUFCNUA~?gg4+5g zAL~%w`oMjSZ4tXeofcVgpp?`15|V0xEZqnRg+Yao@<+njya)MsnO_<-jfHk5jwW3C z_G1j#goAu$(Y^~o)hcYv^;#%Uz8q&y2O;9o)vh-rfHmT%NdCQ2U$g7-m@5CM4cYGH zZ)9@4v43O`1m5r)`oQG9(DhXOC>nG1POEitr+f$He~$(?Qg2JC!%)I@$=`mUy`{ZJ zC~0@J>8u;(d7^wk&JfIHoHIypc{`23$-4Y*Mh5%sic6TI)S~i@MMn18v;Z<)g3|m| z6r|LvC#Ni^wWI&_jUS0c8u2d@b-t$Wr0tYA)PZ?eqqj_;6^2BJ)7gd~GO-xeMWKZ+ zl6e*4jF%dn#?4EOf!BCBso$a}@AiU&)>p(#G&bLWf$JIGg3_2H)Djh%uo6J*5ROh3f9Q}r1JYOOG0`PRpGL!c*M?!kgY*EM1~NSshU zPNpL!>FBiWdjvQ2A{aaInM(@OG=OLaZN7SfQuv!_S>*4`b53RDf|AUcr+jGoUla$B zM$-)H<+vPxEezv`wr%fhllO6)6oV01^a}+(|1U9Z(@m_ z1oPs5c~e|QzdaLPU`t@+^|=r&sR ziyzJ89ecQ)H1SK%07sqXx;kV)GyO3N*?dEMkQD>{Bcuvi_8v1{8$;ag4YCJ75Y{gM z%P<$L^ZrpK4vfr@y>R9(UE(LQF$N{2x#tRGJo65uw<8Lj?npf8C5kF!qXUsc=x|3E zwz=0y=iOiK`2Ls?`V28N1+32IL=(mqEmBC3M~2=zbh$Wsa$ZFDLJE45`qkmp7?M6D zOe%MhBpok9I0~&?+>W(g!QfYV_~{T%NC6@GC4qMBGq&#v(7NQs30X9BJp}0Iad9IP z!X!u!kJ?A+dR00?OTte~ip4`PL{ylApnPU(`X5&x*>#w0S;ddkE;J4CLNAt0m}t!W zBUwqX!LKewy#3dsigTA4=KVVprPvh$ETeIh&Xht>vl8Az@sU}bS08FS)2ei#odH8i z#z;ZV!jdYYG4e)flnFS0dZ)Qgk~**clvaC!_1S7S?HmDH-EC+#|`!e zw&`$@+N1EK<^}U9q{z4`xy&eUO~N>ankin^7kjidYBTEfew!2{Km5Bhe8?G4@E5T)ze-AJVo*KY?}`_jV~O zlVu@)Y1yQu&Tq0Q8%qLCZI0hzZ$w$~r|+s`GgZ}5Q+1YNjdgG?7t8y*4eM?71p)Co z=saWCM%=k|&Qok9o&^6IWSN$q_4o@kjBFp(6q3?giY;IQn;UTKL;FgZW(G}KJ-?uH zp1s~u@y51G*q6(;n+wpRcvm>YzKKcmrfXJD?SsIucUjU>>Euu3trQ#rk0H@+S`C^e z+K@hm9Wt3`C4+jw{|)DCGXCFdefvMpoCExnFCOnV|kf$5+XVHf&!oj+C_>i^$p%agX_MmGJF!^Rv zG)U>vzCIy!A3*6D!N&UEcS{12`=7W27?VW3H1_O82r?@CK>})spUC^nXe<3EM)LP? zdFd8(tgVz6_5(NnP}F;$?IMv)?7t_`upY{?$=m(6?6dkkV5j*xWTx19=(t6HSG!>Z z#B8?kLD!lUR!nVCBN_L|A>*TXkU#msY1I6E3OjK2wa@FO3DLb~5ES%RDnza<#d^%r z3^cgdX;6UnH*LcN)}MMqpbydiXk}z9M`XI~Wzg@ZAlB1x-JA`&F03xjA~lqpZvY!| z;KxVN?W4;JzVm%ZJt?^p&P5DTnY6#DxyYA=F@A20K^6pZf)aOoEX(4gn%81r{w*#q z%IEqYAYMPqw#kZ_q@xb%7I!?=kn^A#%`NM=WE zOysTqz1OY=e&>JKqC~A+A)V}$VsP{j=66bo^Z~(}{A|z}2bxaa?fobD=yU=QO|4}# zw61_7ERN`ut-CNDG)At}+S|gxDL!3{jhOOUsbU#gycL9hjHdbHz3lbU9}juuA);~s zKt(0EXdp>vJ(Q^2B9<)Qslx#Y+LpZf&A6v8i`bkd;YG2v$wJF)oc*lL=r8pY(5$b^ z^xI=mygd3bgJ%zvDx1$L&N@ax$0;($R9&c0i=hh>nZ+N|2eaFx^TY;aZ+qss=Ibqc zv5tHf^{d<<_zECz6oY^|#gZ$q9OxJ;`Hdo?)B zH4aMl)d`5f674xQ^@~78Cd07aHpQpUV38iB5#-JMz=w>Nh4eUs?`}Uy>TcfOTA|uj zLu88xNS!5LC3mF-Oa@YSyZD%gMk?D3?~aC89(El(Yyw;`4+!>vk5CDn?@O-+_oMlN zEQ%50RomOHZ64OXd15F*QNiTypH+%YfYDN~5Yg=RYoHSFl?-&25lw>#s?ki{3=rq7 zQT_+8+AppSg!x>Zjb@YOFyWDIf44viy0rX2Y+f*EZ#@K$fETHetBfVK&n4X$rBi(h zCFs2JV!)sTcz4lU{L4Ruy5nzw03~?mvqwV$M77yI`~^*|ub_3`)sQg;fib!~^(gcU zx0NrD{y{j#+6N~I{1eqXc|lipsyIvFLo*u9;B@-yK=pBV;)CF5Kr7nHAJCDBEZUM1 zS2W)kqpNAySIFuRH}&&e!d$#wVe!GKwz*B^o4fHoZv%Tvv#8gfH%ElrBg-VZw>&CD z5$!r=7*UhNd)%~;nbd)S{W81hQj$mDT|SQ9gGZSZ-|qn2f{h=5En4_uahNrK|AU}| z^*v*R=95JRyWAOn(D^ZWP{-ANEISH+BIK;)6u8Mi(+)y%Bq0-+)&?_UW*Qhp&SakYAE}^czgKM@F){&*y+4Hh9wxU{_A;Q)d); zuZI|lTgte6BER_r(NkPk@(A9NfuEs!us#*fex10+7%>kJQ`IvdoOg{rS6ei%Q65rQ zL8w*}5RagI&up1|TWASZ>8;ZpS1T=&wG<^9-ux#)I(ItAXAjMK8eRS;i$)%?gKsHq zE{6=A8q$3>xrYkrG_&SRU$0MDw8o1uKM!ECt!{0m@%&z329l%y zD}Bl(`(}%m8G`YM#xY#XDMbglT?yRM3sBlR*!9VPt=TvH=>{g#XiNcF79OlO4}fU{ zx{7^DUh{}=8P~802AnXAhp=HAz<>)L#nma%YIF(n@?3f_5^voG_hZ40U*`@1$B2i% zQp$^(9udvc;w%hIEL8YAO-VbFU@~6%iF~AgAOPryTB<+WVf(mQIJ2gDjxEa`jYfFh z6xG8QO1myX^DafM1-q=Mb|4~)!l{MGDP_{EzoAn36JZB9Y)cR)?r|pNh3y@5SL->to8P2#z$Q(Kvb(vrgMMODLG$;k2%)m%pT~<1RR-so8piezb2Db1o@u0$+^wnP5iGoSdjp@k}*k~&ju&szCX^apFT*XqT&TqsE@({;)9(#jj5W` zV^(1TSv22nbLVQ7B4bjPIFYV`5rEjPrOb`)Q*>ki}w7{$fnYXrK{U zy()?DT6?wdNY5ru7Ti)WM1;I}||8phFo)H~3 zjEeH+Ln93tt_orK4>u+hEUS?k3eh8&ac|s4(J|0q6!NUpqD<8BC}v+OAB$3TTmxp1 zg>cJ5)PB?o%p@(A zXNln;Od+{Kbm!@g((s!3llbH_D_b758oRUrg1BQ>nXs_Q0<+U_IFL|!lJ5q!!)Y^# zKdWKcB`18BQEPaHOpSJdedkhIsh@ywA?NXUttQKYC0s$;+0K)(1`=(&IRyg45Gm1(JJimdf0Gv>h-&W$;1 zA$6*#RdQY%>rko1rq-7V^G*cne(RB>W7M(hBL(6Acr7?HYMb?JH#fB#L71>Yv_gc7 zY?@BTJ1o=wSdQoGdKh7Zd6`1&gxYkedz+rlI%a9F`?s)We6z4j*N&V1)-KsiA9*C# zk4UJ3oq`*~9!9}%?yf)>$s+13jvnzW->!eLBZ0u!xxee{-*lc&NnY~U(&bqWxZ=*m zx*(gKKp~6=@e~J^->W|)Bgah8oC|K>Lh(DE|B+3mGnJObeR`n-{nR*ApvFSvgd_3M zi5K-D^O-?OtUq4COy`ol!y|v=_)e!@LEy8)TxF?Xy__>lhq1iuw+>`Dihx38k2Qsg zm2h}qjoLtQDooV~l&rDEU4BZ0vBk{qZNYM4es^=ZlCrjT_NvJ_SNTqQC53qXO*B3= z;c(&x^%GjTC|nh$Pvf!wEvD4nyVRI4WskHOQXKnYH`jJ0UJ0tyC^OkS`zINhTwg#4 zT4j})#MZG7zT_O=w&2V3`fTa3Z_JWBuX=P4w;IyfLb%hY?>_hJlz-f07?LR}!8Eo1 zY4-&mn(dG>-CK5i)4);;qMDJjtbZ0il4UdY&V{LAyzH;dOSb<^U{Q7if4_5BYl~XP zA5nxan*aIx@%0JiCjYw_4?|c>@~;8Y)?BPaO!AO8Mg-jTglI7{0)pMpkI-_bufo1r zL~OAW1f(EFAt7sq9B6l%lsxg~ScRN~?-{Dq{K}-JXEDas37*hbz0emG2ayBA9@X=u zs(vkqCz(?h44ZkV@iShgs?u;|jIqR zA2&MwVTWq1&34(Skbtykz=B-*)ed!gO52@YNo(j*UfQ(;!Ly~b#-TpcLZkjcpe8+3 zpAA-eGJVDu>Q#i7sXzvbE&?~FE-LDgjaOzbtm{A3ATf%*#o$QkhoqyS#IH?t)x2mX zxtsc@=6X<%Tn7mcSY&9~S_}~pO;Z?B39=F4FJZ)bQ(c^88ECJBc8O~7t(KIn!!)25 zCUG|?byxEYr_hM!TXCa;ZXF@GxM$sEiww7EktW~_6yOYYXb6|8)<5hXHCjF)NXp+g z`Z_`?*e$I{RLu;0y+E3yLf~sW3WCAFVBke#T1yWwg&N7EMqb?}cd;UCltra`lo3ZV zUu}MWo*jypTJHY!1-b|VhFq!-oy(=fshUqpV;+9YqQ)b|L@CBYxxueO@JsCF)_c-) z1t_R>U3MmNzwTokyuIjqv{Iz>XeloSAJNSZzGaQ#t@!GvNFSSDSto!BaSHq^%R=wX((^&dXKN6LS zCbE%&^RT?2w<*>%Ay>?^Ct_Hi`J%!3Tcf%mbHqj#qRk~s3>Bes hkBgQu&X%Q~loCIB@T_Xz+1 literal 0 HcmV?d00001 diff --git a/examples/imgs/showcase/solving.png b/examples/imgs/showcase/solving.png new file mode 100644 index 0000000000000000000000000000000000000000..2322edda5958024824929d82c2420e45b5d098b3 GIT binary patch literal 1294 zcmeAS@N?(olHy`uVBq!ia0vp^D}dOAgAGWEo~`o*QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjKsAd!T^vIy;@;lz)TphMVE=G@iemD!N*+lk zFUeCA7TxIDlyKO|EMh~bQtILjlaiEEZ%9qz-Q?UdsdC=)2@n78JHP(%{aVkB7VD3{ z{HWCN}>0`&ZM-YF1o)d}d|k%(AjF4LiGefByWrviE}^)2imXcVnd_Bo@q^DS7I| zi3L}#gnat&VZpa=Wkm%A3gO}5r_P>T+TG2am6f$<*Dfp3m>(Rmd-!&^`uO{Y>!#%7 z=o~$AWJQCTn%b&qCi?pQd-m?tR8eU;bm&k7C)Kt~2Teq$>GT*yo>C#O1`^J`*D`gK# zJF`u(4{~>Je|7FY`<8_Z8>6D4LN2nMNI#)BFa3?ofzzkGuP)thX=4-O?Yk#~e}8l0 z@dbBU_wU(r;p)|?R?owxYTuqbdGg7VCp}}CfAZ{|Y+_`zXw@xmZ|}^~(oosY5?^w2 zzo>t(Kl|ashANeo@6RizYa1I2t5(c6_!DQNueo;p`pL_eFaP!P<=%>Q^XAW;yL8ba zB`a&|#lL=4ty;Hk*@X)MZ}|*Tf269d<9qaOp8UoM0UAk}nJcrH-o1YxnrhqMxpDJX z%fsv;vp#$%_&Pym`i+l$V%tBwd-v|v>JRfC?*1|V)0ZzUpFe-zvSY`JFy0>%lh^S+ z6`TAqV$15)-IFFw($LfMi*4?|(DbU|@b%lbS5MpF<>jTJt=)a>`0>z+R)zJNJX!t_s-# z?wgk{JKw!~S42{B<-Q$?*4EL!SHi-=R;*g}>iv-u*RO}a&G{(6VCUpedMG(yo$b@E zy11}Mg&E1o%B<|{+2seq6&6@M*r;Z&Fn#`ff1t)yf7Wl^8k#FGW$M(-@`K?CJgb=B zJ*vF^>c@|WxxhrWdfmM*(QXg21p?+496ypAkmuRn)^;VOV}5Vbdq?s0%z7QqmMXuy zSLt@%Is%w8fng)dq0!N%Cr3v9hZh(Ii|QF7mz;8WK3`=Cunc4HboFyt=akR{05pVH AO#lD@ literal 0 HcmV?d00001 diff --git a/examples/imgs/showcase/sym-funcs.png b/examples/imgs/showcase/sym-funcs.png new file mode 100644 index 0000000000000000000000000000000000000000..869b6f2c3c49611f24d462e16d48ab31ca00f23e GIT binary patch literal 1766 zcmbtV`8OMg7LHPq2&GfCv=}nBrj4l7GPY{$iM5tg2r($HL5W~!+L5X@swujRhA2Jt zsKmZDVr#~r9W91J0#{M$z{R8iu_ru-Jz4x4ZzH{$)X?{NLDqtNj002<& z^l%A~*=3oy02O6A^872Y%*c@f+%Ev?-k$s{3luIpdpiRFjrWyz35R7d=&Hvh5&)pe z`&;A&lB%Nt0L3g%7w5nX{K_=i<6*d#(wh5l(+GS9(ad^Q`6SfKGvufXaGa@ZamYFf zt=S3!8%-Cp3Jl{60?r&WB=!jZIIVdH2-m z=kf7C8jUt8D00vWPRacG$1NlhIXK;!9`mlup^37SM$6BC_`t;1%fsVN&aGRXK0b6V zWheL)4EAYlj;9mVq;$JanB(;_OPW|)Iy5xYlsxaIvi$fAuH}_@vfcNwc?5i!U;Ch= z!{+nSQqzoQS|m1}QC)3Hqtn~;XbK7ngN$=mS~wgXJ-s$Zs2zg+CvJCd&(>+GLGW;1HzWqsUonMPv|MI)#vbuU_U)%Qf25Vd(c=J#1lGM-hJs1pTa7!XGvbGNC zY)I=hzhim%?cnTeIUC;<3RYIGtgrWFFc`x5f%_Awr%X)?lr`aTJTn^`?AX}Yb2b}u z+#FA&XfVz|SoieoGs>NWuCA^VEy?HaB+YPN=<-{y2tq?#GqbWvn&dje@@7-9Aza6TZ<3F0rR<2O680keOq; zX)4(}r0neMqOvl0x_D}I3Eh2<&>E9Gq!iKVs__X4kG_6Q*4_MmLasWmx~%Sm%B)26ZacfCq@dti znfKJn1 z)^$}A9KxCz4@V302pejAV}I?70Rewn)R-=movPhA{mJH%vY>tMo+g3vYhu zYsdshyi4t!5f<$VNb2^^4taQ7x26G>dOKXivhmH6JQE*>hy8`?la8-UwjV71w}pV3 z2TFV(F@(4{5Ba-uSF^G@gTsk&z5bR`av-vD?RsD^vT*I@YBvtFIzSSe;0L7$w%+-E zl%M8lZ25f)g~Y@}KB*!@HAqwA8-9I6y@r6?b?p7oAngjrtWCCLw;C4sLl~}&_=MbV zx3(%I<|)Ka_&9Nj#USsH>VfZ@Z1c4yFM9;0zboRK<$M_ApF}F ztZ%<_;y}Ui)sGx9>z9E6w42+nE#-&0V~IreOl*INo^5Q;=^y0WCmoF1w{ zEE;{6IN9cXb1tEJze9Ai+m|@fD^*ihCpe&G=b4bR;E%_bg>_|;Ur&*Z7s2z`iMsGk zHjE^{KOIsRRw%EeikTETH{W#^asg<^>K02CiY{WxW&X8)?FzL=6KC8QoKLsn-$`ME60k#{cE*qELK?{oT;ZzGe{U=^GxK>(jaNxrhf%z%>)|86Oy=_< zQ!d0fB>#~Ex2SkrAwqJ*mo9ep&}`my%I%o$KguqR`u-Cerww~Kl)CV$bnLT zru%mxy}#0B2X=)_4uh`Fl|Cv(K-|6=YE;eVfj+e7tLO?T5SVv13b+XTK`SgIq)IR% zXS_O(C@yWF=jkh*)+V479~Xc4%C!5NuCHog{!jj<4)$;+sty%``zf;D1n_kAajCly GN&PoGMo-TG literal 0 HcmV?d00001 diff --git a/examples/imgs/showcase/symbols.png b/examples/imgs/showcase/symbols.png new file mode 100644 index 0000000000000000000000000000000000000000..29f768c0446beba348a0837909fa3411b467aeb0 GIT binary patch literal 1703 zcmb_d`8(8W6n|%oqOqhadTfp5;YxV)bS*;}jI|7TO4leOjZ!paOeU3U8jtW;Ml!}! zGgEfTl8A{vt!{T3G}bgswz=Q_hI@Z_&-kwNwDo)qubX4s6{3XjcHA_rZXU;eR*2JxL(&ChDm^ zqkOewEC>m^aKVlAsnL9EYb!G|bB~U^NDr3uWO+Gqc7C4O+}!+GA!8o`9e0(riBKWmCF0YUu3V|9xr42Xnod7RXgpK;^y$~OG;Q+2gdLI= zlt5EOpe|5gzH%Aa*~UJ+qc!JOrh999qrA@#3=M@6#CQyeR4x<>JDL-a^ZPRQL-DVS zzx;R@Gc7`!j3m6men@EAsjAme6FxE*<>C^b#bkDVX-$bgjrv%y`DoGV?-X`PiD~^N zYv#A*@!G3Z!EfO8-yRbz&+-pHVd<(l{({Ja-2VrWroFZyEiElCoe~#1HCro$!&_i| zVl9ezKKtMS=swWe|Lr+GfmrO2V*I&T><6HNA?vQWBmfeOVI;1 zTal~CAUTjf3t&hmDz#R}jx4OurLU~4gboyXYtUU1RXX|C#q^6AN(vY(gsTXbp3>3- zc2T0#X8|unYu0Da;j4(rR}^1f?A1eNlJp zU7V_+P7o-jqOFa!=w??Z8~LGF#qsg+uiY%mHz)4dT%Gz8wf#r~6|~pgDx_eYt*T&P0U6wP0I8*Nq;ZHlFWS>LQFg-oxPcA= z1=j+)3o?FTIm7X`G#KW4GcPTDPi~!6ab;zn8=Q}`LZdGe3}e)23Ny-%H_75e6`5qx z-+jkTOU&SpTcfpCc@s@>p9+o82Qc3afLfpSWyeh91%yBG1XDj{5^@@q_=aY literal 0 HcmV?d00001 diff --git a/examples/imgs/showcase/units.png b/examples/imgs/showcase/units.png new file mode 100644 index 0000000000000000000000000000000000000000..f64eb433a27307eac445b9a49c66b7d5a6bf29ed GIT binary patch literal 3582 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 literal 0 HcmV?d00001 diff --git a/examples/imgs/showcase/vectors.png b/examples/imgs/showcase/vectors.png new file mode 100644 index 0000000000000000000000000000000000000000..2fb91adc64aee872be77c964a4d24852e471fab9 GIT binary patch literal 12837 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
Feature Example Display -$$ 1 \hspace{1.25em} \text{m} $$ - -$$ 1 \hspace{1.25em} \frac{\text{m}}{\text{s}^{2}} $$ - -$$ 30.48 \hspace{1.25em} \text{cm} $$ - - -$$ 1 \hspace{1.25em} \text{W} $$ +![Alt text](examples/imgs/showcase/units.png)
-$$ 2.5 \hspace{1.25em} \frac{\text{m}}{\text{s}} $$ - -$$ 5 \hspace{1.25em} \text{m} $$ +![Alt text](examples/imgs/showcase/values.png)
-$$ t \hspace{1.25em} \text{s} $$ - - -$$ \hat{y}_1 \hspace{1.25em} \text{V} $$ +![Alt text](examples/imgs/showcase/symbols.png)
-$$ a{\left(t \right)} \hspace{1.25em} \frac{\text{m}}{\text{s}^{2}} $$ +![Alt text](examples/imgs/showcase/sym-funcs.png)
-$$ 2.5 = t a \hspace{1.25em} \frac{\text{m}}{\text{s}} $$ +![Alt text](examples/imgs/showcase/equations.png)
-$$ 0 \hspace{1.25em} \frac{\text{m}}{\text{s}^{2}} $$ +![Alt text](examples/imgs/showcase/solving.png)
-$$ -1 \hspace{1.25em} dimensionless $$ - -$$ t^{2} + 3 t + 2 \hspace{1.25em} \text{s}^{2} $$ - -$$ \left(t + 1\right) \left(t + 2\right) \hspace{1.25em} \text{s}^{2} $$ - -$$ 42 \hspace{1.25em} \text{s}^{2} $$ +![Alt text](examples/imgs/showcase/algebra.png)
- -$$ \dot{a} \hspace{1.25em} \frac{\text{m}}{\text{s}^{3}} $$ - -$$ \int\limits_{0}^{10} a\, dt \hspace{1.25em} \frac{\text{m}}{\text{s}} $$ - +![Alt text](examples/imgs/showcase/calculus.png)
- -$$ \begin{bmatrix}1 \\ 2 \\ 3 \end{bmatrix} \hspace{1.25em} \begin{matrix} \hat{i} \cdot \text{m} \\ \hat{j} \cdot \text{m} \\ \hat{k} \cdot \text{m} \end{matrix}\normalsize \hspace{0.7em} \small\text{wrt. O}\normalsize $$ - -$$ \begin{bmatrix}x \\ y \\ z \end{bmatrix} \hspace{1.25em} \begin{matrix} \hat{i} \cdot \text{m} \\ \hat{j} \cdot \text{m} \\ \hat{k} \cdot \text{m} \end{matrix}\normalsize \hspace{0.7em} \small\text{wrt. O}\normalsize $$ - -$$ \vec{v_3} \hspace{1.25em} \begin{matrix} \hat{i} \cdot \text{m} \\ \hat{j} \cdot \text{m} \\ \hat{k} \cdot \text{m} \end{matrix}\normalsize \hspace{0.7em} \small\text{wrt. O}\normalsize $$ - -$$ \left[\begin{matrix}x\\y\\z\end{matrix}\right] \times \vec{v_3} \hspace{1.25em} \begin{matrix} \hat{i} \cdot \text{m}^{2} \\ \hat{j} \cdot \text{m}^{2} \\ \hat{k} \cdot \text{m}^{2} \end{matrix}\normalsize \hspace{0.7em} \small\text{wrt. O}\normalsize $$ + +![Alt text](examples/imgs/showcase/vectors.png)
-
-
- -$$ \left[\begin{matrix}1 & 2\\3 & 4\\5 & 6\end{matrix}\right] \hspace{1.25em} \begin{matrix} \hat{i} \cdot \text{m} \\ \hat{j} \cdot \text{m} \\ \hat{k} \cdot \text{m} \end{matrix}\normalsize \hspace{0.7em} \small\text{wrt. O}\normalsize \hspace{0.75em} ⟷ \hspace{0.75em} \begin{matrix} \hat{i} \cdot \text{m} \\ \hat{j} \cdot \text{m} \end{matrix}\normalsize \hspace{0.7em} \small\text{wrt. O2}\normalsize $$ - - -
- -$$ \begin{bmatrix}x + 3 y + 5 z \\ 2 x + 4 y + 6 z \end{bmatrix} \hspace{1.25em} \begin{matrix} \hat{i} \cdot \text{m} \\ \hat{j} \cdot \text{m} \end{matrix}\normalsize \hspace{0.7em} \small\text{wrt. O2}\normalsize $$ - -$$ \mathbf{B} \hspace{1.25em} \begin{matrix} \hat{i} \cdot \text{m} \\ \hat{j} \cdot \text{m} \end{matrix}\normalsize \hspace{0.7em} \small\text{wrt. O2}\normalsize \hspace{0.75em} ⟷ \hspace{0.75em} \begin{matrix} \hat{i} \cdot \text{m} \\ \hat{j} \cdot \text{m} \\ \hat{k} \cdot \text{m} \end{matrix}\normalsize \hspace{0.7em} \small\text{wrt. O}\normalsize $$ - -$$ \left[\begin{matrix}1 & 0\\0 & 1\end{matrix}\right] \hspace{1.25em} \begin{matrix} \hat{i} \cdot \text{m} \\ \hat{j} \cdot \text{m} \end{matrix}\normalsize \hspace{0.7em} \small\text{wrt. O2}\normalsize \hspace{0.75em} ⟷ \hspace{0.75em} \begin{matrix} \hat{i} \cdot \text{m} \\ \hat{j} \cdot \text{m} \end{matrix}\normalsize \hspace{0.7em} \small\text{wrt. O2}\normalsize $$ +![Alt text](examples/imgs/showcase/matrices.png)
+
array([0.84147098, 0.90929743, 0.14112001]) @@ -359,19 +320,6 @@ array([0. , 0.25881905, 0.5 , 0.70710678, 0.8660254 ,
Simulation - -```python - -generate_c_code(theta, [t]) -``` - - - - -