From 57f4c75ec5a492d36250f1c4ffe28a2ae2d0d0fe Mon Sep 17 00:00:00 2001 From: 1uc Date: Wed, 22 May 2024 07:51:34 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20BlueBrai?= =?UTF-8?q?n/nmodl@f28a335a798b7b12b9bdc2027be3f37e32f3eb29=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .doctrees/contributing.doctree | Bin 64130 -> 64130 bytes .doctrees/environment.pickle | Bin 131572 -> 133088 bytes .doctrees/install.doctree | Bin 70599 -> 70599 bytes .../notebooks/nmodl-kinetic-schemes.ipynb | 56 +++--- .../notebooks/nmodl-python-tutorial.ipynb | 160 +++++++++--------- .../notebooks/nmodl-sympy-conductance.ipynb | 72 ++++---- .../notebooks/nmodl-sympy-solver-cnexp.ipynb | 81 +++++---- .../nmodl-sympy-solver-derivimplicit.ipynb | 32 ++-- .../notebooks/nmodl-sympy-solver-sparse.ipynb | 32 ++-- .doctrees/nmodl.doctree | Bin 87358 -> 87577 bytes .doctrees/readme.doctree | Bin 174287 -> 175803 bytes _modules/nmodl/ode.html | 71 ++++++-- genindex.html | 4 +- modules.html | 4 +- nmodl.html | 12 +- notebooks/nmodl-kinetic-schemes.ipynb | 56 +++--- notebooks/nmodl-python-tutorial.ipynb | 160 +++++++++--------- notebooks/nmodl-sympy-conductance.ipynb | 72 ++++---- notebooks/nmodl-sympy-solver-cnexp.ipynb | 81 +++++---- .../nmodl-sympy-solver-derivimplicit.ipynb | 32 ++-- notebooks/nmodl-sympy-solver-sparse.ipynb | 32 ++-- objects.inv | Bin 3514 -> 3520 bytes searchindex.js | 2 +- 23 files changed, 515 insertions(+), 444 deletions(-) diff --git a/.doctrees/contributing.doctree b/.doctrees/contributing.doctree index f47d3513167d7dc8ace054a41d5e2229227ab770..eeb5b4f8223bf5186e60be082c413965ae09b9c0 100644 GIT binary patch delta 1720 zcmYL}e@t6d6vw%vYax+1U~EQZ8^1PY=2){pYblH$?FJUc*g#+@8*Sff`!3}@*4HwW zAU~o8u-UM;amg5(s4UYcLOT91F=`g|FaJ>g*qn?0K{U=R!I^Bv{jtPz?zNA9zUQ9L zIq#lx&%5tUKg^zfn7z_gQ}jeYQ)5xZACD<&D3#c%sFFO&9@SK{&uyi}IT4>4iu*!x zDv^(gvKrH?hBXCNQJp=u?X#GpvQHY4S+M3v;Z}7>lOm~v1x!35>#0OZ(!PUj)Z~$} zq`laz5Bs9J%+A{?Sh>A4$0BK?FNb86d2Pk)ifxZ`vqT^sjbg1-B3IR7vR~5%VQo=V zJ?4u*h0V+nMOR{4R8LFxkI1QJQ&!fo#@j6X;HS$u)NOdTogV5iyq|5$)VAqOP0|*_ zyR&bcS`F`)oi~`zQA?WHqQkWf_q&*?Ogy6u!ASHfHm?=2yN+kG=c$8L)YcO#lWOgt zi?tLq$B7SaICrqq&PL+qtFeYc_KmZWIKXQsHqM;wyV<$AN_MYqCtInjg(vYDx#u7| zRR2N?9*It&V0n501&=}(Q1BS^8VVkPuAyN2^ae;gVTx%1JvE-Hq|I!#{uZ>e>?&qg zk4%|xGnU`9m({zTV`B}i&>x1@8@?y*bh?ocFl$X`i3w}{pQu6G%dQR3MfYRkNG}|P zG)H>z*jHfKnbt?(^u9Qb?53xHn6NpchO@mJ&WklZZU2$j($mK+gyr{i!I2Bu{f?TX zH=ljs%44n*za_l|X-DS)0`~pUlW5X&r*gSn>dNEx>+W`9!h;(7%RLfI4)_0~=Lcd< zf7V+-zp%bKqt%s^Xp9;5{vDZW?s|%O0xv&KAuka{nSa}KbOJx9b4-LZXcl2Jbj}{K9sK@W~9|;jWBFyG6Ly z0DS^@5%7E7FTg+s@D2RvP4IX?#DkeQ4GBOEFerd(08N0X0dxUI3~*k6R}k=TY)pVx zGXT4oppzMwPKo$y2>7S?x&Sj7z}ue7c=SyXzF>fh0wfK<1bEv3mjt+MfQbb`-a*2@ z`ga9*F9Ued4>BHI65(qG_)vh44e*HoD+X8<;JN|UIEaV8^<=SsR5x5?r&h5aU;KQc zDB$x)e+x24aAk$L472Yg8LAHIQ%-Po6Tvva>ItVs+Ggly{VOe{;QQd{X5qA T8|5y_1C$Mvd+Ec&9drKy#svFO delta 1712 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 delta 9509 zcmZvid3;UR_Q10;35g+*7(yf@NK_M3L=q%1)Nmy+l@esU$Pu}b!5l#i38`RT*{bTP zddllV>e5RIk>Jrm(Ne7%`ksC|zelU8E%jS#uiPE^e17>OYpw6v!`f%Bv(G;J+&dK> z4_@}D@(%ZR%g)U*FSM3>XIgR#&AEjI5qXwu)bb0&`S7^D4S0TbL3W`fzu?)TnML{e zRL5H0B+IgJ(JXVWwY;8)J0Y4JO=`UtmSUGSO>ds&o`%M&BY>KG^G6OjH1Hq+*!7;UI8v8$6TD8MkIVL zhQ86|#uVd_wt^RoHx6nm#M0h4&|n>{Hr~-z*NnZ!8Eti+5@gsKtiA5Wer<(@?=$S$ z>e26*ajHa{;R`ky)eY9UXroqJV|ouXPBvH-?#8>?N-X-`IPI`@_4&s`7ocR$?yp;6 zdy59XV$^ACQQ1YYrC%%@6PNo9YeHAE!Wt@KB0GwXk)2#N8VALc$iZ+%Y>n*HfvyC4 z%UgtpM~q6EFfn1wnDG39LhDAOR$Pu8;F494BQ8Y^5iO#UAVy4&>Lo5jd5LTNdyA(1 z7dK5WC=AbAWGx?wo*v@e{y}0|R4n#TC;SHV#U4fthy=SR8PE&rMAZN@k~Y!dNQOrT zieb^dVqtW9jB<1IC1D;MEN+ZyBVLP%7wZy&MO?CvXcZeTrVa`g8_zTmi76e#7PJG0 z28%m0+K3hd98HA`zMCc6V_b^%g^d#j5X~7nY&%qBr(>WoW9{GNgw{ z8I~rB+YN@?Q+X_U^!1=1*$jccwY_@DCF_zywK zVdEZYl)uIk(kOS0W^VY8^44fe+6mG^NTYN$dXq+}Y78cg($p}KMk#8%L>i^1VMeW} z+_lh>Szs-;h8lR^+p&h;91lc7Tev`1nl^ z+XhpVGHlnz`~jl*bt)Q-nKD(}y&ht#PHqpVc-y`i8_P=H@o}uYJR#3nxm+h<3sh#z zF2OHRd> ztA6&e?My3YWpG9kD?2i?S!r*cONy^;+sua`=FPBRt}YUTQ$uXqvoX>QX+E}p8R@LV zPgUtAhL05g2Ls7eVD{srg6#@PX4`B{H;4aOFxiyd=S z(Bf)gHSD*EqBVfRf5F=%&MiFSjAH$gNU}~Z?cDk^BD`?b6KL*HIDQAD^*Z!TeRVA5cZP|L$Pi&3wbKU7O-g-X9a#asPsmD@%;tBOBwzs#OXm^(Lj{K}Q@?u=$7Vpjz#m)>+y z6-30YmbM3fU&nOgTen$RvCp%?z5i{TZ;Hya|7)d)opvu<(!r}tBj4!{V&CCTGTF_! znQUnTPqFjRt5iX(JrbsAGut{_Ajm$h&Z?x3xN&$J6>^RVmMcuqoeH+Lojr1aTit2r zA=gYj}EbQI@8AYpy6X1{zDNfAO5(WmF)i}vU2`^xEfHIq4)8|CZ+agcW0%1@nAEPWe-<@ z^lXN)T^SlEHa;3DD_YgZ_xMp8Aj?M#{~^dW?2iPtwFDW_8rrEz5VxN867jJfO}4l=fs>QdkpOU3?&s{I0S0hMJI;owUd35(sCe}q zYMr}QyLkX6|ChJsJ7nb#iBW{gttIgAvNK{67aTG<)UB-Yu?c?jkS^(n9162v49UjDz|tLJYsEC9F&9Fz?eYo zUQ8}(>tbr6_AMr7wP`WAs~rmp+OA+p+N+?CHY!+>b}0yHi-LmoC#H64bAm-^V}g)& zC8p+TOM({dN3bK>jF{Yv6Tu{#s(pybOKn0-o@xhz9n$s#MV&m9fQh(YK1{$tRLj{z z;JFftVxw`nsoMXlm^K=pG_vkDvVLh~{o2U-t&#P6Bg?nhvpuwNSoF@Z(P-x|mF3^a z>e$HY)W`~IWOZp|g*39dHL?=46-M1p(1QaaY^l8w!shiQdtsTh%n9pdBg- z+Mc4Iy(tRXn4+L*MnM-C1x+&wnr0L<%_wT^t}lRemHkZc%)?U7GC@MaQ&M&}L30=( zH_gU3QG6u&$eAYahvH(rr3?z%yrQ6; zD+=1SqM$u13d$H1b+S()j8Umws)k&qMqH)_T&BibriNRlMq8!^Tc*ZZriNOkMp~xw zxlE;VnF_5;MOLZ;D^+oos<28`RHZ7YQWaCFQRRifl&X+QF`}kPFbZnrge2&VVs#Qk zp{P!RNEE*$;oV***F9kR`h4R}*PgUfZ zY4i1Z#v8#6ygeR*vA2)MLp+LB6CfN#+yn?ikv%~T^^FM-fYvD%H(C72qWwhj*`p@H z4S-{^^&}XHV%j8#fJ3r;5=6G7*WlSZjGr;Cwbt^kvh!qoK7Kn17u!Sf(Ij{gMbcy# z0|(`6ld;!>^6X^1&IjdhlW~gPg{gSm-jPqI!YKK)2%l|9DX`X^?iV~Nc_#&eJYOK1#)lvtNd$!Sn8PtCsu7gfwU^bJMV2yF8Kx zlTkEJhn^^6((!`Y<;&?X9L0rn94Y!TU_6Sn49G$8Q3hngDH)Xs6H%0BVzyPwqnS8$ z)$(2@bZ?@P?omgvDbCj$r=VGcIv7%?4MwdTngv~HuCr7I@6A$q_BD$xW{5*yh8er9 zm3z#PfZ|)T%8HotLuEQ)0zE*~_NSUQlc+)KChw$7iRsFA7I9s(c zYBu!sQ~`!zf*4`)@@!04$1c8^FRoa4iHx4)q<kc zf+-%fZsTQ}DJ$k-Zns(u?xI(Or);$p-#SJuh89>3`w5Xt7ekDc%OFhNUJUVaP6rKr72S}|!)Njpp0$Q7tHFGg(>X)mINy{s+9 z%U&bz7UKlf$mC@>T{Uv+GQ2c3@~>rhp=#t;tFgbG*fZ*CdR8rm2%4T6o}Sp{m=!fV zJ?J7Gr>BklNa;97)Z{1@amDD^y8_VkFg>smLa+da z5i0*&iOWP42eIg7%*HAXB4iarQ4m!W#8{-Mt8fO7%9E=w=%cddYOHpYo7k}$r}!u} zVW7YvB%@H7b!ZLrMO|gq<2CpMu9NN7;t1-bX)Welom{dOm(x0Vel2!fC*4bNEOj!u z6mzUj?kfeuosNXcyUXuOG1P=I?6Xd;FH?mtl;LBbPBvQyQ&E`LsXC|DK`Eb>{eXAi z8msYNx*KU*GJ6MF_sF7E-nh^12M(az4;_~A8@vC|;7Dljj4cYz?G~L z<#$6Bd-QPljiwB|G-%GCl?L7nd^PZ6&`yK)3_21}r+xtpf*gRNC^5P?Oe2{6-3X|| z!R`!tIDiVfr^7OyXLm0RdNb&!K_r6#8bmV~s6ojfChDFJm-TgIT=0aO$l z$Wq6*7340l8k-$N`K@HtKUq~$N(WHxR~?qI4K>W!*ER6wB;Tn)TLy1x5X4}Q1_J`{ zv=|%Nr%5aq`KJbtJE{@~GBj^HwI@kpuGSN_nZbjOPHM3B!a>F8uVfCp$3r*E)q~@?jNIu ztzK~eHBp~BEaNJ>uM?mhg7Gb6d!J|&}wLo?HJCnz{$P)%m_%PxUfEvc>s(~8=4-J|!@Y0|;gH{@N zGw>y#K1h`KF=^)@YOwxfsm~N0*xktilsm{_8J*c3qCr;%p#;>|jW7m19Y8e@?y!uK z2=@2Uq%VX18bmRO(IA$=U;^s9NgRVA4xsuN=CF+6>>jDXCIs! zguyZmN*Juv;AIAD6rfWRV=a?)y2yG48#Jh3uvr7appt<4P9+&^a{x65+Z~qiI=gpj z@CJjD-J1NJ$zBciG5Dtj`x#Ve@D78+8XRG8RD)v-PH0fgpr#(+`gfYi86xUK+gS$Z z9Y77`eTQXy!0wA0e9YjA2A?pvrom?nzR=(XgIj?m*s1!acbmz-sR#kp>0O6qe9i7} zHTaIfj~e{M;GPEe89dP7R|by=sIP~=2jcpVOUh#hQJwzfu#Bf%!8yoL!38xe@2)`; z2F*0^WY9u`mJEC}Xw9GvgQ3`TTPFUxNCyU;GzetSMT1}l-4u|&ZoyaNV{&vQzVRND zd6f{@^f6vS{0wg#l3Ocr6JJpY9(W*esuK6|2j$&L=#0W$LTCT)sfn-X-(C9m4gI@C z|9-M3NN{m+r`4H`H|9WB4?h3GA9vs{KDy%D+w0r#KhC*sh6v+^t%o!NB28! z#qlR1-O-{uq&$><$q|YcC0ThdxoIWzLW?H5JWTyuLW0ctL*LS9H@&n!(+4|o$&xW(iDT|4Sq81I`}oKXM;?`oQaBvpM3iCOYX(rD7;PIqVD zwrctsx1gMj$Awv>3O0=2m)l6dHdsq{cW$RzE5aWd(eH=CEm>x3p|z+eBmDmWi}C~w diff --git a/.doctrees/install.doctree b/.doctrees/install.doctree index 6568fd523902ad844c465069c5287875d15e447c..48a8bab1da42e2d2b3666bfc11c198375be8a2e6 100644 GIT binary patch delta 2587 zcmY+GYfMx}6vw@aJc3$zuJM7Qf_fVyz~$!Nh2y={YmK*X)=7Isf08xqIi_nS1xf z8IK!hJT4}xgXUE>SX!FuDq36WEHzHY+&W8@sST#o@o+X_rH{ASXsKy6)|en&9W1Sc zi`Bu9SM9Z+(qd}c=X7{BnT%C?O|V6sv2dF~nPYBn{)HFdbON}l1>ywBLw zY;wYZ>Q(Sb;woRSs)n}xH71MGu?X(AFOr;a%(Mdjtqcru_*fcROcf0c_04#-I!kkl z(QJl8>L6EP;yKBt^_VqFm-zr{U;j4h&9W5tAl1N<7596>1(xv9^>j16;wINvS*+q7 zsjf54M^_og;y${+tC&u4k7u%59k4$+Nz#HVd7~Ho_915kEKUi556MgCjId-#NlBMt zp*$tHc;XQPQK=h{*Qdtdn9n$cTU+(^R0%NXIMF zHK*$%;aWygHT8@QkYExj9#9+N_&F!y)8*b*&Ka&k=(kFKO*ACVMon=g{)?RgR` zHL4)LFb%sK1DYLbxMB=}uXc=M^mDcCoGtOhzH6>X#!456lgiUZa%Vk0!dcKYyr z%?FIIQa9J`<~rS6mz(Q$bG>fvxSKm6I~)J`G1+o=(#@T6b7$P#IX8FS&3*6YesFWQ z6t{#{Kc!f5&t>Nd_-sZrdAE}{83P?Q40O^k&@sb6XAA>183T0`gAOvXBy2K9=y0(C{#UMT^-=+dH2bS0wt+6p8+ zl-lA^58HB3AKDzKb=_^KPrJ9FCiRq~j`q~frKLLHVNV!D_om^?kM*ucJ=&XtI>mKe z-wsbcDhL|;g5kS99hP48<>T2&?O%gh)gO*~&)&Zd^-}*@)EE7GaR2KEwxfPC5RH0! zK#v+cn1xz8s3ktQ#gpDvj-_z1aTx>+Z9-T+bdY~W*md7ovj&~)Ck%{QUh9eO208wo zyeZ1R$bgq`%Z}X<<#7c}2yl-8f4$xp;DHSI1t!Vac>STMKbGt4i2#2p;F$o=74Vk; zFBR}gfN2H%Bfty+{%U_Mz#AFRUD()L*|K+{{+?L8%mXv*la~U# z1@KkCJOMsYz(N566krP!L`8&uY!(TyLOGNeF&tqLd-V7mfJ1lYv^oIhA3X%E}O@X&|bmxI~vjmLbmJ;bLLSA%~!SQfO} iSK|pDwTGf!wudf0LNia193weP@-4{;*BkrYq5l9=PV*uF delta 2597 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 Q(Alk6hQ^W4wxSXL1-WIFCjbBd delta 2947 zcmZuzdr*|u73X(xS(fYy1cYUGzYi7=Av~7VV383=!Yc*@7PV<&d~93jx>JQwNhcbk z$uwq2j7jFA$22nym~rw@91XTKwpK}II%ykc!q__L)EKRuN!v_Yj7r8BWAFLCU3QV~ zALrhC&hK{~ckem7uO6}d_8rTy@oVz0U+c-;eVcx;bwkf4dGlJ4oOi1@rU+bbMw5K~ zmKIZ;xqc8olk2y&(E3@(m1l2wW=Hv3)^%_0*(h;);oYjn+htQ8M*1dm6J`2jEbho} zZsr2b9LFB>wY5jyxt51TGVl7lDYAUzRwEi_B7b*%m7M!cGY(A4EJnNijR!uax#I(@ z+w#Q5-X{h^)-?m6tUZQ3M%jLQtNdc}QQ7|OQ*zgx6;j;k-PejC+rIl&B^aN5|Hiu1 z&$AN}!h4n2JrEk+_U6eYr{uY) zcFOSux?Eb48jaO*4<5kZ%&abwo`U-@5p!|Tbn$JRi;Gh(M7g=$wK(;zN*!1SFYRz3 zN7$VbJ9328DKCFe;qdZ>91fS|s0;Pde;g=u=&aIP5ORlYP8kRkQvGbai1{==8zb3AC5bSWK65hCxs@Y^HyS<3!H8p}{c1*!jD ze2tyc?9AV8*hMghZ-(y4#GH8cTDBJ09^-f_7K8F#O*4|HSDL=>hns026IZdEcF)0T zb^n~R=dPSnl%GQ;d`*trwZTuTv(S#ybT|tu=<*zt%fS~c(HxQ$`jlD0N%~PX9>IAU z%SH=6nO2BR!TuD1jrKW_1pIdzfTMn4R(f(~r5t5+TBV2nU#0AXE9ECGgLCud)bYU` z_C<6dtu3Ut$vQo#zWqS1s^nwcYSUc`q#D2}>)u^X!)}DIn63AVYL^^8;ZzGPUyO%o zya0Yt<&x?DC=v5r65q?GS`8b}Wuk*7I_RQ{wOD1M*GAFw$`ZV3;+{8fc%BAx5mbxe z_PHpK-O3|pcVN^+kC^BYYWJcZBPRNofmUyD!i$@@WFjw^$P2Wn0E7!B@-OjzDNu;x z!saG;Rj*mxTpcXbITt(lbiAih2zPvW9Yy%Dm>84ieIq6*6og7_tUG3=t?m@6Wf%p`bzN=_GL1=71m^? zZw?4DnFG_9C`GwA!j@v$n^#RQmm)2l8#i>NtuIs>I;Fn&x7_k_VUai#b38ER`0ADt z;meW8sC3xk#-LLke=%ExPtvh6c(YEbkmiiN#5-fgUUElfY~yHaIV=!2-O~S3jkw{a zmnv``$u#DNX3WqO&CRs z{P3~8?)@%0<2UR)1f&{hj(FD|(j8bUQatpO15TBQG14Yf@gG!VrFc{hhr?1WVcr|R zCt37L6*8U0B?Ej_o$C2p8D@^TFWttNTYo?H;Z?Jkj^PX{s={;FKYFwZ9Z(PP&O){R zB5KZbylFZ}RM&po!;c6@=~v&uqxb`5RHGFi&4BXs`!EXquv$&OD>E=W0Y5V^;;4s< zHzr_wuy@#+pYaxl*TQjG?5Cj`goI5qo?Vh=*sba|BV8^EHM0@&6hbvZ9<{127wW_h zThojhT!dQe5z8acWhQhPeX3eqs1rk*;-Cfek&d5=$0PX723~B|Xebx!)oKuW;s}Lu z`0SJ7^$7ko6aSh<9bP;j)R6-mFz~{qjFBeGW{ue@NvtgqiJH-5=haCy*}17|xyh31 z(I-AvzEqR_J;ppY#pGVt?=gDe%eW`&QN2);m8M5~Af0zc52Wjn9=q4CNbr{rVoa#V_5MScNUZMV zI2&1PaVXKt;+a$>cCv7>A)7@VizO^VEV}4lZE)o>yWe2;8?1hV(Qlyp!yzhY$HQto zZg0mKY^22mOM4&*CKpc9?)@HUM^0A;4FHln7}0W_o;!Jp+^4zh@_D>|d> z6NOeaQNsN1Dm=k+gPYY%RO3WzSePtPqf=!k@{%toT}a!r$@ri7-U^hu8Op;${cd+L ap@Bt^MT8nOsVcSFmDq`f(Nin&82$%>CU8Fh diff --git a/.doctrees/readme.doctree b/.doctrees/readme.doctree index f2bf4f2b76b8fcf7a419ddd15d810c5a5bda4bb9..ecb6bfe45ad792b9ddf3ae4b463e0f52f3784df4 100644 GIT binary patch delta 18949 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 delta 17561 zcmbVzcU)CR7C&cb(v|QgPP)IlW5eGH5#L+F)EhdnVEYpyeGS#-|xpC?|aU7X3m_MIaBW3 z%X??-PoB27T4}wB9I#rS(962Gw4iWFQ-jN#veK%;(yGev^0H!-Dk|xui6aKK(~F8L zi>t~iDm!MKQ(aNP%QQ9E7L+Y{VqRfsQ-d$NFd2NIiGIGyhklk|aIh^dt*pu~DQRlx z%Um*{4_lc7HkiJBr6;|`Ke33TKy<%}2RQNq*_P z>il_yO$~m$yq{%LgExC~9C-UQHCUHo8MJIuQJ7z_0JAvqW>gf0)0`pw>>bg|Z~1ZMdtf9h$0 zdu)_eT?-1^tF-A_$e?!>%No64*y0Tev};F(DmJ>76d9+Gc5S_la!)stTzy%w*3w>% z+IL&ItEIiX%I-Jip{^Y}8KpeZw4GhIwkQ_XsjA;QZ+|>OxuYfSy1na!Vx<{<_45xr zlv`Tb?p<5fEB7^RPj%dLimjG&&lB}6)GB2-d0<7yri`)W-MPLgh`yfEo32aovTRgt z(&L!i#hN-y?$ej|1tvFi4GRmOm@+keR8mq{MP*e}qi8x$iJ>Q_MA#KnmV}i*(bN#j zHM%6#k*=JQ0>gwBi`plXBk9t~Puk^IR*8HGm=Z#Rrufj7DX~_K=pU_1jpDVwpE}4+ ztF<4U3|?+(y;vu21+UYe^E4rC1TRpZ7E0Qz=sRg%1g(6N)}J@+aE3eWHFXpXnC3xu z&2pn_rUudc=^pfxse@^8h6nX|&z6?V??EHegJ^A*2Q5#JrCI47bX|2Ay^dVlR1X@S zF^s;3+{%pMbk7VA`gKMsSkglo-D&)^$#%FrawrQhj540L$44_YD2GRXk z`rXV)G#k<9J#RX6dJtWl?Ln7JA5Sl1ZJx({>22iPkUQ1lPqVUu=!a-;OI8{khc&IZ z(3|#|5k$SRyyzRh_n|9Mei`dIG$WnG}x#zI(W*+mcfO7>7OO_WURAu&ai z0xt3Cp)BMQpBl;vF7auhJj*3MC6q1vhffFP6)y3qpuEi`J_yPoE?M%Q6a0rqzw&SX z!y{k$h5zuVS8iI@;4cq(#li-Ec(^N0T;idw^x_f^b0v^VJj9hjT(aQ#MsbNpwvxgn z9@R=Vmv}@gMO@<1tWovpN(GhT33R*cf zpDBC`1i|M0Du@k53k1>JO(8%xFZZC^@5QSDl|qL1dA+X+J6Y8S3mtT_Rg-IY#xdIzn) zmrlpk<*&!4yNM_>q#$fz%}NO^l5XtI^~TZo@(Db z`mJF3nkn0l$|1xy+01GJb{VLhIkTOXFwD z2zfWtkN){?3|(0yyE^e;EuAte9V0t~UY+Gd>3d(&vw5z~OWwB!AvAq}0mqr<4{D?%Q5+l{6iY3H3U zJJHmm?RwH3r{?reLxFwJ1-RS&>66oY(;J_~ut&}y{T_d;mWEtN$3-@ip1R;g8;_sd z_={`v!V^}2NT2@v5B3^BIxf63*nC@As5#-}AmEy7^SV-^K zDV#kQB?aH}m}lzm>A3u-(QDVF_1`bFpzPY*auMhIwQFJY!H-u3asMZr_n0EOHt3h5 zLe{$0@Sk(KKK!3f)Z>!WdH44EwLQ)G@)bQFb}jX}qNTNJd~?sM!+%D*gQ{ z>6Z7kQz*OA5%+PYy8bJdn|ri6fFSSxe_W!#!`?uG(g^{!aD56u`r?b>2!=s_PweBxG3bZhvztM{EvZFJlX|aHhI8kkudU8TZ)eSZ3UoVwSi@1Fpv!Ef4P4O_Zr<2v%k8&5ozC}b7Gwu8^i+ei zzswHKpyJ93?BRDQIKV?L7^@ti3kYeQ6F5uht*+oFrJuTiCzlM&%?0j>Y~HSTG#Aof zH^AkV8<}B%A}M|4j+{6sB!W04BwC6iLZYoWA0!fSI7qY+Cj$h2EWn)nOn_< zX#h!n6hPqTfW#i+5P(_u0RTz9`zJbytsgbM?_))L(@(TkEc|(*o!IXa9mQs!=pc4_ ztdMW>2)5R&4#x*t*>Mk8hzmX&-UC8vxF3zmReNy=6katd*Gx1AhmL7ZCR#TW&Ba7> zGtt6Kv*R2>cj`z|VjPe54V04V){92gi#FDaV6GRjTrYg97p~O_&+3F@b;7SY;Z~jSs!ljnr`&Qv zZ|a0kb=;+&(IsMI&7%Dwg5x}Yh~c=+9|m#!+8<&$y7q&3j;Sg(_JaXj|F9o~bG+6M zLO6N`KrqMg0aC9BfGDoN8UTYi{-E*>fztk{KxuzPAjH^+)A|_JD+uDmse(BMK^ITK zj^~5bWo~upoT}oo(x&>VrrM^4_5pLPD$A{WVgWweDHWJA2>Xat1xeEff?x!%`bH3h za`X*`AdZQ_5aT0^yJC?dn<5)wRoR4^(xO?}5e&U~?n5e`Rk2N?v1bU}0DP8XP6J>9 z$7ur~jNGAe=H(B3sn2oSD92US0b}JmlAPk9sAqWd2U<&!eihUe`l_K7afCL*pcknW! zPbBnZN+cBUgj12QnB&AK$l$m=3UWE3FZ1v*l_>+EkmKorIIf6f5F~I+QgQPjn9lX< zgCL*d)M$*KKdso#Xb9kVJR17pg4h}j;RwDlxSh1J$uTesAAZ@JF))pz?O^E7anNAw zGQ{PBVJydw2g7KQJ_J%Z&KLsoIUXGXMa0sYMGl3j9M=xT;KJqh?V%W~h?j?A{jDV>Kej_0YA!8)Ww&5#Ug9qC>5{rC25~ATAa~Oq@XU#H4!Av{8(iP#= zkT;u>4j$~#IOxtUj{-MLe>jTosjPT3lp=gH8fp-xkAV#cm&d?jgxO;uhge&)16kn7 zz8i~igv#kuaA!Bi!2qi$TuE8#I2gz2{4}KZkHcWGW@lBdm2*SKLoD27)#D)x;pBLX zvWHg8djjM;@Rb+6i}A6rVCR!C@Ae5e{FwUb1jyqUk^m*-krmsLfH9BwFabt!95oSU za@;-TwCqV_VKp#~cmxy73dVM04+3=OU!H=H&rZ4kNf=a3TQpa!o*!xLn z2lMqw#yNwyIvL71{*eqTWxhcA!?_@~GX<7%-e)p2!X0*CGPdasbC?3-5K^bWEY_F~ z!R(tUFp?EyKr~BEg+Z((1Me`mrs7jopJ_MAkb`pR3`l_c%s2zry!)(QHkP?B%d>1;6z}u$ zgIL!bh(Q^R^k(@vxRl+OmR^%GT8gyg7cvcw#cW+7csVdyqNF=(bV7gT%)*re(|69o&P42*3)LLgbA>1CXY03ndJV_@KC6S^NlO>U+6H_HIO($wH zB{PFF;&L%t60FN@GSgX zD=K}GYvOWqsZ3s>5h8h|rYW^Dc{L}*73dmC)M$E^>EgE|o@i4SyQm?RGCM4DHPDD$z-WXLQ>bfUW?KGlhyk~pRl zy(Mu%C;0gQ9cj@CKS`X@iGGs!!rP)oZETQazS6UVN#cx743fk*Ix$!h-|9rXB)->) zk&-y46a0{Yo}Jf;@imgUs528K@sm#Q69ty}MJFap;u0ssMf$HOVUFK4LJZXJnx{*nmegm}wP6E2x3 zjS-C<#5M8mAzCI6(Fl<|Ow*KDnLJ!4Mo3~bC&Vj@F_IXs5yC)%rYSWOWqOj%Buiq7 zPNYgAT_-XmF`X0QWk{AJax_BJF-y~wT$wyuC+0|EE<%m8Fi$dyo@KryN_C=45*0d8 zDTzfou~-sM>cmn>tl)%rRZ}C0RT_bQ;`*~%QUG5EWt zDMp!mP$%A#M9qgfb4W7((20*FaYQGMO5&JK9G66kPMnm)7dr8!B+lr>za;UkO5pnU zon+2&M!Y@yK@t}=LNw(kO;diB$(MBES4sS)6IUg1T_;*4aZ4xuki;D^|HX^CyOO!j zvv5LG`cTu9M>3iCs>zBaN_^4L30q0n>x6?Oy6QwXNw{)Cyb^Tt#q}SJbk`VBX%9_P zdddR5b)t_Xe00KB68<{TPZB{o5iE%TIuR;~2uX}ZUm_(lNY4^2i6J^MR1$GI5ig06 zl3?G=$7gZ8?g%Xb{}6tFZESF#lRvwpFtl)CY3`ijiaFKARbiEj<~3n!gYfW;Z^ZFv z%a)cvAN#;|9bZuO#aoRdCHOJNO?C;v)6x$;yvOT#z<(^b`X`rc{EYq!z}gZY7DLMM z{^_n2J5Y`^us)SVQ2{C-;V^_ z@QKtA#6S25!W15h4H5G5k;9qbW{J0VY}-Oe8p?O6a33nBtHi@+@+ za8n5Pjs6wjZ-bBH#z{-SU>(cPISq~_W%&iUg-h}ml$R9Br~YdE8ijvk5{BO>G*$6$ zQ-oGlP}meSeOIQ1MPDDbV+D*eo?8wrmikQ?`+F^{VY#co-=PveMJXxtDa~I{$kwmI z2f)Ek!B%l|z=o{GXUS_%!_lrj_*YR_Rb5f)Q@F5_9e4`-d6r9zOG6 zwfn(G7T&)fFH%qMhi%59m*EdvPP(&22Oz-s!ale_%yJqr=Q>M~$%vV@1VK2zVhv~U z-+`^|fW#=g)DSNU1KBWqHOQ88Iy!L}((dd~J%5}>W?FpWSY(`X7v)#vw%>bXV<;p} zNX*70XK~+GJoky*g5tSza|;(XDI#@N;&M!N)KjsQYRbyQSJ{K_pqJ&|#Iwxvd+24C zcs_YJU~U6Dun!ClGGFp2NUmVBz6THMYDhi{?8)!J)A~Fl-v#ypmYRGYk_*VwP1X2D zzo8qiypVsKRGeQ`7&S+ZWrOqFvWms|6$O>Kh4`gWh0Z(hPoCygbj;eJFE9W_bjS|# z(QH+gl`JaEEh#R=HdR&?E>L;tGzK}|^z1$hJIM=vG&Q?Bn|%&HS=xdfRn(_wLiOwh zm&Iij1#`-(ORGW`6qi<4;fGJk^K8dC@FV+ViSN$g+}pw)oP+3I3=4KzWUn#l2YmV- z{4r*zS3VKH{}jJR#P3n@`>FW-O#B`bzsJSz33lQ%)j0bBMXxUz^J@$T>foAo1jAsqM#3~b7;;H1gTKjIZ>Cw%Nr zc-!?DAImFfZN-~3pP%)rS=`Tf6Wp^eI~`7<>^ymY6?rPBjObPd!OM}4u3*0iFtE@| z;A2LuzJ%|!Omm&Nq?J$$y0h?K!O<*N#jkjkW?Jxk9O-RFb-RoWH_cTSPgJ}A!~Ete z;9*uS!$4P;G*s-oo z4bQszSQqTMYG&BHpzrT^Q{K_C!PR=6PrOgW|4YSA*Pw@~5tefe{LLuiHRx$VnfrpF zVPJ{Z9~+_V*Z*${4r+w}6Y~bPp%r?WP6ZuTB(=v}?Z~TFE|C87K6x4Hb1MMcLmev|K+y-|-m|8WWsQS_!oQ6B~s-1zc zrFUUi$9$s3-|j-vV`SMqyvH}U`0YKsUH;6(;)XWxdMsaS8$1m^nB;rsJ}!10?1`FP z9^jQ7lA^7XwC2d(-1-1^!Xs`YoNc!!R(5G7>6_jlJ;8}Bv?l}E4-auYSu2a(e+bL) z%2e>LKWgVcdjxB2<;(~csdm#Jw>Ma(%rHq|J%D7vI5w&a&U^s|wg<>iGOnL=JV(#& zMM#Jtr=NvIu$+a~_(sciW|NY`&JQ8I@$&$(73NAq0t_tKlDL~u&s&lZGwPlt8EQtI z9YMO0xzYo+-->i0bNaEv!6d*X8|yFfN}Q#7mDf2vQ_{|6xz%1QvnIQoH|^PDA^v2y zy(%3Sfct;eqzmK|{==hf^bCfP+S+~yT?UvM%Qj33z(>}{(6IT;Z}yp=lLBlhn|Af*B7-fbZLSYme~ z_U?Yn$(?lZEDgYb=v_3ldUjFw2C(n2RF|>{cap3Ze#xDL5-xOSyQEh{sAT@gUtfDH^a`AHm}u#1D?hRh9H03*aOx?|~zE zg5l$ZfgSEa4wAE~1BeIa5O>zxll0}JFttWCr51=ELZZpd0CA#VjlFOL)P()L$OwL> z;71MS1@^dFAJHcvBHnwM`oL)|C`yuKh9r9nQ@D0SJ=)a^1|FEz%YYD^y*#F9v8$|lI zXTXB$i9j#Y8iaAUS?%sEYIjqX8cYJUl~rRKJ7u5ilvM-PK7@QrVuIw{Llkq*vp*RD zG3-JVZhY(d>p?8mz$A7moD8(v-*McF$PCp2qOh=i0FKQJY2o?+-2!t8C52EfO}yRF zgn@k=N_LVJsvSgO=cO=G`WQJn9QWlF()fD(d_kLhuZQDszQ~R1GutNuXUIO*C6XkO zzXmbiEhNnO?I5vv9aO8|$C@I^1hP-98Bx^i8b#6`BmWXb#-Tav7_|mBW5hs`3*>vX zG@>YdWDrSzj7*ItQJfSj@XlzmiQEd3^RFxhTk$zJc)#0yXxcm1W5{d7F<6ch zqNwGI!K4=_#YW&Wq`fD^H1rD=%h0eRnx+4*nRuKGRcl3bDaU#D+Wk zL%i{|d+iuW&CU`?h<&fv~V&Gws;m-WykR(xih|TJnj)4 z@)M5`8RNYtV9*ZiPzg_I-9r3mM81`?dx)5a=TxupBY^}weW0JBb2VBt22aBYhgPU^Wd=#Ya_w=V%C|Gf1ms1xYgT0M3h%u8i(a>T)X@zCe&9l0 zhEP_Uj~l%J13R5b63nP6)A1-8$~H_VaoUJooKBvEL|IUPfzd3Ih7{%+Xm1T2>v1#2 z%pjQr@@0Mj2KGq~nQBI*%*36_G}q;sWSJTD(kzm0Mg`^Kqnv5McXCO%8ReCSOMSld zu#1U@2FCKRCw5B*1sGU)K5;gqjQJScrn#JF6N4F*JsZbjx2(s-te#u5$@B2FtVaNL z#2nJkj1opobImUx8JO#%0&Ni7j4p-b9zdHkCcwZ(&m&Q0lrUzR>-Ib{*DMz;BJ<6t z=wec1MqMc;c}Vd=W;F`2(`Ma^3b|>8-`dqyVI&P@zQwqV9Vx@^Hl>6src_xunPHl1 z^FlJylwnN^$!s$!w1Q-tQHLr>jv19!NtT#UJ(zVBS!zNVn6Zk?GNY2JAG7sCHLez> z&d*zfF>gv;UqlMbsAm^r^bZ}tQfo<+y}wC7xETj7!G|L_Bzx|V?73A>;-Siv51 z1un&TU`oBc6z72{HF_C7dYMwcEF;Bc)Y|1Fn;cSIjBa<)dj$skr*hw$wu0o6uAzM2 zi*&@>eRYaEgt8sJ#Ese3kR7CVC|_qH*>^R>-pU~qKO?-bgA8H5E6JB+P$)kOMzj94 z#EwLSifb~6V6{(?fevFdYoVcR`))FT9jqnxBm~!_y(GZ+TP^N2Bug!y^AwiPP|IiV z@^K_hEq3K8S&VOZtmkSBMh6zV8r$$0Z-X0KxEhC|PPT!yt;Wo2RQG$WA$#$e0P4gu z4+1_ct`QGA+(D;FnuBZ9M)fq7uO*EDZ_6SA3~X>6281bfxDLa{luD?_O_|`UUgS7TSURu@S*26M4H>|_G2R22_G2M&>ufdP~ z%ELtD8ZU3e;~CU;@LZKgHsK8Ggg@Ry;z_NnjKystc2?!s zQ8LtPH<5qCUg5C)9IZL8u)Hn!*zk%h;-K>{hskL7Vd&1bFcIx6jgilxgquvBH4ZQss*Cz7)P^7TlJ)w^c}4>p|2*l+Qf}aVTG8_) zhmgME;&foV^B3|27$U>vpqmWtnwLmlwrrb>4lnH-X``+Ik?hh-c%Kv*E}oU}E7_2( z#Jh7tGq>VRMq0RhEL4x9?PfmNN_;vmcV{a;k{A59a@pI6uU5T^26^=o$v)af9^#|x z;q7ENdiH2LK8L7|auf&jv>o{1iHbP#f3t(UYS`6TCv1F~#Ij90%{swB?Sx&-X(!$; z?ovBp7c1XM`f-(8wbyd(z-#Z_By{sGJU(t^EB6xox0qcd$?$b&6*lf7gW0lOW)(WA z6@JZZUm@Y-YqbWA{zBGZr|D`fr(YrEhKHTilJP2uXAZm7TKcGi(p9ZRD>=S=a5<|E zgtJq7aET9(ki#=_FZSF3wrw{Fv(vJOCN4B&c4pan9|>kJ>@({_7u9$sE8Ry1kWAHh z%RV%oE{xl2S+-)EwvfIy>IysLHR2U~3SYe{WBl=FE&t&cZpx3r_`~-+h3^rH1uh9n zIjeaMH<6FU4r+W0pUgSource code for nmodl.ode
 if not ((major >= 1) and (minor >= 2)):
     raise ImportError(f"Requires SympPy version >= 1.2, found {major}.{minor}")
 
-# Some functions are protected inside sympy, if user has declared such a function, it will fail
-# because sympy will try to use its own internal one.
-# Rename it before and after to a single name
+# Some identifiers are protected inside sympy, if user has declared such a function, it will fail
+# because sympy will try to use its own internal one; or error out for invalid variables.
+# Rename it before and after to a unique name.
 forbidden_var = [
+    # Selected Python keywords
+    "is",
+    "as",
+    "count",
+    "del",
+    "elif",
+    "in",
+    "lambda",
+    "pass",
+    # SymPy functions
     "beta",
     "gamma",
     "uppergamma",
@@ -151,21 +161,56 @@ 

Source code for nmodl.ode

 ]
 
 
-
[docs]def search_and_replace_protected_functions_to_sympy(eqs, function_calls): +
[docs]def search_and_replace_protected_identifiers_to_sympy(eqs, vars, function_calls): + eqs = _search_and_replace_protected_functions_to_sympy(eqs, function_calls) + eqs, vars = _search_and_replace_protected_variables_to_sympy(eqs, vars) + + return eqs, vars
+ + +
[docs]def search_and_replace_protected_identifiers_from_sympy(eqs, function_calls): + eqs = _search_and_replace_protected_functions_from_sympy(eqs, function_calls) + eqs = _search_and_replace_protected_variables_from_sympy(eqs) + + return eqs
+ + +def _search_and_replace_protected_variables_to_sympy(eqs, vars): + for c in forbidden_var: + r = re.compile(r"\b{}\b".format(c)) + f = f"_sympy_{c}_var" + eqs = [re.sub(r, f, x) for x in eqs] + vars = [re.sub(r, f, x) for x in vars] + + return eqs, vars + + +def _search_and_replace_protected_variables_from_sympy(eqs): + for c in forbidden_var: + r = re.compile(r"\b_sympy_{}_var\b".format(c)) + f = c + eqs = [re.sub(r, f, x) for x in eqs] + + return eqs + + +def _search_and_replace_protected_functions_to_sympy(eqs, function_calls): for c in function_calls: if c in forbidden_var: r = re.compile(r"\b{}\b\s*\(".format(c)) f = f"_sympy_{c}_fun(" eqs = [re.sub(r, f, x) for x in eqs] - return eqs
+ + return eqs -
[docs]def search_and_replace_protected_functions_from_sympy(eqs, function_calls): +def _search_and_replace_protected_functions_from_sympy(eqs, function_calls): for c in function_calls: if c in forbidden_var: r = f"_sympy_{c}_fun" eqs = [re.sub(r, f"{c}", x) for x in eqs] - return eqs
+ + return eqs def _get_custom_functions(fcts): @@ -367,8 +412,8 @@

Source code for nmodl.ode

         vars: list of strings containing new local variables
     """
 
-    eq_strings = search_and_replace_protected_functions_to_sympy(
-        eq_strings, function_calls
+    eq_strings, vars = search_and_replace_protected_identifiers_to_sympy(
+        eq_strings, vars, function_calls
     )
 
     eqs, state_vars, sympy_vars = _sympify_eqs(eq_strings, vars, constants)
@@ -423,7 +468,7 @@ 

Source code for nmodl.ode

         # interweave
         code = _interweave_eqs(vecFcode, vecJcode)
 
-    code = search_and_replace_protected_functions_from_sympy(code, function_calls)
+    code = search_and_replace_protected_identifiers_from_sympy(code, function_calls)
 
     return code, new_local_vars
@@ -445,8 +490,8 @@

Source code for nmodl.ode

         List of strings containing assignment statements
     """
 
-    eq_strings = search_and_replace_protected_functions_to_sympy(
-        eq_strings, function_calls
+    eq_strings, vars = search_and_replace_protected_identifiers_to_sympy(
+        eq_strings, vars, function_calls
     )
 
     eqs, state_vars, sympy_vars = _sympify_eqs(eq_strings, vars, constants)
@@ -475,7 +520,7 @@ 

Source code for nmodl.ode

     # interweave
     code = _interweave_eqs(vecFcode, vecJcode)
 
-    code = search_and_replace_protected_functions_from_sympy(code, function_calls)
+    code = search_and_replace_protected_identifiers_from_sympy(code, function_calls)
 
     return code
diff --git a/genindex.html b/genindex.html index a441a1ba4c..487b2204aa 100644 --- a/genindex.html +++ b/genindex.html @@ -259,9 +259,9 @@

P

S

diff --git a/nmodl.html b/nmodl.html index 275fb14754..555c17af96 100644 --- a/nmodl.html +++ b/nmodl.html @@ -109,8 +109,8 @@
  • differentiate2c()
  • forwards_euler2c()
  • integrate2c()
  • -
  • search_and_replace_protected_functions_from_sympy()
  • -
  • search_and_replace_protected_functions_to_sympy()
  • +
  • search_and_replace_protected_identifiers_from_sympy()
  • +
  • search_and_replace_protected_identifiers_to_sympy()
  • solve_lin_system()
  • solve_non_lin_system()
  • @@ -432,13 +432,13 @@

    Submodules -
    -nmodl.ode.search_and_replace_protected_functions_from_sympy(eqs, function_calls)[source]
    +
    +nmodl.ode.search_and_replace_protected_identifiers_from_sympy(eqs, function_calls)[source]
    -
    -nmodl.ode.search_and_replace_protected_functions_to_sympy(eqs, function_calls)[source]
    +
    +nmodl.ode.search_and_replace_protected_identifiers_to_sympy(eqs, vars, function_calls)[source]
    diff --git a/notebooks/nmodl-kinetic-schemes.ipynb b/notebooks/nmodl-kinetic-schemes.ipynb index 43c159f56d..810e29d749 100644 --- a/notebooks/nmodl-kinetic-schemes.ipynb +++ b/notebooks/nmodl-kinetic-schemes.ipynb @@ -152,10 +152,10 @@ "execution_count": 1, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:42.341608Z", - "iopub.status.busy": "2024-05-21T21:13:42.341046Z", - "iopub.status.idle": "2024-05-21T21:13:43.695116Z", - "shell.execute_reply": "2024-05-21T21:13:43.694318Z" + "iopub.execute_input": "2024-05-22T07:50:45.406523Z", + "iopub.status.busy": "2024-05-22T07:50:45.406326Z", + "iopub.status.idle": "2024-05-22T07:50:46.720649Z", + "shell.execute_reply": "2024-05-22T07:50:46.719916Z" } }, "outputs": [], @@ -169,10 +169,10 @@ "execution_count": 2, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:43.698497Z", - "iopub.status.busy": "2024-05-21T21:13:43.698028Z", - "iopub.status.idle": "2024-05-21T21:13:43.727127Z", - "shell.execute_reply": "2024-05-21T21:13:43.726466Z" + "iopub.execute_input": "2024-05-22T07:50:46.723788Z", + "iopub.status.busy": "2024-05-22T07:50:46.723293Z", + "iopub.status.idle": "2024-05-22T07:50:46.749705Z", + "shell.execute_reply": "2024-05-22T07:50:46.749075Z" } }, "outputs": [], @@ -277,10 +277,10 @@ "execution_count": 3, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:43.730454Z", - "iopub.status.busy": "2024-05-21T21:13:43.729977Z", - "iopub.status.idle": "2024-05-21T21:13:43.734473Z", - "shell.execute_reply": "2024-05-21T21:13:43.733773Z" + "iopub.execute_input": "2024-05-22T07:50:46.752709Z", + "iopub.status.busy": "2024-05-22T07:50:46.752323Z", + "iopub.status.idle": "2024-05-22T07:50:46.756613Z", + "shell.execute_reply": "2024-05-22T07:50:46.755982Z" } }, "outputs": [ @@ -323,10 +323,10 @@ "execution_count": 4, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:43.765703Z", - "iopub.status.busy": "2024-05-21T21:13:43.765384Z", - "iopub.status.idle": "2024-05-21T21:13:43.769437Z", - "shell.execute_reply": "2024-05-21T21:13:43.768783Z" + "iopub.execute_input": "2024-05-22T07:50:46.786301Z", + "iopub.status.busy": "2024-05-22T07:50:46.785801Z", + "iopub.status.idle": "2024-05-22T07:50:46.789732Z", + "shell.execute_reply": "2024-05-22T07:50:46.789080Z" } }, "outputs": [ @@ -367,10 +367,10 @@ "execution_count": 5, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:43.772200Z", - "iopub.status.busy": "2024-05-21T21:13:43.771744Z", - "iopub.status.idle": "2024-05-21T21:13:43.775902Z", - "shell.execute_reply": "2024-05-21T21:13:43.775213Z" + "iopub.execute_input": "2024-05-22T07:50:46.792247Z", + "iopub.status.busy": "2024-05-22T07:50:46.791955Z", + "iopub.status.idle": "2024-05-22T07:50:46.795526Z", + "shell.execute_reply": "2024-05-22T07:50:46.794891Z" }, "scrolled": true }, @@ -412,10 +412,10 @@ "execution_count": 6, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:43.778536Z", - "iopub.status.busy": "2024-05-21T21:13:43.778174Z", - "iopub.status.idle": "2024-05-21T21:13:43.782009Z", - "shell.execute_reply": "2024-05-21T21:13:43.781378Z" + "iopub.execute_input": "2024-05-22T07:50:46.797912Z", + "iopub.status.busy": "2024-05-22T07:50:46.797574Z", + "iopub.status.idle": "2024-05-22T07:50:46.801378Z", + "shell.execute_reply": "2024-05-22T07:50:46.800663Z" }, "scrolled": true }, @@ -459,10 +459,10 @@ "execution_count": 7, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:43.784523Z", - "iopub.status.busy": "2024-05-21T21:13:43.784258Z", - "iopub.status.idle": "2024-05-21T21:13:43.788672Z", - "shell.execute_reply": "2024-05-21T21:13:43.788020Z" + "iopub.execute_input": "2024-05-22T07:50:46.803803Z", + "iopub.status.busy": "2024-05-22T07:50:46.803432Z", + "iopub.status.idle": "2024-05-22T07:50:46.807387Z", + "shell.execute_reply": "2024-05-22T07:50:46.806726Z" } }, "outputs": [ diff --git a/notebooks/nmodl-python-tutorial.ipynb b/notebooks/nmodl-python-tutorial.ipynb index ceb94c6573..561b865213 100644 --- a/notebooks/nmodl-python-tutorial.ipynb +++ b/notebooks/nmodl-python-tutorial.ipynb @@ -30,10 +30,10 @@ "execution_count": 1, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:48.840334Z", - "iopub.status.busy": "2024-05-21T21:13:48.840124Z", - "iopub.status.idle": "2024-05-21T21:13:50.181825Z", - "shell.execute_reply": "2024-05-21T21:13:50.181090Z" + "iopub.execute_input": "2024-05-22T07:50:55.048210Z", + "iopub.status.busy": "2024-05-22T07:50:55.048013Z", + "iopub.status.idle": "2024-05-22T07:50:56.362849Z", + "shell.execute_reply": "2024-05-22T07:50:56.361994Z" } }, "outputs": [], @@ -63,10 +63,10 @@ "execution_count": 2, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:50.185042Z", - "iopub.status.busy": "2024-05-21T21:13:50.184801Z", - "iopub.status.idle": "2024-05-21T21:13:50.212735Z", - "shell.execute_reply": "2024-05-21T21:13:50.211759Z" + "iopub.execute_input": "2024-05-22T07:50:56.366152Z", + "iopub.status.busy": "2024-05-22T07:50:56.365769Z", + "iopub.status.idle": "2024-05-22T07:50:56.390374Z", + "shell.execute_reply": "2024-05-22T07:50:56.389636Z" } }, "outputs": [], @@ -86,10 +86,10 @@ "execution_count": 3, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:50.216482Z", - "iopub.status.busy": "2024-05-21T21:13:50.215899Z", - "iopub.status.idle": "2024-05-21T21:13:50.220331Z", - "shell.execute_reply": "2024-05-21T21:13:50.219643Z" + "iopub.execute_input": "2024-05-22T07:50:56.393533Z", + "iopub.status.busy": "2024-05-22T07:50:56.393106Z", + "iopub.status.idle": "2024-05-22T07:50:56.396816Z", + "shell.execute_reply": "2024-05-22T07:50:56.396203Z" } }, "outputs": [], @@ -152,10 +152,10 @@ "execution_count": 4, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:50.223141Z", - "iopub.status.busy": "2024-05-21T21:13:50.222761Z", - "iopub.status.idle": "2024-05-21T21:13:50.226260Z", - "shell.execute_reply": "2024-05-21T21:13:50.225712Z" + "iopub.execute_input": "2024-05-22T07:50:56.399400Z", + "iopub.status.busy": "2024-05-22T07:50:56.399065Z", + "iopub.status.idle": "2024-05-22T07:50:56.402517Z", + "shell.execute_reply": "2024-05-22T07:50:56.401859Z" } }, "outputs": [], @@ -183,10 +183,10 @@ "execution_count": 5, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:50.228989Z", - "iopub.status.busy": "2024-05-21T21:13:50.228491Z", - "iopub.status.idle": "2024-05-21T21:13:50.232414Z", - "shell.execute_reply": "2024-05-21T21:13:50.231856Z" + "iopub.execute_input": "2024-05-22T07:50:56.404936Z", + "iopub.status.busy": "2024-05-22T07:50:56.404663Z", + "iopub.status.idle": "2024-05-22T07:50:56.408447Z", + "shell.execute_reply": "2024-05-22T07:50:56.407814Z" } }, "outputs": [ @@ -235,10 +235,10 @@ "execution_count": 6, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:50.234838Z", - "iopub.status.busy": "2024-05-21T21:13:50.234639Z", - "iopub.status.idle": "2024-05-21T21:13:50.238849Z", - "shell.execute_reply": "2024-05-21T21:13:50.238331Z" + "iopub.execute_input": "2024-05-22T07:50:56.410828Z", + "iopub.status.busy": "2024-05-22T07:50:56.410594Z", + "iopub.status.idle": "2024-05-22T07:50:56.414602Z", + "shell.execute_reply": "2024-05-22T07:50:56.414102Z" } }, "outputs": [], @@ -260,10 +260,10 @@ "execution_count": 7, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:50.241092Z", - "iopub.status.busy": "2024-05-21T21:13:50.240898Z", - "iopub.status.idle": "2024-05-21T21:13:50.244853Z", - "shell.execute_reply": "2024-05-21T21:13:50.244197Z" + "iopub.execute_input": "2024-05-22T07:50:56.416968Z", + "iopub.status.busy": "2024-05-22T07:50:56.416773Z", + "iopub.status.idle": "2024-05-22T07:50:56.420367Z", + "shell.execute_reply": "2024-05-22T07:50:56.419748Z" } }, "outputs": [ @@ -297,10 +297,10 @@ "execution_count": 8, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:50.247453Z", - "iopub.status.busy": "2024-05-21T21:13:50.247022Z", - "iopub.status.idle": "2024-05-21T21:13:50.254240Z", - "shell.execute_reply": "2024-05-21T21:13:50.253586Z" + "iopub.execute_input": "2024-05-22T07:50:56.422704Z", + "iopub.status.busy": "2024-05-22T07:50:56.422372Z", + "iopub.status.idle": "2024-05-22T07:50:56.429748Z", + "shell.execute_reply": "2024-05-22T07:50:56.429052Z" } }, "outputs": [ @@ -365,10 +365,10 @@ "execution_count": 9, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:50.256748Z", - "iopub.status.busy": "2024-05-21T21:13:50.256451Z", - "iopub.status.idle": "2024-05-21T21:13:50.260674Z", - "shell.execute_reply": "2024-05-21T21:13:50.259989Z" + "iopub.execute_input": "2024-05-22T07:50:56.432182Z", + "iopub.status.busy": "2024-05-22T07:50:56.431704Z", + "iopub.status.idle": "2024-05-22T07:50:56.435951Z", + "shell.execute_reply": "2024-05-22T07:50:56.435318Z" } }, "outputs": [ @@ -416,10 +416,10 @@ "execution_count": 10, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:50.263369Z", - "iopub.status.busy": "2024-05-21T21:13:50.263007Z", - "iopub.status.idle": "2024-05-21T21:13:50.266171Z", - "shell.execute_reply": "2024-05-21T21:13:50.265647Z" + "iopub.execute_input": "2024-05-22T07:50:56.438188Z", + "iopub.status.busy": "2024-05-22T07:50:56.438000Z", + "iopub.status.idle": "2024-05-22T07:50:56.441107Z", + "shell.execute_reply": "2024-05-22T07:50:56.440518Z" } }, "outputs": [], @@ -441,10 +441,10 @@ "execution_count": 11, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:50.268583Z", - "iopub.status.busy": "2024-05-21T21:13:50.268208Z", - "iopub.status.idle": "2024-05-21T21:13:50.272235Z", - "shell.execute_reply": "2024-05-21T21:13:50.271554Z" + "iopub.execute_input": "2024-05-22T07:50:56.443362Z", + "iopub.status.busy": "2024-05-22T07:50:56.443172Z", + "iopub.status.idle": "2024-05-22T07:50:56.446784Z", + "shell.execute_reply": "2024-05-22T07:50:56.446134Z" } }, "outputs": [ @@ -510,10 +510,10 @@ "execution_count": 12, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:50.274759Z", - "iopub.status.busy": "2024-05-21T21:13:50.274392Z", - "iopub.status.idle": "2024-05-21T21:13:50.277636Z", - "shell.execute_reply": "2024-05-21T21:13:50.276984Z" + "iopub.execute_input": "2024-05-22T07:50:56.449132Z", + "iopub.status.busy": "2024-05-22T07:50:56.448927Z", + "iopub.status.idle": "2024-05-22T07:50:56.452204Z", + "shell.execute_reply": "2024-05-22T07:50:56.451560Z" } }, "outputs": [ @@ -548,10 +548,10 @@ "execution_count": 13, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:50.280065Z", - "iopub.status.busy": "2024-05-21T21:13:50.279699Z", - "iopub.status.idle": "2024-05-21T21:13:50.283379Z", - "shell.execute_reply": "2024-05-21T21:13:50.282734Z" + "iopub.execute_input": "2024-05-22T07:50:56.454445Z", + "iopub.status.busy": "2024-05-22T07:50:56.454255Z", + "iopub.status.idle": "2024-05-22T07:50:56.457963Z", + "shell.execute_reply": "2024-05-22T07:50:56.457303Z" } }, "outputs": [ @@ -584,10 +584,10 @@ "execution_count": 14, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:50.285872Z", - "iopub.status.busy": "2024-05-21T21:13:50.285506Z", - "iopub.status.idle": "2024-05-21T21:13:50.288964Z", - "shell.execute_reply": "2024-05-21T21:13:50.288316Z" + "iopub.execute_input": "2024-05-22T07:50:56.460087Z", + "iopub.status.busy": "2024-05-22T07:50:56.459901Z", + "iopub.status.idle": "2024-05-22T07:50:56.463690Z", + "shell.execute_reply": "2024-05-22T07:50:56.463055Z" } }, "outputs": [ @@ -622,10 +622,10 @@ "execution_count": 15, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:50.291466Z", - "iopub.status.busy": "2024-05-21T21:13:50.291082Z", - "iopub.status.idle": "2024-05-21T21:13:50.295345Z", - "shell.execute_reply": "2024-05-21T21:13:50.294686Z" + "iopub.execute_input": "2024-05-22T07:50:56.466017Z", + "iopub.status.busy": "2024-05-22T07:50:56.465790Z", + "iopub.status.idle": "2024-05-22T07:50:56.470331Z", + "shell.execute_reply": "2024-05-22T07:50:56.469689Z" } }, "outputs": [ @@ -669,10 +669,10 @@ "execution_count": 16, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:50.297617Z", - "iopub.status.busy": "2024-05-21T21:13:50.297419Z", - "iopub.status.idle": "2024-05-21T21:13:50.303009Z", - "shell.execute_reply": "2024-05-21T21:13:50.302364Z" + "iopub.execute_input": "2024-05-22T07:50:56.472486Z", + "iopub.status.busy": "2024-05-22T07:50:56.472301Z", + "iopub.status.idle": "2024-05-22T07:50:56.478031Z", + "shell.execute_reply": "2024-05-22T07:50:56.477234Z" } }, "outputs": [ @@ -733,10 +733,10 @@ "execution_count": 17, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:50.305281Z", - "iopub.status.busy": "2024-05-21T21:13:50.305088Z", - "iopub.status.idle": "2024-05-21T21:13:50.308660Z", - "shell.execute_reply": "2024-05-21T21:13:50.308007Z" + "iopub.execute_input": "2024-05-22T07:50:56.480377Z", + "iopub.status.busy": "2024-05-22T07:50:56.480012Z", + "iopub.status.idle": "2024-05-22T07:50:56.483338Z", + "shell.execute_reply": "2024-05-22T07:50:56.482760Z" } }, "outputs": [], @@ -761,10 +761,10 @@ "execution_count": 18, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:50.311070Z", - "iopub.status.busy": "2024-05-21T21:13:50.310619Z", - "iopub.status.idle": "2024-05-21T21:13:50.320781Z", - "shell.execute_reply": "2024-05-21T21:13:50.320232Z" + "iopub.execute_input": "2024-05-22T07:50:56.485889Z", + "iopub.status.busy": "2024-05-22T07:50:56.485488Z", + "iopub.status.idle": "2024-05-22T07:50:56.495682Z", + "shell.execute_reply": "2024-05-22T07:50:56.495144Z" } }, "outputs": [], @@ -857,10 +857,10 @@ "execution_count": 19, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:50.322948Z", - "iopub.status.busy": "2024-05-21T21:13:50.322757Z", - "iopub.status.idle": "2024-05-21T21:13:50.326212Z", - "shell.execute_reply": "2024-05-21T21:13:50.325566Z" + "iopub.execute_input": "2024-05-22T07:50:56.497908Z", + "iopub.status.busy": "2024-05-22T07:50:56.497707Z", + "iopub.status.idle": "2024-05-22T07:50:56.501356Z", + "shell.execute_reply": "2024-05-22T07:50:56.500699Z" } }, "outputs": [ @@ -897,10 +897,10 @@ "execution_count": 20, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:50.328608Z", - "iopub.status.busy": "2024-05-21T21:13:50.328411Z", - "iopub.status.idle": "2024-05-21T21:13:50.333717Z", - "shell.execute_reply": "2024-05-21T21:13:50.333071Z" + "iopub.execute_input": "2024-05-22T07:50:56.503894Z", + "iopub.status.busy": "2024-05-22T07:50:56.503547Z", + "iopub.status.idle": "2024-05-22T07:50:56.509087Z", + "shell.execute_reply": "2024-05-22T07:50:56.508447Z" } }, "outputs": [ diff --git a/notebooks/nmodl-sympy-conductance.ipynb b/notebooks/nmodl-sympy-conductance.ipynb index 63d6968f17..da91eecd2c 100644 --- a/notebooks/nmodl-sympy-conductance.ipynb +++ b/notebooks/nmodl-sympy-conductance.ipynb @@ -86,10 +86,10 @@ "execution_count": 1, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:52.703914Z", - "iopub.status.busy": "2024-05-21T21:13:52.703434Z", - "iopub.status.idle": "2024-05-21T21:13:54.051167Z", - "shell.execute_reply": "2024-05-21T21:13:54.050468Z" + "iopub.execute_input": "2024-05-22T07:50:58.605653Z", + "iopub.status.busy": "2024-05-22T07:50:58.605441Z", + "iopub.status.idle": "2024-05-22T07:50:59.925217Z", + "shell.execute_reply": "2024-05-22T07:50:59.924457Z" } }, "outputs": [], @@ -103,10 +103,10 @@ "execution_count": 2, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:54.054259Z", - "iopub.status.busy": "2024-05-21T21:13:54.053932Z", - "iopub.status.idle": "2024-05-21T21:13:54.081127Z", - "shell.execute_reply": "2024-05-21T21:13:54.080493Z" + "iopub.execute_input": "2024-05-22T07:50:59.928093Z", + "iopub.status.busy": "2024-05-22T07:50:59.927880Z", + "iopub.status.idle": "2024-05-22T07:50:59.954361Z", + "shell.execute_reply": "2024-05-22T07:50:59.953751Z" } }, "outputs": [], @@ -149,10 +149,10 @@ "execution_count": 3, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:54.084215Z", - "iopub.status.busy": "2024-05-21T21:13:54.083880Z", - "iopub.status.idle": "2024-05-21T21:13:54.361546Z", - "shell.execute_reply": "2024-05-21T21:13:54.360852Z" + "iopub.execute_input": "2024-05-22T07:50:59.956896Z", + "iopub.status.busy": "2024-05-22T07:50:59.956688Z", + "iopub.status.idle": "2024-05-22T07:51:00.216116Z", + "shell.execute_reply": "2024-05-22T07:51:00.215376Z" } }, "outputs": [ @@ -196,10 +196,10 @@ "execution_count": 4, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:54.364402Z", - "iopub.status.busy": "2024-05-21T21:13:54.363983Z", - "iopub.status.idle": "2024-05-21T21:13:54.513534Z", - "shell.execute_reply": "2024-05-21T21:13:54.512840Z" + "iopub.execute_input": "2024-05-22T07:51:00.219133Z", + "iopub.status.busy": "2024-05-22T07:51:00.218712Z", + "iopub.status.idle": "2024-05-22T07:51:00.362942Z", + "shell.execute_reply": "2024-05-22T07:51:00.362251Z" } }, "outputs": [ @@ -243,10 +243,10 @@ "execution_count": 5, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:54.516351Z", - "iopub.status.busy": "2024-05-21T21:13:54.515897Z", - "iopub.status.idle": "2024-05-21T21:13:54.522655Z", - "shell.execute_reply": "2024-05-21T21:13:54.521906Z" + "iopub.execute_input": "2024-05-22T07:51:00.365770Z", + "iopub.status.busy": "2024-05-22T07:51:00.365498Z", + "iopub.status.idle": "2024-05-22T07:51:00.371677Z", + "shell.execute_reply": "2024-05-22T07:51:00.371000Z" } }, "outputs": [ @@ -290,10 +290,10 @@ "execution_count": 6, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:54.525428Z", - "iopub.status.busy": "2024-05-21T21:13:54.524986Z", - "iopub.status.idle": "2024-05-21T21:13:54.541643Z", - "shell.execute_reply": "2024-05-21T21:13:54.541015Z" + "iopub.execute_input": "2024-05-22T07:51:00.373961Z", + "iopub.status.busy": "2024-05-22T07:51:00.373767Z", + "iopub.status.idle": "2024-05-22T07:51:00.389318Z", + "shell.execute_reply": "2024-05-22T07:51:00.388743Z" } }, "outputs": [ @@ -337,10 +337,10 @@ "execution_count": 7, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:54.544187Z", - "iopub.status.busy": "2024-05-21T21:13:54.543953Z", - "iopub.status.idle": "2024-05-21T21:13:54.666680Z", - "shell.execute_reply": "2024-05-21T21:13:54.666009Z" + "iopub.execute_input": "2024-05-22T07:51:00.391743Z", + "iopub.status.busy": "2024-05-22T07:51:00.391397Z", + "iopub.status.idle": "2024-05-22T07:51:00.509418Z", + "shell.execute_reply": "2024-05-22T07:51:00.508686Z" } }, "outputs": [ @@ -400,10 +400,10 @@ "execution_count": 8, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:54.669591Z", - "iopub.status.busy": "2024-05-21T21:13:54.669112Z", - "iopub.status.idle": "2024-05-21T21:13:54.772389Z", - "shell.execute_reply": "2024-05-21T21:13:54.771689Z" + "iopub.execute_input": "2024-05-22T07:51:00.512169Z", + "iopub.status.busy": "2024-05-22T07:51:00.511727Z", + "iopub.status.idle": "2024-05-22T07:51:00.610866Z", + "shell.execute_reply": "2024-05-22T07:51:00.610236Z" } }, "outputs": [ @@ -456,10 +456,10 @@ "execution_count": 9, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:54.774979Z", - "iopub.status.busy": "2024-05-21T21:13:54.774755Z", - "iopub.status.idle": "2024-05-21T21:13:54.848573Z", - "shell.execute_reply": "2024-05-21T21:13:54.847889Z" + "iopub.execute_input": "2024-05-22T07:51:00.613500Z", + "iopub.status.busy": "2024-05-22T07:51:00.613263Z", + "iopub.status.idle": "2024-05-22T07:51:00.685150Z", + "shell.execute_reply": "2024-05-22T07:51:00.684420Z" } }, "outputs": [ diff --git a/notebooks/nmodl-sympy-solver-cnexp.ipynb b/notebooks/nmodl-sympy-solver-cnexp.ipynb index 614e432167..424e177840 100644 --- a/notebooks/nmodl-sympy-solver-cnexp.ipynb +++ b/notebooks/nmodl-sympy-solver-cnexp.ipynb @@ -62,10 +62,10 @@ "execution_count": 1, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:56.713483Z", - "iopub.status.busy": "2024-05-21T21:13:56.713286Z", - "iopub.status.idle": "2024-05-21T21:13:58.045336Z", - "shell.execute_reply": "2024-05-21T21:13:58.044630Z" + "iopub.execute_input": "2024-05-22T07:51:02.331013Z", + "iopub.status.busy": "2024-05-22T07:51:02.330359Z", + "iopub.status.idle": "2024-05-22T07:51:03.646550Z", + "shell.execute_reply": "2024-05-22T07:51:03.645822Z" } }, "outputs": [], @@ -79,10 +79,10 @@ "execution_count": 2, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:58.048672Z", - "iopub.status.busy": "2024-05-21T21:13:58.048281Z", - "iopub.status.idle": "2024-05-21T21:13:58.076145Z", - "shell.execute_reply": "2024-05-21T21:13:58.075220Z" + "iopub.execute_input": "2024-05-22T07:51:03.649688Z", + "iopub.status.busy": "2024-05-22T07:51:03.649293Z", + "iopub.status.idle": "2024-05-22T07:51:03.675736Z", + "shell.execute_reply": "2024-05-22T07:51:03.675098Z" } }, "outputs": [], @@ -123,10 +123,10 @@ "execution_count": 3, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:58.079692Z", - "iopub.status.busy": "2024-05-21T21:13:58.079187Z", - "iopub.status.idle": "2024-05-21T21:13:58.503645Z", - "shell.execute_reply": "2024-05-21T21:13:58.502915Z" + "iopub.execute_input": "2024-05-22T07:51:03.678502Z", + "iopub.status.busy": "2024-05-22T07:51:03.678258Z", + "iopub.status.idle": "2024-05-22T07:51:04.102115Z", + "shell.execute_reply": "2024-05-22T07:51:04.101410Z" } }, "outputs": [ @@ -165,10 +165,10 @@ "execution_count": 4, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:58.506498Z", - "iopub.status.busy": "2024-05-21T21:13:58.505978Z", - "iopub.status.idle": "2024-05-21T21:13:58.636725Z", - "shell.execute_reply": "2024-05-21T21:13:58.635986Z" + "iopub.execute_input": "2024-05-22T07:51:04.104749Z", + "iopub.status.busy": "2024-05-22T07:51:04.104518Z", + "iopub.status.idle": "2024-05-22T07:51:04.233810Z", + "shell.execute_reply": "2024-05-22T07:51:04.233059Z" } }, "outputs": [ @@ -207,10 +207,10 @@ "execution_count": 5, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:58.639552Z", - "iopub.status.busy": "2024-05-21T21:13:58.639091Z", - "iopub.status.idle": "2024-05-21T21:13:58.869674Z", - "shell.execute_reply": "2024-05-21T21:13:58.868909Z" + "iopub.execute_input": "2024-05-22T07:51:04.236684Z", + "iopub.status.busy": "2024-05-22T07:51:04.236270Z", + "iopub.status.idle": "2024-05-22T07:51:04.466415Z", + "shell.execute_reply": "2024-05-22T07:51:04.465692Z" } }, "outputs": [ @@ -218,7 +218,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "exact solution:\t m = minf-(-m+minf)*exp(-dt/mtau)\n" + "exact solution:\t" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " m = minf-(-m+minf)*exp(-dt/mtau)\n" ] }, { @@ -255,10 +262,10 @@ "execution_count": 6, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:58.872589Z", - "iopub.status.busy": "2024-05-21T21:13:58.872344Z", - "iopub.status.idle": "2024-05-21T21:13:59.062127Z", - "shell.execute_reply": "2024-05-21T21:13:59.061441Z" + "iopub.execute_input": "2024-05-22T07:51:04.469423Z", + "iopub.status.busy": "2024-05-22T07:51:04.468973Z", + "iopub.status.idle": "2024-05-22T07:51:04.658425Z", + "shell.execute_reply": "2024-05-22T07:51:04.657708Z" } }, "outputs": [ @@ -266,7 +273,13 @@ "name": "stdout", "output_type": "stream", "text": [ - "exact solution:\t m = minf+(m-minf)*exp(dt/mtau)\n", + "exact solution:\t m = minf+(m-minf)*exp(dt/mtau)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "pade approx:\t m = (-dt*m+2.0*dt*minf-2.0*m*mtau)/(dt-2.0*mtau)\n" ] } @@ -297,10 +310,10 @@ "execution_count": 7, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:13:59.064836Z", - "iopub.status.busy": "2024-05-21T21:13:59.064376Z", - "iopub.status.idle": "2024-05-21T21:14:00.452222Z", - "shell.execute_reply": "2024-05-21T21:14:00.451520Z" + "iopub.execute_input": "2024-05-22T07:51:04.661370Z", + "iopub.status.busy": "2024-05-22T07:51:04.660943Z", + "iopub.status.idle": "2024-05-22T07:51:06.047306Z", + "shell.execute_reply": "2024-05-22T07:51:06.046692Z" } }, "outputs": [ @@ -345,10 +358,10 @@ "execution_count": 8, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:14:00.454829Z", - "iopub.status.busy": "2024-05-21T21:14:00.454433Z", - "iopub.status.idle": "2024-05-21T21:14:02.255109Z", - "shell.execute_reply": "2024-05-21T21:14:02.254377Z" + "iopub.execute_input": "2024-05-22T07:51:06.049973Z", + "iopub.status.busy": "2024-05-22T07:51:06.049557Z", + "iopub.status.idle": "2024-05-22T07:51:07.832398Z", + "shell.execute_reply": "2024-05-22T07:51:07.831659Z" } }, "outputs": [ diff --git a/notebooks/nmodl-sympy-solver-derivimplicit.ipynb b/notebooks/nmodl-sympy-solver-derivimplicit.ipynb index de660565d2..ceda497eef 100644 --- a/notebooks/nmodl-sympy-solver-derivimplicit.ipynb +++ b/notebooks/nmodl-sympy-solver-derivimplicit.ipynb @@ -39,10 +39,10 @@ "execution_count": 1, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:14:03.901559Z", - "iopub.status.busy": "2024-05-21T21:14:03.901362Z", - "iopub.status.idle": "2024-05-21T21:14:05.216294Z", - "shell.execute_reply": "2024-05-21T21:14:05.215535Z" + "iopub.execute_input": "2024-05-22T07:51:09.398526Z", + "iopub.status.busy": "2024-05-22T07:51:09.398326Z", + "iopub.status.idle": "2024-05-22T07:51:10.733117Z", + "shell.execute_reply": "2024-05-22T07:51:10.732364Z" } }, "outputs": [], @@ -56,10 +56,10 @@ "execution_count": 2, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:14:05.219326Z", - "iopub.status.busy": "2024-05-21T21:14:05.219069Z", - "iopub.status.idle": "2024-05-21T21:14:05.246901Z", - "shell.execute_reply": "2024-05-21T21:14:05.246266Z" + "iopub.execute_input": "2024-05-22T07:51:10.736274Z", + "iopub.status.busy": "2024-05-22T07:51:10.735844Z", + "iopub.status.idle": "2024-05-22T07:51:10.764120Z", + "shell.execute_reply": "2024-05-22T07:51:10.763477Z" } }, "outputs": [], @@ -100,10 +100,10 @@ "execution_count": 3, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:14:05.250032Z", - "iopub.status.busy": "2024-05-21T21:14:05.249553Z", - "iopub.status.idle": "2024-05-21T21:14:05.712690Z", - "shell.execute_reply": "2024-05-21T21:14:05.712004Z" + "iopub.execute_input": "2024-05-22T07:51:10.767000Z", + "iopub.status.busy": "2024-05-22T07:51:10.766771Z", + "iopub.status.idle": "2024-05-22T07:51:11.233306Z", + "shell.execute_reply": "2024-05-22T07:51:11.232563Z" } }, "outputs": [ @@ -165,10 +165,10 @@ "execution_count": 4, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:14:05.715287Z", - "iopub.status.busy": "2024-05-21T21:14:05.715034Z", - "iopub.status.idle": "2024-05-21T21:14:05.924246Z", - "shell.execute_reply": "2024-05-21T21:14:05.923582Z" + "iopub.execute_input": "2024-05-22T07:51:11.235831Z", + "iopub.status.busy": "2024-05-22T07:51:11.235569Z", + "iopub.status.idle": "2024-05-22T07:51:11.447741Z", + "shell.execute_reply": "2024-05-22T07:51:11.447008Z" } }, "outputs": [ diff --git a/notebooks/nmodl-sympy-solver-sparse.ipynb b/notebooks/nmodl-sympy-solver-sparse.ipynb index e23506ee2a..3dec84bbbc 100644 --- a/notebooks/nmodl-sympy-solver-sparse.ipynb +++ b/notebooks/nmodl-sympy-solver-sparse.ipynb @@ -39,10 +39,10 @@ "execution_count": 1, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:14:07.178173Z", - "iopub.status.busy": "2024-05-21T21:14:07.177713Z", - "iopub.status.idle": "2024-05-21T21:14:08.484640Z", - "shell.execute_reply": "2024-05-21T21:14:08.483861Z" + "iopub.execute_input": "2024-05-22T07:51:12.891134Z", + "iopub.status.busy": "2024-05-22T07:51:12.890591Z", + "iopub.status.idle": "2024-05-22T07:51:14.214689Z", + "shell.execute_reply": "2024-05-22T07:51:14.213944Z" } }, "outputs": [], @@ -56,10 +56,10 @@ "execution_count": 2, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:14:08.488009Z", - "iopub.status.busy": "2024-05-21T21:14:08.487560Z", - "iopub.status.idle": "2024-05-21T21:14:08.514113Z", - "shell.execute_reply": "2024-05-21T21:14:08.513543Z" + "iopub.execute_input": "2024-05-22T07:51:14.217973Z", + "iopub.status.busy": "2024-05-22T07:51:14.217528Z", + "iopub.status.idle": "2024-05-22T07:51:14.243870Z", + "shell.execute_reply": "2024-05-22T07:51:14.243286Z" } }, "outputs": [], @@ -100,10 +100,10 @@ "execution_count": 3, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:14:08.516782Z", - "iopub.status.busy": "2024-05-21T21:14:08.516468Z", - "iopub.status.idle": "2024-05-21T21:14:08.980321Z", - "shell.execute_reply": "2024-05-21T21:14:08.979573Z" + "iopub.execute_input": "2024-05-22T07:51:14.246960Z", + "iopub.status.busy": "2024-05-22T07:51:14.246408Z", + "iopub.status.idle": "2024-05-22T07:51:14.710041Z", + "shell.execute_reply": "2024-05-22T07:51:14.709339Z" } }, "outputs": [ @@ -165,10 +165,10 @@ "execution_count": 4, "metadata": { "execution": { - "iopub.execute_input": "2024-05-21T21:14:08.983046Z", - "iopub.status.busy": "2024-05-21T21:14:08.982759Z", - "iopub.status.idle": "2024-05-21T21:14:09.200346Z", - "shell.execute_reply": "2024-05-21T21:14:09.199627Z" + "iopub.execute_input": "2024-05-22T07:51:14.713086Z", + "iopub.status.busy": "2024-05-22T07:51:14.712493Z", + "iopub.status.idle": "2024-05-22T07:51:14.923334Z", + "shell.execute_reply": "2024-05-22T07:51:14.922620Z" } }, "outputs": [ diff --git a/objects.inv b/objects.inv index b426e02800ca1ff52a5ada5d577d318ba304544b..5c142c8a51a5f4afcb250d456c4ce3deea23e88f 100644 GIT binary patch delta 2038 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 blSB<^6YnSL99+hgmpuQP#>f8yXuOhTu4n_2 diff --git a/searchindex.js b/searchindex.js index 56b76c2151..55ee058d76 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["contents/cable_equations", "contents/currents", "contents/ions", "contents/pointers", "contents/visitors", "contributing", "doxygen", "index", "install", "language", "modules", "nmodl", "notebooks", "notebooks/README", "notebooks/nmodl-kinetic-schemes", "notebooks/nmodl-linear-solver", "notebooks/nmodl-nonlinear-solver", "notebooks/nmodl-odes-overview", "notebooks/nmodl-python-tutorial", "notebooks/nmodl-sympy-conductance", "notebooks/nmodl-sympy-solver-cnexp", "notebooks/nmodl-sympy-solver-derivimplicit", "notebooks/nmodl-sympy-solver-sparse", "readme"], "filenames": ["contents/cable_equations.rst", "contents/currents.rst", "contents/ions.rst", "contents/pointers.rst", "contents/visitors.rst", "contributing.rst", "doxygen.rst", "index.rst", "install.rst", "language.rst", "modules.rst", "nmodl.rst", "notebooks.rst", "notebooks/README.rst", "notebooks/nmodl-kinetic-schemes.ipynb", "notebooks/nmodl-linear-solver.ipynb", "notebooks/nmodl-nonlinear-solver.ipynb", "notebooks/nmodl-odes-overview.ipynb", "notebooks/nmodl-python-tutorial.ipynb", "notebooks/nmodl-sympy-conductance.ipynb", "notebooks/nmodl-sympy-solver-cnexp.ipynb", "notebooks/nmodl-sympy-solver-derivimplicit.ipynb", "notebooks/nmodl-sympy-solver-sparse.ipynb", "readme.rst"], "titles": ["Cable Equation", "Currents", "Ions", "NMODL \u201cpointers\u201d", "Visitors", "Contributing to the NMODL Framework", "C++ API", "About NMODL", "Installing the NMODL Framework", "The NEURON MODeling language", "Python package", "Module contents", "The NMODL Jupyter notebooks", "NMODL jupyter notebooks", "NMODL Kinetic Scheme", "NMODL LINEAR solver", "NMODL NONLINEAR solver", "NMODL integration of ODEs", "NMODL Python Interface Tutorial", "NMODL CONDUCTANCE", "NMODL SympySolver - cnexp", "NMODL SympySolver - derivimplicit", "NMODL SympySolver - sparse", "Introduction"], "terms": {"neuron": [0, 1, 2, 3, 4, 7, 8, 11, 14, 16, 18, 19, 20, 23], "ha": [0, 1, 5, 14], "sophist": 0, "system": [0, 8, 11, 14, 15, 17, 20, 21, 22], "allow": [0, 2, 4, 5, 14, 18, 19, 23], "user": [0, 8, 14, 16, 17, 19, 23], "describ": [0, 8, 14, 17, 19, 20, 21, 22, 23], "geometri": 0, "here": [0, 1, 4, 5, 12, 18, 19, 20, 23], "we": [0, 1, 2, 4, 5, 8, 9, 12, 14, 17, 18, 20, 23], "ll": [0, 1, 2], "try": [0, 8], "deriv": [0, 2, 4, 7, 9, 11, 14, 16, 18, 20, 21, 22, 23], "manner": [0, 3], "hide": 0, "those": [0, 18], "detail": [0, 1, 13, 17, 18, 23], "whenev": [0, 18], "thei": [0, 3, 5, 11, 14, 16, 17], "re": [0, 5], "relev": [0, 5], "nmodl": [0, 2, 4, 9, 10], "pleas": [0, 1, 5, 8, 14, 19, 20, 21, 22], "consult": [0, 8], "its": [0, 2, 11], "relat": [0, 1, 9, 17], "document": [0, 1, 7, 11], "one": [0, 1, 2, 5, 8, 11, 14, 18, 23], "public": 0, "e": [0, 1, 2, 3, 5, 8, 11, 14, 18, 19, 23], "g": [0, 1, 2, 3, 5, 8, 11, 14, 18, 19, 20, 23], "The": [0, 1, 2, 4, 5, 7, 8, 11, 14, 16, 17, 18, 19, 20, 21, 22], "simul": [0, 3, 17, 19, 23], "environ": [0, 5, 8, 23], "In": [0, 1, 2, 3, 4, 5, 8, 9, 11, 14, 18, 23], "order": [0, 4, 5, 8, 11, 14, 18, 19, 20], "model": [0, 2, 7, 12, 23], "an": [0, 1, 2, 4, 5, 8, 11, 13, 14, 16, 17, 18, 19, 20, 23], "electr": [0, 1], "circuit": [0, 1], "first": [0, 4, 5, 18, 19, 20], "pick": [0, 8], "point": [0, 1, 2, 3, 4, 5, 8, 18, 23], "along": [0, 8], "which": [0, 1, 5, 8, 11, 12, 14, 16, 19, 20, 21, 22, 23], "voltag": [0, 2, 3], "call": [0, 1, 3, 8, 11, 16, 18], "them": [0, 8, 15], "node": [0, 1, 3, 4, 7, 11, 18, 23], "connect": 0, "form": [0, 11, 14, 16, 20, 23], "graph": [0, 23], "At": 0, "everi": [0, 4, 5, 18, 23], "branch": [0, 1, 5, 23], "place": [0, 8], "see": [0, 1, 2, 4, 14, 15, 17, 18, 19, 20, 21, 22, 23], "figur": [0, 1, 2, 23], "1": [0, 1, 2, 4, 7, 8, 11, 16, 17, 18, 23], "illustr": [0, 1], "placement": 0, "neurit": 0, "two": [0, 8, 19], "adjac": [0, 2], "ar": [0, 1, 2, 3, 4, 5, 8, 11, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], "resistor": 0, "interest": [0, 8], "behaviour": [0, 18], "come": 0, "from": [0, 4, 5, 8, 9, 11, 12, 15, 16, 18, 19, 20, 23], "differ": [0, 1, 3, 4, 16, 17, 18, 19], "ion": [0, 1, 7, 18, 19, 23], "concentr": [0, 2, 14], "across": 0, "membran": [0, 1, 2, 23], "thi": [0, 1, 2, 3, 4, 5, 8, 11, 14, 16, 17, 18, 19, 20, 21, 22, 23], "i": [0, 1, 2, 3, 4, 5, 8, 9, 11, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], "upheld": 0, "three": 0, "process": [0, 1, 2, 9, 23], "larg": [0, 11, 16], "imperm": 0, "effect": [0, 1], "creat": [0, 2, 4, 5, 11, 12, 18, 23], "barrier": 0, "b": [0, 5, 11, 14, 21, 22], "gate": 0, "channel": [0, 1, 4, 18, 23], "condition": 0, "quickli": [0, 23], "cross": [0, 1], "c": [0, 5, 7, 8, 9, 11, 14, 20, 23], "pump": 0, "continu": [0, 1, 12], "restor": 0, "rest": 0, "state": [0, 2, 4, 9, 14, 16, 18, 19, 20, 21, 22, 23], "fact": 0, "mostli": 0, "mean": [0, 1, 2, 3, 14], "behav": [0, 5], "like": [0, 4, 5, 23], "dielectr": 0, "materi": 0, "can": [0, 1, 2, 3, 4, 5, 8, 11, 12, 14, 15, 16, 17, 18, 20, 23], "therefor": [0, 2, 3], "capacitor": [0, 1], "simpli": [0, 4, 8, 16, 18], "current": [0, 3, 5, 7, 11, 14, 16, 19, 20, 23], "give": [0, 2, 19, 20], "rise": 0, "shown": [0, 4, 18], "2": [0, 1, 2, 4, 7, 8, 11, 18, 23], "total": [0, 1, 2], "tran": [0, 1], "i_m": 0, "due": [0, 1, 2, 8, 17], "properti": [0, 2, 4, 18], "i_c": 0, "all": [0, 2, 4, 5, 8, 9, 11, 18, 19, 20, 23], "mechan": [0, 1, 2, 3, 9, 23], "specif": [0, 1, 2, 5, 8, 13, 14, 18, 23], "repres": [0, 1, 2, 9, 18, 23], "start": [0, 4, 5, 7, 11, 12, 13, 18], "write": [0, 4, 5, 9, 12, 18, 19, 23], "down": [0, 23], "let": [0, 4, 18], "": [0, 1, 2, 5, 8, 16, 18, 23], "recal": 0, "formula": 0, "ohm": 0, "law": [0, 7, 17], "frac": [0, 14, 16, 17, 20], "dv": [0, 1, 19], "dt": [0, 11, 14, 16, 17, 20, 21, 22], "qquad": 0, "delta": [0, 14, 17, 19], "v": [0, 2, 5, 19, 21, 22, 23], "r": [0, 2, 8, 11, 14, 19], "us": [0, 2, 4, 5, 7, 8, 11, 12, 14, 15, 16, 17, 19, 20, 21, 22], "kirchoff": 0, "v_1": 0, "i_": 0, "0": [0, 4, 8, 11, 14, 16, 17, 18, 19, 20, 21, 22, 23], "lead": 0, "rewritten": [0, 16], "term": [0, 11, 14], "follow": [0, 1, 2, 5, 8, 9, 14, 19, 20, 21, 22, 23], "dv_1": 0, "r_": 0, "v_": 0, "discret": [0, 9], "implicit": [0, 11, 21, 22], "euler": [0, 9, 11, 14, 17, 21, 22], "n": [0, 5, 11, 15, 16, 17, 18, 19, 23], "t": [0, 2, 5, 11, 16, 17, 18, 19, 20], "left": [0, 11, 14, 17], "right": [0, 11, 14], "collect": 0, "unpleas": 0, "sinc": [0, 1, 2, 3, 20], "make": [0, 3, 5, 8, 14, 19], "non": [0, 1, 11, 16, 17, 19], "linear": [0, 7, 9, 11, 13, 16, 19, 20, 21, 22], "approx": [0, 11, 20], "i_1": 0, "di_1": 0, "g_i": [0, 19], "where": [0, 5, 8, 11, 14, 16, 18, 19, 20], "depend": [0, 5, 8, 11, 19, 20], "differenti": [0, 8, 11, 14, 16, 18, 19, 20], "conduct": [0, 7, 9, 13, 23], "refer": [1, 2, 3, 5, 8, 14], "part": [1, 20, 21, 22], "rate": [1, 4, 14, 17, 18], "charg": 1, "pass": [1, 5, 8, 14, 19, 20, 21, 22, 23], "through": [1, 5], "show": [1, 2, 18, 19, 23], "coupl": [1, 17, 21, 22], "segment": [1, 2], "when": [1, 5, 8, 18, 20, 21, 22], "present": [1, 8], "handl": [1, 20], "intern": 1, "mod": [1, 2, 4, 5, 8, 14, 16, 17, 18, 19, 23], "file": [1, 2, 4, 5, 8, 9, 11, 14, 16, 17, 18, 19, 20, 21, 22, 23], "comput": [1, 2, 23], "white": 1, "box": 1, "label": 1, "sum": 1, "per": [1, 2], "turn": 1, "wire": 1, "diagram": 1, "four": 1, "For": [1, 2, 4, 5, 8, 13, 14, 15, 18, 19, 20, 21, 22, 23], "zero": [1, 7, 14], "aread": 1, "consist": [1, 14], "area": [1, 7], "still": [1, 5, 9, 19], "introduc": [1, 19], "A": [1, 2, 3, 14, 16, 17], "view": [1, 10, 11, 23], "color": 1, "each": [1, 2, 3, 11, 17, 19, 20, 23], "nonspecif": 1, "i1": 1, "ina": [1, 2, 3, 18, 19], "ica": [1, 2, 4, 18], "onli": [1, 2, 4, 5, 16, 17, 18, 20, 23], "light": 1, "yellow": 1, "There": [1, 2, 14, 18, 20], "requir": [1, 5, 8, 19, 23], "cabl": [1, 7], "equat": [1, 7, 8, 11, 14, 15, 16, 17, 18, 20, 21, 22], "discuss": [1, 5, 23], "individu": 1, "separ": [1, 2], "check": [1, 5, 18, 19, 23], "how": [1, 4, 16, 17, 18, 19, 23], "addit": [1, 19, 23], "contribut": [1, 2, 23], "express": [1, 2, 3, 11, 14, 18, 19], "accoci": 1, "ani": [1, 4, 5, 9, 11, 17, 18, 20, 23], "It": [1, 2, 5, 11, 18, 19, 23], "syntax": [1, 11, 23], "name": [1, 2, 4, 8, 11, 18, 23], "assum": [1, 4, 14, 18, 20], "need": [1, 2, 5, 8, 19], "assign": [1, 2, 4, 9, 11, 18, 19, 23], "valu": [1, 2, 3, 8, 11, 16, 18, 20], "also": [1, 2, 5, 8, 14, 15, 16, 17, 18, 19, 23], "list": [1, 2, 3, 8, 11, 18, 20, 22, 23], "block": [1, 4, 5, 7, 9, 15, 16, 18, 19, 20, 21, 22, 23], "unit": [1, 4, 5, 8, 9, 14, 15, 16, 18, 19, 20, 21, 22, 23], "densiti": [1, 2], "ma": [1, 2, 4, 18], "cm2": [1, 2, 4, 18], "local": [1, 2, 4, 5, 8, 9, 11, 14, 18, 19, 20, 21, 22, 23], "store": [1, 3, 8, 23], "regular": 1, "rang": [1, 3, 4, 9, 18, 19, 23], "variabl": [1, 2, 4, 5, 7, 8, 11, 16, 18, 19, 20, 21, 22, 23], "gener": [1, 2, 5, 7, 9, 14, 19, 20, 21, 22], "code": [1, 2, 4, 5, 7, 8, 9, 11, 20], "must": [1, 2, 5, 8, 11, 14], "ensur": [1, 5], "updat": [1, 2, 5], "remain": 1, "finit": [1, 16], "di": [1, 19], "support": [2, 3, 8, 9, 18], "sodium": [2, 3, 18], "anoth": [2, 8], "calcium": [2, 4, 18], "five": 2, "associ": [2, 3, 17, 18], "insid": [2, 5, 14], "nai": 2, "outsid": 2, "nao": 2, "revers": [2, 11, 19], "potenti": 2, "ena": [2, 18, 19], "w": [2, 11, 19], "dinadv": 2, "should": [2, 4, 8, 11, 14, 16, 18, 23], "split": 2, "na": [2, 18, 19, 23], "would": [2, 4, 5, 8, 14, 23], "have": [2, 3, 4, 5, 8, 12, 14, 18, 20, 21, 22], "been": [2, 5], "These": [2, 3, 8, 15, 16, 23], "physic": 2, "exist": [2, 5, 18, 19, 23], "includ": [2, 5, 9, 11, 14, 18, 23], "read": [2, 4, 9, 18, 19], "seek": 2, "useion": [2, 4, 9, 18, 19], "mv": [2, 4, 18, 23], "multipl": [2, 5, 18], "line": [2, 5, 23], "ion_nam": [2, 19], "string": [2, 4, 5, 8, 11, 14, 19, 20, 21, 22, 23], "ca": [2, 4, 18], "If": [2, 4, 5, 8, 11, 14, 15, 18, 19, 20, 23], "other": [2, 3, 7, 9, 11, 17, 20], "defin": [2, 8, 9, 11, 17, 19, 20, 21, 22], "new": [2, 4, 5, 11, 14, 18, 19, 20, 21, 22, 23], "both": [2, 11, 19], "option": [2, 5, 8, 11, 15, 20, 23], "comma": 2, "set": [2, 5, 8, 11, 14, 15, 16, 17], "breakpoint": [2, 4, 9, 18, 19, 20, 21, 22, 23], "gna": [2, 18, 19], "semant": [2, 3], "hodgkin": 2, "huxlei": 2, "overal": [2, 20], "everyth": 2, "level": [2, 14, 17, 18, 20, 21, 22], "keep": 2, "repeat": 2, "similarli": 2, "actual": 2, "global": [2, 9, 18, 20, 23], "increment": 2, "usual": [2, 5, 8, 11], "howev": [2, 9], "isn": 2, "henc": 2, "omit": 2, "specifi": [2, 8, 14, 16, 17, 19, 23], "contain": [2, 5, 11, 14, 15, 16, 17, 19], "copi": [2, 8, 23], "pointer": [2, 7, 9], "share": [2, 8, 23], "prefix": [2, 11], "ion_": 2, "dure": [2, 19], "initi": [2, 4, 9, 16, 18, 23], "might": [2, 5], "ion_ena": 2, "memori": [2, 5, 8, 11, 23], "layout": [2, 23], "common": [2, 11, 15, 23], "pattern": [2, 18], "access": [2, 4, 18, 23], "particular": [2, 5, 14], "instanc": [2, 5, 8, 11], "facilit": 2, "simd": 2, "could": [2, 8, 18], "replac": [2, 8, 14, 20], "implement": [2, 4, 5, 7, 11, 13, 14, 16, 17, 18, 23], "activ": [2, 5], "cli": [2, 23], "via": [2, 18], "codegen": [2, 5, 9, 23], "opt": [2, 8, 23], "ionvar": [2, 23], "surfac": 2, "assert": 2, "convert": [2, 5, 11, 14, 17, 18, 21, 22, 23], "divid": 2, "notion": 3, "datum": 3, "doubl": [3, 5, 18, 23], "stabl": [3, 11, 17], "anyth": 3, "els": [3, 9, 18], "One": [3, 4, 5, 18, 23], "import": [3, 4, 5, 8, 14, 18, 19, 20, 21, 22, 23], "subset": [3, 5], "paramet": [3, 4, 9, 11, 18, 23], "storag": [3, 7], "control": [3, 9, 18, 23], "coreneuron": [3, 5, 9], "stronger": 3, "than": [3, 5], "up": [3, 5, 8, 16, 19, 23], "major": [3, 5], "usecas": [3, 5], "consid": [3, 5, 14, 18], "well": [3, 18, 20, 23], "treat": 3, "becaus": [3, 8], "singl": [3, 20], "contigu": 3, "arrai": 3, "indic": [3, 18], "data_handl": 3, "befor": [3, 5, 8, 9, 11, 14], "phase": 3, "resolv": 3, "cach": 3, "appropri": [3, 5], "strength": [4, 18], "python": [4, 5, 7, 8, 12, 13, 14, 16, 19, 20, 21, 22], "interfac": [4, 7, 13, 14, 19, 20, 21, 22, 23], "inbuilt": [4, 18], "perform": [4, 15, 18, 19, 23], "analysi": [4, 8, 18], "u": [4, 5, 14, 20, 23], "exampl": [4, 5, 7, 8, 11, 16], "onc": [4, 8, 18, 23], "setup": [4, 5, 8, 18], "properli": [4, 18], "abl": [4, 9, 18], "modul": [4, 7, 10, 18], "dsl": [4, 8, 9, 10, 14, 18, 19, 20, 21, 22, 23], "suffix": [4, 8, 9, 18, 23], "cadynam": [4, 18], "cai": [4, 18, 21, 22], "decai": [4, 18], "gamma": [4, 18], "mincai": [4, 18], "depth": [4, 18], "millivolt": [4, 18, 23], "milliamp": [4, 18], "faradai": [4, 18], "coulomb": [4, 18], "molar": [4, 14, 18], "liter": [4, 18], "mm": [4, 18], "millimolar": [4, 18], "um": [4, 18], "micron": [4, 18], "05": [4, 18], "percent": [4, 18], "free": [4, 18, 23], "buffer": [4, 18], "80": [4, 18], "m": [4, 5, 14, 18, 19, 20, 21, 22, 23], "remov": [4, 18], "shell": [4, 5, 18], "1e": [4, 18, 23], "4": [4, 7, 8, 18, 21, 22], "solv": [4, 8, 9, 11, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], "method": [4, 9, 16, 17, 18, 20, 21, 22, 23], "cnexp": [4, 7, 9, 13, 17, 18, 23], "10000": [4, 18], "function": [4, 8, 9, 11, 14, 16, 17, 18, 19, 20, 21, 22, 23], "foo": [4, 18], "temp": [4, 18], "now": [4, 8, 18], "valid": [4, 5, 8, 18, 20], "parser": [4, 8, 11, 18], "nmodldriv": [4, 8, 10, 11, 14, 18, 19, 20, 21, 22, 23], "parse_str": [4, 8, 10, 11, 14, 18, 19, 20, 21, 22, 23], "driver": [4, 8, 11, 14, 18, 19, 20, 21, 22, 23], "modast": [4, 8, 18, 23], "throw": [4, 11, 18], "except": [4, 9, 11, 18], "error": [4, 5, 17, 19, 23], "input": [4, 11, 18, 19, 23], "invalid": [4, 8, 18], "otherwis": [4, 11, 18], "return": [4, 8, 11, 14, 18, 19, 20, 21, 22, 23], "print": [4, 5, 8, 14, 18, 19, 20, 21, 22, 23], "103": 4, "charact": [4, 18], "tree": [4, 11, 18, 23], "represent": [4, 11, 18, 23], "repr": 4, "100": 4, "program": [4, 8, 11, 18, 23], "neuronblock": [4, 8, 11, 23], "statementblock": [4, 8, 11, 18, 23], "As": [4, 5, 18], "suggest": [4, 5, 18, 20], "search": [4, 5, 7, 18], "provid": [4, 8, 11, 18, 23], "astlookupvisitor": [4, 14, 18, 19, 20, 21, 22], "lookup_visitor": [4, 18], "find": [4, 5, 8, 12, 14, 16, 18, 19, 20, 23], "out": [4, 5, 18], "do": [4, 5, 8, 11, 14, 15, 18, 19, 20, 21, 22], "astnodetyp": [4, 11, 14, 18, 19, 20, 21, 22], "state_block": [4, 18], "to_nmodl": [4, 8, 10, 11, 14, 18, 19, 20, 21, 22, 23], "usag": [4, 18, 23], "To": [4, 8, 12, 13, 17, 18, 23], "just": [4, 14], "symtab": [4, 10, 14, 18, 19, 20, 21, 22, 23], "symv": [4, 18], "symtabvisitor": [4, 14, 18, 19, 20, 21, 22], "run": [4, 5, 8, 12, 14, 15, 17, 18, 19, 20, 21, 22, 23], "popul": [4, 18], "whole": [4, 18, 23], "visit_program": [4, 14, 18, 19, 20, 21, 22], "get_symbol_t": [4, 18], "table_": [4, 18], "str": [4, 11, 18], "base": [4, 5, 11, 18, 23], "prime_nam": [4, 18], "assigned_definit": [4, 18], "write_ion": [4, 18], "state_var": [4, 18], "predefin": [4, 18], "limit": [4, 18], "astvisitor": [4, 18], "sai": [4, 18], "want": [4, 5, 8, 17, 18], "float": [4, 18, 23], "number": [4, 5, 8, 18, 19, 23], "done": 4, "class": [4, 11, 18], "doublevisitor": [4, 18], "def": [4, 14, 18, 19, 20, 21, 22], "visit_doubl": [4, 18], "self": [4, 11, 18], "eval": [4, 18], "d_visitor": [4, 18], "accept": [4, 5, 8, 18], "love": 5, "you": [5, 8, 12, 18, 23], "help": [5, 12, 14, 19, 20, 21, 22, 23], "better": [5, 16], "todai": [5, 18], "contributor": 5, "problem": [5, 19], "__": [5, 8, 23], "issu": [5, 18, 23], "request": [5, 11], "submit": 5, "devconv": 5, "hesit": 5, "rais": [5, 11, 23], "github": [5, 8, 23], "project": [5, 7, 23], "page": [5, 7], "http": [5, 8, 20, 23], "com": [5, 8, 23], "bluebrain": [5, 8, 23], "sourc": [5, 7, 11, 23], "our": [5, 8], "repositori": [5, 8, 23], "even": [5, 18, 23], "pull": [5, 23], "pr": 5, "fix": 5, "propos": 5, "your": [5, 8, 12, 23], "work": [5, 8, 23], "sure": [5, 8], "what": [5, 14, 19, 20, 21, 22], "kind": [5, 18], "chang": 5, "open": [5, 19, 23], "outlin": 5, "so": [5, 14, 15, 19, 20], "coordin": 5, "effort": [5, 19], "prevent": 5, "duplic": [5, 17], "craft": 5, "successfulli": 5, "small": [5, 11, 15, 17], "directli": [5, 15, 16, 23], "tracker": 5, "mayb": 5, "alreadi": 5, "inform": [5, 7, 9, 17], "workaround": 5, "readili": 5, "avail": [5, 8, 9, 11, 16, 18], "soon": [5, 23], "possibl": [5, 11, 19], "reproduc": 5, "confirm": [5, 23], "much": 5, "prefer": 5, "sampl": [5, 19], "wish": [5, 8], "fork": 5, "guid": 5, "git": [5, 8], "checkout": 5, "my": 5, "master": [5, 23], "patch": 5, "test": [5, 7, 11, 12, 14, 15, 16, 18, 23], "case": [5, 7, 8, 14, 18, 19], "enabl": [5, 8, 20], "nmodl_test_format": 5, "cmake": [5, 8], "format": [5, 7, 11], "util": 5, "hpc": 5, "bin": [5, 8, 23], "lang": 5, "directori": [5, 8, 23], "src": [5, 15, 16, 19], "main": 5, "cpp": [5, 14, 16, 19, 20, 21, 22], "dry": 5, "full": [5, 23], "suit": 5, "commit": 5, "descript": 5, "messag": [5, 23], "push": 5, "origin": 5, "send": 5, "upstream": 5, "compon": 5, "rebas": 5, "forc": [5, 23], "f": [5, 11, 14, 16, 17, 18, 20], "That": 5, "thank": 5, "after": [5, 9, 17, 19, 23], "merg": 5, "safe": [5, 15], "delet": 5, "remot": 5, "either": [5, 8], "web": [5, 11, 23], "ui": 5, "d": [5, 18], "latest": [5, 8, 23], "version": [5, 8, 18, 23], "ff": 5, "add_newlin": 5, "add_multi_lin": 5, "know": [5, 8, 16, 23], "formatt": 5, "bash": [5, 8], "instal": [5, 7, 14, 18, 19, 20, 21, 22], "virtual": 5, "golden": 5, "build": [5, 7, 23], "dir": [5, 8], "target": [5, 8, 23], "generate_refer": 5, "regener": 5, "save": 5, "submodul": [5, 7, 8, 10], "sha": 5, "repo": [5, 8], "ssh": 5, "authent": 5, "url": [5, 23], "rememb": 5, "rule": 5, "detach": 5, "head": 5, "modifi": [5, 19, 20], "best": [5, 8, 23], "happen": 5, "locat": [5, 14, 18, 19, 20, 21, 22], "packag": [5, 7, 8], "mai": [5, 11, 14, 15, 19, 20, 21, 22], "impact": 5, "api": [5, 7, 18], "sandbox": 5, "virtualenv": 5, "pyenv": 5, "pipenv": 5, "venv": 5, "wheel": [5, 8, 18], "command": [5, 8, 23], "pip": [5, 8, 14, 18, 19, 20, 21, 22], "dep": [5, 8], "execut": [5, 8], "test_wheel": [5, 8], "path": [5, 8, 11, 23], "previou": 5, "step": [5, 9, 19, 20], "leak": 5, "clang": 5, "tidi": 5, "valgrind": 5, "track": 5, "ye": [5, 9], "nmodl_lex": 5, "Or": [5, 23], "ctest": 5, "memcheck": 5, "3": [5, 7, 8, 11, 17, 18, 21, 22, 23], "15": [5, 8, 18, 21, 22], "denable_clang_tidi": 5, "ON": [5, 8], "blame": 5, "while": [5, 9], "produc": 5, "face": 5, "compil": [5, 8, 15, 16, 17, 23], "hodhux": 5, "105": 5, "26": 5, "declar": [5, 19], "celsiu": 5, "backtrac": 5, "time": [5, 11, 15, 16, 17, 19, 20], "respons": 5, "ast": [5, 7, 9, 10, 12, 14, 19, 20, 21, 22, 23], "doesn": [5, 16], "immedi": 5, "explain": 5, "why": 5, "end": [5, 11, 14, 18, 19, 23], "wai": [5, 8, 14, 17], "don": 5, "tool": [5, 8, 23], "latter": 5, "link": [6, 8], "doxygen": [6, 23], "framework": [7, 9, 11, 18], "fund": 7, "acknowledg": 7, "get": [7, 11, 12, 13, 18, 20], "clone": 7, "prerequisit": 7, "languag": [7, 18, 19, 23], "visitor": [7, 10, 12, 14, 16, 19, 20, 21, 22, 23], "pars": [7, 8, 9, 11, 12, 14, 19, 20, 21, 22, 23], "construct": [7, 8, 9, 14, 15, 16, 17, 20, 21, 22], "queri": 7, "object": [7, 8, 11], "keyword": [7, 8, 19, 23], "ndmol": 7, "special": [7, 14], "integ": [7, 14], "tutori": [7, 13, 14, 19, 20, 21, 22, 23], "And": [7, 8, 23], "lookup": [7, 14, 19, 20, 21, 22], "symbol": [7, 8, 11, 14, 15, 19, 20, 21, 22, 23], "custom": [7, 16, 23], "easi": [7, 23], "curi": 7, "integr": [7, 11, 20, 23], "od": [7, 8, 10, 12, 13, 14, 15, 18, 19, 20, 21, 22, 23], "kinet": [7, 9, 13, 16], "nonlinear": [7, 9, 13, 20, 21], "scheme": [7, 13, 17, 20], "reaction": [7, 17], "mass": [7, 17], "action": [7, 17, 23], "type": [7, 8, 11, 18, 23], "statement": [7, 11, 17, 18, 19], "f_flux": 7, "b_flux": 7, "todo": [7, 18], "conserv": [7, 9], "ex": 7, "5": [7, 8, 18, 21, 22, 23], "sympysolv": [7, 16], "pade": [7, 11, 23], "approxim": [7, 11, 16, 19, 23], "6": [7, 8, 11, 14, 18, 21, 22, 23], "spars": [7, 9, 13, 17, 21], "derivimplicit": [7, 9, 13, 17], "solver": [7, 8, 11, 12, 13, 17, 20, 21, 22, 23], "newton": [7, 11, 17], "fall": 7, "back": [7, 18, 23], "7": [7, 8, 14, 18, 20, 21, 22], "got": 7, "question": 7, "found": [7, 11, 18, 19], "bug": [7, 8, 18], "miss": 7, "featur": [7, 9], "submiss": 7, "guidelin": [7, 23], "develop": [7, 8, 23], "convent": 7, "index": [7, 23], "instruct": [8, 23], "machin": 8, "purpos": 8, "maintain": 8, "note": [8, 18, 23], "itself": [8, 19], "sh": [8, 23], "recurs": 8, "cd": 8, "modern": [8, 18, 23], "14": [8, 18, 21, 22], "necessari": [8, 18, 19], "flex": 8, "bison": 8, "8": [8, 18, 19, 20, 21, 22, 23], "jinja2": 8, "10": [8, 18, 21, 22], "pyyaml": 8, "13": [8, 18, 21, 22], "pytest": 8, "sympi": [8, 13, 15, 16, 17, 19, 20, 23], "textwrap": 8, "On": 8, "o": [8, 17, 18, 19, 23], "x": [8, 11, 14, 16, 17, 18, 23], "typic": [8, 11], "outdat": 8, "compat": [8, 23], "recent": 8, "recommend": [8, 17], "homebrew": 8, "brew": 8, "python3": [8, 23], "pip3": 8, "txt": 8, "export": 8, "usr": 8, "appl": 8, "m1": 8, "correspond": [8, 14, 19], "under": [8, 23], "ubuntu": 8, "18": [8, 18, 21, 22, 23], "04": 8, "enough": 8, "toolchain": 8, "apt": 8, "gcc": 8, "mkdir": 8, "p": [8, 18], "dcmake_install_prefix": 8, "home": 8, "parallel": 8, "hint": 8, "By": 8, "default": [8, 11, 15, 19, 23], "nmodl_enable_python_bind": 8, "increas": 8, "lot": 8, "complex": 8, "disabl": 8, "bind": 8, "restrict": 8, "job": 8, "number_of_parallel_job": 8, "thread": 8, "pythonpath": 8, "lib": [8, 23], "dflex_execut": 8, "dbison_execut": 8, "mainli": [8, 9], "site": 8, "folder": [8, 23], "becom": 8, "option1": 8, "value1": 8, "option2": 8, "value2": 8, "variou": [8, 9, 18, 23], "scikit": 8, "core": 8, "readthedoc": 8, "io": [8, 23], "en": [8, 23], "configur": 8, "html": [8, 23], "_": 8, "notabl": [8, 9], "maco": 8, "abov": [8, 14, 18, 23], "without": [8, 14, 23], "against": 8, "libpython": 8, "embed": 8, "evalu": [8, 11, 20], "automat": [8, 19], "taken": 8, "care": 8, "pybind11": 8, "some": [8, 9, 11, 16, 18, 19, 20], "cannot": 8, "runtim": [8, 11, 16, 23], "instead": [8, 11, 14, 15, 19], "load": [8, 11, 23], "librari": [8, 16, 19, 23], "wrapper": 8, "manag": 8, "dynam": 8, "dlink_against_python": 8, "fals": [8, 11, 18, 20, 21, 22, 23], "binari": 8, "own": [8, 12, 23], "libpywrapp": 8, "nmodl_pylib": 8, "dylib": 8, "cellar": 8, "correctli": 8, "_test": 8, "kumbhar": [8, 23], "workarena": 8, "bbp": 8, "incub": 8, "nocmodl": [8, 20], "debug": [8, 23], "testmodtoken": 8, "lexer": 8, "modtoken": 8, "60": 8, "01": 8, "sec": [8, 20], "testlex": 8, "token": [8, 23], "00": 8, "testpars": 8, "scenario": 8, "macro": 8, "anywher": 8, "empti": 8, "legaci": [8, 20], "minim": 8, "interpet": 8, "hh": 8, "given": [8, 11, 14, 16, 17, 18, 20], "python_execut": 8, "addition": 8, "pandoc": 8, "sudo": 8, "entir": [8, 18], "generate_doc": 8, "script": 8, "doc": [8, 9, 23], "put": 8, "output": [8, 18, 19, 23], "temporari": 8, "programm": [9, 23], "thu": 9, "data": [9, 23], "structur": 9, "few": [9, 11, 18], "verbatim": [9, 16, 23], "lack": 9, "tabl": [9, 14, 19, 20, 21, 22, 23], "summar": 9, "backend": [9, 18, 23], "procedur": 9, "net_rec": [9, 23], "constant": [9, 11, 14, 19, 20, 21, 22, 23], "function_t": 9, "constructor": 9, "destructor": 9, "independ": [9, 17, 20], "flow": 9, "IF": 9, "for_netcon": 9, "titl": 9, "sweep": 9, "protect": 9, "watch": 9, "mutexlock": 9, "mutexunlock": 9, "compart": 9, "longitudinal_diffus": 9, "lag": 9, "valenc": 9, "nonspecific_curr": [9, 19, 23], "electrode_curr": 9, "point_process": [9, 23], "bbcorepoint": 9, "extern": 9, "threadsaf": 9, "comment": [9, 18], "rung": 9, "after_cvod": 9, "simeq": [9, 19], "cvode_t": 9, "cvode_v": 9, "content": [10, 20, 22], "get_ast": [10, 11], "parse_fil": [10, 11, 23], "parse_stream": [10, 11], "to_json": [10, 11, 23], "list_exampl": [10, 11, 23], "load_exampl": [10, 11, 23], "differentiate2c": [10, 11, 19], "forwards_euler2c": [10, 11], "integrate2c": [10, 11], "search_and_replace_protected_functions_from_sympi": [10, 11], "search_and_replace_protected_functions_to_sympi": [10, 11], "solve_lin_system": [10, 11, 15], "solve_non_lin_system": [10, 11, 16], "_nmodl": 11, "filenam": 11, "root": [11, 23], "success": 11, "istream": 11, "ifstream": 11, "nstep": 11, "compact": 11, "bool": 11, "expand": [11, 20], "add_nmodl": 11, "json": [11, 18, 23], "true": [11, 18, 20, 21, 22, 23], "exclude_typ": 11, "excludetyp": 11, "exclud": 11, "vizual": 11, "abstract": [11, 23], "nmodl_ast": 11, "visual": [11, 12, 23], "browser": [11, 23], "viewer": 11, "d3": 11, "j": [11, 14, 16, 17], "none": [11, 18], "dependent_var": 11, "var": [11, 18], "prev_express": 11, "analyt": [11, 16, 17, 19, 20, 23], "suppli": [11, 14, 19, 20, 21, 22], "solut": [11, 15, 16, 17, 19, 20], "df": 11, "dx": 11, "furthermor": 11, "themselv": 11, "substitut": [11, 14, 19], "result": [11, 17, 18, 19], "coincid": [11, 19], "lh": [11, 14, 18, 19], "simplifi": [11, 19, 20], "simpl": [11, 19], "co": 11, "y": [11, 14, 18], "dy": [11, 14], "sin": 11, "preceed": [11, 14, 19], "12": [11, 18, 21, 22], "diff_str": 11, "dt_var": 11, "function_cal": 11, "forward": [11, 14, 17, 19, 23], "referenc": [11, 14], "timestep": [11, 20], "use_pade_approx": [11, 20], "expect": 11, "power": 11, "correct": [11, 19, 20], "second": [11, 18, 20], "t_var": 11, "exact": [11, 16, 17, 20], "notimplementederror": 11, "too": [11, 16], "hard": 11, "fail": [11, 20], "eq": 11, "eq_str": 11, "tmp_unique_prefix": 11, "small_system": 11, "do_cs": 11, "gaussian": [11, 15, 17], "elimin": [11, 15, 17, 23], "subexpress": [11, 15, 23], "numer": [11, 15, 16, 17, 19, 20], "matrix": [11, 14, 15, 16], "vector": [11, 14, 16], "lu": [11, 15, 17], "factor": [11, 15, 17], "uniqu": 11, "easili": [11, 23], "append": [11, 18], "tmp": [11, 23], "jacobian": [11, 16, 17], "sever": [12, 19], "cover": 12, "mani": 12, "aspect": 12, "begin": [12, 14], "basic": 12, "final": [12, 14, 17], "understand": [12, 14, 19, 20, 21, 22, 23], "yourself": 12, "ipynb": [13, 23], "overview": [13, 14, 17, 20, 21, 22], "nodl": 13, "more": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], "notebook": [14, 17, 19, 20, 21, 22, 23], "appli": 14, "within": [14, 16, 18, 19], "kineticblockvisitor": 14, "transform": [14, 17, 23], "equival": [14, 17, 19], "higher": [14, 20, 21, 22], "approach": [14, 20, 21, 22], "speci": 14, "a_j": 14, "y_j": 14, "react": 14, "accord": 14, "sum_j": 14, "nu_": 14, "ij": 14, "l": [14, 23], "overset": 14, "k_i": 14, "rightarrow": 14, "coeffici": [14, 20], "stoichiometr": 14, "posit": [14, 18, 23], "dy_j": 14, "sum_i": 14, "r_i": 14, "prod_j": 14, "a0": 14, "3a1": 14, "2a2": 14, "2a0": 14, "a1": 14, "kf": 14, "kb": 14, "etc": 14, "space": 14, "stochiometr": 14, "implicitli": 14, "k": [14, 19], "_j": 14, "backward": [14, 17], "same": [14, 18, 20, 23], "rh": [14, 18, 19], "exchang": 14, "_i": [14, 16], "align": 14, "h": [14, 19, 23], "parenthes": 14, "add": [14, 19, 23], "dh": 14, "2y": 14, "product": 14, "syntact": 14, "sugar": 14, "standard": 14, "flux": 14, "convers": 14, "z": 14, "last": 14, "algebra": [14, 16, 17], "steadyst": 14, "captur": [14, 18, 19, 20, 21, 22], "run_kinetic_visitor_and_return_deriv": 14, "mod_str": [14, 18, 19, 20, 21, 22], "nmdol": [14, 19, 20, 21, 22], "fold": [14, 19, 20, 21, 22, 23], "inlin": [14, 19, 20, 21, 22, 23], "renam": [14, 19, 20, 21, 22, 23], "constantfoldervisitor": [14, 19, 20, 21, 22], "inlinevisitor": [14, 19, 20, 21, 22], "localvarrenamevisitor": [14, 19, 20, 21, 22], "derivative_block": [14, 18, 20, 21, 22], "element": 14, "1x2": 14, "matric": [14, 15], "nu": 14, "blackward": 14, "ah": 14, "bm": 14, "written": [14, 17], "dm": [14, 20], "ex1": [14, 19, 20, 21, 22], "kin": 14, "kf0_": 14, "kb0_": 14, "39": [14, 18], "annihil": 14, "ex2": [14, 19, 20, 21, 22], "ex3": [14, 19, 20], "source0_": 14, "ex4": [14, 19, 20], "kf1_": 14, "ex5": [14, 19, 20], "simultan": [15, 16], "py": [15, 19], "suffici": 15, "leq3": 15, "cse": [15, 21, 22, 23], "larger": [15, 17], "partial": [15, 16, 17], "pivot": [15, 17], "crout": 15, "commonli": 16, "kineticblock": 16, "involv": [16, 20, 21], "iter": [16, 17], "x_j": [16, 17], "routin": [16, 20], "x_0": 16, "chosen": 16, "long": 16, "lie": 16, "far": 16, "awai": 16, "newton_solv": 16, "eigen": 16, "header": 16, "tag": [16, 20, 21, 22], "newton_numerical_diff_solv": 16, "variant": 16, "estim": 16, "nb": 16, "yet": [16, 20], "about": 17, "varieti": [17, 19], "high": [17, 18], "altern": 17, "reduc": 17, "deal": [17, 20], "hierarchi": 17, "translat": 17, "applic": 17, "mathcal": [17, 19], "derivimplcit": 17, "alwai": 17, "unstabl": 17, "instabl": 17, "f_i": 17, "desir": 17, "satisfi": 17, "condit": [17, 18], "x_": 17, "x_n": 17, "primarili": 18, "design": [18, 23], "optimis": [18, 23], "architectur": [18, 23], "cpu": [18, 23], "gpu": [18, 23], "introspect": [18, 23], "underli": 18, "linux": 18, "mac": 18, "window": 18, "futur": 18, "subsystem": 18, "section": 18, "take": [18, 19], "200": 18, "mo": 18, "helper": 18, "veri": 18, "edg": 18, "slightli": 18, "being": [18, 23], "address": 18, "modeldb": 18, "databas": [18, 23], "below": 18, "liste": 18, "diff_eq_express": 18, "prime": 18, "range_var": 18, "param_assign": 18, "len": 18, "17": [18, 21, 22, 23], "apart": 18, "synthet": 18, "returnn": 18, "avoid": [18, 19, 20], "9": [18, 19, 21, 22, 23], "function_block": 18, "new_lookup_visitor": 18, "expression_stat": 18, "visit": 18, "get_nod": 18, "functionbock": 18, "retriv": 18, "11": [18, 21, 22], "nmodl_glob": 18, "IN": 18, "unknown": 18, "scope": [18, 20, 23], "statu": [18, 23], "ion_ica": 18, "codegen_var": 18, "ion_cai": 18, "ion_cao": 18, "ion_eca": 18, "read_ion": 18, "000000": 18, "050000": 18, "000100": 18, "100000": 18, "unit_def": 18, "factor_def": 18, "to_solv": 18, "36": 18, "40": 18, "statementblock4": 18, "16": [18, 21, 22], "get_variables_with_properti": 18, "argument": 18, "nmodltyp": 18, "ions_var": 18, "read_ion_var": 18, "write_ion_var": 18, "travers": 18, "inherit": 18, "achiev": 18, "But": [18, 19], "encount": 18, "hand": 18, "parametervisitor": 18, "__init__": 18, "in_paramet": 18, "visit_param_block": 18, "visit_children": 18, "visit_nam": 18, "visit_integ": 18, "param_visitor": 18, "With": 18, "littl": 18, "mfunc_src": 18, "myfunc": 18, "mfunc_ast": 18, "pygener": 18, "pycod": 18, "indent": 18, "func_nam": 18, "visit_function_block": 18, "param": 18, "get_node_nam": 18, "params_str": 18, "join": 18, "visit_statement_block": 18, "visit_expression_stat": 18, "expr": 18, "binaryexpress": 18, "op": 18, "lhsn": 18, "visit_if_stat": 18, "get_statement_block": 18, "elseif": 18, "visit_else_stat": 18, "visit_wrapped_express": 18, "visit_binary_express": 18, "pow": [18, 19, 20], "visit_var_nam": 18, "19": [18, 21, 22], "pygen": 18, "lt": 18, "ontologi": 18, "20": [18, 21, 22], "hx": 18, "ncit": 18, "c17145": 18, "c17008": 18, "potassium": 18, "chebi": 18, "29101": 18, "eca": 18, "gnabar": [18, 19], "gkbar": [18, 19], "gl": [18, 19], "el": [18, 19, 23], "gk": [18, 19], "ont_stat": 18, "ontology_stat": 18, "ontology_id": 18, "o_id": 18, "situat": 19, "motiv": 19, "calcul": 19, "001": 19, "computation": 19, "ineffici": 19, "wa": [19, 20, 23], "ad": 19, "manual": 19, "room": 19, "incorrect": 19, "improv": [19, 23], "sympyconductancevisitor": 19, "sympy_conductance_visitor": 19, "hpp": 19, "different": 19, "math": 19, "dot": [19, 20], "asign": 19, "g_i_0": 19, "account": 19, "ran": 19, "occur": 19, "analys": [19, 23], "complic": [19, 20], "explicit": 19, "side": 19, "test_od": 19, "run_conductance_visitor_and_return_breakpoint": 19, "breakpoint_block": 19, "equal": 19, "g_na_0": 19, "10000000000000001": 19, "g__0": 19, "ek": 19, "ik": 19, "il": 19, "x3": 19, "compar": 19, "identifi": 19, "ex6": [19, 20], "x1": 19, "x2": 19, "ex7": 19, "sympysolvervisitor": [20, 21, 22], "doe": [20, 21, 22], "possibli": 20, "reprens": 20, "dsolv": 20, "ccode": 20, "noth": 20, "revert": 20, "mod2c": 20, "extra": 20, "taylor": 20, "seri": 20, "extract": 20, "a_i": 20, "a_0": 20, "a_1": 20, "a_2": 20, "f_": 20, "exponenti": [20, 23], "aproxim": 20, "www": [20, 23], "eccomas2016": 20, "org": [20, 23], "proceed": 20, "pdf": [20, 23], "7366": 20, "sympy_solv": [20, 21, 22], "run_sympy_solv": [20, 21, 22], "splitlin": 20, "exp": 20, "minf": 20, "mtau": 20, "sqrt": 20, "unsupport": 20, "leav": 20, "later": [20, 23], "log": 20, "sysytem": [21, 22], "mc": [21, 22], "eigen_newton_solv": [21, 22], "old_mc": [21, 22], "old_m": [21, 22], "nmodl_eigen_x": [21, 22], "nmodl_eigen_f": [21, 22], "nmodl_eigen_j": [21, 22], "c1": [21, 22], "o1": [21, 22], "o2": [21, 22], "p0": [21, 22], "p1": [21, 22], "ihkin": [21, 22], "alpha": [21, 22], "beta": [21, 22], "k3p": [21, 22], "k4": [21, 22], "k1ca": [21, 22], "k2": [21, 22], "evaluate_fct": [21, 22], "old_c1": [21, 22], "old_o1": [21, 22], "old_o2": [21, 22], "old_p0": [21, 22], "old_p1": [21, 22], "21": [21, 22], "22": [21, 22], "23": [21, 22], "24": [21, 22], "workflow": 23, "codecov": 23, "cii": 23, "practic": 23, "engin": 23, "euron": 23, "anguag": 23, "yale": 23, "edu": 23, "static": 23, "py_doc": 23, "modelspec": 23, "programmat": 23, "techniqu": 23, "modular": 23, "flexibl": 23, "domain": 23, "wide": 23, "intracellular": 23, "submodel": 23, "synaps": 23, "expsyn": 23, "tau": 23, "nanoamp": 23, "microsiemen": 23, "1e9": 23, "weight": 23, "rst": 23, "blob": 23, "capabl": 23, "imag": 23, "fulli": 23, "jupyt": 23, "compos": 23, "termin": 23, "entrypoint": 23, "readm": 23, "apr": 23, "2019": 23, "52": 23, "nmodl_str": 23, "download": 23, "wget": 23, "raw": 23, "githubusercont": 23, "yml": 23, "duid": 23, "id": 23, "dgid": 23, "hostnam": 23, "goe": 23, "similar": 23, "09": 23, "49": 23, "53": 23, "923": 23, "notebookapp": 23, "4c8edabe52e1": 23, "127": 23, "8888": 23, "a7902983bad430a11935": 23, "stop": 23, "server": 23, "shut": 23, "kernel": 23, "twice": 23, "skip": 23, "nbserver": 23, "past": 23, "navig": 23, "my_notebook": 23, "subfold": 23, "nmod": 23, "wikipedia": 23, "wiki": 23, "abstract_syntax_tre": 23, "look": 23, "kei": 23, "666852": 23, "57329449": 23, "12c9a400": 23, "7114": 23, "11e9": 23, "8da5": 23, "0042590044ec": 23, "gif": 23, "alt": 23, "ast_viz": 23, "central": 23, "children": 23, "exisit": 23, "hi": 23, "frameowrk": 23, "1000000000": 23, "rich": 23, "group__visitor__class": 23, "theoret": 23, "characteris": 23, "rat": 23, "neocort": 23, "column": 23, "microcircuit": 23, "publish": 23, "2015": 23, "cell": 23, "s0092": 23, "8674": 23, "2815": 23, "2901191": 23, "57336711": 23, "2cc0b200": 23, "7127": 23, "8053": 23, "8f662e2ec191": 23, "png": 23, "perf": 23, "stat": 23, "optim": 23, "intel": 23, "amd": 23, "arm": 23, "nvidia": 23, "platform": 23, "openacc": 23, "openmp": 23, "choos": 23, "group__codegen__backend": 23, "subcommand": 23, "text": 23, "exit": 23, "sub": 23, "verbos": 23, "info": 23, "logger": 23, "trace": 23, "warn": 23, "critic": 23, "off": 23, "scratch": 23, "intermedi": 23, "nrnunit": 23, "host": 23, "acc": 23, "acceler": 23, "oacc": 23, "unrol": 23, "loop": 23, "const": 23, "statist": 23, "stdout": 23, "ao": 23, "soa": 23, "datatyp": 23, "incompat": 23, "draft": 23, "paper": 23, "pramod": 23, "omar": 23, "awil": 23, "liam": 23, "keegan": 23, "jorg": 23, "alonso": 23, "jame": 23, "king": 23, "michael": 23, "hine": 23, "felix": 23, "sch\u00fcrmann": 23, "multi": 23, "eprint": 23, "arxiv": 23, "1905": 23, "02241": 23, "feel": 23, "ticket": 23, "migrat": 23, "nmodlbench": 23, "nmodldb": 23, "softwar": 23, "blue": 23, "brain": 23, "research": 23, "center": 23, "\u00e9cole": 23, "polytechniqu": 23, "f\u00e9d\u00e9rale": 23, "de": 23, "lausann": 23, "epfl": 23, "swiss": 23, "govern": 23, "eth": 23, "board": 23, "feder": 23, "institut": 23, "technologi": 23, "nation": 23, "health": 23, "nih": 23, "grant": 23, "r01ns11613": 23, "univers": 23, "european": 23, "union": 23, "horizon": 23, "2020": 23, "innov": 23, "agreement": 23, "No": 23, "785907": 23, "human": 23, "sga2": 23, "copyright": 23, "2017": 23, "2023": 23, "ci": 23, "badg": 23, "svg": 23, "dev": 23, "azur": 23, "pramodskumbhar": 23, "_api": 23, "branchnam": 23, "_build": 23, "definitionid": 23, "gh": 23, "a3nu9vbncb": 23, "bestpractic": 23, "coreinfrastructur": 23, "4467": 23}, "objects": {"": [[11, 0, 0, "-", "nmodl"]], "nmodl": [[11, 1, 1, "", "NmodlDriver"], [11, 0, 0, "-", "ast"], [11, 0, 0, "-", "dsl"], [11, 0, 0, "-", "ode"], [11, 0, 0, "-", "symtab"], [11, 3, 1, "", "to_json"], [11, 3, 1, "", "to_nmodl"], [11, 0, 0, "-", "visitor"]], "nmodl.NmodlDriver": [[11, 2, 1, "", "get_ast"], [11, 2, 1, "", "parse_file"], [11, 2, 1, "", "parse_stream"], [11, 2, 1, "", "parse_string"]], "nmodl.ast": [[11, 3, 1, "", "view"]], "nmodl.dsl": [[11, 3, 1, "", "list_examples"], [11, 3, 1, "", "load_example"]], "nmodl.ode": [[11, 3, 1, "", "differentiate2c"], [11, 3, 1, "", "forwards_euler2c"], [11, 3, 1, "", "integrate2c"], [11, 3, 1, "", "search_and_replace_protected_functions_from_sympy"], [11, 3, 1, "", "search_and_replace_protected_functions_to_sympy"], [11, 3, 1, "", "solve_lin_system"], [11, 3, 1, "", "solve_non_lin_system"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:function"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "function", "Python function"]}, "titleterms": {"cabl": 0, "equat": 0, "current": [1, 2], "nmodl": [1, 3, 5, 7, 8, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], "keyword": [1, 2], "nonspecific_curr": 1, "ion": 2, "ndmol": 2, "write": 2, "storag": 2, "optim": 2, "special": 2, "case": 2, "zero": 2, "area": 2, "node": 2, "pointer": 3, "integ": 3, "variabl": [3, 14], "visitor": [4, 11, 18], "pars": [4, 18], "model": [4, 9, 18], "construct": [4, 18], "ast": [4, 11, 18], "queri": [4, 18], "object": [4, 18], "lookup": [4, 18], "symbol": [4, 18], "tabl": [4, 7, 18], "custom": [4, 18], "contribut": [5, 7], "framework": [5, 8, 23], "got": 5, "question": 5, "found": 5, "bug": 5, "miss": 5, "featur": 5, "submiss": 5, "guidelin": 5, "develop": 5, "convent": 5, "c": 6, "api": [6, 23], "about": [7, 12, 23], "introduct": [7, 18, 19, 23], "content": [7, 11], "jupyt": [7, 12, 13], "notebook": [7, 12, 13], "refer": 7, "indic": 7, "instal": [8, 23], "get": 8, "start": 8, "clone": 8, "sourc": 8, "prerequisit": 8, "build": 8, "project": 8, "test": [8, 19, 20, 21, 22], "modul": [8, 11], "gener": [8, 18, 23], "document": [8, 23], "The": [9, 12, 23], "neuron": 9, "languag": 9, "python": [10, 18, 23], "packag": 10, "submodul": 11, "dsl": 11, "od": [11, 17], "symtab": 11, "kinet": [14, 17], "scheme": 14, "reaction": 14, "law": 14, "mass": 14, "action": 14, "block": [14, 17], "format": 14, "other": 14, "type": 14, "statement": 14, "f_flux": 14, "b_flux": 14, "todo": 14, "conserv": 14, "exampl": [14, 18, 19, 20, 21, 22, 23], "ex": [14, 19, 20, 21, 22], "1": [14, 19, 20, 21, 22], "2": [14, 19, 20, 21, 22], "3": [14, 19, 20], "4": [14, 19, 20], "5": [14, 19, 20], "linear": [15, 17], "solver": [15, 16], "nonlinear": [16, 17], "newton": 16, "fall": 16, "back": 16, "integr": 17, "deriv": 17, "interfac": 18, "tutori": 18, "And": 18, "easi": 18, "code": [18, 23], "us": [18, 23], "curi": 18, "inform": 18, "conduct": 19, "implement": [19, 20, 21, 22], "6": [19, 20], "7": 19, "sympysolv": [20, 21, 22], "cnexp": 20, "pade": 20, "approxim": 20, "derivimplicit": 21, "spars": 22, "try": 23, "docker": 23, "high": 23, "level": 23, "analysi": 23, "citat": 23, "support": 23, "contribuit": 23, "benchmark": 23, "fund": 23, "acknowledg": 23}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "nbsphinx": 4, "sphinx.ext.viewcode": 1, "sphinx": 57}, "alltitles": {"Cable Equation": [[0, "cable-equation"]], "Currents": [[1, "currents"]], "NMODL Keywords": [[1, "nmodl-keywords"]], "NONSPECIFIC_CURRENT": [[1, "nonspecific-current"]], "Ions": [[2, "ions"]], "NDMOL Keywords": [[2, "ndmol-keywords"]], "Keyword: WRITE": [[2, "keyword-write"]], "Writing Ion Currents": [[2, "writing-ion-currents"]], "Storage": [[2, "storage"]], "Optimizing Storage": [[2, "optimizing-storage"]], "Special Case: zero-area nodes": [[2, "special-case-zero-area-nodes"]], "NMODL \u201cpointers\u201d": [[3, "nmodl-pointers"]], "Integer Variables": [[3, "integer-variables"]], "Visitors": [[4, "visitors"]], "Parsing Model and constructing AST": [[4, "parsing-model-and-constructing-ast"]], "Querying AST objects with Visitors": [[4, "querying-ast-objects-with-visitors"]], "Lookup Visitor": [[4, "lookup-visitor"]], "Symbol Table Visitor": [[4, "symbol-table-visitor"], [18, "Symbol-Table-Visitor"]], "Custom AST Visitor": [[4, "custom-ast-visitor"]], "Contributing to the NMODL Framework": [[5, "contributing-to-the-nmodl-framework"]], "Got a Question?": [[5, "got-a-question"]], "Found a Bug?": [[5, "found-a-bug"]], "Missing a Feature?": [[5, "missing-a-feature"]], "Submission Guidelines": [[5, "submission-guidelines"]], "Development Conventions": [[5, "development-conventions"]], "C++ API": [[6, "c-api"]], "About NMODL": [[7, "about-nmodl"], [23, "about-nmodl"]], "Introduction:": [[7, null]], "Contents:": [[7, null]], "Jupyter Notebooks:": [[7, null]], "Contributing:": [[7, null]], "Reference:": [[7, null]], "Indices and tables": [[7, "indices-and-tables"]], "Installing the NMODL Framework": [[8, "installing-the-nmodl-framework"]], "Getting Started": [[8, "getting-started"]], "Cloning Source": [[8, "cloning-source"]], "Prerequisites": [[8, "prerequisites"]], "Build Project": [[8, "build-project"]], "Testing the Installed Module": [[8, "testing-the-installed-module"]], "Generating Documentation": [[8, "generating-documentation"]], "The NEURON MODeling language": [[9, "the-neuron-modeling-language"]], "Python package": [[10, "python-package"]], "Module contents": [[11, "module-nmodl"]], "Submodules": [[11, "submodules"]], "nmodl.ast module": [[11, "module-nmodl.ast"]], "nmodl.dsl module": [[11, "module-nmodl.dsl"]], "nmodl.ode module": [[11, "module-nmodl.ode"]], "nmodl.symtab module": [[11, "module-nmodl.symtab"]], "nmodl.visitor module": [[11, "module-nmodl.visitor"]], "The NMODL Jupyter notebooks": [[12, "the-nmodl-jupyter-notebooks"]], "About the notebooks": [[12, "about-the-notebooks"]], "NMODL jupyter notebooks": [[13, "nmodl-jupyter-notebooks"]], "NMODL Kinetic Scheme": [[14, "NMODL-Kinetic-Scheme"]], "Reaction Kinetics": [[14, "Reaction-Kinetics"]], "Law of Mass Action": [[14, "Law-of-Mass-Action"]], "KINETIC block format": [[14, "KINETIC-block-format"]], "Other types of reaction statement": [[14, "Other-types-of-reaction-statement"]], "f_flux / b_flux variables": [[14, "f_flux-/-b_flux-variables"]], "[TODO] CONSERVE": [[14, "[TODO]-CONSERVE"]], "Examples": [[14, "Examples"], [19, "Examples"], [20, "Examples"], [21, "Examples"], [22, "Examples"]], "Ex. 1": [[14, "Ex.-1"], [19, "Ex.-1"], [20, "Ex.-1"], [21, "Ex.-1"], [22, "Ex.-1"]], "Ex. 2": [[14, "Ex.-2"], [19, "Ex.-2"], [20, "Ex.-2"], [21, "Ex.-2"], [22, "Ex.-2"]], "Ex. 3": [[14, "Ex.-3"], [19, "Ex.-3"], [20, "Ex.-3"]], "Ex. 4": [[14, "Ex.-4"], [19, "Ex.-4"], [20, "Ex.-4"]], "Ex. 5": [[14, "Ex.-5"], [19, "Ex.-5"], [20, "Ex.-5"]], "NMODL LINEAR solver": [[15, "NMODL-LINEAR-solver"]], "NMODL NONLINEAR solver": [[16, "NMODL-NONLINEAR-solver"]], "Newton solver": [[16, "Newton-solver"]], "Fall-back solver": [[16, "Fall-back-solver"]], "NMODL integration of ODEs": [[17, "NMODL-integration-of-ODEs"]], "KINETIC block": [[17, "KINETIC-block"]], "DERIVATIVE block": [[17, "DERIVATIVE-block"]], "LINEAR block": [[17, "LINEAR-block"]], "NONLINEAR block": [[17, "NONLINEAR-block"]], "NMODL Python Interface Tutorial": [[18, "NMODL-Python-Interface-Tutorial"]], "Introduction": [[18, "Introduction"], [19, "Introduction"], [23, "introduction"]], "Parsing Model And Constructing AST": [[18, "Parsing-Model-And-Constructing-AST"]], "Querying AST object with Visitors": [[18, "Querying-AST-object-with-Visitors"]], "Lookup visitor": [[18, "Lookup-visitor"]], "Custom AST visitor": [[18, "Custom-AST-visitor"]], "Easy code generation using AST visitors": [[18, "Easy-code-generation-using-AST-visitors"]], "Example of CURIE information parsing": [[18, "Example-of-CURIE-information-parsing"]], "NMODL CONDUCTANCE": [[19, "NMODL-CONDUCTANCE"]], "Implementation": [[19, "Implementation"], [20, "Implementation"], [21, "Implementation"], [22, "Implementation"]], "Implementation Tests": [[19, "Implementation-Tests"], [20, "Implementation-Tests"], [21, "Implementation-Tests"], [22, "Implementation-Tests"]], "Ex. 6": [[19, "Ex.-6"], [20, "Ex.-6"]], "Ex. 7": [[19, "Ex.-7"]], "NMODL SympySolver - cnexp": [[20, "NMODL-SympySolver---cnexp"]], "Pade approximant": [[20, "Pade-approximant"]], "NMODL SympySolver - derivimplicit": [[21, "NMODL-SympySolver---derivimplicit"]], "NMODL SympySolver - sparse": [[22, "NMODL-SympySolver---sparse"]], "The NMODL Framework": [[23, "the-nmodl-framework"]], "Installation": [[23, "installation"]], "Try NMODL with Docker": [[23, "try-nmodl-with-docker"]], "Using the Python API": [[23, "using-the-python-api"]], "High Level Analysis and Code Generation": [[23, "high-level-analysis-and-code-generation"]], "Documentation": [[23, "documentation"]], "Citation": [[23, "citation"]], "Support / Contribuition": [[23, "support-contribuition"]], "Examples / Benchmarks": [[23, "examples-benchmarks"]], "Funding & Acknowledgment": [[23, "funding-acknowledgment"]]}, "indexentries": {"nmodldriver (class in nmodl)": [[11, "nmodl.NmodlDriver"]], "differentiate2c() (in module nmodl.ode)": [[11, "nmodl.ode.differentiate2c"]], "forwards_euler2c() (in module nmodl.ode)": [[11, "nmodl.ode.forwards_euler2c"]], "get_ast() (nmodl.nmodldriver method)": [[11, "nmodl.NmodlDriver.get_ast"]], "integrate2c() (in module nmodl.ode)": [[11, "nmodl.ode.integrate2c"]], "list_examples() (in module nmodl.dsl)": [[11, "nmodl.dsl.list_examples"]], "load_example() (in module nmodl.dsl)": [[11, "nmodl.dsl.load_example"]], "module": [[11, "module-nmodl"], [11, "module-nmodl.ast"], [11, "module-nmodl.dsl"], [11, "module-nmodl.ode"], [11, "module-nmodl.symtab"], [11, "module-nmodl.visitor"]], "nmodl": [[11, "module-nmodl"]], "nmodl.ast": [[11, "module-nmodl.ast"]], "nmodl.dsl": [[11, "module-nmodl.dsl"]], "nmodl.ode": [[11, "module-nmodl.ode"]], "nmodl.symtab": [[11, "module-nmodl.symtab"]], "nmodl.visitor": [[11, "module-nmodl.visitor"]], "parse_file() (nmodl.nmodldriver method)": [[11, "nmodl.NmodlDriver.parse_file"]], "parse_stream() (nmodl.nmodldriver method)": [[11, "nmodl.NmodlDriver.parse_stream"]], "parse_string() (nmodl.nmodldriver method)": [[11, "nmodl.NmodlDriver.parse_string"]], "search_and_replace_protected_functions_from_sympy() (in module nmodl.ode)": [[11, "nmodl.ode.search_and_replace_protected_functions_from_sympy"]], "search_and_replace_protected_functions_to_sympy() (in module nmodl.ode)": [[11, "nmodl.ode.search_and_replace_protected_functions_to_sympy"]], "solve_lin_system() (in module nmodl.ode)": [[11, "nmodl.ode.solve_lin_system"]], "solve_non_lin_system() (in module nmodl.ode)": [[11, "nmodl.ode.solve_non_lin_system"]], "to_json() (in module nmodl)": [[11, "nmodl.to_json"]], "to_nmodl() (in module nmodl)": [[11, "nmodl.to_nmodl"]], "view() (in module nmodl.ast)": [[11, "nmodl.ast.view"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["contents/cable_equations", "contents/currents", "contents/ions", "contents/pointers", "contents/visitors", "contributing", "doxygen", "index", "install", "language", "modules", "nmodl", "notebooks", "notebooks/README", "notebooks/nmodl-kinetic-schemes", "notebooks/nmodl-linear-solver", "notebooks/nmodl-nonlinear-solver", "notebooks/nmodl-odes-overview", "notebooks/nmodl-python-tutorial", "notebooks/nmodl-sympy-conductance", "notebooks/nmodl-sympy-solver-cnexp", "notebooks/nmodl-sympy-solver-derivimplicit", "notebooks/nmodl-sympy-solver-sparse", "readme"], "filenames": ["contents/cable_equations.rst", "contents/currents.rst", "contents/ions.rst", "contents/pointers.rst", "contents/visitors.rst", "contributing.rst", "doxygen.rst", "index.rst", "install.rst", "language.rst", "modules.rst", "nmodl.rst", "notebooks.rst", "notebooks/README.rst", "notebooks/nmodl-kinetic-schemes.ipynb", "notebooks/nmodl-linear-solver.ipynb", "notebooks/nmodl-nonlinear-solver.ipynb", "notebooks/nmodl-odes-overview.ipynb", "notebooks/nmodl-python-tutorial.ipynb", "notebooks/nmodl-sympy-conductance.ipynb", "notebooks/nmodl-sympy-solver-cnexp.ipynb", "notebooks/nmodl-sympy-solver-derivimplicit.ipynb", "notebooks/nmodl-sympy-solver-sparse.ipynb", "readme.rst"], "titles": ["Cable Equation", "Currents", "Ions", "NMODL \u201cpointers\u201d", "Visitors", "Contributing to the NMODL Framework", "C++ API", "About NMODL", "Installing the NMODL Framework", "The NEURON MODeling language", "Python package", "Module contents", "The NMODL Jupyter notebooks", "NMODL jupyter notebooks", "NMODL Kinetic Scheme", "NMODL LINEAR solver", "NMODL NONLINEAR solver", "NMODL integration of ODEs", "NMODL Python Interface Tutorial", "NMODL CONDUCTANCE", "NMODL SympySolver - cnexp", "NMODL SympySolver - derivimplicit", "NMODL SympySolver - sparse", "Introduction"], "terms": {"neuron": [0, 1, 2, 3, 4, 7, 8, 11, 14, 16, 18, 19, 20, 23], "ha": [0, 1, 5, 14], "sophist": 0, "system": [0, 8, 11, 14, 15, 17, 20, 21, 22], "allow": [0, 2, 4, 5, 14, 18, 19, 23], "user": [0, 8, 14, 16, 17, 19, 23], "describ": [0, 8, 14, 17, 19, 20, 21, 22, 23], "geometri": 0, "here": [0, 1, 4, 5, 12, 18, 19, 20, 23], "we": [0, 1, 2, 4, 5, 8, 9, 12, 14, 17, 18, 20, 23], "ll": [0, 1, 2], "try": [0, 8], "deriv": [0, 2, 4, 7, 9, 11, 14, 16, 18, 20, 21, 22, 23], "manner": [0, 3], "hide": 0, "those": [0, 18], "detail": [0, 1, 13, 17, 18, 23], "whenev": [0, 18], "thei": [0, 3, 5, 11, 14, 16, 17], "re": [0, 5], "relev": [0, 5], "nmodl": [0, 2, 4, 9, 10], "pleas": [0, 1, 5, 8, 14, 19, 20, 21, 22], "consult": [0, 8], "its": [0, 2, 11], "relat": [0, 1, 9, 17], "document": [0, 1, 7, 11], "one": [0, 1, 2, 5, 8, 11, 14, 18, 23], "public": 0, "e": [0, 1, 2, 3, 5, 8, 11, 14, 18, 19, 23], "g": [0, 1, 2, 3, 5, 8, 11, 14, 18, 19, 20, 23], "The": [0, 1, 2, 4, 5, 7, 8, 11, 14, 16, 17, 18, 19, 20, 21, 22], "simul": [0, 3, 17, 19, 23], "environ": [0, 5, 8, 23], "In": [0, 1, 2, 3, 4, 5, 8, 9, 11, 14, 18, 23], "order": [0, 4, 5, 8, 11, 14, 18, 19, 20], "model": [0, 2, 7, 12, 23], "an": [0, 1, 2, 4, 5, 8, 11, 13, 14, 16, 17, 18, 19, 20, 23], "electr": [0, 1], "circuit": [0, 1], "first": [0, 4, 5, 18, 19, 20], "pick": [0, 8], "point": [0, 1, 2, 3, 4, 5, 8, 18, 23], "along": [0, 8], "which": [0, 1, 5, 8, 11, 12, 14, 16, 19, 20, 21, 22, 23], "voltag": [0, 2, 3], "call": [0, 1, 3, 8, 11, 16, 18], "them": [0, 8, 15], "node": [0, 1, 3, 4, 7, 11, 18, 23], "connect": 0, "form": [0, 11, 14, 16, 20, 23], "graph": [0, 23], "At": 0, "everi": [0, 4, 5, 18, 23], "branch": [0, 1, 5, 23], "place": [0, 8], "see": [0, 1, 2, 4, 14, 15, 17, 18, 19, 20, 21, 22, 23], "figur": [0, 1, 2, 23], "1": [0, 1, 2, 4, 7, 8, 11, 16, 17, 18, 23], "illustr": [0, 1], "placement": 0, "neurit": 0, "two": [0, 8, 19], "adjac": [0, 2], "ar": [0, 1, 2, 3, 4, 5, 8, 11, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], "resistor": 0, "interest": [0, 8], "behaviour": [0, 18], "come": 0, "from": [0, 4, 5, 8, 9, 11, 12, 15, 16, 18, 19, 20, 23], "differ": [0, 1, 3, 4, 16, 17, 18, 19], "ion": [0, 1, 7, 18, 19, 23], "concentr": [0, 2, 14], "across": 0, "membran": [0, 1, 2, 23], "thi": [0, 1, 2, 3, 4, 5, 8, 11, 14, 16, 17, 18, 19, 20, 21, 22, 23], "i": [0, 1, 2, 3, 4, 5, 8, 9, 11, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], "upheld": 0, "three": 0, "process": [0, 1, 2, 9, 23], "larg": [0, 11, 16], "imperm": 0, "effect": [0, 1], "creat": [0, 2, 4, 5, 11, 12, 18, 23], "barrier": 0, "b": [0, 5, 11, 14, 21, 22], "gate": 0, "channel": [0, 1, 4, 18, 23], "condition": 0, "quickli": [0, 23], "cross": [0, 1], "c": [0, 5, 7, 8, 9, 11, 14, 20, 23], "pump": 0, "continu": [0, 1, 12], "restor": 0, "rest": 0, "state": [0, 2, 4, 9, 14, 16, 18, 19, 20, 21, 22, 23], "fact": 0, "mostli": 0, "mean": [0, 1, 2, 3, 14], "behav": [0, 5], "like": [0, 4, 5, 23], "dielectr": 0, "materi": 0, "can": [0, 1, 2, 3, 4, 5, 8, 11, 12, 14, 15, 16, 17, 18, 20, 23], "therefor": [0, 2, 3], "capacitor": [0, 1], "simpli": [0, 4, 8, 16, 18], "current": [0, 3, 5, 7, 11, 14, 16, 19, 20, 23], "give": [0, 2, 19, 20], "rise": 0, "shown": [0, 4, 18], "2": [0, 1, 2, 4, 7, 8, 11, 18, 23], "total": [0, 1, 2], "tran": [0, 1], "i_m": 0, "due": [0, 1, 2, 8, 17], "properti": [0, 2, 4, 18], "i_c": 0, "all": [0, 2, 4, 5, 8, 9, 11, 18, 19, 20, 23], "mechan": [0, 1, 2, 3, 9, 23], "specif": [0, 1, 2, 5, 8, 13, 14, 18, 23], "repres": [0, 1, 2, 9, 18, 23], "start": [0, 4, 5, 7, 11, 12, 13, 18], "write": [0, 4, 5, 9, 12, 18, 19, 23], "down": [0, 23], "let": [0, 4, 18], "": [0, 1, 2, 5, 8, 16, 18, 23], "recal": 0, "formula": 0, "ohm": 0, "law": [0, 7, 17], "frac": [0, 14, 16, 17, 20], "dv": [0, 1, 19], "dt": [0, 11, 14, 16, 17, 20, 21, 22], "qquad": 0, "delta": [0, 14, 17, 19], "v": [0, 2, 5, 19, 21, 22, 23], "r": [0, 2, 8, 11, 14, 19], "us": [0, 2, 4, 5, 7, 8, 11, 12, 14, 15, 16, 17, 19, 20, 21, 22], "kirchoff": 0, "v_1": 0, "i_": 0, "0": [0, 4, 8, 11, 14, 16, 17, 18, 19, 20, 21, 22, 23], "lead": 0, "rewritten": [0, 16], "term": [0, 11, 14], "follow": [0, 1, 2, 5, 8, 9, 14, 19, 20, 21, 22, 23], "dv_1": 0, "r_": 0, "v_": 0, "discret": [0, 9], "implicit": [0, 11, 21, 22], "euler": [0, 9, 11, 14, 17, 21, 22], "n": [0, 5, 11, 15, 16, 17, 18, 19, 23], "t": [0, 2, 5, 11, 16, 17, 18, 19, 20], "left": [0, 11, 14, 17], "right": [0, 11, 14], "collect": 0, "unpleas": 0, "sinc": [0, 1, 2, 3, 20], "make": [0, 3, 5, 8, 14, 19], "non": [0, 1, 11, 16, 17, 19], "linear": [0, 7, 9, 11, 13, 16, 19, 20, 21, 22], "approx": [0, 11, 20], "i_1": 0, "di_1": 0, "g_i": [0, 19], "where": [0, 5, 8, 11, 14, 16, 18, 19, 20], "depend": [0, 5, 8, 11, 19, 20], "differenti": [0, 8, 11, 14, 16, 18, 19, 20], "conduct": [0, 7, 9, 13, 23], "refer": [1, 2, 3, 5, 8, 14], "part": [1, 20, 21, 22], "rate": [1, 4, 14, 17, 18], "charg": 1, "pass": [1, 5, 8, 14, 19, 20, 21, 22, 23], "through": [1, 5], "show": [1, 2, 18, 19, 23], "coupl": [1, 17, 21, 22], "segment": [1, 2], "when": [1, 5, 8, 18, 20, 21, 22], "present": [1, 8], "handl": [1, 20], "intern": 1, "mod": [1, 2, 4, 5, 8, 14, 16, 17, 18, 19, 23], "file": [1, 2, 4, 5, 8, 9, 11, 14, 16, 17, 18, 19, 20, 21, 22, 23], "comput": [1, 2, 23], "white": 1, "box": 1, "label": 1, "sum": 1, "per": [1, 2], "turn": 1, "wire": 1, "diagram": 1, "four": 1, "For": [1, 2, 4, 5, 8, 13, 14, 15, 18, 19, 20, 21, 22, 23], "zero": [1, 7, 14], "aread": 1, "consist": [1, 14], "area": [1, 7], "still": [1, 5, 9, 19], "introduc": [1, 19], "A": [1, 2, 3, 14, 16, 17], "view": [1, 10, 11, 23], "color": 1, "each": [1, 2, 3, 11, 17, 19, 20, 23], "nonspecif": 1, "i1": 1, "ina": [1, 2, 3, 18, 19], "ica": [1, 2, 4, 18], "onli": [1, 2, 4, 5, 16, 17, 18, 20, 23], "light": 1, "yellow": 1, "There": [1, 2, 14, 18, 20], "requir": [1, 5, 8, 19, 23], "cabl": [1, 7], "equat": [1, 7, 8, 11, 14, 15, 16, 17, 18, 20, 21, 22], "discuss": [1, 5, 23], "individu": 1, "separ": [1, 2], "check": [1, 5, 18, 19, 23], "how": [1, 4, 16, 17, 18, 19, 23], "addit": [1, 19, 23], "contribut": [1, 2, 23], "express": [1, 2, 3, 11, 14, 18, 19], "accoci": 1, "ani": [1, 4, 5, 9, 11, 17, 18, 20, 23], "It": [1, 2, 5, 11, 18, 19, 23], "syntax": [1, 11, 23], "name": [1, 2, 4, 8, 11, 18, 23], "assum": [1, 4, 14, 18, 20], "need": [1, 2, 5, 8, 19], "assign": [1, 2, 4, 9, 11, 18, 19, 23], "valu": [1, 2, 3, 8, 11, 16, 18, 20], "also": [1, 2, 5, 8, 14, 15, 16, 17, 18, 19, 23], "list": [1, 2, 3, 8, 11, 18, 20, 22, 23], "block": [1, 4, 5, 7, 9, 15, 16, 18, 19, 20, 21, 22, 23], "unit": [1, 4, 5, 8, 9, 14, 15, 16, 18, 19, 20, 21, 22, 23], "densiti": [1, 2], "ma": [1, 2, 4, 18], "cm2": [1, 2, 4, 18], "local": [1, 2, 4, 5, 8, 9, 11, 14, 18, 19, 20, 21, 22, 23], "store": [1, 3, 8, 23], "regular": 1, "rang": [1, 3, 4, 9, 18, 19, 23], "variabl": [1, 2, 4, 5, 7, 8, 11, 16, 18, 19, 20, 21, 22, 23], "gener": [1, 2, 5, 7, 9, 14, 19, 20, 21, 22], "code": [1, 2, 4, 5, 7, 8, 9, 11, 20], "must": [1, 2, 5, 8, 11, 14], "ensur": [1, 5], "updat": [1, 2, 5], "remain": 1, "finit": [1, 16], "di": [1, 19], "support": [2, 3, 8, 9, 18], "sodium": [2, 3, 18], "anoth": [2, 8], "calcium": [2, 4, 18], "five": 2, "associ": [2, 3, 17, 18], "insid": [2, 5, 14], "nai": 2, "outsid": 2, "nao": 2, "revers": [2, 11, 19], "potenti": 2, "ena": [2, 18, 19], "w": [2, 11, 19], "dinadv": 2, "should": [2, 4, 8, 11, 14, 16, 18, 23], "split": 2, "na": [2, 18, 19, 23], "would": [2, 4, 5, 8, 14, 23], "have": [2, 3, 4, 5, 8, 12, 14, 18, 20, 21, 22], "been": [2, 5], "These": [2, 3, 8, 15, 16, 23], "physic": 2, "exist": [2, 5, 18, 19, 23], "includ": [2, 5, 9, 11, 14, 18, 23], "read": [2, 4, 9, 18, 19], "seek": 2, "useion": [2, 4, 9, 18, 19], "mv": [2, 4, 18, 23], "multipl": [2, 5, 18], "line": [2, 5, 23], "ion_nam": [2, 19], "string": [2, 4, 5, 8, 11, 14, 19, 20, 21, 22, 23], "ca": [2, 4, 18], "If": [2, 4, 5, 8, 11, 14, 15, 18, 19, 20, 23], "other": [2, 3, 7, 9, 11, 17, 20], "defin": [2, 8, 9, 11, 17, 19, 20, 21, 22], "new": [2, 4, 5, 11, 14, 18, 19, 20, 21, 22, 23], "both": [2, 11, 19], "option": [2, 5, 8, 11, 15, 20, 23], "comma": 2, "set": [2, 5, 8, 11, 14, 15, 16, 17], "breakpoint": [2, 4, 9, 18, 19, 20, 21, 22, 23], "gna": [2, 18, 19], "semant": [2, 3], "hodgkin": 2, "huxlei": 2, "overal": [2, 20], "everyth": 2, "level": [2, 14, 17, 18, 20, 21, 22], "keep": 2, "repeat": 2, "similarli": 2, "actual": 2, "global": [2, 9, 18, 20, 23], "increment": 2, "usual": [2, 5, 8, 11], "howev": [2, 9], "isn": 2, "henc": 2, "omit": 2, "specifi": [2, 8, 14, 16, 17, 19, 23], "contain": [2, 5, 11, 14, 15, 16, 17, 19], "copi": [2, 8, 23], "pointer": [2, 7, 9], "share": [2, 8, 23], "prefix": [2, 11], "ion_": 2, "dure": [2, 19], "initi": [2, 4, 9, 16, 18, 23], "might": [2, 5], "ion_ena": 2, "memori": [2, 5, 8, 11, 23], "layout": [2, 23], "common": [2, 11, 15, 23], "pattern": [2, 18], "access": [2, 4, 18, 23], "particular": [2, 5, 14], "instanc": [2, 5, 8, 11], "facilit": 2, "simd": 2, "could": [2, 8, 18], "replac": [2, 8, 14, 20], "implement": [2, 4, 5, 7, 11, 13, 14, 16, 17, 18, 23], "activ": [2, 5], "cli": [2, 23], "via": [2, 18], "codegen": [2, 5, 9, 23], "opt": [2, 8, 23], "ionvar": [2, 23], "surfac": 2, "assert": 2, "convert": [2, 5, 11, 14, 17, 18, 21, 22, 23], "divid": 2, "notion": 3, "datum": 3, "doubl": [3, 5, 18, 23], "stabl": [3, 11, 17], "anyth": 3, "els": [3, 9, 18], "One": [3, 4, 5, 18, 23], "import": [3, 4, 5, 8, 14, 18, 19, 20, 21, 22, 23], "subset": [3, 5], "paramet": [3, 4, 9, 11, 18, 23], "storag": [3, 7], "control": [3, 9, 18, 23], "coreneuron": [3, 5, 9], "stronger": 3, "than": [3, 5], "up": [3, 5, 8, 16, 19, 23], "major": [3, 5], "usecas": [3, 5], "consid": [3, 5, 14, 18], "well": [3, 18, 20, 23], "treat": 3, "becaus": [3, 8], "singl": [3, 20], "contigu": 3, "arrai": 3, "indic": [3, 18], "data_handl": 3, "befor": [3, 5, 8, 9, 11, 14], "phase": 3, "resolv": 3, "cach": 3, "appropri": [3, 5], "strength": [4, 18], "python": [4, 5, 7, 8, 12, 13, 14, 16, 19, 20, 21, 22], "interfac": [4, 7, 13, 14, 19, 20, 21, 22, 23], "inbuilt": [4, 18], "perform": [4, 15, 18, 19, 23], "analysi": [4, 8, 18], "u": [4, 5, 14, 20, 23], "exampl": [4, 5, 7, 8, 11, 16], "onc": [4, 8, 18, 23], "setup": [4, 5, 8, 18], "properli": [4, 18], "abl": [4, 9, 18], "modul": [4, 7, 10, 18], "dsl": [4, 8, 9, 10, 14, 18, 19, 20, 21, 22, 23], "suffix": [4, 8, 9, 18, 23], "cadynam": [4, 18], "cai": [4, 18, 21, 22], "decai": [4, 18], "gamma": [4, 18], "mincai": [4, 18], "depth": [4, 18], "millivolt": [4, 18, 23], "milliamp": [4, 18], "faradai": [4, 18], "coulomb": [4, 18], "molar": [4, 14, 18], "liter": [4, 18], "mm": [4, 18], "millimolar": [4, 18], "um": [4, 18], "micron": [4, 18], "05": [4, 18], "percent": [4, 18], "free": [4, 18, 23], "buffer": [4, 18], "80": [4, 18], "m": [4, 5, 14, 18, 19, 20, 21, 22, 23], "remov": [4, 18], "shell": [4, 5, 18], "1e": [4, 18, 23], "4": [4, 7, 8, 18, 21, 22], "solv": [4, 8, 9, 11, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], "method": [4, 9, 16, 17, 18, 20, 21, 22, 23], "cnexp": [4, 7, 9, 13, 17, 18, 23], "10000": [4, 18], "function": [4, 8, 9, 11, 14, 16, 17, 18, 19, 20, 21, 22, 23], "foo": [4, 18], "temp": [4, 18], "now": [4, 8, 18], "valid": [4, 5, 8, 18, 20], "parser": [4, 8, 11, 18], "nmodldriv": [4, 8, 10, 11, 14, 18, 19, 20, 21, 22, 23], "parse_str": [4, 8, 10, 11, 14, 18, 19, 20, 21, 22, 23], "driver": [4, 8, 11, 14, 18, 19, 20, 21, 22, 23], "modast": [4, 8, 18, 23], "throw": [4, 11, 18], "except": [4, 9, 11, 18], "error": [4, 5, 17, 19, 23], "input": [4, 11, 18, 19, 23], "invalid": [4, 8, 18], "otherwis": [4, 11, 18], "return": [4, 8, 11, 14, 18, 19, 20, 21, 22, 23], "print": [4, 5, 8, 14, 18, 19, 20, 21, 22, 23], "103": 4, "charact": [4, 18], "tree": [4, 11, 18, 23], "represent": [4, 11, 18, 23], "repr": 4, "100": 4, "program": [4, 8, 11, 18, 23], "neuronblock": [4, 8, 11, 23], "statementblock": [4, 8, 11, 18, 23], "As": [4, 5, 18], "suggest": [4, 5, 18, 20], "search": [4, 5, 7, 18], "provid": [4, 8, 11, 18, 23], "astlookupvisitor": [4, 14, 18, 19, 20, 21, 22], "lookup_visitor": [4, 18], "find": [4, 5, 8, 12, 14, 16, 18, 19, 20, 23], "out": [4, 5, 18], "do": [4, 5, 8, 11, 14, 15, 18, 19, 20, 21, 22], "astnodetyp": [4, 11, 14, 18, 19, 20, 21, 22], "state_block": [4, 18], "to_nmodl": [4, 8, 10, 11, 14, 18, 19, 20, 21, 22, 23], "usag": [4, 18, 23], "To": [4, 8, 12, 13, 17, 18, 23], "just": [4, 14], "symtab": [4, 10, 14, 18, 19, 20, 21, 22, 23], "symv": [4, 18], "symtabvisitor": [4, 14, 18, 19, 20, 21, 22], "run": [4, 5, 8, 12, 14, 15, 17, 18, 19, 20, 21, 22, 23], "popul": [4, 18], "whole": [4, 18, 23], "visit_program": [4, 14, 18, 19, 20, 21, 22], "get_symbol_t": [4, 18], "table_": [4, 18], "str": [4, 11, 18], "base": [4, 5, 11, 18, 23], "prime_nam": [4, 18], "assigned_definit": [4, 18], "write_ion": [4, 18], "state_var": [4, 18], "predefin": [4, 18], "limit": [4, 18], "astvisitor": [4, 18], "sai": [4, 18], "want": [4, 5, 8, 17, 18], "float": [4, 18, 23], "number": [4, 5, 8, 18, 19, 23], "done": 4, "class": [4, 11, 18], "doublevisitor": [4, 18], "def": [4, 14, 18, 19, 20, 21, 22], "visit_doubl": [4, 18], "self": [4, 11, 18], "eval": [4, 18], "d_visitor": [4, 18], "accept": [4, 5, 8, 18], "love": 5, "you": [5, 8, 12, 18, 23], "help": [5, 12, 14, 19, 20, 21, 22, 23], "better": [5, 16], "todai": [5, 18], "contributor": 5, "problem": [5, 19], "__": [5, 8, 23], "issu": [5, 18, 23], "request": [5, 11], "submit": 5, "devconv": 5, "hesit": 5, "rais": [5, 11, 23], "github": [5, 8, 23], "project": [5, 7, 23], "page": [5, 7], "http": [5, 8, 20, 23], "com": [5, 8, 23], "bluebrain": [5, 8, 23], "sourc": [5, 7, 11, 23], "our": [5, 8], "repositori": [5, 8, 23], "even": [5, 18, 23], "pull": [5, 23], "pr": 5, "fix": 5, "propos": 5, "your": [5, 8, 12, 23], "work": [5, 8, 23], "sure": [5, 8], "what": [5, 14, 19, 20, 21, 22], "kind": [5, 18], "chang": 5, "open": [5, 19, 23], "outlin": 5, "so": [5, 14, 15, 19, 20], "coordin": 5, "effort": [5, 19], "prevent": 5, "duplic": [5, 17], "craft": 5, "successfulli": 5, "small": [5, 11, 15, 17], "directli": [5, 15, 16, 23], "tracker": 5, "mayb": 5, "alreadi": 5, "inform": [5, 7, 9, 17], "workaround": 5, "readili": 5, "avail": [5, 8, 9, 11, 16, 18], "soon": [5, 23], "possibl": [5, 11, 19], "reproduc": 5, "confirm": [5, 23], "much": 5, "prefer": 5, "sampl": [5, 19], "wish": [5, 8], "fork": 5, "guid": 5, "git": [5, 8], "checkout": 5, "my": 5, "master": [5, 23], "patch": 5, "test": [5, 7, 11, 12, 14, 15, 16, 18, 23], "case": [5, 7, 8, 14, 18, 19], "enabl": [5, 8, 20], "nmodl_test_format": 5, "cmake": [5, 8], "format": [5, 7, 11], "util": 5, "hpc": 5, "bin": [5, 8, 23], "lang": 5, "directori": [5, 8, 23], "src": [5, 15, 16, 19], "main": 5, "cpp": [5, 14, 16, 19, 20, 21, 22], "dry": 5, "full": [5, 23], "suit": 5, "commit": 5, "descript": 5, "messag": [5, 23], "push": 5, "origin": 5, "send": 5, "upstream": 5, "compon": 5, "rebas": 5, "forc": [5, 23], "f": [5, 11, 14, 16, 17, 18, 20], "That": 5, "thank": 5, "after": [5, 9, 17, 19, 23], "merg": 5, "safe": [5, 15], "delet": 5, "remot": 5, "either": [5, 8], "web": [5, 11, 23], "ui": 5, "d": [5, 18], "latest": [5, 8, 23], "version": [5, 8, 18, 23], "ff": 5, "add_newlin": 5, "add_multi_lin": 5, "know": [5, 8, 16, 23], "formatt": 5, "bash": [5, 8], "instal": [5, 7, 14, 18, 19, 20, 21, 22], "virtual": 5, "golden": 5, "build": [5, 7, 23], "dir": [5, 8], "target": [5, 8, 23], "generate_refer": 5, "regener": 5, "save": 5, "submodul": [5, 7, 8, 10], "sha": 5, "repo": [5, 8], "ssh": 5, "authent": 5, "url": [5, 23], "rememb": 5, "rule": 5, "detach": 5, "head": 5, "modifi": [5, 19, 20], "best": [5, 8, 23], "happen": 5, "locat": [5, 14, 18, 19, 20, 21, 22], "packag": [5, 7, 8], "mai": [5, 11, 14, 15, 19, 20, 21, 22], "impact": 5, "api": [5, 7, 18], "sandbox": 5, "virtualenv": 5, "pyenv": 5, "pipenv": 5, "venv": 5, "wheel": [5, 8, 18], "command": [5, 8, 23], "pip": [5, 8, 14, 18, 19, 20, 21, 22], "dep": [5, 8], "execut": [5, 8], "test_wheel": [5, 8], "path": [5, 8, 11, 23], "previou": 5, "step": [5, 9, 19, 20], "leak": 5, "clang": 5, "tidi": 5, "valgrind": 5, "track": 5, "ye": [5, 9], "nmodl_lex": 5, "Or": [5, 23], "ctest": 5, "memcheck": 5, "3": [5, 7, 8, 11, 17, 18, 21, 22, 23], "15": [5, 8, 18, 21, 22], "denable_clang_tidi": 5, "ON": [5, 8], "blame": 5, "while": [5, 9], "produc": 5, "face": 5, "compil": [5, 8, 15, 16, 17, 23], "hodhux": 5, "105": 5, "26": 5, "declar": [5, 19], "celsiu": 5, "backtrac": 5, "time": [5, 11, 15, 16, 17, 19, 20], "respons": 5, "ast": [5, 7, 9, 10, 12, 14, 19, 20, 21, 22, 23], "doesn": [5, 16], "immedi": 5, "explain": 5, "why": 5, "end": [5, 11, 14, 18, 19, 23], "wai": [5, 8, 14, 17], "don": 5, "tool": [5, 8, 23], "latter": 5, "link": [6, 8], "doxygen": [6, 23], "framework": [7, 9, 11, 18], "fund": 7, "acknowledg": 7, "get": [7, 11, 12, 13, 18, 20], "clone": 7, "prerequisit": 7, "languag": [7, 18, 19, 23], "visitor": [7, 10, 12, 14, 16, 19, 20, 21, 22, 23], "pars": [7, 8, 9, 11, 12, 14, 19, 20, 21, 22, 23], "construct": [7, 8, 9, 14, 15, 16, 17, 20, 21, 22], "queri": 7, "object": [7, 8, 11], "keyword": [7, 8, 19, 23], "ndmol": 7, "special": [7, 14], "integ": [7, 14], "tutori": [7, 13, 14, 19, 20, 21, 22, 23], "And": [7, 8, 23], "lookup": [7, 14, 19, 20, 21, 22], "symbol": [7, 8, 11, 14, 15, 19, 20, 21, 22, 23], "custom": [7, 16, 23], "easi": [7, 23], "curi": 7, "integr": [7, 11, 20, 23], "od": [7, 8, 10, 12, 13, 14, 15, 18, 19, 20, 21, 22, 23], "kinet": [7, 9, 13, 16], "nonlinear": [7, 9, 13, 20, 21], "scheme": [7, 13, 17, 20], "reaction": [7, 17], "mass": [7, 17], "action": [7, 17, 23], "type": [7, 8, 11, 18, 23], "statement": [7, 11, 17, 18, 19], "f_flux": 7, "b_flux": 7, "todo": [7, 18], "conserv": [7, 9], "ex": 7, "5": [7, 8, 18, 21, 22, 23], "sympysolv": [7, 16], "pade": [7, 11, 23], "approxim": [7, 11, 16, 19, 23], "6": [7, 8, 11, 14, 18, 21, 22, 23], "spars": [7, 9, 13, 17, 21], "derivimplicit": [7, 9, 13, 17], "solver": [7, 8, 11, 12, 13, 17, 20, 21, 22, 23], "newton": [7, 11, 17], "fall": 7, "back": [7, 18, 23], "7": [7, 8, 14, 18, 20, 21, 22], "got": 7, "question": 7, "found": [7, 11, 18, 19], "bug": [7, 8, 18], "miss": 7, "featur": [7, 9], "submiss": 7, "guidelin": [7, 23], "develop": [7, 8, 23], "convent": 7, "index": [7, 23], "instruct": [8, 23], "machin": 8, "purpos": 8, "maintain": 8, "note": [8, 18, 23], "itself": [8, 19], "sh": [8, 23], "recurs": 8, "cd": 8, "modern": [8, 18, 23], "14": [8, 18, 21, 22], "necessari": [8, 18, 19], "flex": 8, "bison": 8, "8": [8, 18, 19, 20, 21, 22, 23], "jinja2": 8, "10": [8, 18, 21, 22], "pyyaml": 8, "13": [8, 18, 21, 22], "pytest": 8, "sympi": [8, 13, 15, 16, 17, 19, 20, 23], "textwrap": 8, "On": 8, "o": [8, 17, 18, 19, 23], "x": [8, 11, 14, 16, 17, 18, 23], "typic": [8, 11], "outdat": 8, "compat": [8, 23], "recent": 8, "recommend": [8, 17], "homebrew": 8, "brew": 8, "python3": [8, 23], "pip3": 8, "txt": 8, "export": 8, "usr": 8, "appl": 8, "m1": 8, "correspond": [8, 14, 19], "under": [8, 23], "ubuntu": 8, "18": [8, 18, 21, 22, 23], "04": 8, "enough": 8, "toolchain": 8, "apt": 8, "gcc": 8, "mkdir": 8, "p": [8, 18], "dcmake_install_prefix": 8, "home": 8, "parallel": 8, "hint": 8, "By": 8, "default": [8, 11, 15, 19, 23], "nmodl_enable_python_bind": 8, "increas": 8, "lot": 8, "complex": 8, "disabl": 8, "bind": 8, "restrict": 8, "job": 8, "number_of_parallel_job": 8, "thread": 8, "pythonpath": 8, "lib": [8, 23], "dflex_execut": 8, "dbison_execut": 8, "mainli": [8, 9], "site": 8, "folder": [8, 23], "becom": 8, "option1": 8, "value1": 8, "option2": 8, "value2": 8, "variou": [8, 9, 18, 23], "scikit": 8, "core": 8, "readthedoc": 8, "io": [8, 23], "en": [8, 23], "configur": 8, "html": [8, 23], "_": 8, "notabl": [8, 9], "maco": 8, "abov": [8, 14, 18, 23], "without": [8, 14, 23], "against": 8, "libpython": 8, "embed": 8, "evalu": [8, 11, 20], "automat": [8, 19], "taken": 8, "care": 8, "pybind11": 8, "some": [8, 9, 11, 16, 18, 19, 20], "cannot": 8, "runtim": [8, 11, 16, 23], "instead": [8, 11, 14, 15, 19], "load": [8, 11, 23], "librari": [8, 16, 19, 23], "wrapper": 8, "manag": 8, "dynam": 8, "dlink_against_python": 8, "fals": [8, 11, 18, 20, 21, 22, 23], "binari": 8, "own": [8, 12, 23], "libpywrapp": 8, "nmodl_pylib": 8, "dylib": 8, "cellar": 8, "correctli": 8, "_test": 8, "kumbhar": [8, 23], "workarena": 8, "bbp": 8, "incub": 8, "nocmodl": [8, 20], "debug": [8, 23], "testmodtoken": 8, "lexer": 8, "modtoken": 8, "60": 8, "01": 8, "sec": [8, 20], "testlex": 8, "token": [8, 23], "00": 8, "testpars": 8, "scenario": 8, "macro": 8, "anywher": 8, "empti": 8, "legaci": [8, 20], "minim": 8, "interpet": 8, "hh": 8, "given": [8, 11, 14, 16, 17, 18, 20], "python_execut": 8, "addition": 8, "pandoc": 8, "sudo": 8, "entir": [8, 18], "generate_doc": 8, "script": 8, "doc": [8, 9, 23], "put": 8, "output": [8, 18, 19, 23], "temporari": 8, "programm": [9, 23], "thu": 9, "data": [9, 23], "structur": 9, "few": [9, 11, 18], "verbatim": [9, 16, 23], "lack": 9, "tabl": [9, 14, 19, 20, 21, 22, 23], "summar": 9, "backend": [9, 18, 23], "procedur": 9, "net_rec": [9, 23], "constant": [9, 11, 14, 19, 20, 21, 22, 23], "function_t": 9, "constructor": 9, "destructor": 9, "independ": [9, 17, 20], "flow": 9, "IF": 9, "for_netcon": 9, "titl": 9, "sweep": 9, "protect": 9, "watch": 9, "mutexlock": 9, "mutexunlock": 9, "compart": 9, "longitudinal_diffus": 9, "lag": 9, "valenc": 9, "nonspecific_curr": [9, 19, 23], "electrode_curr": 9, "point_process": [9, 23], "bbcorepoint": 9, "extern": 9, "threadsaf": 9, "comment": [9, 18], "rung": 9, "after_cvod": 9, "simeq": [9, 19], "cvode_t": 9, "cvode_v": 9, "content": [10, 20, 22], "get_ast": [10, 11], "parse_fil": [10, 11, 23], "parse_stream": [10, 11], "to_json": [10, 11, 23], "list_exampl": [10, 11, 23], "load_exampl": [10, 11, 23], "differentiate2c": [10, 11, 19], "forwards_euler2c": [10, 11], "integrate2c": [10, 11], "search_and_replace_protected_identifiers_from_sympi": [10, 11], "search_and_replace_protected_identifiers_to_sympi": [10, 11], "solve_lin_system": [10, 11, 15], "solve_non_lin_system": [10, 11, 16], "_nmodl": 11, "filenam": 11, "root": [11, 23], "success": 11, "istream": 11, "ifstream": 11, "nstep": 11, "compact": 11, "bool": 11, "expand": [11, 20], "add_nmodl": 11, "json": [11, 18, 23], "true": [11, 18, 20, 21, 22, 23], "exclude_typ": 11, "excludetyp": 11, "exclud": 11, "vizual": 11, "abstract": [11, 23], "nmodl_ast": 11, "visual": [11, 12, 23], "browser": [11, 23], "viewer": 11, "d3": 11, "j": [11, 14, 16, 17], "none": [11, 18], "dependent_var": 11, "var": [11, 18], "prev_express": 11, "analyt": [11, 16, 17, 19, 20, 23], "suppli": [11, 14, 19, 20, 21, 22], "solut": [11, 15, 16, 17, 19, 20], "df": 11, "dx": 11, "furthermor": 11, "themselv": 11, "substitut": [11, 14, 19], "result": [11, 17, 18, 19], "coincid": [11, 19], "lh": [11, 14, 18, 19], "simplifi": [11, 19, 20], "simpl": [11, 19], "co": 11, "y": [11, 14, 18], "dy": [11, 14], "sin": 11, "preceed": [11, 14, 19], "12": [11, 18, 21, 22], "diff_str": 11, "dt_var": 11, "function_cal": 11, "forward": [11, 14, 17, 19, 23], "referenc": [11, 14], "timestep": [11, 20], "use_pade_approx": [11, 20], "expect": 11, "power": 11, "correct": [11, 19, 20], "second": [11, 18, 20], "t_var": 11, "exact": [11, 16, 17, 20], "notimplementederror": 11, "too": [11, 16], "hard": 11, "fail": [11, 20], "eq": 11, "eq_str": 11, "tmp_unique_prefix": 11, "small_system": 11, "do_cs": 11, "gaussian": [11, 15, 17], "elimin": [11, 15, 17, 23], "subexpress": [11, 15, 23], "numer": [11, 15, 16, 17, 19, 20], "matrix": [11, 14, 15, 16], "vector": [11, 14, 16], "lu": [11, 15, 17], "factor": [11, 15, 17], "uniqu": 11, "easili": [11, 23], "append": [11, 18], "tmp": [11, 23], "jacobian": [11, 16, 17], "sever": [12, 19], "cover": 12, "mani": 12, "aspect": 12, "begin": [12, 14], "basic": 12, "final": [12, 14, 17], "understand": [12, 14, 19, 20, 21, 22, 23], "yourself": 12, "ipynb": [13, 23], "overview": [13, 14, 17, 20, 21, 22], "nodl": 13, "more": [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], "notebook": [14, 17, 19, 20, 21, 22, 23], "appli": 14, "within": [14, 16, 18, 19], "kineticblockvisitor": 14, "transform": [14, 17, 23], "equival": [14, 17, 19], "higher": [14, 20, 21, 22], "approach": [14, 20, 21, 22], "speci": 14, "a_j": 14, "y_j": 14, "react": 14, "accord": 14, "sum_j": 14, "nu_": 14, "ij": 14, "l": [14, 23], "overset": 14, "k_i": 14, "rightarrow": 14, "coeffici": [14, 20], "stoichiometr": 14, "posit": [14, 18, 23], "dy_j": 14, "sum_i": 14, "r_i": 14, "prod_j": 14, "a0": 14, "3a1": 14, "2a2": 14, "2a0": 14, "a1": 14, "kf": 14, "kb": 14, "etc": 14, "space": 14, "stochiometr": 14, "implicitli": 14, "k": [14, 19], "_j": 14, "backward": [14, 17], "same": [14, 18, 20, 23], "rh": [14, 18, 19], "exchang": 14, "_i": [14, 16], "align": 14, "h": [14, 19, 23], "parenthes": 14, "add": [14, 19, 23], "dh": 14, "2y": 14, "product": 14, "syntact": 14, "sugar": 14, "standard": 14, "flux": 14, "convers": 14, "z": 14, "last": 14, "algebra": [14, 16, 17], "steadyst": 14, "captur": [14, 18, 19, 20, 21, 22], "run_kinetic_visitor_and_return_deriv": 14, "mod_str": [14, 18, 19, 20, 21, 22], "nmdol": [14, 19, 20, 21, 22], "fold": [14, 19, 20, 21, 22, 23], "inlin": [14, 19, 20, 21, 22, 23], "renam": [14, 19, 20, 21, 22, 23], "constantfoldervisitor": [14, 19, 20, 21, 22], "inlinevisitor": [14, 19, 20, 21, 22], "localvarrenamevisitor": [14, 19, 20, 21, 22], "derivative_block": [14, 18, 20, 21, 22], "element": 14, "1x2": 14, "matric": [14, 15], "nu": 14, "blackward": 14, "ah": 14, "bm": 14, "written": [14, 17], "dm": [14, 20], "ex1": [14, 19, 20, 21, 22], "kin": 14, "kf0_": 14, "kb0_": 14, "39": [14, 18], "annihil": 14, "ex2": [14, 19, 20, 21, 22], "ex3": [14, 19, 20], "source0_": 14, "ex4": [14, 19, 20], "kf1_": 14, "ex5": [14, 19, 20], "simultan": [15, 16], "py": [15, 19], "suffici": 15, "leq3": 15, "cse": [15, 21, 22, 23], "larger": [15, 17], "partial": [15, 16, 17], "pivot": [15, 17], "crout": 15, "commonli": 16, "kineticblock": 16, "involv": [16, 20, 21], "iter": [16, 17], "x_j": [16, 17], "routin": [16, 20], "x_0": 16, "chosen": 16, "long": 16, "lie": 16, "far": 16, "awai": 16, "newton_solv": 16, "eigen": 16, "header": 16, "tag": [16, 20, 21, 22], "newton_numerical_diff_solv": 16, "variant": 16, "estim": 16, "nb": 16, "yet": [16, 20], "about": 17, "varieti": [17, 19], "high": [17, 18], "altern": 17, "reduc": 17, "deal": [17, 20], "hierarchi": 17, "translat": 17, "applic": 17, "mathcal": [17, 19], "derivimplcit": 17, "alwai": 17, "unstabl": 17, "instabl": 17, "f_i": 17, "desir": 17, "satisfi": 17, "condit": [17, 18], "x_": 17, "x_n": 17, "primarili": 18, "design": [18, 23], "optimis": [18, 23], "architectur": [18, 23], "cpu": [18, 23], "gpu": [18, 23], "introspect": [18, 23], "underli": 18, "linux": 18, "mac": 18, "window": 18, "futur": 18, "subsystem": 18, "section": 18, "take": [18, 19], "200": 18, "mo": 18, "helper": 18, "veri": 18, "edg": 18, "slightli": 18, "being": [18, 23], "address": 18, "modeldb": 18, "databas": [18, 23], "below": 18, "liste": 18, "diff_eq_express": 18, "prime": 18, "range_var": 18, "param_assign": 18, "len": 18, "17": [18, 21, 22, 23], "apart": 18, "synthet": 18, "returnn": 18, "avoid": [18, 19, 20], "9": [18, 19, 21, 22, 23], "function_block": 18, "new_lookup_visitor": 18, "expression_stat": 18, "visit": 18, "get_nod": 18, "functionbock": 18, "retriv": 18, "11": [18, 21, 22], "nmodl_glob": 18, "IN": 18, "unknown": 18, "scope": [18, 20, 23], "statu": [18, 23], "ion_ica": 18, "codegen_var": 18, "ion_cai": 18, "ion_cao": 18, "ion_eca": 18, "read_ion": 18, "000000": 18, "050000": 18, "000100": 18, "100000": 18, "unit_def": 18, "factor_def": 18, "to_solv": 18, "36": 18, "40": 18, "statementblock4": 18, "16": [18, 21, 22], "get_variables_with_properti": 18, "argument": 18, "nmodltyp": 18, "ions_var": 18, "read_ion_var": 18, "write_ion_var": 18, "travers": 18, "inherit": 18, "achiev": 18, "But": [18, 19], "encount": 18, "hand": 18, "parametervisitor": 18, "__init__": 18, "in_paramet": 18, "visit_param_block": 18, "visit_children": 18, "visit_nam": 18, "visit_integ": 18, "param_visitor": 18, "With": 18, "littl": 18, "mfunc_src": 18, "myfunc": 18, "mfunc_ast": 18, "pygener": 18, "pycod": 18, "indent": 18, "func_nam": 18, "visit_function_block": 18, "param": 18, "get_node_nam": 18, "params_str": 18, "join": 18, "visit_statement_block": 18, "visit_expression_stat": 18, "expr": 18, "binaryexpress": 18, "op": 18, "lhsn": 18, "visit_if_stat": 18, "get_statement_block": 18, "elseif": 18, "visit_else_stat": 18, "visit_wrapped_express": 18, "visit_binary_express": 18, "pow": [18, 19, 20], "visit_var_nam": 18, "19": [18, 21, 22], "pygen": 18, "lt": 18, "ontologi": 18, "20": [18, 21, 22], "hx": 18, "ncit": 18, "c17145": 18, "c17008": 18, "potassium": 18, "chebi": 18, "29101": 18, "eca": 18, "gnabar": [18, 19], "gkbar": [18, 19], "gl": [18, 19], "el": [18, 19, 23], "gk": [18, 19], "ont_stat": 18, "ontology_stat": 18, "ontology_id": 18, "o_id": 18, "situat": 19, "motiv": 19, "calcul": 19, "001": 19, "computation": 19, "ineffici": 19, "wa": [19, 20, 23], "ad": 19, "manual": 19, "room": 19, "incorrect": 19, "improv": [19, 23], "sympyconductancevisitor": 19, "sympy_conductance_visitor": 19, "hpp": 19, "different": 19, "math": 19, "dot": [19, 20], "asign": 19, "g_i_0": 19, "account": 19, "ran": 19, "occur": 19, "analys": [19, 23], "complic": [19, 20], "explicit": 19, "side": 19, "test_od": 19, "run_conductance_visitor_and_return_breakpoint": 19, "breakpoint_block": 19, "equal": 19, "g_na_0": 19, "10000000000000001": 19, "g__0": 19, "ek": 19, "ik": 19, "il": 19, "x3": 19, "compar": 19, "identifi": 19, "ex6": [19, 20], "x1": 19, "x2": 19, "ex7": 19, "sympysolvervisitor": [20, 21, 22], "doe": [20, 21, 22], "possibli": 20, "reprens": 20, "dsolv": 20, "ccode": 20, "noth": 20, "revert": 20, "mod2c": 20, "extra": 20, "taylor": 20, "seri": 20, "extract": 20, "a_i": 20, "a_0": 20, "a_1": 20, "a_2": 20, "f_": 20, "exponenti": [20, 23], "aproxim": 20, "www": [20, 23], "eccomas2016": 20, "org": [20, 23], "proceed": 20, "pdf": [20, 23], "7366": 20, "sympy_solv": [20, 21, 22], "run_sympy_solv": [20, 21, 22], "splitlin": 20, "exp": 20, "minf": 20, "mtau": 20, "sqrt": 20, "unsupport": 20, "leav": 20, "later": [20, 23], "log": 20, "sysytem": [21, 22], "mc": [21, 22], "eigen_newton_solv": [21, 22], "old_mc": [21, 22], "old_m": [21, 22], "nmodl_eigen_x": [21, 22], "nmodl_eigen_f": [21, 22], "nmodl_eigen_j": [21, 22], "c1": [21, 22], "o1": [21, 22], "o2": [21, 22], "p0": [21, 22], "p1": [21, 22], "ihkin": [21, 22], "alpha": [21, 22], "beta": [21, 22], "k3p": [21, 22], "k4": [21, 22], "k1ca": [21, 22], "k2": [21, 22], "evaluate_fct": [21, 22], "old_c1": [21, 22], "old_o1": [21, 22], "old_o2": [21, 22], "old_p0": [21, 22], "old_p1": [21, 22], "21": [21, 22], "22": [21, 22], "23": [21, 22], "24": [21, 22], "workflow": 23, "codecov": 23, "cii": 23, "practic": 23, "engin": 23, "euron": 23, "anguag": 23, "yale": 23, "edu": 23, "static": 23, "py_doc": 23, "modelspec": 23, "programmat": 23, "techniqu": 23, "modular": 23, "flexibl": 23, "domain": 23, "wide": 23, "intracellular": 23, "submodel": 23, "synaps": 23, "expsyn": 23, "tau": 23, "nanoamp": 23, "microsiemen": 23, "1e9": 23, "weight": 23, "rst": 23, "blob": 23, "capabl": 23, "imag": 23, "fulli": 23, "jupyt": 23, "compos": 23, "termin": 23, "entrypoint": 23, "readm": 23, "apr": 23, "2019": 23, "52": 23, "nmodl_str": 23, "download": 23, "wget": 23, "raw": 23, "githubusercont": 23, "yml": 23, "duid": 23, "id": 23, "dgid": 23, "hostnam": 23, "goe": 23, "similar": 23, "09": 23, "49": 23, "53": 23, "923": 23, "notebookapp": 23, "4c8edabe52e1": 23, "127": 23, "8888": 23, "a7902983bad430a11935": 23, "stop": 23, "server": 23, "shut": 23, "kernel": 23, "twice": 23, "skip": 23, "nbserver": 23, "past": 23, "navig": 23, "my_notebook": 23, "subfold": 23, "nmod": 23, "wikipedia": 23, "wiki": 23, "abstract_syntax_tre": 23, "look": 23, "kei": 23, "666852": 23, "57329449": 23, "12c9a400": 23, "7114": 23, "11e9": 23, "8da5": 23, "0042590044ec": 23, "gif": 23, "alt": 23, "ast_viz": 23, "central": 23, "children": 23, "exisit": 23, "hi": 23, "frameowrk": 23, "1000000000": 23, "rich": 23, "group__visitor__class": 23, "theoret": 23, "characteris": 23, "rat": 23, "neocort": 23, "column": 23, "microcircuit": 23, "publish": 23, "2015": 23, "cell": 23, "s0092": 23, "8674": 23, "2815": 23, "2901191": 23, "57336711": 23, "2cc0b200": 23, "7127": 23, "8053": 23, "8f662e2ec191": 23, "png": 23, "perf": 23, "stat": 23, "optim": 23, "intel": 23, "amd": 23, "arm": 23, "nvidia": 23, "platform": 23, "openacc": 23, "openmp": 23, "choos": 23, "group__codegen__backend": 23, "subcommand": 23, "text": 23, "exit": 23, "sub": 23, "verbos": 23, "info": 23, "logger": 23, "trace": 23, "warn": 23, "critic": 23, "off": 23, "scratch": 23, "intermedi": 23, "nrnunit": 23, "host": 23, "acc": 23, "acceler": 23, "oacc": 23, "unrol": 23, "loop": 23, "const": 23, "statist": 23, "stdout": 23, "ao": 23, "soa": 23, "datatyp": 23, "incompat": 23, "draft": 23, "paper": 23, "pramod": 23, "omar": 23, "awil": 23, "liam": 23, "keegan": 23, "jorg": 23, "alonso": 23, "jame": 23, "king": 23, "michael": 23, "hine": 23, "felix": 23, "sch\u00fcrmann": 23, "multi": 23, "eprint": 23, "arxiv": 23, "1905": 23, "02241": 23, "feel": 23, "ticket": 23, "migrat": 23, "nmodlbench": 23, "nmodldb": 23, "softwar": 23, "blue": 23, "brain": 23, "research": 23, "center": 23, "\u00e9cole": 23, "polytechniqu": 23, "f\u00e9d\u00e9rale": 23, "de": 23, "lausann": 23, "epfl": 23, "swiss": 23, "govern": 23, "eth": 23, "board": 23, "feder": 23, "institut": 23, "technologi": 23, "nation": 23, "health": 23, "nih": 23, "grant": 23, "r01ns11613": 23, "univers": 23, "european": 23, "union": 23, "horizon": 23, "2020": 23, "innov": 23, "agreement": 23, "No": 23, "785907": 23, "human": 23, "sga2": 23, "copyright": 23, "2017": 23, "2023": 23, "ci": 23, "badg": 23, "svg": 23, "dev": 23, "azur": 23, "pramodskumbhar": 23, "_api": 23, "branchnam": 23, "_build": 23, "definitionid": 23, "gh": 23, "a3nu9vbncb": 23, "bestpractic": 23, "coreinfrastructur": 23, "4467": 23}, "objects": {"": [[11, 0, 0, "-", "nmodl"]], "nmodl": [[11, 1, 1, "", "NmodlDriver"], [11, 0, 0, "-", "ast"], [11, 0, 0, "-", "dsl"], [11, 0, 0, "-", "ode"], [11, 0, 0, "-", "symtab"], [11, 3, 1, "", "to_json"], [11, 3, 1, "", "to_nmodl"], [11, 0, 0, "-", "visitor"]], "nmodl.NmodlDriver": [[11, 2, 1, "", "get_ast"], [11, 2, 1, "", "parse_file"], [11, 2, 1, "", "parse_stream"], [11, 2, 1, "", "parse_string"]], "nmodl.ast": [[11, 3, 1, "", "view"]], "nmodl.dsl": [[11, 3, 1, "", "list_examples"], [11, 3, 1, "", "load_example"]], "nmodl.ode": [[11, 3, 1, "", "differentiate2c"], [11, 3, 1, "", "forwards_euler2c"], [11, 3, 1, "", "integrate2c"], [11, 3, 1, "", "search_and_replace_protected_identifiers_from_sympy"], [11, 3, 1, "", "search_and_replace_protected_identifiers_to_sympy"], [11, 3, 1, "", "solve_lin_system"], [11, 3, 1, "", "solve_non_lin_system"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:function"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "function", "Python function"]}, "titleterms": {"cabl": 0, "equat": 0, "current": [1, 2], "nmodl": [1, 3, 5, 7, 8, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], "keyword": [1, 2], "nonspecific_curr": 1, "ion": 2, "ndmol": 2, "write": 2, "storag": 2, "optim": 2, "special": 2, "case": 2, "zero": 2, "area": 2, "node": 2, "pointer": 3, "integ": 3, "variabl": [3, 14], "visitor": [4, 11, 18], "pars": [4, 18], "model": [4, 9, 18], "construct": [4, 18], "ast": [4, 11, 18], "queri": [4, 18], "object": [4, 18], "lookup": [4, 18], "symbol": [4, 18], "tabl": [4, 7, 18], "custom": [4, 18], "contribut": [5, 7], "framework": [5, 8, 23], "got": 5, "question": 5, "found": 5, "bug": 5, "miss": 5, "featur": 5, "submiss": 5, "guidelin": 5, "develop": 5, "convent": 5, "c": 6, "api": [6, 23], "about": [7, 12, 23], "introduct": [7, 18, 19, 23], "content": [7, 11], "jupyt": [7, 12, 13], "notebook": [7, 12, 13], "refer": 7, "indic": 7, "instal": [8, 23], "get": 8, "start": 8, "clone": 8, "sourc": 8, "prerequisit": 8, "build": 8, "project": 8, "test": [8, 19, 20, 21, 22], "modul": [8, 11], "gener": [8, 18, 23], "document": [8, 23], "The": [9, 12, 23], "neuron": 9, "languag": 9, "python": [10, 18, 23], "packag": 10, "submodul": 11, "dsl": 11, "od": [11, 17], "symtab": 11, "kinet": [14, 17], "scheme": 14, "reaction": 14, "law": 14, "mass": 14, "action": 14, "block": [14, 17], "format": 14, "other": 14, "type": 14, "statement": 14, "f_flux": 14, "b_flux": 14, "todo": 14, "conserv": 14, "exampl": [14, 18, 19, 20, 21, 22, 23], "ex": [14, 19, 20, 21, 22], "1": [14, 19, 20, 21, 22], "2": [14, 19, 20, 21, 22], "3": [14, 19, 20], "4": [14, 19, 20], "5": [14, 19, 20], "linear": [15, 17], "solver": [15, 16], "nonlinear": [16, 17], "newton": 16, "fall": 16, "back": 16, "integr": 17, "deriv": 17, "interfac": 18, "tutori": 18, "And": 18, "easi": 18, "code": [18, 23], "us": [18, 23], "curi": 18, "inform": 18, "conduct": 19, "implement": [19, 20, 21, 22], "6": [19, 20], "7": 19, "sympysolv": [20, 21, 22], "cnexp": 20, "pade": 20, "approxim": 20, "derivimplicit": 21, "spars": 22, "try": 23, "docker": 23, "high": 23, "level": 23, "analysi": 23, "citat": 23, "support": 23, "contribuit": 23, "benchmark": 23, "fund": 23, "acknowledg": 23}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "nbsphinx": 4, "sphinx.ext.viewcode": 1, "sphinx": 57}, "alltitles": {"Cable Equation": [[0, "cable-equation"]], "Currents": [[1, "currents"]], "NMODL Keywords": [[1, "nmodl-keywords"]], "NONSPECIFIC_CURRENT": [[1, "nonspecific-current"]], "Ions": [[2, "ions"]], "NDMOL Keywords": [[2, "ndmol-keywords"]], "Keyword: WRITE": [[2, "keyword-write"]], "Writing Ion Currents": [[2, "writing-ion-currents"]], "Storage": [[2, "storage"]], "Optimizing Storage": [[2, "optimizing-storage"]], "Special Case: zero-area nodes": [[2, "special-case-zero-area-nodes"]], "NMODL \u201cpointers\u201d": [[3, "nmodl-pointers"]], "Integer Variables": [[3, "integer-variables"]], "Visitors": [[4, "visitors"]], "Parsing Model and constructing AST": [[4, "parsing-model-and-constructing-ast"]], "Querying AST objects with Visitors": [[4, "querying-ast-objects-with-visitors"]], "Lookup Visitor": [[4, "lookup-visitor"]], "Symbol Table Visitor": [[4, "symbol-table-visitor"], [18, "Symbol-Table-Visitor"]], "Custom AST Visitor": [[4, "custom-ast-visitor"]], "Contributing to the NMODL Framework": [[5, "contributing-to-the-nmodl-framework"]], "Got a Question?": [[5, "got-a-question"]], "Found a Bug?": [[5, "found-a-bug"]], "Missing a Feature?": [[5, "missing-a-feature"]], "Submission Guidelines": [[5, "submission-guidelines"]], "Development Conventions": [[5, "development-conventions"]], "C++ API": [[6, "c-api"]], "About NMODL": [[7, "about-nmodl"], [23, "about-nmodl"]], "Introduction:": [[7, null]], "Contents:": [[7, null]], "Jupyter Notebooks:": [[7, null]], "Contributing:": [[7, null]], "Reference:": [[7, null]], "Indices and tables": [[7, "indices-and-tables"]], "Installing the NMODL Framework": [[8, "installing-the-nmodl-framework"]], "Getting Started": [[8, "getting-started"]], "Cloning Source": [[8, "cloning-source"]], "Prerequisites": [[8, "prerequisites"]], "Build Project": [[8, "build-project"]], "Testing the Installed Module": [[8, "testing-the-installed-module"]], "Generating Documentation": [[8, "generating-documentation"]], "The NEURON MODeling language": [[9, "the-neuron-modeling-language"]], "Python package": [[10, "python-package"]], "Module contents": [[11, "module-nmodl"]], "Submodules": [[11, "submodules"]], "nmodl.ast module": [[11, "module-nmodl.ast"]], "nmodl.dsl module": [[11, "module-nmodl.dsl"]], "nmodl.ode module": [[11, "module-nmodl.ode"]], "nmodl.symtab module": [[11, "module-nmodl.symtab"]], "nmodl.visitor module": [[11, "module-nmodl.visitor"]], "The NMODL Jupyter notebooks": [[12, "the-nmodl-jupyter-notebooks"]], "About the notebooks": [[12, "about-the-notebooks"]], "NMODL jupyter notebooks": [[13, "nmodl-jupyter-notebooks"]], "NMODL Kinetic Scheme": [[14, "NMODL-Kinetic-Scheme"]], "Reaction Kinetics": [[14, "Reaction-Kinetics"]], "Law of Mass Action": [[14, "Law-of-Mass-Action"]], "KINETIC block format": [[14, "KINETIC-block-format"]], "Other types of reaction statement": [[14, "Other-types-of-reaction-statement"]], "f_flux / b_flux variables": [[14, "f_flux-/-b_flux-variables"]], "[TODO] CONSERVE": [[14, "[TODO]-CONSERVE"]], "Examples": [[14, "Examples"], [19, "Examples"], [20, "Examples"], [21, "Examples"], [22, "Examples"]], "Ex. 1": [[14, "Ex.-1"], [19, "Ex.-1"], [20, "Ex.-1"], [21, "Ex.-1"], [22, "Ex.-1"]], "Ex. 2": [[14, "Ex.-2"], [19, "Ex.-2"], [20, "Ex.-2"], [21, "Ex.-2"], [22, "Ex.-2"]], "Ex. 3": [[14, "Ex.-3"], [19, "Ex.-3"], [20, "Ex.-3"]], "Ex. 4": [[14, "Ex.-4"], [19, "Ex.-4"], [20, "Ex.-4"]], "Ex. 5": [[14, "Ex.-5"], [19, "Ex.-5"], [20, "Ex.-5"]], "NMODL LINEAR solver": [[15, "NMODL-LINEAR-solver"]], "NMODL NONLINEAR solver": [[16, "NMODL-NONLINEAR-solver"]], "Newton solver": [[16, "Newton-solver"]], "Fall-back solver": [[16, "Fall-back-solver"]], "NMODL integration of ODEs": [[17, "NMODL-integration-of-ODEs"]], "KINETIC block": [[17, "KINETIC-block"]], "DERIVATIVE block": [[17, "DERIVATIVE-block"]], "LINEAR block": [[17, "LINEAR-block"]], "NONLINEAR block": [[17, "NONLINEAR-block"]], "NMODL Python Interface Tutorial": [[18, "NMODL-Python-Interface-Tutorial"]], "Introduction": [[18, "Introduction"], [19, "Introduction"], [23, "introduction"]], "Parsing Model And Constructing AST": [[18, "Parsing-Model-And-Constructing-AST"]], "Querying AST object with Visitors": [[18, "Querying-AST-object-with-Visitors"]], "Lookup visitor": [[18, "Lookup-visitor"]], "Custom AST visitor": [[18, "Custom-AST-visitor"]], "Easy code generation using AST visitors": [[18, "Easy-code-generation-using-AST-visitors"]], "Example of CURIE information parsing": [[18, "Example-of-CURIE-information-parsing"]], "NMODL CONDUCTANCE": [[19, "NMODL-CONDUCTANCE"]], "Implementation": [[19, "Implementation"], [20, "Implementation"], [21, "Implementation"], [22, "Implementation"]], "Implementation Tests": [[19, "Implementation-Tests"], [20, "Implementation-Tests"], [21, "Implementation-Tests"], [22, "Implementation-Tests"]], "Ex. 6": [[19, "Ex.-6"], [20, "Ex.-6"]], "Ex. 7": [[19, "Ex.-7"]], "NMODL SympySolver - cnexp": [[20, "NMODL-SympySolver---cnexp"]], "Pade approximant": [[20, "Pade-approximant"]], "NMODL SympySolver - derivimplicit": [[21, "NMODL-SympySolver---derivimplicit"]], "NMODL SympySolver - sparse": [[22, "NMODL-SympySolver---sparse"]], "The NMODL Framework": [[23, "the-nmodl-framework"]], "Installation": [[23, "installation"]], "Try NMODL with Docker": [[23, "try-nmodl-with-docker"]], "Using the Python API": [[23, "using-the-python-api"]], "High Level Analysis and Code Generation": [[23, "high-level-analysis-and-code-generation"]], "Documentation": [[23, "documentation"]], "Citation": [[23, "citation"]], "Support / Contribuition": [[23, "support-contribuition"]], "Examples / Benchmarks": [[23, "examples-benchmarks"]], "Funding & Acknowledgment": [[23, "funding-acknowledgment"]]}, "indexentries": {"nmodldriver (class in nmodl)": [[11, "nmodl.NmodlDriver"]], "differentiate2c() (in module nmodl.ode)": [[11, "nmodl.ode.differentiate2c"]], "forwards_euler2c() (in module nmodl.ode)": [[11, "nmodl.ode.forwards_euler2c"]], "get_ast() (nmodl.nmodldriver method)": [[11, "nmodl.NmodlDriver.get_ast"]], "integrate2c() (in module nmodl.ode)": [[11, "nmodl.ode.integrate2c"]], "list_examples() (in module nmodl.dsl)": [[11, "nmodl.dsl.list_examples"]], "load_example() (in module nmodl.dsl)": [[11, "nmodl.dsl.load_example"]], "module": [[11, "module-nmodl"], [11, "module-nmodl.ast"], [11, "module-nmodl.dsl"], [11, "module-nmodl.ode"], [11, "module-nmodl.symtab"], [11, "module-nmodl.visitor"]], "nmodl": [[11, "module-nmodl"]], "nmodl.ast": [[11, "module-nmodl.ast"]], "nmodl.dsl": [[11, "module-nmodl.dsl"]], "nmodl.ode": [[11, "module-nmodl.ode"]], "nmodl.symtab": [[11, "module-nmodl.symtab"]], "nmodl.visitor": [[11, "module-nmodl.visitor"]], "parse_file() (nmodl.nmodldriver method)": [[11, "nmodl.NmodlDriver.parse_file"]], "parse_stream() (nmodl.nmodldriver method)": [[11, "nmodl.NmodlDriver.parse_stream"]], "parse_string() (nmodl.nmodldriver method)": [[11, "nmodl.NmodlDriver.parse_string"]], "search_and_replace_protected_identifiers_from_sympy() (in module nmodl.ode)": [[11, "nmodl.ode.search_and_replace_protected_identifiers_from_sympy"]], "search_and_replace_protected_identifiers_to_sympy() (in module nmodl.ode)": [[11, "nmodl.ode.search_and_replace_protected_identifiers_to_sympy"]], "solve_lin_system() (in module nmodl.ode)": [[11, "nmodl.ode.solve_lin_system"]], "solve_non_lin_system() (in module nmodl.ode)": [[11, "nmodl.ode.solve_non_lin_system"]], "to_json() (in module nmodl)": [[11, "nmodl.to_json"]], "to_nmodl() (in module nmodl)": [[11, "nmodl.to_nmodl"]], "view() (in module nmodl.ast)": [[11, "nmodl.ast.view"]]}}) \ No newline at end of file