From cc53af29d65e0dfd82ec114b8ecbfb8efcecda10 Mon Sep 17 00:00:00 2001 From: 1uc Date: Fri, 9 Aug 2024 12:32:14 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20BlueBrai?= =?UTF-8?q?n/nmodl@c5052b928656f0072af5ff6216ab48f30243c779=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .doctrees/environment.pickle | Bin 148616 -> 148616 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 | 64 +- .../nmodl-sympy-solver-derivimplicit.ipynb | 32 +- .../notebooks/nmodl-sympy-solver-sparse.ipynb | 32 +- ...odegen_1_1_codegen_neuron_cpp_visitor.html | 56 +- ...gen__neuron__cpp__visitor_8hpp_source.html | 56 +- doxygen/namespacenmodl_1_1codegen.html | 2 +- ...gen__neuron__cpp__visitor_8cpp_source.html | 1436 +++++++++-------- notebooks/nmodl-kinetic-schemes.ipynb | 56 +- notebooks/nmodl-python-tutorial.ipynb | 160 +- notebooks/nmodl-sympy-conductance.ipynb | 72 +- notebooks/nmodl-sympy-solver-cnexp.ipynb | 64 +- .../nmodl-sympy-solver-derivimplicit.ipynb | 32 +- notebooks/nmodl-sympy-solver-sparse.ipynb | 32 +- 17 files changed, 1199 insertions(+), 1183 deletions(-) diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle index e77c752c48c7fba9941bb1cf1eed3a6e8ec6e35f..49fb1773cc9349f000443beb1728fd51bdccdacf 100644 GIT binary patch delta 9618 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 V_-z$^I2B@vPbf$)$jF!%^8bI(KMVi> delta 9643 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 LvNI)RcDMfraz#tD diff --git a/.doctrees/nbsphinx/notebooks/nmodl-kinetic-schemes.ipynb b/.doctrees/nbsphinx/notebooks/nmodl-kinetic-schemes.ipynb index f5be06122..ac05f9cf3 100644 --- a/.doctrees/nbsphinx/notebooks/nmodl-kinetic-schemes.ipynb +++ b/.doctrees/nbsphinx/notebooks/nmodl-kinetic-schemes.ipynb @@ -152,10 +152,10 @@ "execution_count": 1, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:33.742696Z", - "iopub.status.busy": "2024-08-09T11:23:33.742467Z", - "iopub.status.idle": "2024-08-09T11:23:35.015466Z", - "shell.execute_reply": "2024-08-09T11:23:35.014691Z" + "iopub.execute_input": "2024-08-09T12:31:26.244012Z", + "iopub.status.busy": "2024-08-09T12:31:26.243460Z", + "iopub.status.idle": "2024-08-09T12:31:27.046034Z", + "shell.execute_reply": "2024-08-09T12:31:27.045177Z" } }, "outputs": [], @@ -169,10 +169,10 @@ "execution_count": 2, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:35.018581Z", - "iopub.status.busy": "2024-08-09T11:23:35.018362Z", - "iopub.status.idle": "2024-08-09T11:23:35.048162Z", - "shell.execute_reply": "2024-08-09T11:23:35.047489Z" + "iopub.execute_input": "2024-08-09T12:31:27.049064Z", + "iopub.status.busy": "2024-08-09T12:31:27.048854Z", + "iopub.status.idle": "2024-08-09T12:31:27.079695Z", + "shell.execute_reply": "2024-08-09T12:31:27.078887Z" } }, "outputs": [], @@ -277,10 +277,10 @@ "execution_count": 3, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:35.051409Z", - "iopub.status.busy": "2024-08-09T11:23:35.050982Z", - "iopub.status.idle": "2024-08-09T11:23:35.055706Z", - "shell.execute_reply": "2024-08-09T11:23:35.055029Z" + "iopub.execute_input": "2024-08-09T12:31:27.083055Z", + "iopub.status.busy": "2024-08-09T12:31:27.082694Z", + "iopub.status.idle": "2024-08-09T12:31:27.087562Z", + "shell.execute_reply": "2024-08-09T12:31:27.086913Z" } }, "outputs": [ @@ -323,10 +323,10 @@ "execution_count": 4, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:35.087608Z", - "iopub.status.busy": "2024-08-09T11:23:35.087126Z", - "iopub.status.idle": "2024-08-09T11:23:35.091110Z", - "shell.execute_reply": "2024-08-09T11:23:35.090441Z" + "iopub.execute_input": "2024-08-09T12:31:27.118850Z", + "iopub.status.busy": "2024-08-09T12:31:27.118384Z", + "iopub.status.idle": "2024-08-09T12:31:27.122871Z", + "shell.execute_reply": "2024-08-09T12:31:27.122158Z" } }, "outputs": [ @@ -367,10 +367,10 @@ "execution_count": 5, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:35.093707Z", - "iopub.status.busy": "2024-08-09T11:23:35.093243Z", - "iopub.status.idle": "2024-08-09T11:23:35.097066Z", - "shell.execute_reply": "2024-08-09T11:23:35.096410Z" + "iopub.execute_input": "2024-08-09T12:31:27.125418Z", + "iopub.status.busy": "2024-08-09T12:31:27.124899Z", + "iopub.status.idle": "2024-08-09T12:31:27.128755Z", + "shell.execute_reply": "2024-08-09T12:31:27.128199Z" }, "scrolled": true }, @@ -412,10 +412,10 @@ "execution_count": 6, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:35.099892Z", - "iopub.status.busy": "2024-08-09T11:23:35.099525Z", - "iopub.status.idle": "2024-08-09T11:23:35.103278Z", - "shell.execute_reply": "2024-08-09T11:23:35.102638Z" + "iopub.execute_input": "2024-08-09T12:31:27.131215Z", + "iopub.status.busy": "2024-08-09T12:31:27.130867Z", + "iopub.status.idle": "2024-08-09T12:31:27.134784Z", + "shell.execute_reply": "2024-08-09T12:31:27.134102Z" }, "scrolled": true }, @@ -459,10 +459,10 @@ "execution_count": 7, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:35.105742Z", - "iopub.status.busy": "2024-08-09T11:23:35.105382Z", - "iopub.status.idle": "2024-08-09T11:23:35.109694Z", - "shell.execute_reply": "2024-08-09T11:23:35.109049Z" + "iopub.execute_input": "2024-08-09T12:31:27.136990Z", + "iopub.status.busy": "2024-08-09T12:31:27.136799Z", + "iopub.status.idle": "2024-08-09T12:31:27.141212Z", + "shell.execute_reply": "2024-08-09T12:31:27.140552Z" } }, "outputs": [ diff --git a/.doctrees/nbsphinx/notebooks/nmodl-python-tutorial.ipynb b/.doctrees/nbsphinx/notebooks/nmodl-python-tutorial.ipynb index 0810f196c..108eaddd0 100644 --- a/.doctrees/nbsphinx/notebooks/nmodl-python-tutorial.ipynb +++ b/.doctrees/nbsphinx/notebooks/nmodl-python-tutorial.ipynb @@ -30,10 +30,10 @@ "execution_count": 1, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:43.684245Z", - "iopub.status.busy": "2024-08-09T11:23:43.684036Z", - "iopub.status.idle": "2024-08-09T11:23:44.957833Z", - "shell.execute_reply": "2024-08-09T11:23:44.957043Z" + "iopub.execute_input": "2024-08-09T12:31:38.781523Z", + "iopub.status.busy": "2024-08-09T12:31:38.781319Z", + "iopub.status.idle": "2024-08-09T12:31:39.579751Z", + "shell.execute_reply": "2024-08-09T12:31:39.578985Z" } }, "outputs": [], @@ -63,10 +63,10 @@ "execution_count": 2, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:44.961286Z", - "iopub.status.busy": "2024-08-09T11:23:44.960772Z", - "iopub.status.idle": "2024-08-09T11:23:44.990112Z", - "shell.execute_reply": "2024-08-09T11:23:44.989419Z" + "iopub.execute_input": "2024-08-09T12:31:39.583094Z", + "iopub.status.busy": "2024-08-09T12:31:39.582627Z", + "iopub.status.idle": "2024-08-09T12:31:39.610578Z", + "shell.execute_reply": "2024-08-09T12:31:39.609903Z" } }, "outputs": [], @@ -86,10 +86,10 @@ "execution_count": 3, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:44.993193Z", - "iopub.status.busy": "2024-08-09T11:23:44.992903Z", - "iopub.status.idle": "2024-08-09T11:23:44.996748Z", - "shell.execute_reply": "2024-08-09T11:23:44.996178Z" + "iopub.execute_input": "2024-08-09T12:31:39.613667Z", + "iopub.status.busy": "2024-08-09T12:31:39.613261Z", + "iopub.status.idle": "2024-08-09T12:31:39.617092Z", + "shell.execute_reply": "2024-08-09T12:31:39.616423Z" } }, "outputs": [], @@ -152,10 +152,10 @@ "execution_count": 4, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:44.999514Z", - "iopub.status.busy": "2024-08-09T11:23:44.998988Z", - "iopub.status.idle": "2024-08-09T11:23:45.003038Z", - "shell.execute_reply": "2024-08-09T11:23:45.002486Z" + "iopub.execute_input": "2024-08-09T12:31:39.619577Z", + "iopub.status.busy": "2024-08-09T12:31:39.619225Z", + "iopub.status.idle": "2024-08-09T12:31:39.623100Z", + "shell.execute_reply": "2024-08-09T12:31:39.622434Z" } }, "outputs": [], @@ -183,10 +183,10 @@ "execution_count": 5, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:45.005749Z", - "iopub.status.busy": "2024-08-09T11:23:45.005302Z", - "iopub.status.idle": "2024-08-09T11:23:45.008929Z", - "shell.execute_reply": "2024-08-09T11:23:45.008294Z" + "iopub.execute_input": "2024-08-09T12:31:39.625836Z", + "iopub.status.busy": "2024-08-09T12:31:39.625420Z", + "iopub.status.idle": "2024-08-09T12:31:39.629020Z", + "shell.execute_reply": "2024-08-09T12:31:39.628374Z" } }, "outputs": [ @@ -235,10 +235,10 @@ "execution_count": 6, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:45.011217Z", - "iopub.status.busy": "2024-08-09T11:23:45.011021Z", - "iopub.status.idle": "2024-08-09T11:23:45.015096Z", - "shell.execute_reply": "2024-08-09T11:23:45.014595Z" + "iopub.execute_input": "2024-08-09T12:31:39.631903Z", + "iopub.status.busy": "2024-08-09T12:31:39.631425Z", + "iopub.status.idle": "2024-08-09T12:31:39.635446Z", + "shell.execute_reply": "2024-08-09T12:31:39.634812Z" } }, "outputs": [], @@ -260,10 +260,10 @@ "execution_count": 7, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:45.017449Z", - "iopub.status.busy": "2024-08-09T11:23:45.017252Z", - "iopub.status.idle": "2024-08-09T11:23:45.020904Z", - "shell.execute_reply": "2024-08-09T11:23:45.020216Z" + "iopub.execute_input": "2024-08-09T12:31:39.638235Z", + "iopub.status.busy": "2024-08-09T12:31:39.637742Z", + "iopub.status.idle": "2024-08-09T12:31:39.641404Z", + "shell.execute_reply": "2024-08-09T12:31:39.640743Z" } }, "outputs": [ @@ -297,10 +297,10 @@ "execution_count": 8, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:45.023191Z", - "iopub.status.busy": "2024-08-09T11:23:45.022996Z", - "iopub.status.idle": "2024-08-09T11:23:45.030592Z", - "shell.execute_reply": "2024-08-09T11:23:45.029970Z" + "iopub.execute_input": "2024-08-09T12:31:39.644066Z", + "iopub.status.busy": "2024-08-09T12:31:39.643607Z", + "iopub.status.idle": "2024-08-09T12:31:39.650821Z", + "shell.execute_reply": "2024-08-09T12:31:39.650134Z" } }, "outputs": [ @@ -365,10 +365,10 @@ "execution_count": 9, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:45.033131Z", - "iopub.status.busy": "2024-08-09T11:23:45.032670Z", - "iopub.status.idle": "2024-08-09T11:23:45.036994Z", - "shell.execute_reply": "2024-08-09T11:23:45.036350Z" + "iopub.execute_input": "2024-08-09T12:31:39.653487Z", + "iopub.status.busy": "2024-08-09T12:31:39.653037Z", + "iopub.status.idle": "2024-08-09T12:31:39.657215Z", + "shell.execute_reply": "2024-08-09T12:31:39.656545Z" } }, "outputs": [ @@ -416,10 +416,10 @@ "execution_count": 10, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:45.039561Z", - "iopub.status.busy": "2024-08-09T11:23:45.039081Z", - "iopub.status.idle": "2024-08-09T11:23:45.042487Z", - "shell.execute_reply": "2024-08-09T11:23:45.041864Z" + "iopub.execute_input": "2024-08-09T12:31:39.659937Z", + "iopub.status.busy": "2024-08-09T12:31:39.659479Z", + "iopub.status.idle": "2024-08-09T12:31:39.662846Z", + "shell.execute_reply": "2024-08-09T12:31:39.662288Z" } }, "outputs": [], @@ -441,10 +441,10 @@ "execution_count": 11, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:45.045022Z", - "iopub.status.busy": "2024-08-09T11:23:45.044645Z", - "iopub.status.idle": "2024-08-09T11:23:45.048705Z", - "shell.execute_reply": "2024-08-09T11:23:45.048015Z" + "iopub.execute_input": "2024-08-09T12:31:39.665352Z", + "iopub.status.busy": "2024-08-09T12:31:39.664905Z", + "iopub.status.idle": "2024-08-09T12:31:39.668605Z", + "shell.execute_reply": "2024-08-09T12:31:39.667949Z" } }, "outputs": [ @@ -510,10 +510,10 @@ "execution_count": 12, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:45.051198Z", - "iopub.status.busy": "2024-08-09T11:23:45.050826Z", - "iopub.status.idle": "2024-08-09T11:23:45.054478Z", - "shell.execute_reply": "2024-08-09T11:23:45.053842Z" + "iopub.execute_input": "2024-08-09T12:31:39.671158Z", + "iopub.status.busy": "2024-08-09T12:31:39.670652Z", + "iopub.status.idle": "2024-08-09T12:31:39.674145Z", + "shell.execute_reply": "2024-08-09T12:31:39.673587Z" } }, "outputs": [ @@ -548,10 +548,10 @@ "execution_count": 13, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:45.056923Z", - "iopub.status.busy": "2024-08-09T11:23:45.056544Z", - "iopub.status.idle": "2024-08-09T11:23:45.060415Z", - "shell.execute_reply": "2024-08-09T11:23:45.059740Z" + "iopub.execute_input": "2024-08-09T12:31:39.676535Z", + "iopub.status.busy": "2024-08-09T12:31:39.676334Z", + "iopub.status.idle": "2024-08-09T12:31:39.679793Z", + "shell.execute_reply": "2024-08-09T12:31:39.679129Z" } }, "outputs": [ @@ -584,10 +584,10 @@ "execution_count": 14, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:45.062856Z", - "iopub.status.busy": "2024-08-09T11:23:45.062672Z", - "iopub.status.idle": "2024-08-09T11:23:45.066645Z", - "shell.execute_reply": "2024-08-09T11:23:45.066001Z" + "iopub.execute_input": "2024-08-09T12:31:39.682195Z", + "iopub.status.busy": "2024-08-09T12:31:39.681980Z", + "iopub.status.idle": "2024-08-09T12:31:39.685693Z", + "shell.execute_reply": "2024-08-09T12:31:39.685030Z" } }, "outputs": [ @@ -622,10 +622,10 @@ "execution_count": 15, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:45.069079Z", - "iopub.status.busy": "2024-08-09T11:23:45.068715Z", - "iopub.status.idle": "2024-08-09T11:23:45.072872Z", - "shell.execute_reply": "2024-08-09T11:23:45.072222Z" + "iopub.execute_input": "2024-08-09T12:31:39.688288Z", + "iopub.status.busy": "2024-08-09T12:31:39.687888Z", + "iopub.status.idle": "2024-08-09T12:31:39.692103Z", + "shell.execute_reply": "2024-08-09T12:31:39.691442Z" } }, "outputs": [ @@ -669,10 +669,10 @@ "execution_count": 16, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:45.075352Z", - "iopub.status.busy": "2024-08-09T11:23:45.074954Z", - "iopub.status.idle": "2024-08-09T11:23:45.080172Z", - "shell.execute_reply": "2024-08-09T11:23:45.079489Z" + "iopub.execute_input": "2024-08-09T12:31:39.694856Z", + "iopub.status.busy": "2024-08-09T12:31:39.694371Z", + "iopub.status.idle": "2024-08-09T12:31:39.699960Z", + "shell.execute_reply": "2024-08-09T12:31:39.699297Z" } }, "outputs": [ @@ -733,10 +733,10 @@ "execution_count": 17, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:45.082637Z", - "iopub.status.busy": "2024-08-09T11:23:45.082336Z", - "iopub.status.idle": "2024-08-09T11:23:45.085902Z", - "shell.execute_reply": "2024-08-09T11:23:45.085309Z" + "iopub.execute_input": "2024-08-09T12:31:39.702278Z", + "iopub.status.busy": "2024-08-09T12:31:39.702029Z", + "iopub.status.idle": "2024-08-09T12:31:39.705641Z", + "shell.execute_reply": "2024-08-09T12:31:39.705082Z" } }, "outputs": [], @@ -761,10 +761,10 @@ "execution_count": 18, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:45.088431Z", - "iopub.status.busy": "2024-08-09T11:23:45.088048Z", - "iopub.status.idle": "2024-08-09T11:23:45.097876Z", - "shell.execute_reply": "2024-08-09T11:23:45.097342Z" + "iopub.execute_input": "2024-08-09T12:31:39.708051Z", + "iopub.status.busy": "2024-08-09T12:31:39.707671Z", + "iopub.status.idle": "2024-08-09T12:31:39.717818Z", + "shell.execute_reply": "2024-08-09T12:31:39.717261Z" } }, "outputs": [], @@ -857,10 +857,10 @@ "execution_count": 19, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:45.100249Z", - "iopub.status.busy": "2024-08-09T11:23:45.099871Z", - "iopub.status.idle": "2024-08-09T11:23:45.103759Z", - "shell.execute_reply": "2024-08-09T11:23:45.103058Z" + "iopub.execute_input": "2024-08-09T12:31:39.720164Z", + "iopub.status.busy": "2024-08-09T12:31:39.719802Z", + "iopub.status.idle": "2024-08-09T12:31:39.723416Z", + "shell.execute_reply": "2024-08-09T12:31:39.722771Z" } }, "outputs": [ @@ -897,10 +897,10 @@ "execution_count": 20, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:45.106206Z", - "iopub.status.busy": "2024-08-09T11:23:45.105827Z", - "iopub.status.idle": "2024-08-09T11:23:45.111545Z", - "shell.execute_reply": "2024-08-09T11:23:45.110843Z" + "iopub.execute_input": "2024-08-09T12:31:39.725920Z", + "iopub.status.busy": "2024-08-09T12:31:39.725526Z", + "iopub.status.idle": "2024-08-09T12:31:39.731259Z", + "shell.execute_reply": "2024-08-09T12:31:39.730584Z" } }, "outputs": [ diff --git a/.doctrees/nbsphinx/notebooks/nmodl-sympy-conductance.ipynb b/.doctrees/nbsphinx/notebooks/nmodl-sympy-conductance.ipynb index 50be79ac1..6b9b9e5b8 100644 --- a/.doctrees/nbsphinx/notebooks/nmodl-sympy-conductance.ipynb +++ b/.doctrees/nbsphinx/notebooks/nmodl-sympy-conductance.ipynb @@ -86,10 +86,10 @@ "execution_count": 1, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:47.540242Z", - "iopub.status.busy": "2024-08-09T11:23:47.539645Z", - "iopub.status.idle": "2024-08-09T11:23:48.418980Z", - "shell.execute_reply": "2024-08-09T11:23:48.418111Z" + "iopub.execute_input": "2024-08-09T12:31:42.220982Z", + "iopub.status.busy": "2024-08-09T12:31:42.220430Z", + "iopub.status.idle": "2024-08-09T12:31:43.016691Z", + "shell.execute_reply": "2024-08-09T12:31:43.015956Z" } }, "outputs": [], @@ -103,10 +103,10 @@ "execution_count": 2, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:48.422275Z", - "iopub.status.busy": "2024-08-09T11:23:48.422002Z", - "iopub.status.idle": "2024-08-09T11:23:48.452969Z", - "shell.execute_reply": "2024-08-09T11:23:48.452170Z" + "iopub.execute_input": "2024-08-09T12:31:43.019986Z", + "iopub.status.busy": "2024-08-09T12:31:43.019460Z", + "iopub.status.idle": "2024-08-09T12:31:43.050098Z", + "shell.execute_reply": "2024-08-09T12:31:43.049426Z" } }, "outputs": [], @@ -149,10 +149,10 @@ "execution_count": 3, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:48.456301Z", - "iopub.status.busy": "2024-08-09T11:23:48.455885Z", - "iopub.status.idle": "2024-08-09T11:23:48.729427Z", - "shell.execute_reply": "2024-08-09T11:23:48.728684Z" + "iopub.execute_input": "2024-08-09T12:31:43.053184Z", + "iopub.status.busy": "2024-08-09T12:31:43.052915Z", + "iopub.status.idle": "2024-08-09T12:31:43.343134Z", + "shell.execute_reply": "2024-08-09T12:31:43.342406Z" } }, "outputs": [ @@ -196,10 +196,10 @@ "execution_count": 4, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:48.732117Z", - "iopub.status.busy": "2024-08-09T11:23:48.731866Z", - "iopub.status.idle": "2024-08-09T11:23:48.863336Z", - "shell.execute_reply": "2024-08-09T11:23:48.862592Z" + "iopub.execute_input": "2024-08-09T12:31:43.346332Z", + "iopub.status.busy": "2024-08-09T12:31:43.345711Z", + "iopub.status.idle": "2024-08-09T12:31:43.484387Z", + "shell.execute_reply": "2024-08-09T12:31:43.483717Z" } }, "outputs": [ @@ -243,10 +243,10 @@ "execution_count": 5, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:48.866223Z", - "iopub.status.busy": "2024-08-09T11:23:48.865832Z", - "iopub.status.idle": "2024-08-09T11:23:48.874191Z", - "shell.execute_reply": "2024-08-09T11:23:48.873588Z" + "iopub.execute_input": "2024-08-09T12:31:43.487225Z", + "iopub.status.busy": "2024-08-09T12:31:43.486823Z", + "iopub.status.idle": "2024-08-09T12:31:43.495171Z", + "shell.execute_reply": "2024-08-09T12:31:43.494582Z" } }, "outputs": [ @@ -290,10 +290,10 @@ "execution_count": 6, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:48.876847Z", - "iopub.status.busy": "2024-08-09T11:23:48.876466Z", - "iopub.status.idle": "2024-08-09T11:23:48.894300Z", - "shell.execute_reply": "2024-08-09T11:23:48.893703Z" + "iopub.execute_input": "2024-08-09T12:31:43.497717Z", + "iopub.status.busy": "2024-08-09T12:31:43.497372Z", + "iopub.status.idle": "2024-08-09T12:31:43.515585Z", + "shell.execute_reply": "2024-08-09T12:31:43.514981Z" } }, "outputs": [ @@ -337,10 +337,10 @@ "execution_count": 7, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:48.896978Z", - "iopub.status.busy": "2024-08-09T11:23:48.896581Z", - "iopub.status.idle": "2024-08-09T11:23:49.016171Z", - "shell.execute_reply": "2024-08-09T11:23:49.015505Z" + "iopub.execute_input": "2024-08-09T12:31:43.518076Z", + "iopub.status.busy": "2024-08-09T12:31:43.517708Z", + "iopub.status.idle": "2024-08-09T12:31:43.635154Z", + "shell.execute_reply": "2024-08-09T12:31:43.634574Z" } }, "outputs": [ @@ -400,10 +400,10 @@ "execution_count": 8, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:49.018829Z", - "iopub.status.busy": "2024-08-09T11:23:49.018416Z", - "iopub.status.idle": "2024-08-09T11:23:49.113628Z", - "shell.execute_reply": "2024-08-09T11:23:49.112871Z" + "iopub.execute_input": "2024-08-09T12:31:43.637850Z", + "iopub.status.busy": "2024-08-09T12:31:43.637350Z", + "iopub.status.idle": "2024-08-09T12:31:43.731059Z", + "shell.execute_reply": "2024-08-09T12:31:43.730368Z" } }, "outputs": [ @@ -456,10 +456,10 @@ "execution_count": 9, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:49.116257Z", - "iopub.status.busy": "2024-08-09T11:23:49.116048Z", - "iopub.status.idle": "2024-08-09T11:23:49.190868Z", - "shell.execute_reply": "2024-08-09T11:23:49.190213Z" + "iopub.execute_input": "2024-08-09T12:31:43.733740Z", + "iopub.status.busy": "2024-08-09T12:31:43.733309Z", + "iopub.status.idle": "2024-08-09T12:31:43.806797Z", + "shell.execute_reply": "2024-08-09T12:31:43.806212Z" } }, "outputs": [ diff --git a/.doctrees/nbsphinx/notebooks/nmodl-sympy-solver-cnexp.ipynb b/.doctrees/nbsphinx/notebooks/nmodl-sympy-solver-cnexp.ipynb index b7eff7b65..de7ee92d0 100644 --- a/.doctrees/nbsphinx/notebooks/nmodl-sympy-solver-cnexp.ipynb +++ b/.doctrees/nbsphinx/notebooks/nmodl-sympy-solver-cnexp.ipynb @@ -62,10 +62,10 @@ "execution_count": 1, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:50.927147Z", - "iopub.status.busy": "2024-08-09T11:23:50.926942Z", - "iopub.status.idle": "2024-08-09T11:23:51.733585Z", - "shell.execute_reply": "2024-08-09T11:23:51.732674Z" + "iopub.execute_input": "2024-08-09T12:31:45.532407Z", + "iopub.status.busy": "2024-08-09T12:31:45.532215Z", + "iopub.status.idle": "2024-08-09T12:31:46.327723Z", + "shell.execute_reply": "2024-08-09T12:31:46.326863Z" } }, "outputs": [], @@ -79,10 +79,10 @@ "execution_count": 2, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:51.736977Z", - "iopub.status.busy": "2024-08-09T11:23:51.736572Z", - "iopub.status.idle": "2024-08-09T11:23:51.767441Z", - "shell.execute_reply": "2024-08-09T11:23:51.766756Z" + "iopub.execute_input": "2024-08-09T12:31:46.331022Z", + "iopub.status.busy": "2024-08-09T12:31:46.330605Z", + "iopub.status.idle": "2024-08-09T12:31:46.359881Z", + "shell.execute_reply": "2024-08-09T12:31:46.359259Z" } }, "outputs": [], @@ -123,10 +123,10 @@ "execution_count": 3, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:51.770340Z", - "iopub.status.busy": "2024-08-09T11:23:51.770128Z", - "iopub.status.idle": "2024-08-09T11:23:52.190337Z", - "shell.execute_reply": "2024-08-09T11:23:52.189586Z" + "iopub.execute_input": "2024-08-09T12:31:46.362676Z", + "iopub.status.busy": "2024-08-09T12:31:46.362269Z", + "iopub.status.idle": "2024-08-09T12:31:46.783788Z", + "shell.execute_reply": "2024-08-09T12:31:46.783009Z" } }, "outputs": [ @@ -165,10 +165,10 @@ "execution_count": 4, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:52.192870Z", - "iopub.status.busy": "2024-08-09T11:23:52.192627Z", - "iopub.status.idle": "2024-08-09T11:23:52.304325Z", - "shell.execute_reply": "2024-08-09T11:23:52.303508Z" + "iopub.execute_input": "2024-08-09T12:31:46.786650Z", + "iopub.status.busy": "2024-08-09T12:31:46.786244Z", + "iopub.status.idle": "2024-08-09T12:31:46.899517Z", + "shell.execute_reply": "2024-08-09T12:31:46.898806Z" } }, "outputs": [ @@ -207,10 +207,10 @@ "execution_count": 5, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:52.307155Z", - "iopub.status.busy": "2024-08-09T11:23:52.306924Z", - "iopub.status.idle": "2024-08-09T11:23:52.509128Z", - "shell.execute_reply": "2024-08-09T11:23:52.508370Z" + "iopub.execute_input": "2024-08-09T12:31:46.902372Z", + "iopub.status.busy": "2024-08-09T12:31:46.901806Z", + "iopub.status.idle": "2024-08-09T12:31:47.103789Z", + "shell.execute_reply": "2024-08-09T12:31:47.103058Z" } }, "outputs": [ @@ -255,10 +255,10 @@ "execution_count": 6, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:52.511877Z", - "iopub.status.busy": "2024-08-09T11:23:52.511466Z", - "iopub.status.idle": "2024-08-09T11:23:52.670148Z", - "shell.execute_reply": "2024-08-09T11:23:52.669451Z" + "iopub.execute_input": "2024-08-09T12:31:47.106566Z", + "iopub.status.busy": "2024-08-09T12:31:47.106136Z", + "iopub.status.idle": "2024-08-09T12:31:47.265610Z", + "shell.execute_reply": "2024-08-09T12:31:47.264899Z" } }, "outputs": [ @@ -303,10 +303,10 @@ "execution_count": 7, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:52.672993Z", - "iopub.status.busy": "2024-08-09T11:23:52.672590Z", - "iopub.status.idle": "2024-08-09T11:23:54.432006Z", - "shell.execute_reply": "2024-08-09T11:23:54.431320Z" + "iopub.execute_input": "2024-08-09T12:31:47.268397Z", + "iopub.status.busy": "2024-08-09T12:31:47.267893Z", + "iopub.status.idle": "2024-08-09T12:31:49.040383Z", + "shell.execute_reply": "2024-08-09T12:31:49.039638Z" } }, "outputs": [ @@ -351,10 +351,10 @@ "execution_count": 8, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:54.434800Z", - "iopub.status.busy": "2024-08-09T11:23:54.434352Z", - "iopub.status.idle": "2024-08-09T11:23:56.654894Z", - "shell.execute_reply": "2024-08-09T11:23:56.654219Z" + "iopub.execute_input": "2024-08-09T12:31:49.043257Z", + "iopub.status.busy": "2024-08-09T12:31:49.043016Z", + "iopub.status.idle": "2024-08-09T12:31:51.268104Z", + "shell.execute_reply": "2024-08-09T12:31:51.267391Z" } }, "outputs": [ diff --git a/.doctrees/nbsphinx/notebooks/nmodl-sympy-solver-derivimplicit.ipynb b/.doctrees/nbsphinx/notebooks/nmodl-sympy-solver-derivimplicit.ipynb index 792410aa9..f1d143e1b 100644 --- a/.doctrees/nbsphinx/notebooks/nmodl-sympy-solver-derivimplicit.ipynb +++ b/.doctrees/nbsphinx/notebooks/nmodl-sympy-solver-derivimplicit.ipynb @@ -39,10 +39,10 @@ "execution_count": 1, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:58.374313Z", - "iopub.status.busy": "2024-08-09T11:23:58.374010Z", - "iopub.status.idle": "2024-08-09T11:23:59.180353Z", - "shell.execute_reply": "2024-08-09T11:23:59.179574Z" + "iopub.execute_input": "2024-08-09T12:31:52.939668Z", + "iopub.status.busy": "2024-08-09T12:31:52.939098Z", + "iopub.status.idle": "2024-08-09T12:31:53.733476Z", + "shell.execute_reply": "2024-08-09T12:31:53.732658Z" } }, "outputs": [], @@ -56,10 +56,10 @@ "execution_count": 2, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:59.183659Z", - "iopub.status.busy": "2024-08-09T11:23:59.183226Z", - "iopub.status.idle": "2024-08-09T11:23:59.213418Z", - "shell.execute_reply": "2024-08-09T11:23:59.212747Z" + "iopub.execute_input": "2024-08-09T12:31:53.736662Z", + "iopub.status.busy": "2024-08-09T12:31:53.736267Z", + "iopub.status.idle": "2024-08-09T12:31:53.765817Z", + "shell.execute_reply": "2024-08-09T12:31:53.765041Z" } }, "outputs": [], @@ -100,10 +100,10 @@ "execution_count": 3, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:59.216562Z", - "iopub.status.busy": "2024-08-09T11:23:59.216153Z", - "iopub.status.idle": "2024-08-09T11:23:59.684614Z", - "shell.execute_reply": "2024-08-09T11:23:59.683850Z" + "iopub.execute_input": "2024-08-09T12:31:53.768721Z", + "iopub.status.busy": "2024-08-09T12:31:53.768462Z", + "iopub.status.idle": "2024-08-09T12:31:54.239555Z", + "shell.execute_reply": "2024-08-09T12:31:54.238855Z" } }, "outputs": [ @@ -165,10 +165,10 @@ "execution_count": 4, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:59.687474Z", - "iopub.status.busy": "2024-08-09T11:23:59.687079Z", - "iopub.status.idle": "2024-08-09T11:23:59.904874Z", - "shell.execute_reply": "2024-08-09T11:23:59.904140Z" + "iopub.execute_input": "2024-08-09T12:31:54.242370Z", + "iopub.status.busy": "2024-08-09T12:31:54.241799Z", + "iopub.status.idle": "2024-08-09T12:31:54.457353Z", + "shell.execute_reply": "2024-08-09T12:31:54.456631Z" } }, "outputs": [ diff --git a/.doctrees/nbsphinx/notebooks/nmodl-sympy-solver-sparse.ipynb b/.doctrees/nbsphinx/notebooks/nmodl-sympy-solver-sparse.ipynb index 53618837a..6fd300081 100644 --- a/.doctrees/nbsphinx/notebooks/nmodl-sympy-solver-sparse.ipynb +++ b/.doctrees/nbsphinx/notebooks/nmodl-sympy-solver-sparse.ipynb @@ -39,10 +39,10 @@ "execution_count": 1, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:24:01.201543Z", - "iopub.status.busy": "2024-08-09T11:24:01.201337Z", - "iopub.status.idle": "2024-08-09T11:24:02.004904Z", - "shell.execute_reply": "2024-08-09T11:24:02.004141Z" + "iopub.execute_input": "2024-08-09T12:31:55.811969Z", + "iopub.status.busy": "2024-08-09T12:31:55.811770Z", + "iopub.status.idle": "2024-08-09T12:31:56.634640Z", + "shell.execute_reply": "2024-08-09T12:31:56.633750Z" } }, "outputs": [], @@ -56,10 +56,10 @@ "execution_count": 2, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:24:02.008365Z", - "iopub.status.busy": "2024-08-09T11:24:02.007824Z", - "iopub.status.idle": "2024-08-09T11:24:02.037705Z", - "shell.execute_reply": "2024-08-09T11:24:02.036942Z" + "iopub.execute_input": "2024-08-09T12:31:56.637855Z", + "iopub.status.busy": "2024-08-09T12:31:56.637612Z", + "iopub.status.idle": "2024-08-09T12:31:56.667938Z", + "shell.execute_reply": "2024-08-09T12:31:56.667138Z" } }, "outputs": [], @@ -100,10 +100,10 @@ "execution_count": 3, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:24:02.040875Z", - "iopub.status.busy": "2024-08-09T11:24:02.040610Z", - "iopub.status.idle": "2024-08-09T11:24:02.503130Z", - "shell.execute_reply": "2024-08-09T11:24:02.502406Z" + "iopub.execute_input": "2024-08-09T12:31:56.671222Z", + "iopub.status.busy": "2024-08-09T12:31:56.670928Z", + "iopub.status.idle": "2024-08-09T12:31:57.141309Z", + "shell.execute_reply": "2024-08-09T12:31:57.140567Z" } }, "outputs": [ @@ -165,10 +165,10 @@ "execution_count": 4, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:24:02.506047Z", - "iopub.status.busy": "2024-08-09T11:24:02.505488Z", - "iopub.status.idle": "2024-08-09T11:24:02.717641Z", - "shell.execute_reply": "2024-08-09T11:24:02.716928Z" + "iopub.execute_input": "2024-08-09T12:31:57.144091Z", + "iopub.status.busy": "2024-08-09T12:31:57.143709Z", + "iopub.status.idle": "2024-08-09T12:31:57.356857Z", + "shell.execute_reply": "2024-08-09T12:31:57.356162Z" } }, "outputs": [ diff --git a/doxygen/classnmodl_1_1codegen_1_1_codegen_neuron_cpp_visitor.html b/doxygen/classnmodl_1_1codegen_1_1_codegen_neuron_cpp_visitor.html index 8ecfa3098..24c8ccd6e 100644 --- a/doxygen/classnmodl_1_1codegen_1_1_codegen_neuron_cpp_visitor.html +++ b/doxygen/classnmodl_1_1codegen_1_1_codegen_neuron_cpp_visitor.html @@ -1862,7 +1862,7 @@

-

Definition at line 1713 of file codegen_neuron_cpp_visitor.cpp.

+

Definition at line 1729 of file codegen_neuron_cpp_visitor.cpp.

@@ -1889,7 +1889,7 @@

-

Definition at line 1718 of file codegen_neuron_cpp_visitor.cpp.

+

Definition at line 1734 of file codegen_neuron_cpp_visitor.cpp.

@@ -2155,7 +2155,7 @@

nmodl::codegen::CodegenCppVisitor.

-

Definition at line 2042 of file codegen_neuron_cpp_visitor.cpp.

+

Definition at line 2058 of file codegen_neuron_cpp_visitor.cpp.

@@ -2187,7 +2187,7 @@

nmodl::codegen::CodegenCppVisitor.

-

Definition at line 2025 of file codegen_neuron_cpp_visitor.cpp.

+

Definition at line 2041 of file codegen_neuron_cpp_visitor.cpp.

@@ -2225,7 +2225,7 @@

nmodl::codegen::CodegenCppVisitor.

-

Definition at line 1993 of file codegen_neuron_cpp_visitor.cpp.

+

Definition at line 2009 of file codegen_neuron_cpp_visitor.cpp.

@@ -2257,7 +2257,7 @@

nmodl::codegen::CodegenCppVisitor.

-

Definition at line 1867 of file codegen_neuron_cpp_visitor.cpp.

+

Definition at line 1883 of file codegen_neuron_cpp_visitor.cpp.

@@ -2415,7 +2415,7 @@

nmodl::codegen::CodegenCppVisitor.

-

Definition at line 2015 of file codegen_neuron_cpp_visitor.cpp.

+

Definition at line 2031 of file codegen_neuron_cpp_visitor.cpp.

@@ -2492,7 +2492,7 @@

Definition at line 1937 of file codegen_neuron_cpp_visitor.cpp.

+

Definition at line 1953 of file codegen_neuron_cpp_visitor.cpp.

@@ -2583,7 +2583,7 @@

nmodl::codegen::CodegenCppVisitor.

-

Definition at line 1919 of file codegen_neuron_cpp_visitor.cpp.

+

Definition at line 1935 of file codegen_neuron_cpp_visitor.cpp.

@@ -2707,7 +2707,7 @@

nmodl::codegen::CodegenCppVisitor.

-

Definition at line 2063 of file codegen_neuron_cpp_visitor.cpp.

+

Definition at line 2079 of file codegen_neuron_cpp_visitor.cpp.

@@ -2736,7 +2736,7 @@

Definition at line 1929 of file codegen_neuron_cpp_visitor.cpp.

+

Definition at line 1945 of file codegen_neuron_cpp_visitor.cpp.

@@ -2934,7 +2934,7 @@

Definition at line 1954 of file codegen_neuron_cpp_visitor.cpp.

+

Definition at line 1970 of file codegen_neuron_cpp_visitor.cpp.

@@ -2972,7 +2972,7 @@

nmodl::codegen::CodegenCppVisitor.

-

Definition at line 2106 of file codegen_neuron_cpp_visitor.cpp.

+

Definition at line 2122 of file codegen_neuron_cpp_visitor.cpp.

@@ -3010,7 +3010,7 @@

nmodl::codegen::CodegenCppVisitor.

-

Definition at line 2093 of file codegen_neuron_cpp_visitor.cpp.

+

Definition at line 2109 of file codegen_neuron_cpp_visitor.cpp.

@@ -3039,7 +3039,7 @@

Definition at line 2144 of file codegen_neuron_cpp_visitor.cpp.

+

Definition at line 2160 of file codegen_neuron_cpp_visitor.cpp.

@@ -3104,7 +3104,7 @@

nmodl::codegen::CodegenCppVisitor.

-

Definition at line 2068 of file codegen_neuron_cpp_visitor.cpp.

+

Definition at line 2084 of file codegen_neuron_cpp_visitor.cpp.

@@ -3224,7 +3224,7 @@

nmodl::codegen::CodegenCppVisitor.

-

Definition at line 1539 of file codegen_neuron_cpp_visitor.cpp.

+

Definition at line 1555 of file codegen_neuron_cpp_visitor.cpp.

@@ -3256,7 +3256,7 @@

nmodl::codegen::CodegenCppVisitor.

-

Definition at line 1527 of file codegen_neuron_cpp_visitor.cpp.

+

Definition at line 1543 of file codegen_neuron_cpp_visitor.cpp.

@@ -3288,7 +3288,7 @@

nmodl::codegen::CodegenCppVisitor.

-

Definition at line 1873 of file codegen_neuron_cpp_visitor.cpp.

+

Definition at line 1889 of file codegen_neuron_cpp_visitor.cpp.

@@ -3328,7 +3328,7 @@

nmodl::codegen::CodegenCppVisitor.

-

Definition at line 1760 of file codegen_neuron_cpp_visitor.cpp.

+

Definition at line 1776 of file codegen_neuron_cpp_visitor.cpp.

@@ -3367,7 +3367,7 @@

nmodl::codegen::CodegenCppVisitor.

-

Definition at line 1834 of file codegen_neuron_cpp_visitor.cpp.

+

Definition at line 1850 of file codegen_neuron_cpp_visitor.cpp.

@@ -3400,7 +3400,7 @@

nmodl::codegen::CodegenCppVisitor.

-

Definition at line 1799 of file codegen_neuron_cpp_visitor.cpp.

+

Definition at line 1815 of file codegen_neuron_cpp_visitor.cpp.

@@ -3440,7 +3440,7 @@

nmodl::codegen::CodegenCppVisitor.

-

Definition at line 1741 of file codegen_neuron_cpp_visitor.cpp.

+

Definition at line 1757 of file codegen_neuron_cpp_visitor.cpp.

@@ -3472,7 +3472,7 @@

nmodl::codegen::CodegenCppVisitor.

-

Definition at line 1533 of file codegen_neuron_cpp_visitor.cpp.

+

Definition at line 1549 of file codegen_neuron_cpp_visitor.cpp.

@@ -3537,7 +3537,7 @@

Definition at line 1493 of file codegen_neuron_cpp_visitor.cpp.

+

Definition at line 1509 of file codegen_neuron_cpp_visitor.cpp.

@@ -3570,7 +3570,7 @@

nmodl::codegen::CodegenCppVisitor.

-

Definition at line 1663 of file codegen_neuron_cpp_visitor.cpp.

+

Definition at line 1679 of file codegen_neuron_cpp_visitor.cpp.

@@ -3776,7 +3776,7 @@

nmodl::codegen::CodegenCppVisitor.

-

Definition at line 2003 of file codegen_neuron_cpp_visitor.cpp.

+

Definition at line 2019 of file codegen_neuron_cpp_visitor.cpp.

@@ -4047,7 +4047,7 @@

nmodl::visitor::ConstVisitor.

-

Definition at line 2187 of file codegen_neuron_cpp_visitor.cpp.

+

Definition at line 2203 of file codegen_neuron_cpp_visitor.cpp.

diff --git a/doxygen/codegen__neuron__cpp__visitor_8hpp_source.html b/doxygen/codegen__neuron__cpp__visitor_8hpp_source.html index 329fad914..95e822104 100644 --- a/doxygen/codegen__neuron__cpp__visitor_8hpp_source.html +++ b/doxygen/codegen__neuron__cpp__visitor_8hpp_source.html @@ -804,23 +804,23 @@
708 } // namespace nmodl
-
void print_nrn_destructor() override
Print nrn_destructor function definition.
-
void print_nrn_cur_non_conductance_kernel() override
Print the nrn_cur kernel without NMODL conductance keyword provisions.
+
void print_nrn_destructor() override
Print nrn_destructor function definition.
+
void print_nrn_cur_non_conductance_kernel() override
Print the nrn_cur kernel without NMODL conductance keyword provisions.
std::string py_function_signature(const std::string &function_or_procedure_name) const
Get the signature of the npy <func_or_proc_name> function.
Helper to represent information about index/int variables.
-
void print_nrn_cur() override
Print nrn_cur / current update function definition.
-
void print_macro_definitions()
Print all NEURON macros.
+
void print_nrn_cur() override
Print nrn_cur / current update function definition.
+
void print_macro_definitions()
Print all NEURON macros.
CodegenCppVisitor(std::string mod_filename, const std::string &output_dir, std::string float_type, const bool optimize_ionvar_copies, std::unique_ptr< nmodl::utils::Blame > blame)
Constructs the C++ code generator visitor.
-
void print_net_event_call(const ast::FunctionCall &node) override
Print call to net_event.
+
void print_net_event_call(const ast::FunctionCall &node) override
Print call to net_event.
void print_neuron_includes()
Print includes from NEURON.
void print_nrn_init(bool skip_init_check=true)
Print the nrn_init function definition.
void print_hoc_py_wrapper_function_body(const ast::Block *function_or_procedure_block, InterpreterWrapper wrapper_type)
std::string internal_method_arguments() override
Arguments for functions that are defined and used internally.
-
void print_nrn_alloc() override
Print nrn_alloc function definition.
+
void print_nrn_alloc() override
Print nrn_alloc function definition.
std::string register_mechanism_arguments() const override
Arguments for register_mech or point_register_mech function.
int position_of_int_var(const std::string &name) const override
Determine the position in the data array for a given int variable.
- +
std::string table_thread_function_name() const
Name of the threaded table checking function.
bool optimize_ion_variable_copies() const override
Check if ion variable copies should be avoided.
std::string hoc_function_name(const std::string &function_or_procedure_name) const
All functions and procedures need a hoc <func_or_proc_name> to be available to the HOC interpreter.
@@ -831,20 +831,20 @@
Implement classes for representing symbol table at block and file scope.
std::string backend_name() const override
Name of the code generation backend.
std::string process_verbatim_text(std::string const &text) override
Process a verbatim block for possible variable renaming.
- +
void print_global_param_default_values()
Print global struct with default value of RANGE PARAMETERs.
-
void print_g_unused() const override
Set g_unused (conductance) for NRN_PRCELLSTATE feature.
-
void visit_watch_statement(const ast::WatchStatement &node) override
TODO: Edit for NEURON.
-
void print_net_send_call(const ast::FunctionCall &node) override
Print call to net_send.
-
void print_net_move_call(const ast::FunctionCall &node) override
Print call to net_move.
+
void print_g_unused() const override
Set g_unused (conductance) for NRN_PRCELLSTATE feature.
+
void visit_watch_statement(const ast::WatchStatement &node) override
TODO: Edit for NEURON.
+
void print_net_send_call(const ast::FunctionCall &node) override
Print call to net_send.
+
void print_net_move_call(const ast::FunctionCall &node) override
Print call to net_move.
std::string thread_variable_name(const ThreadVariableInfo &var_info, bool use_instance=true) const
Determine the C++ string to print for thread variables.
-
void print_nrn_state() override
Print nrn_state / state update function definition.
+
void print_nrn_state() override
Print nrn_state / state update function definition.
void print_initial_block(const ast::InitialBlock *node)
Print the initial block.
void print_global_function_common_code(BlockType type, const std::string &function_name="") override
Print common code for global functions like nrn_init, nrn_cur and nrn_state.
std::string float_variable_name(const SymbolType &symbol, bool use_instance) const override
Determine the name of a float variable given its symbol.
-
void print_v_unused() const override
Set v_unused (voltage) for NRN_PRCELLSTATE feature.
- +
void print_v_unused() const override
Set v_unused (voltage) for NRN_PRCELLSTATE feature.
+
ParamVector functor_params() override
The parameters of the Newton solver "functor".
Visitor for printing C++ code compatible with legacy api of CoreNEURON
@@ -854,7 +854,7 @@
Represent WATCH statement in NMODL.
void print_neuron_global_variable_declarations()
Print extern declarations for neuron global variables.
Represents a BREAKPOINT block in NMODL.
-
void print_nrn_cur_conductance_kernel(const ast::BreakpointBlock &node) override
Print the nrn_cur kernel with NMODL conductance keyword provisions.
+
void print_nrn_cur_conductance_kernel(const ast::BreakpointBlock &node) override
Print the nrn_cur kernel with NMODL conductance keyword provisions.
std::string int_variable_name(const IndexVariableInfo &symbol, const std::string &name, bool use_instance) const override
Determine the name of an int variable given its symbol.
InterpreterWrapper
Enum to switch between HOC and Python wrappers for functions and procedures defined in mechanisms.
@@ -866,15 +866,15 @@
Helper class for printing C/C++ code.
std::string hoc_function_signature(const std::string &function_or_procedure_name) const
Get the signature of the hoc <func_or_proc_name> function.
void print_thread_variables_structure(bool print_initializers)
Print the data structure used to access thread variables.
-
void print_compute_functions() override
Print all compute functions for every backend.
+
void print_compute_functions() override
Print all compute functions for every backend.
void print_thread_memory_callbacks()
Print thread variable (de-)initialization functions.
-
void print_nrn_cur_kernel(const ast::BreakpointBlock &node) override
Print main body of nrn_cur function.
+
void print_nrn_cur_kernel(const ast::BreakpointBlock &node) override
Print main body of nrn_cur function.
void print_mechanism_register() override
Print the mechanism registration function.
-
void print_nrn_jacob()
Print nrn_jacob function definition.
+
void print_nrn_jacob()
Print nrn_jacob function definition.
Various types to store code generation specific information.
-
void print_fast_imem_calculation() override
Print fast membrane current calculation code.
-
void print_data_structures(bool print_initializers) override
Print all classes.
+
void print_fast_imem_calculation() override
Print fast membrane current calculation code.
+
void print_data_structures(bool print_initializers) override
Print all classes.
void print_sdlists_init(bool print_initializers) override
const std::string external_method_arguments() noexcept override
Arguments for external functions called from generated code.
std::string py_function_name(const std::string &function_or_procedure_name) const
In non POINT_PROCESS mechanisms all functions and procedures need a py <func_or_proc_name> to be avai...
@@ -886,19 +886,19 @@
void print_setdata_functions()
Print NEURON functions related to setting global variables of the mechanism.
std::string get_name(const std::shared_ptr< symtab::Symbol > &sym)
Represents ion write statement during code generation.
-
void print_mechanism_variables_macros()
Print mechanism variables' related macros.
+
void print_mechanism_variables_macros()
Print mechanism variables' related macros.
Visitor for printing C++ code compatible with legacy api of NEURON
-
void print_nrn_constructor() override
Print nrn_constructor function definition.
+
void print_nrn_constructor() override
Print nrn_constructor function definition.
void print_check_table_function_prototypes()
Print all check_* function declarations.
Implement logger based on spdlog library.
parser::NmodlParser::symbol_type SymbolType
Definition: main_nmodl.cpp:33
BlockType
Helper to represent various block types.
size_t index
There index global variables ahead of this one.
-
void print_headers_include() override
Print all includes.
+
void print_headers_include() override
Print all includes.
const ParamVector external_method_parameters(bool table=false) noexcept override
Parameters for functions in generated code that are called back from external code.
void print_function_or_procedure(const ast::Block &node, const std::string &name, const std::unordered_set< CppObjectSpecifier > &specifiers={ CppObjectSpecifier::Inline}) override
Print nmodl function or procedure (common code)
const std::shared_ptr< symtab::Symbol > symbol
-
void print_nrn_current(const ast::BreakpointBlock &node) override
Print the nrn_current kernel.
+
void print_nrn_current(const ast::BreakpointBlock &node) override
Print the nrn_current kernel.
int position_of_float_var(const std::string &name) const override
Determine the position in the data array for a given float variable.
std::string get_variable_name(const std::string &name, bool use_instance=true) const override
Determine variable name in the structure of mechanism properties.
Visitor for printing C++ code compatible with legacy api of CoreNEURON
@@ -909,14 +909,14 @@
std::string nrn_thread_arguments() const override
Arguments for "_threadargs_" macro in neuron implementation.
void print_net_receive_registration()
Print code to register the call-back for the NET_RECEIVE block.
-
void print_codegen_routines() override
Print entry point to code generation.
+
void print_codegen_routines() override
Print entry point to code generation.
void append_conc_write_statements(std::vector< ShadowUseStatement > &statements, const Ion &ion, const std::string &concentration) override
Generate Function call statement for nrn_wrote_conc.
ParamVector internal_method_parameters() override
Parameters for internally defined functions.
-
void print_net_receive()
Print net_receive call-back.
+
void print_net_receive()
Print net_receive call-back.
void print_function_prototypes() override
Print function and procedures prototype declaration.
void print_mechanism_global_var_structure(bool print_initializers) override
Print the structure that wraps all global variables used in the NMODL.
std::string namespace_name() override
Name of "our" namespace.
-
void print_global_macros()
Print NEURON global variable macros.
+
void print_global_macros()
Print NEURON global variable macros.
std::vector< std::tuple< std::string, std::string, std::string, std::string > > ParamVector
A vector of parameters represented by a 4-tuple of strings:
Concrete visitor for all AST classes.
diff --git a/doxygen/namespacenmodl_1_1codegen.html b/doxygen/namespacenmodl_1_1codegen.html index 450ac92df..6a7a25b04 100644 --- a/doxygen/namespacenmodl_1_1codegen.html +++ b/doxygen/namespacenmodl_1_1codegen.html @@ -331,7 +331,7 @@

x[id] = _args[1];

So, the R in AST needs to be renamed with _args[1].

-

Definition at line 2129 of file codegen_neuron_cpp_visitor.cpp.

+

Definition at line 2145 of file codegen_neuron_cpp_visitor.cpp.

diff --git a/doxygen/src_2codegen_2codegen__neuron__cpp__visitor_8cpp_source.html b/doxygen/src_2codegen_2codegen__neuron__cpp__visitor_8cpp_source.html index a57e29bf4..9d6a3c13c 100644 --- a/doxygen/src_2codegen_2codegen__neuron__cpp__visitor_8cpp_source.html +++ b/doxygen/src_2codegen_2codegen__neuron__cpp__visitor_8cpp_source.html @@ -1580,725 +1580,741 @@
1484  printer->fmt_line("inst.{}[id] = v;", naming::VOLTAGE_UNUSED_VARIABLE);
1485  }
1486 
-
1487  print_initial_block(info.initial_node);
-
1488  printer->pop_block();
-
1489 
-
1490  printer->pop_block();
-
1491 }
-
1492 
- -
1494  printer->add_newline(2);
-
1495 
-
1496  ParamVector args = {{"", "const _nrn_model_sorted_token&", "", "_sorted_token"},
-
1497  {"", "NrnThread*", "", "nt"},
-
1498  {"", "Memb_list*", "", "_ml_arg"},
-
1499  {"", "int", "", "_type"}};
-
1500 
-
1501  printer->fmt_push_block("static void {}({})",
-
1502  method_name(naming::NRN_JACOB_METHOD),
-
1503  get_parameter_str(args)); // begin function
-
1504 
+
1487  for (auto state: info.state_vars) {
+
1488  auto state_name = state->get_name();
+
1489  auto lhs_name = get_variable_name(state_name);
+
1490  auto rhs_name = get_variable_name(state_name + "0");
+
1491 
+
1492  if (!state->is_array()) {
+
1493  auto state_name = state->get_name();
+
1494  printer->fmt_line("{} = {};", lhs_name, rhs_name);
+
1495  } else {
+
1496  auto n_elements = state->get_length();
+
1497  printer->fmt_push_block("for(size_t _i = 0; _i < {}; ++_i)", n_elements);
+
1498  printer->fmt_line("{}[_i] = {};", lhs_name, rhs_name);
+
1499  printer->pop_block();
+
1500  }
+
1501  }
+
1502 
+
1503  print_initial_block(info.initial_node);
+
1504  printer->pop_block();
1505 
-
1506  printer->add_multi_line(
-
1507  "_nrn_mechanism_cache_range _lmc{_sorted_token, *nt, *_ml_arg, _type};");
+
1506  printer->pop_block();
+
1507 }
1508 
-
1509  printer->fmt_line("auto inst = make_instance_{}(_lmc);", info.mod_suffix);
-
1510  printer->fmt_line("auto node_data = make_node_data_{}(*nt, *_ml_arg);", info.mod_suffix);
-
1511  printer->fmt_line("auto nodecount = _ml_arg->nodecount;");
-
1512  printer->push_block("for (int id = 0; id < nodecount; id++)"); // begin for
-
1513 
-
1514  if (breakpoint_exist()) {
-
1515  printer->add_line("int node_id = node_data.nodeindices[id];");
-
1516  printer->fmt_line("node_data.node_diagonal[node_id] += inst.{}[id];",
-
1517  info.vectorize ? naming::CONDUCTANCE_UNUSED_VARIABLE
- -
1519  }
+ +
1510  printer->add_newline(2);
+
1511 
+
1512  ParamVector args = {{"", "const _nrn_model_sorted_token&", "", "_sorted_token"},
+
1513  {"", "NrnThread*", "", "nt"},
+
1514  {"", "Memb_list*", "", "_ml_arg"},
+
1515  {"", "int", "", "_type"}};
+
1516 
+
1517  printer->fmt_push_block("static void {}({})",
+
1518  method_name(naming::NRN_JACOB_METHOD),
+
1519  get_parameter_str(args)); // begin function
1520 
-
1521  printer->pop_block(); // end for
-
1522  printer->pop_block(); // end function
-
1523 }
+
1521 
+
1522  printer->add_multi_line(
+
1523  "_nrn_mechanism_cache_range _lmc{_sorted_token, *nt, *_ml_arg, _type};");
1524 
-
1525 
-
1526 /// TODO: Edit for NEURON
- -
1528  return;
-
1529 }
-
1530 
-
1531 
-
1532 /// TODO: Edit for NEURON
- -
1534  return;
-
1535 }
+
1525  printer->fmt_line("auto inst = make_instance_{}(_lmc);", info.mod_suffix);
+
1526  printer->fmt_line("auto node_data = make_node_data_{}(*nt, *_ml_arg);", info.mod_suffix);
+
1527  printer->fmt_line("auto nodecount = _ml_arg->nodecount;");
+
1528  printer->push_block("for (int id = 0; id < nodecount; id++)"); // begin for
+
1529 
+
1530  if (breakpoint_exist()) {
+
1531  printer->add_line("int node_id = node_data.nodeindices[id];");
+
1532  printer->fmt_line("node_data.node_diagonal[node_id] += inst.{}[id];",
+
1533  info.vectorize ? naming::CONDUCTANCE_UNUSED_VARIABLE
+ +
1535  }
1536 
-
1537 
-
1538 /// TODO: Print the equivalent of `nrn_alloc_<mech_name>`
- -
1540  printer->add_newline(2);
-
1541 
-
1542  auto method = method_name(naming::NRN_ALLOC_METHOD);
-
1543  printer->fmt_push_block("static void {}(Prop* _prop)", method);
-
1544  printer->add_line("Datum *_ppvar = nullptr;");
-
1545 
-
1546  if (info.point_process) {
-
1547  printer->push_block("if (nrn_point_prop_)");
-
1548  printer->add_multi_line(R"CODE(
-
1549  _nrn_mechanism_access_alloc_seq(_prop) = _nrn_mechanism_access_alloc_seq(nrn_point_prop_);
-
1550  _ppvar = _nrn_mechanism_access_dparam(nrn_point_prop_);
-
1551  )CODE");
-
1552  printer->chain_block("else");
-
1553  }
-
1554  if (info.semantic_variable_count) {
-
1555  printer->fmt_line("_ppvar = nrn_prop_datum_alloc(mech_type, {}, _prop);",
-
1556  info.semantic_variable_count);
-
1557  printer->add_line("_nrn_mechanism_access_dparam(_prop) = _ppvar;");
-
1558  }
-
1559  printer->add_multi_line(R"CODE(
-
1560  _nrn_mechanism_cache_instance _lmc{_prop};
-
1561  size_t const _iml = 0;
-
1562  )CODE");
-
1563  printer->fmt_line("assert(_nrn_mechanism_get_num_vars(_prop) == {});",
-
1564  codegen_float_variables.size());
-
1565  if (float_variables_size()) {
-
1566  printer->add_line("/*initialize range parameters*/");
-
1567  for (size_t i_param = 0; i_param < info.range_parameter_vars.size(); ++i_param) {
-
1568  const auto var = info.range_parameter_vars[i_param];
-
1569  if (var->is_array()) {
-
1570  continue;
-
1571  }
-
1572  const auto& var_name = var->get_name();
-
1573  auto var_pos = position_of_float_var(var_name);
-
1574  double var_value = var->get_value() == nullptr ? 0.0 : *var->get_value();
-
1575 
-
1576  printer->fmt_line("_lmc.template fpfield<{}>(_iml) = {}; /* {} */",
-
1577  var_pos,
-
1578  fmt::format("_parameter_defaults[{}]", i_param),
-
1579  var_name);
-
1580  }
-
1581  }
-
1582  if (info.point_process) {
-
1583  printer->pop_block();
-
1584  }
-
1585 
-
1586  if (info.semantic_variable_count) {
-
1587  printer->add_line("_nrn_mechanism_access_dparam(_prop) = _ppvar;");
-
1588  }
-
1589 
-
1590  const auto codegen_int_variables_size = codegen_int_variables.size();
+
1537  printer->pop_block(); // end for
+
1538  printer->pop_block(); // end function
+
1539 }
+
1540 
+
1541 
+
1542 /// TODO: Edit for NEURON
+ +
1544  return;
+
1545 }
+
1546 
+
1547 
+
1548 /// TODO: Edit for NEURON
+ +
1550  return;
+
1551 }
+
1552 
+
1553 
+
1554 /// TODO: Print the equivalent of `nrn_alloc_<mech_name>`
+ +
1556  printer->add_newline(2);
+
1557 
+
1558  auto method = method_name(naming::NRN_ALLOC_METHOD);
+
1559  printer->fmt_push_block("static void {}(Prop* _prop)", method);
+
1560  printer->add_line("Datum *_ppvar = nullptr;");
+
1561 
+
1562  if (info.point_process) {
+
1563  printer->push_block("if (nrn_point_prop_)");
+
1564  printer->add_multi_line(R"CODE(
+
1565  _nrn_mechanism_access_alloc_seq(_prop) = _nrn_mechanism_access_alloc_seq(nrn_point_prop_);
+
1566  _ppvar = _nrn_mechanism_access_dparam(nrn_point_prop_);
+
1567  )CODE");
+
1568  printer->chain_block("else");
+
1569  }
+
1570  if (info.semantic_variable_count) {
+
1571  printer->fmt_line("_ppvar = nrn_prop_datum_alloc(mech_type, {}, _prop);",
+
1572  info.semantic_variable_count);
+
1573  printer->add_line("_nrn_mechanism_access_dparam(_prop) = _ppvar;");
+
1574  }
+
1575  printer->add_multi_line(R"CODE(
+
1576  _nrn_mechanism_cache_instance _lmc{_prop};
+
1577  size_t const _iml = 0;
+
1578  )CODE");
+
1579  printer->fmt_line("assert(_nrn_mechanism_get_num_vars(_prop) == {});",
+
1580  codegen_float_variables.size());
+
1581  if (float_variables_size()) {
+
1582  printer->add_line("/*initialize range parameters*/");
+
1583  for (size_t i_param = 0; i_param < info.range_parameter_vars.size(); ++i_param) {
+
1584  const auto var = info.range_parameter_vars[i_param];
+
1585  if (var->is_array()) {
+
1586  continue;
+
1587  }
+
1588  const auto& var_name = var->get_name();
+
1589  auto var_pos = position_of_float_var(var_name);
+
1590  double var_value = var->get_value() == nullptr ? 0.0 : *var->get_value();
1591 
-
1592  if (info.diam_used || info.area_used) {
-
1593  for (size_t i = 0; i < codegen_int_variables.size(); ++i) {
-
1594  auto var_info = codegen_int_variables[i];
-
1595  if (var_info.symbol->get_name() == naming::DIAM_VARIABLE) {
-
1596  printer->add_line("Symbol * morphology_sym = hoc_lookup(\"morphology\");");
-
1597  printer->fmt_line("Prop * morphology_prop = need_memb(morphology_sym);");
-
1598 
-
1599  printer->fmt_line(
-
1600  "_ppvar[{}] = _nrn_mechanism_get_param_handle(morphology_prop, 0);", i);
-
1601  }
-
1602  if (var_info.symbol->get_name() == naming::AREA_VARIABLE) {
-
1603  printer->fmt_line("_ppvar[{}] = _nrn_mechanism_get_area_handle(nrn_alloc_node_);",
-
1604  i);
-
1605  }
-
1606  }
-
1607  }
-
1608 
-
1609  for (const auto& ion: info.ions) {
-
1610  printer->fmt_line("Symbol * {}_sym = hoc_lookup(\"{}_ion\");", ion.name, ion.name);
-
1611  printer->fmt_line("Prop * {}_prop = need_memb({}_sym);", ion.name, ion.name);
-
1612 
-
1613  if (ion.is_exterior_conc_written()) {
-
1614  printer->fmt_line("nrn_check_conc_write(_prop, {}_prop, 0);", ion.name);
-
1615  }
-
1616 
-
1617  if (ion.is_interior_conc_written()) {
-
1618  printer->fmt_line("nrn_check_conc_write(_prop, {}_prop, 1);", ion.name);
-
1619  }
-
1620 
-
1621  int conc = ion.is_conc_written() ? 3 : int(ion.is_conc_read());
-
1622  int rev = ion.is_rev_written() ? 3 : int(ion.is_rev_read());
-
1623 
-
1624  printer->fmt_line("nrn_promote({}_prop, {}, {});", ion.name, conc, rev);
-
1625 
-
1626  for (size_t i = 0; i < codegen_int_variables_size; ++i) {
-
1627  const auto& var = codegen_int_variables[i];
+
1592  printer->fmt_line("_lmc.template fpfield<{}>(_iml) = {}; /* {} */",
+
1593  var_pos,
+
1594  fmt::format("_parameter_defaults[{}]", i_param),
+
1595  var_name);
+
1596  }
+
1597  }
+
1598  if (info.point_process) {
+
1599  printer->pop_block();
+
1600  }
+
1601 
+
1602  if (info.semantic_variable_count) {
+
1603  printer->add_line("_nrn_mechanism_access_dparam(_prop) = _ppvar;");
+
1604  }
+
1605 
+
1606  const auto codegen_int_variables_size = codegen_int_variables.size();
+
1607 
+
1608  if (info.diam_used || info.area_used) {
+
1609  for (size_t i = 0; i < codegen_int_variables.size(); ++i) {
+
1610  auto var_info = codegen_int_variables[i];
+
1611  if (var_info.symbol->get_name() == naming::DIAM_VARIABLE) {
+
1612  printer->add_line("Symbol * morphology_sym = hoc_lookup(\"morphology\");");
+
1613  printer->fmt_line("Prop * morphology_prop = need_memb(morphology_sym);");
+
1614 
+
1615  printer->fmt_line(
+
1616  "_ppvar[{}] = _nrn_mechanism_get_param_handle(morphology_prop, 0);", i);
+
1617  }
+
1618  if (var_info.symbol->get_name() == naming::AREA_VARIABLE) {
+
1619  printer->fmt_line("_ppvar[{}] = _nrn_mechanism_get_area_handle(nrn_alloc_node_);",
+
1620  i);
+
1621  }
+
1622  }
+
1623  }
+
1624 
+
1625  for (const auto& ion: info.ions) {
+
1626  printer->fmt_line("Symbol * {}_sym = hoc_lookup(\"{}_ion\");", ion.name, ion.name);
+
1627  printer->fmt_line("Prop * {}_prop = need_memb({}_sym);", ion.name, ion.name);
1628 
-
1629  const std::string& var_name = var.symbol->get_name();
-
1630 
-
1631  if (stringutils::starts_with(var_name, "ion_")) {
-
1632  std::string ion_var_name = std::string(var_name.begin() + 4, var_name.end());
-
1633  if (ion.is_ionic_variable(ion_var_name) ||
-
1634  ion.is_current_derivative(ion_var_name) || ion.is_rev_potential(ion_var_name)) {
-
1635  printer->fmt_line("_ppvar[{}] = _nrn_mechanism_get_param_handle({}_prop, {});",
-
1636  i,
-
1637  ion.name,
-
1638  ion.variable_index(ion_var_name));
-
1639  }
-
1640  } else {
-
1641  if (ion.is_style(var_name)) {
-
1642  printer->fmt_line(
-
1643  "_ppvar[{}] = {{neuron::container::do_not_search, "
-
1644  "&(_nrn_mechanism_access_dparam({}_prop)[0].literal_value<int>())}};",
-
1645  i,
-
1646  ion.name);
-
1647  }
-
1648  }
-
1649  }
-
1650  }
-
1651 
-
1652  /// TODO: CONSTRUCTOR call
-
1653 
-
1654  printer->pop_block();
-
1655 }
-
1656 
-
1657 
-
1658 /****************************************************************************************/
-
1659 /* Print nrn_state routine */
-
1660 /****************************************************************************************/
-
1661 
-
1662 /// TODO: Edit for NEURON
- -
1664  if (!nrn_state_required()) {
-
1665  return;
+
1629  if (ion.is_exterior_conc_written()) {
+
1630  printer->fmt_line("nrn_check_conc_write(_prop, {}_prop, 0);", ion.name);
+
1631  }
+
1632 
+
1633  if (ion.is_interior_conc_written()) {
+
1634  printer->fmt_line("nrn_check_conc_write(_prop, {}_prop, 1);", ion.name);
+
1635  }
+
1636 
+
1637  int conc = ion.is_conc_written() ? 3 : int(ion.is_conc_read());
+
1638  int rev = ion.is_rev_written() ? 3 : int(ion.is_rev_read());
+
1639 
+
1640  printer->fmt_line("nrn_promote({}_prop, {}, {});", ion.name, conc, rev);
+
1641 
+
1642  for (size_t i = 0; i < codegen_int_variables_size; ++i) {
+
1643  const auto& var = codegen_int_variables[i];
+
1644 
+
1645  const std::string& var_name = var.symbol->get_name();
+
1646 
+
1647  if (stringutils::starts_with(var_name, "ion_")) {
+
1648  std::string ion_var_name = std::string(var_name.begin() + 4, var_name.end());
+
1649  if (ion.is_ionic_variable(ion_var_name) ||
+
1650  ion.is_current_derivative(ion_var_name) || ion.is_rev_potential(ion_var_name)) {
+
1651  printer->fmt_line("_ppvar[{}] = _nrn_mechanism_get_param_handle({}_prop, {});",
+
1652  i,
+
1653  ion.name,
+
1654  ion.variable_index(ion_var_name));
+
1655  }
+
1656  } else {
+
1657  if (ion.is_style(var_name)) {
+
1658  printer->fmt_line(
+
1659  "_ppvar[{}] = {{neuron::container::do_not_search, "
+
1660  "&(_nrn_mechanism_access_dparam({}_prop)[0].literal_value<int>())}};",
+
1661  i,
+
1662  ion.name);
+
1663  }
+
1664  }
+
1665  }
1666  }
-
1667 
-
1668  printer->add_newline(2);
-
1669  print_global_function_common_code(BlockType::State);
-
1670 
-
1671  printer->push_block("for (int id = 0; id < nodecount; id++)");
-
1672  printer->add_line("int node_id = node_data.nodeindices[id];");
-
1673  printer->add_line("auto* _ppvar = _ml_arg->pdata[id];");
-
1674  printer->add_line("auto v = node_data.node_voltages[node_id];");
-
1675 
-
1676  /**
-
1677  * \todo Eigen solver node also emits IonCurVar variable in the functor
-
1678  * but that shouldn't update ions in derivative block
-
1679  */
-
1680  if (ion_variable_struct_required()) {
-
1681  throw std::runtime_error("Not implemented.");
+
1667 
+
1668  /// TODO: CONSTRUCTOR call
+
1669 
+
1670  printer->pop_block();
+
1671 }
+
1672 
+
1673 
+
1674 /****************************************************************************************/
+
1675 /* Print nrn_state routine */
+
1676 /****************************************************************************************/
+
1677 
+
1678 /// TODO: Edit for NEURON
+ +
1680  if (!nrn_state_required()) {
+
1681  return;
1682  }
1683 
-
1684  auto read_statements = ion_read_statements(BlockType::State);
-
1685  for (auto& statement: read_statements) {
-
1686  printer->add_line(statement);
-
1687  }
-
1688 
-
1689  if (info.nrn_state_block) {
-
1690  info.nrn_state_block->visit_children(*this);
-
1691  }
-
1692 
-
1693  if (info.currents.empty() && info.breakpoint_node != nullptr) {
-
1694  auto block = info.breakpoint_node->get_statement_block();
-
1695  print_statement_block(*block, false, false);
-
1696  }
-
1697 
-
1698  const auto& write_statements = ion_write_statements(BlockType::State);
-
1699  for (auto& statement: write_statements) {
-
1700  const auto& text = process_shadow_update_statement(statement, BlockType::State);
-
1701  printer->add_line(text);
-
1702  }
-
1703 
-
1704  printer->pop_block();
-
1705  printer->pop_block();
-
1706 }
-
1707 
+
1684  printer->add_newline(2);
+
1685  print_global_function_common_code(BlockType::State);
+
1686 
+
1687  printer->push_block("for (int id = 0; id < nodecount; id++)");
+
1688  printer->add_line("int node_id = node_data.nodeindices[id];");
+
1689  printer->add_line("auto* _ppvar = _ml_arg->pdata[id];");
+
1690  printer->add_line("auto v = node_data.node_voltages[node_id];");
+
1691 
+
1692  /**
+
1693  * \todo Eigen solver node also emits IonCurVar variable in the functor
+
1694  * but that shouldn't update ions in derivative block
+
1695  */
+
1696  if (ion_variable_struct_required()) {
+
1697  throw std::runtime_error("Not implemented.");
+
1698  }
+
1699 
+
1700  auto read_statements = ion_read_statements(BlockType::State);
+
1701  for (auto& statement: read_statements) {
+
1702  printer->add_line(statement);
+
1703  }
+
1704 
+
1705  if (info.nrn_state_block) {
+
1706  info.nrn_state_block->visit_children(*this);
+
1707  }
1708 
-
1709 /****************************************************************************************/
-
1710 /* Print nrn_cur related routines */
-
1711 /****************************************************************************************/
-
1712 
- -
1714  return get_arg_str(nrn_current_parameters());
-
1715 }
-
1716 
-
1717 
- -
1719  if (ion_variable_struct_required()) {
-
1720  throw std::runtime_error("Not implemented.");
-
1721  }
-
1722 
-
1723  ParamVector params = {{"", "_nrn_mechanism_cache_range&", "", "_lmc"},
-
1724  {"", "NrnThread*", "", "nt"},
-
1725  {"", "Datum*", "", "_ppvar"},
-
1726  {"", "Datum*", "", "_thread"}};
-
1727 
-
1728  if (info.thread_callback_register) {
-
1729  auto type_name = fmt::format("{}&", thread_variables_struct());
-
1730  params.emplace_back("", type_name, "", "_thread_vars");
-
1731  }
-
1732  params.emplace_back("", "size_t", "", "id");
-
1733  params.emplace_back("", fmt::format("{}&", instance_struct()), "", "inst");
-
1734  params.emplace_back("", fmt::format("{}&", node_data_struct()), "", "node_data");
-
1735  params.emplace_back("", "double", "", "v");
-
1736  return params;
-
1737 }
+
1709  if (info.currents.empty() && info.breakpoint_node != nullptr) {
+
1710  auto block = info.breakpoint_node->get_statement_block();
+
1711  print_statement_block(*block, false, false);
+
1712  }
+
1713 
+
1714  const auto& write_statements = ion_write_statements(BlockType::State);
+
1715  for (auto& statement: write_statements) {
+
1716  const auto& text = process_shadow_update_statement(statement, BlockType::State);
+
1717  printer->add_line(text);
+
1718  }
+
1719 
+
1720  printer->pop_block();
+
1721  printer->pop_block();
+
1722 }
+
1723 
+
1724 
+
1725 /****************************************************************************************/
+
1726 /* Print nrn_cur related routines */
+
1727 /****************************************************************************************/
+
1728 
+ +
1730  return get_arg_str(nrn_current_parameters());
+
1731 }
+
1732 
+
1733 
+ +
1735  if (ion_variable_struct_required()) {
+
1736  throw std::runtime_error("Not implemented.");
+
1737  }
1738 
-
1739 
-
1740 /// TODO: Edit for NEURON
- -
1742  const auto& args = nrn_current_parameters();
-
1743  const auto& block = node.get_statement_block();
-
1744  printer->add_newline(2);
-
1745  printer->fmt_push_block("inline double nrn_current_{}({})",
-
1746  info.mod_suffix,
-
1747  get_parameter_str(args));
-
1748  printer->add_line("double current = 0.0;");
-
1749  print_statement_block(*block, false, false);
-
1750  for (auto& current: info.currents) {
-
1751  const auto& name = get_variable_name(current);
-
1752  printer->fmt_line("current += {};", name);
-
1753  }
-
1754  printer->add_line("return current;");
-
1755  printer->pop_block();
-
1756 }
-
1757 
-
1758 
-
1759 /// TODO: Edit for NEURON
- -
1761  const auto& block = node.get_statement_block();
-
1762  print_statement_block(*block, false, false);
-
1763  if (!info.currents.empty()) {
-
1764  std::string sum;
-
1765  for (const auto& current: info.currents) {
-
1766  auto var = breakpoint_current(current);
-
1767  sum += get_variable_name(var);
-
1768  if (&current != &info.currents.back()) {
-
1769  sum += "+";
-
1770  }
-
1771  }
-
1772  printer->fmt_line("double rhs = {};", sum);
-
1773  }
-
1774 
-
1775  std::string sum;
-
1776  for (const auto& conductance: info.conductances) {
-
1777  auto var = breakpoint_current(conductance.variable);
-
1778  sum += get_variable_name(var);
-
1779  if (&conductance != &info.conductances.back()) {
-
1780  sum += "+";
-
1781  }
-
1782  }
-
1783  printer->fmt_line("double g = {};", sum);
-
1784 
-
1785  for (const auto& conductance: info.conductances) {
-
1786  if (!conductance.ion.empty()) {
-
1787  const auto& lhs = std::string(naming::ION_VARNAME_PREFIX) + "di" + conductance.ion +
-
1788  "dv";
-
1789  const auto& rhs = get_variable_name(conductance.variable);
-
1790  const ShadowUseStatement statement{lhs, "+=", rhs};
-
1791  const auto& text = process_shadow_update_statement(statement, BlockType::Equation);
-
1792  printer->add_line(text);
-
1793  }
-
1794  }
-
1795 }
-
1796 
-
1797 
-
1798 /// TODO: Edit for NEURON
- -
1800  printer->fmt_line("double I1 = nrn_current_{}({}+0.001);",
-
1801  info.mod_suffix,
-
1802  nrn_current_arguments());
-
1803  for (auto& ion: info.ions) {
-
1804  for (auto& var: ion.writes) {
-
1805  if (ion.is_ionic_current(var)) {
-
1806  const auto& name = get_variable_name(var);
-
1807  printer->fmt_line("double di{} = {};", ion.name, name);
-
1808  }
+
1739  ParamVector params = {{"", "_nrn_mechanism_cache_range&", "", "_lmc"},
+
1740  {"", "NrnThread*", "", "nt"},
+
1741  {"", "Datum*", "", "_ppvar"},
+
1742  {"", "Datum*", "", "_thread"}};
+
1743 
+
1744  if (info.thread_callback_register) {
+
1745  auto type_name = fmt::format("{}&", thread_variables_struct());
+
1746  params.emplace_back("", type_name, "", "_thread_vars");
+
1747  }
+
1748  params.emplace_back("", "size_t", "", "id");
+
1749  params.emplace_back("", fmt::format("{}&", instance_struct()), "", "inst");
+
1750  params.emplace_back("", fmt::format("{}&", node_data_struct()), "", "node_data");
+
1751  params.emplace_back("", "double", "", "v");
+
1752  return params;
+
1753 }
+
1754 
+
1755 
+
1756 /// TODO: Edit for NEURON
+ +
1758  const auto& args = nrn_current_parameters();
+
1759  const auto& block = node.get_statement_block();
+
1760  printer->add_newline(2);
+
1761  printer->fmt_push_block("inline double nrn_current_{}({})",
+
1762  info.mod_suffix,
+
1763  get_parameter_str(args));
+
1764  printer->add_line("double current = 0.0;");
+
1765  print_statement_block(*block, false, false);
+
1766  for (auto& current: info.currents) {
+
1767  const auto& name = get_variable_name(current);
+
1768  printer->fmt_line("current += {};", name);
+
1769  }
+
1770  printer->add_line("return current;");
+
1771  printer->pop_block();
+
1772 }
+
1773 
+
1774 
+
1775 /// TODO: Edit for NEURON
+ +
1777  const auto& block = node.get_statement_block();
+
1778  print_statement_block(*block, false, false);
+
1779  if (!info.currents.empty()) {
+
1780  std::string sum;
+
1781  for (const auto& current: info.currents) {
+
1782  auto var = breakpoint_current(current);
+
1783  sum += get_variable_name(var);
+
1784  if (&current != &info.currents.back()) {
+
1785  sum += "+";
+
1786  }
+
1787  }
+
1788  printer->fmt_line("double rhs = {};", sum);
+
1789  }
+
1790 
+
1791  std::string sum;
+
1792  for (const auto& conductance: info.conductances) {
+
1793  auto var = breakpoint_current(conductance.variable);
+
1794  sum += get_variable_name(var);
+
1795  if (&conductance != &info.conductances.back()) {
+
1796  sum += "+";
+
1797  }
+
1798  }
+
1799  printer->fmt_line("double g = {};", sum);
+
1800 
+
1801  for (const auto& conductance: info.conductances) {
+
1802  if (!conductance.ion.empty()) {
+
1803  const auto& lhs = std::string(naming::ION_VARNAME_PREFIX) + "di" + conductance.ion +
+
1804  "dv";
+
1805  const auto& rhs = get_variable_name(conductance.variable);
+
1806  const ShadowUseStatement statement{lhs, "+=", rhs};
+
1807  const auto& text = process_shadow_update_statement(statement, BlockType::Equation);
+
1808  printer->add_line(text);
1809  }
1810  }
-
1811  printer->fmt_line("double I0 = nrn_current_{}({});", info.mod_suffix, nrn_current_arguments());
-
1812  printer->add_line("double rhs = I0;");
-
1813 
-
1814  printer->add_line("double g = (I1-I0)/0.001;");
-
1815  for (auto& ion: info.ions) {
-
1816  for (auto& var: ion.writes) {
-
1817  if (ion.is_ionic_current(var)) {
-
1818  const auto& lhs = std::string(naming::ION_VARNAME_PREFIX) + "di" + ion.name + "dv";
-
1819  auto rhs = fmt::format("(di{}-{})/0.001", ion.name, get_variable_name(var));
-
1820  if (info.point_process) {
-
1821  auto area = get_variable_name(naming::NODE_AREA_VARIABLE);
-
1822  rhs += fmt::format("*1.e2/{}", area);
-
1823  }
-
1824  const ShadowUseStatement statement{lhs, "+=", rhs};
-
1825  const auto& text = process_shadow_update_statement(statement, BlockType::Equation);
-
1826  printer->add_line(text);
-
1827  }
-
1828  }
-
1829  }
-
1830 }
-
1831 
-
1832 
-
1833 /// TODO: Edit for NEURON
- -
1835  printer->add_line("int node_id = node_data.nodeindices[id];");
-
1836  printer->add_line("double v = node_data.node_voltages[node_id];");
-
1837  printer->add_line("auto* _ppvar = _ml_arg->pdata[id];");
-
1838  const auto& read_statements = ion_read_statements(BlockType::Equation);
-
1839  for (auto& statement: read_statements) {
-
1840  printer->add_line(statement);
-
1841  }
-
1842 
-
1843  if (info.conductances.empty()) {
-
1844  print_nrn_cur_non_conductance_kernel();
-
1845  } else {
-
1846  print_nrn_cur_conductance_kernel(node);
-
1847  }
-
1848 
-
1849  const auto& write_statements = ion_write_statements(BlockType::Equation);
-
1850  for (auto& statement: write_statements) {
-
1851  auto text = process_shadow_update_statement(statement, BlockType::Equation);
-
1852  printer->add_line(text);
-
1853  }
-
1854 
-
1855  if (info.point_process) {
-
1856  const auto& area = get_variable_name(naming::NODE_AREA_VARIABLE);
-
1857  printer->fmt_line("double mfactor = 1.e2/{};", area);
-
1858  printer->add_line("g = g*mfactor;");
-
1859  printer->add_line("rhs = rhs*mfactor;");
-
1860  }
-
1861 
-
1862  // print_g_unused();
-
1863 }
+
1811 }
+
1812 
+
1813 
+
1814 /// TODO: Edit for NEURON
+ +
1816  printer->fmt_line("double I1 = nrn_current_{}({}+0.001);",
+
1817  info.mod_suffix,
+
1818  nrn_current_arguments());
+
1819  for (auto& ion: info.ions) {
+
1820  for (auto& var: ion.writes) {
+
1821  if (ion.is_ionic_current(var)) {
+
1822  const auto& name = get_variable_name(var);
+
1823  printer->fmt_line("double di{} = {};", ion.name, name);
+
1824  }
+
1825  }
+
1826  }
+
1827  printer->fmt_line("double I0 = nrn_current_{}({});", info.mod_suffix, nrn_current_arguments());
+
1828  printer->add_line("double rhs = I0;");
+
1829 
+
1830  printer->add_line("double g = (I1-I0)/0.001;");
+
1831  for (auto& ion: info.ions) {
+
1832  for (auto& var: ion.writes) {
+
1833  if (ion.is_ionic_current(var)) {
+
1834  const auto& lhs = std::string(naming::ION_VARNAME_PREFIX) + "di" + ion.name + "dv";
+
1835  auto rhs = fmt::format("(di{}-{})/0.001", ion.name, get_variable_name(var));
+
1836  if (info.point_process) {
+
1837  auto area = get_variable_name(naming::NODE_AREA_VARIABLE);
+
1838  rhs += fmt::format("*1.e2/{}", area);
+
1839  }
+
1840  const ShadowUseStatement statement{lhs, "+=", rhs};
+
1841  const auto& text = process_shadow_update_statement(statement, BlockType::Equation);
+
1842  printer->add_line(text);
+
1843  }
+
1844  }
+
1845  }
+
1846 }
+
1847 
+
1848 
+
1849 /// TODO: Edit for NEURON
+ +
1851  printer->add_line("int node_id = node_data.nodeindices[id];");
+
1852  printer->add_line("double v = node_data.node_voltages[node_id];");
+
1853  printer->add_line("auto* _ppvar = _ml_arg->pdata[id];");
+
1854  const auto& read_statements = ion_read_statements(BlockType::Equation);
+
1855  for (auto& statement: read_statements) {
+
1856  printer->add_line(statement);
+
1857  }
+
1858 
+
1859  if (info.conductances.empty()) {
+
1860  print_nrn_cur_non_conductance_kernel();
+
1861  } else {
+
1862  print_nrn_cur_conductance_kernel(node);
+
1863  }
1864 
-
1865 
-
1866 /// TODO: Edit for NEURON
- -
1868  return;
-
1869 }
+
1865  const auto& write_statements = ion_write_statements(BlockType::Equation);
+
1866  for (auto& statement: write_statements) {
+
1867  auto text = process_shadow_update_statement(statement, BlockType::Equation);
+
1868  printer->add_line(text);
+
1869  }
1870 
-
1871 
-
1872 /// TODO: Edit for NEURON
- -
1874  if (!nrn_cur_required()) {
-
1875  return;
+
1871  if (info.point_process) {
+
1872  const auto& area = get_variable_name(naming::NODE_AREA_VARIABLE);
+
1873  printer->fmt_line("double mfactor = 1.e2/{};", area);
+
1874  printer->add_line("g = g*mfactor;");
+
1875  printer->add_line("rhs = rhs*mfactor;");
1876  }
1877 
-
1878  if (info.conductances.empty()) {
-
1879  print_nrn_current(*info.breakpoint_node);
-
1880  }
-
1881 
-
1882  printer->add_newline(2);
-
1883  printer->add_line("/** update current */");
-
1884  print_global_function_common_code(BlockType::Equation);
-
1885  // print_channel_iteration_block_parallel_hint(BlockType::Equation, info.breakpoint_node);
-
1886  printer->push_block("for (int id = 0; id < nodecount; id++)");
-
1887  print_nrn_cur_kernel(*info.breakpoint_node);
-
1888  // print_nrn_cur_matrix_shadow_update();
-
1889  // if (!nrn_cur_reduction_loop_required()) {
-
1890  // print_fast_imem_calculation();
-
1891  // }
-
1892 
+
1878  // print_g_unused();
+
1879 }
+
1880 
+
1881 
+
1882 /// TODO: Edit for NEURON
+ +
1884  return;
+
1885 }
+
1886 
+
1887 
+
1888 /// TODO: Edit for NEURON
+ +
1890  if (!nrn_cur_required()) {
+
1891  return;
+
1892  }
1893 
-
1894  printer->add_line("node_data.node_rhs[node_id] -= rhs;");
-
1895 
-
1896  if (breakpoint_exist()) {
-
1897  printer->fmt_line("inst.{}[id] = g;",
-
1898  info.vectorize ? naming::CONDUCTANCE_UNUSED_VARIABLE
- -
1900  }
-
1901  printer->pop_block();
-
1902 
-
1903  // if (nrn_cur_reduction_loop_required()) {
-
1904  // printer->push_block("for (int id = 0; id < nodecount; id++)");
-
1905  // print_nrn_cur_matrix_shadow_reduction();
-
1906  // printer->pop_block();
-
1907  // print_fast_imem_calculation();
-
1908  // }
+
1894  if (info.conductances.empty()) {
+
1895  print_nrn_current(*info.breakpoint_node);
+
1896  }
+
1897 
+
1898  printer->add_newline(2);
+
1899  printer->add_line("/** update current */");
+
1900  print_global_function_common_code(BlockType::Equation);
+
1901  // print_channel_iteration_block_parallel_hint(BlockType::Equation, info.breakpoint_node);
+
1902  printer->push_block("for (int id = 0; id < nodecount; id++)");
+
1903  print_nrn_cur_kernel(*info.breakpoint_node);
+
1904  // print_nrn_cur_matrix_shadow_update();
+
1905  // if (!nrn_cur_reduction_loop_required()) {
+
1906  // print_fast_imem_calculation();
+
1907  // }
+
1908 
1909 
-
1910  // print_kernel_data_present_annotation_block_end();
-
1911  printer->pop_block();
-
1912 }
-
1913 
-
1914 
-
1915 /****************************************************************************************/
-
1916 /* Main code printing entry points */
-
1917 /****************************************************************************************/
+
1910  printer->add_line("node_data.node_rhs[node_id] -= rhs;");
+
1911 
+
1912  if (breakpoint_exist()) {
+
1913  printer->fmt_line("inst.{}[id] = g;",
+
1914  info.vectorize ? naming::CONDUCTANCE_UNUSED_VARIABLE
+ +
1916  }
+
1917  printer->pop_block();
1918 
- -
1920  print_standard_includes();
-
1921  print_neuron_includes();
-
1922 
-
1923  if (info.thread_callback_register) {
-
1924  printer->add_line("extern void _nrn_thread_reg(int, int, void(*)(Datum*));");
-
1925  }
-
1926 }
-
1927 
-
1928 
- -
1930  print_global_macros();
-
1931  print_mechanism_variables_macros();
-
1932 
-
1933  printer->add_line("extern Node* nrn_alloc_node_;");
-
1934 }
-
1935 
-
1936 
- -
1938  printer->add_newline();
-
1939  printer->add_line("/* NEURON global macro definitions */");
-
1940  if (info.vectorize) {
-
1941  printer->add_multi_line(R"CODE(
-
1942  /* VECTORIZED */
-
1943  #define NRN_VECTORIZED 1
-
1944  )CODE");
-
1945  } else {
-
1946  printer->add_multi_line(R"CODE(
-
1947  /* NOT VECTORIZED */
-
1948  #define NRN_VECTORIZED 0
-
1949  )CODE");
-
1950  }
-
1951 }
-
1952 
-
1953 
- -
1955  printer->add_newline();
-
1956  printer->add_line("static constexpr auto number_of_datum_variables = ",
-
1957  std::to_string(int_variables_size()),
-
1958  ";");
-
1959  printer->add_line("static constexpr auto number_of_floating_point_variables = ",
-
1960  std::to_string(codegen_float_variables.size()),
-
1961  ";");
-
1962  printer->add_newline();
-
1963  printer->add_multi_line(R"CODE(
-
1964  namespace {
-
1965  template <typename T>
-
1966  using _nrn_mechanism_std_vector = std::vector<T>;
-
1967  using _nrn_model_sorted_token = neuron::model_sorted_token;
-
1968  using _nrn_mechanism_cache_range = neuron::cache::MechanismRange<number_of_floating_point_variables, number_of_datum_variables>;
-
1969  using _nrn_mechanism_cache_instance = neuron::cache::MechanismInstance<number_of_floating_point_variables, number_of_datum_variables>;
-
1970  using _nrn_non_owning_id_without_container = neuron::container::non_owning_identifier_without_container;
-
1971  template <typename T>
-
1972  using _nrn_mechanism_field = neuron::mechanism::field<T>;
-
1973  template <typename... Args>
-
1974  void _nrn_mechanism_register_data_fields(Args&&... args) {
-
1975  neuron::mechanism::register_data_fields(std::forward<Args>(args)...);
-
1976  }
-
1977  } // namespace
-
1978  )CODE");
-
1979 
-
1980  if (info.point_process) {
-
1981  printer->add_line("extern Prop* nrn_point_prop_;");
-
1982  } else {
-
1983  printer->add_line("Prop* hoc_getdata_range(int type);");
-
1984  }
-
1985  /// TODO: More prints here?
-
1986  // for registration of tables
-
1987  if (info.table_count > 0) {
-
1988  printer->add_line("void _nrn_thread_table_reg(int, nrn_thread_table_check_t);");
-
1989  }
-
1990 }
-
1991 
-
1992 
-
1993 void CodegenNeuronCppVisitor::print_data_structures(bool print_initializers) {
-
1994  print_mechanism_global_var_structure(print_initializers);
-
1995  print_mechanism_range_var_structure(print_initializers);
-
1996  print_node_data_structure(print_initializers);
-
1997  print_thread_variables_structure(print_initializers);
-
1998  print_make_instance();
-
1999  print_make_node_data();
-
2000 }
-
2001 
-
2002 
- -
2004  if (!info.vectorize) {
-
2005  return;
-
2006  }
-
2007  printer->add_multi_line(R"CODE(
-
2008  #if NRN_PRCELLSTATE
-
2009  inst->v_unused[id] = v;
-
2010  #endif
-
2011  )CODE");
-
2012 }
-
2013 
-
2014 
- -
2016  printer->add_multi_line(R"CODE(
-
2017  #if NRN_PRCELLSTATE
-
2018  inst->g_unused[id] = g;
-
2019  #endif
-
2020  )CODE");
-
2021 }
-
2022 
-
2023 
-
2024 /// TODO: Edit for NEURON
- -
2026  print_hoc_py_wrapper_function_definitions();
-
2027  for (const auto& procedure: info.procedures) {
-
2028  print_procedure(*procedure);
-
2029  }
-
2030  for (const auto& function: info.functions) {
-
2031  print_function(*function);
-
2032  }
-
2033  print_nrn_init();
-
2034  print_nrn_cur();
-
2035  print_nrn_state();
-
2036  print_nrn_jacob();
-
2037  print_net_receive();
-
2038 }
-
2039 
-
2040 
-
2041 /// TODO: Edit for NEURON
- -
2043  print_backend_info();
-
2044  print_headers_include();
-
2045  print_macro_definitions();
-
2046  print_neuron_global_variable_declarations();
-
2047  print_namespace_start();
-
2048  print_nmodl_constants();
-
2049  print_prcellstate_macros();
-
2050  print_mechanism_info();
-
2051  print_data_structures(true);
-
2052  print_nrn_alloc();
-
2053  print_function_prototypes();
-
2054  print_functors_definitions();
-
2055  print_global_variables_for_hoc();
-
2056  print_thread_memory_callbacks();
-
2057  print_compute_functions(); // only nrn_cur and nrn_state
-
2058  print_sdlists_init(true);
-
2059  print_mechanism_register();
-
2060  print_namespace_stop();
-
2061 }
-
2062 
- -
2064  throw std::runtime_error("Not implemented.");
-
2065 }
-
2066 
-
2067 
- -
2069  auto const& arguments = node.get_arguments();
-
2070 
-
2071  if (printing_net_init) {
-
2072  throw std::runtime_error("Not implemented. [jfiwoei]");
-
2073  }
-
2074 
-
2075  std::string weight_pointer = "nullptr";
-
2076  auto point_process = get_variable_name(naming::POINT_PROCESS_VARIABLE,
-
2077  /* use_instance */ false);
-
2078  if (!printing_net_receive) {
-
2079  point_process += ".get<Point_process*>()";
-
2080  }
-
2081  const auto& tqitem = get_variable_name("tqitem", /* use_instance */ false);
+
1919  // if (nrn_cur_reduction_loop_required()) {
+
1920  // printer->push_block("for (int id = 0; id < nodecount; id++)");
+
1921  // print_nrn_cur_matrix_shadow_reduction();
+
1922  // printer->pop_block();
+
1923  // print_fast_imem_calculation();
+
1924  // }
+
1925 
+
1926  // print_kernel_data_present_annotation_block_end();
+
1927  printer->pop_block();
+
1928 }
+
1929 
+
1930 
+
1931 /****************************************************************************************/
+
1932 /* Main code printing entry points */
+
1933 /****************************************************************************************/
+
1934 
+ +
1936  print_standard_includes();
+
1937  print_neuron_includes();
+
1938 
+
1939  if (info.thread_callback_register) {
+
1940  printer->add_line("extern void _nrn_thread_reg(int, int, void(*)(Datum*));");
+
1941  }
+
1942 }
+
1943 
+
1944 
+ +
1946  print_global_macros();
+
1947  print_mechanism_variables_macros();
+
1948 
+
1949  printer->add_line("extern Node* nrn_alloc_node_;");
+
1950 }
+
1951 
+
1952 
+ +
1954  printer->add_newline();
+
1955  printer->add_line("/* NEURON global macro definitions */");
+
1956  if (info.vectorize) {
+
1957  printer->add_multi_line(R"CODE(
+
1958  /* VECTORIZED */
+
1959  #define NRN_VECTORIZED 1
+
1960  )CODE");
+
1961  } else {
+
1962  printer->add_multi_line(R"CODE(
+
1963  /* NOT VECTORIZED */
+
1964  #define NRN_VECTORIZED 0
+
1965  )CODE");
+
1966  }
+
1967 }
+
1968 
+
1969 
+ +
1971  printer->add_newline();
+
1972  printer->add_line("static constexpr auto number_of_datum_variables = ",
+
1973  std::to_string(int_variables_size()),
+
1974  ";");
+
1975  printer->add_line("static constexpr auto number_of_floating_point_variables = ",
+
1976  std::to_string(codegen_float_variables.size()),
+
1977  ";");
+
1978  printer->add_newline();
+
1979  printer->add_multi_line(R"CODE(
+
1980  namespace {
+
1981  template <typename T>
+
1982  using _nrn_mechanism_std_vector = std::vector<T>;
+
1983  using _nrn_model_sorted_token = neuron::model_sorted_token;
+
1984  using _nrn_mechanism_cache_range = neuron::cache::MechanismRange<number_of_floating_point_variables, number_of_datum_variables>;
+
1985  using _nrn_mechanism_cache_instance = neuron::cache::MechanismInstance<number_of_floating_point_variables, number_of_datum_variables>;
+
1986  using _nrn_non_owning_id_without_container = neuron::container::non_owning_identifier_without_container;
+
1987  template <typename T>
+
1988  using _nrn_mechanism_field = neuron::mechanism::field<T>;
+
1989  template <typename... Args>
+
1990  void _nrn_mechanism_register_data_fields(Args&&... args) {
+
1991  neuron::mechanism::register_data_fields(std::forward<Args>(args)...);
+
1992  }
+
1993  } // namespace
+
1994  )CODE");
+
1995 
+
1996  if (info.point_process) {
+
1997  printer->add_line("extern Prop* nrn_point_prop_;");
+
1998  } else {
+
1999  printer->add_line("Prop* hoc_getdata_range(int type);");
+
2000  }
+
2001  /// TODO: More prints here?
+
2002  // for registration of tables
+
2003  if (info.table_count > 0) {
+
2004  printer->add_line("void _nrn_thread_table_reg(int, nrn_thread_table_check_t);");
+
2005  }
+
2006 }
+
2007 
+
2008 
+
2009 void CodegenNeuronCppVisitor::print_data_structures(bool print_initializers) {
+
2010  print_mechanism_global_var_structure(print_initializers);
+
2011  print_mechanism_range_var_structure(print_initializers);
+
2012  print_node_data_structure(print_initializers);
+
2013  print_thread_variables_structure(print_initializers);
+
2014  print_make_instance();
+
2015  print_make_node_data();
+
2016 }
+
2017 
+
2018 
+ +
2020  if (!info.vectorize) {
+
2021  return;
+
2022  }
+
2023  printer->add_multi_line(R"CODE(
+
2024  #if NRN_PRCELLSTATE
+
2025  inst->v_unused[id] = v;
+
2026  #endif
+
2027  )CODE");
+
2028 }
+
2029 
+
2030 
+ +
2032  printer->add_multi_line(R"CODE(
+
2033  #if NRN_PRCELLSTATE
+
2034  inst->g_unused[id] = g;
+
2035  #endif
+
2036  )CODE");
+
2037 }
+
2038 
+
2039 
+
2040 /// TODO: Edit for NEURON
+ +
2042  print_hoc_py_wrapper_function_definitions();
+
2043  for (const auto& procedure: info.procedures) {
+
2044  print_procedure(*procedure);
+
2045  }
+
2046  for (const auto& function: info.functions) {
+
2047  print_function(*function);
+
2048  }
+
2049  print_nrn_init();
+
2050  print_nrn_cur();
+
2051  print_nrn_state();
+
2052  print_nrn_jacob();
+
2053  print_net_receive();
+
2054 }
+
2055 
+
2056 
+
2057 /// TODO: Edit for NEURON
+ +
2059  print_backend_info();
+
2060  print_headers_include();
+
2061  print_macro_definitions();
+
2062  print_neuron_global_variable_declarations();
+
2063  print_namespace_start();
+
2064  print_nmodl_constants();
+
2065  print_prcellstate_macros();
+
2066  print_mechanism_info();
+
2067  print_data_structures(true);
+
2068  print_nrn_alloc();
+
2069  print_function_prototypes();
+
2070  print_functors_definitions();
+
2071  print_global_variables_for_hoc();
+
2072  print_thread_memory_callbacks();
+
2073  print_compute_functions(); // only nrn_cur and nrn_state
+
2074  print_sdlists_init(true);
+
2075  print_mechanism_register();
+
2076  print_namespace_stop();
+
2077 }
+
2078 
+ +
2080  throw std::runtime_error("Not implemented.");
+
2081 }
2082 
-
2083  printer->fmt_text("{}(/* tqitem */ &{}, {}, {}, {} + ",
-
2084  info.artificial_cell ? "artcell_net_send" : "net_send",
-
2085  tqitem,
-
2086  weight_pointer,
-
2087  point_process,
-
2088  get_variable_name("t"));
-
2089  print_vector_elements(arguments, ", ");
-
2090  printer->add_text(')');
-
2091 }
-
2092 
- -
2094  const auto& point_process = get_variable_name("point_process", /* use_instance */ false);
-
2095  const auto& tqitem = get_variable_name("tqitem", /* use_instance */ false);
-
2096 
-
2097  printer->fmt_text("{}(/* tqitem */ &{}, {}, ",
-
2098  info.artificial_cell ? "artcell_net_move" : "net_move",
-
2099  tqitem,
-
2100  point_process);
-
2101 
-
2102  print_vector_elements(node.get_arguments(), ", ");
-
2103  printer->add_text(')');
-
2104 }
-
2105 
- -
2107  const auto& point_process = get_variable_name(naming::POINT_PROCESS_VARIABLE,
-
2108  /* use_instance */ false);
-
2109  printer->fmt_text("net_event({}, t)", point_process);
-
2110 }
-
2111 
-
2112 /**
-
2113  * Rename arguments to NET_RECEIVE block with corresponding pointer variable
-
2114  *
-
2115  * \code{.mod}
-
2116  * NET_RECEIVE (weight, R){
-
2117  * x = R
-
2118  * }
-
2119  * \endcode
-
2120  *
-
2121  * then generated code should be:
-
2122  *
-
2123  * \code{.cpp}
-
2124  * x[id] = _args[1];
-
2125  * \endcode
-
2126  *
-
2127  * So, the `R` in AST needs to be renamed with `_args[1]`.
-
2128  */
-
2129 static void rename_net_receive_arguments(const ast::NetReceiveBlock& net_receive_node,
-
2130  const ast::Node& node) {
-
2131  const auto& parameters = net_receive_node.get_parameters();
-
2132 
-
2133  auto n_parameters = parameters.size();
-
2134  for (size_t i = 0; i < n_parameters; ++i) {
-
2135  const auto& name = parameters[i]->get_node_name();
-
2136  auto var_used = VarUsageVisitor().variable_used(node, name);
-
2137  if (var_used) {
-
2138  RenameVisitor vr(name, fmt::format("_args[{}]", i));
-
2139  node.get_statement_block()->visit_children(vr);
-
2140  }
-
2141  }
-
2142 }
-
2143 
- -
2145  printing_net_receive = true;
-
2146  auto node = info.net_receive_node;
-
2147  if (!node) {
-
2148  return;
-
2149  }
-
2150 
-
2151  ParamVector args = {{"", "Point_process*", "", "_pnt"},
-
2152  {"", "double*", "", "_args"},
-
2153  {"", "double", "", "flag"}};
-
2154 
-
2155  printer->fmt_push_block("static void nrn_net_receive_{}({})",
-
2156  info.mod_suffix,
-
2157  get_parameter_str(args));
-
2158 
-
2159  rename_net_receive_arguments(*node, *node);
-
2160 
-
2161  printer->add_line("_nrn_mechanism_cache_instance _lmc{_pnt->prop};");
-
2162  printer->add_line("auto * nt = static_cast<NrnThread*>(_pnt->_vnt);");
-
2163  printer->add_line("auto * _ppvar = _nrn_mechanism_access_dparam(_pnt->prop);");
-
2164 
-
2165  printer->fmt_line("auto inst = make_instance_{}(_lmc);", info.mod_suffix);
-
2166  printer->fmt_line("// nocmodl has a nullptr dereference for thread variables.");
-
2167  printer->fmt_line("// NMODL will fail to compile at a later point, because of");
-
2168  printer->fmt_line("// missing '_thread_vars'.");
-
2169  printer->fmt_line("Datum * _thread = nullptr;");
+
2083 
+ +
2085  auto const& arguments = node.get_arguments();
+
2086 
+
2087  if (printing_net_init) {
+
2088  throw std::runtime_error("Not implemented. [jfiwoei]");
+
2089  }
+
2090 
+
2091  std::string weight_pointer = "nullptr";
+
2092  auto point_process = get_variable_name(naming::POINT_PROCESS_VARIABLE,
+
2093  /* use_instance */ false);
+
2094  if (!printing_net_receive) {
+
2095  point_process += ".get<Point_process*>()";
+
2096  }
+
2097  const auto& tqitem = get_variable_name("tqitem", /* use_instance */ false);
+
2098 
+
2099  printer->fmt_text("{}(/* tqitem */ &{}, {}, {}, {} + ",
+
2100  info.artificial_cell ? "artcell_net_send" : "net_send",
+
2101  tqitem,
+
2102  weight_pointer,
+
2103  point_process,
+
2104  get_variable_name("t"));
+
2105  print_vector_elements(arguments, ", ");
+
2106  printer->add_text(')');
+
2107 }
+
2108 
+ +
2110  const auto& point_process = get_variable_name("point_process", /* use_instance */ false);
+
2111  const auto& tqitem = get_variable_name("tqitem", /* use_instance */ false);
+
2112 
+
2113  printer->fmt_text("{}(/* tqitem */ &{}, {}, ",
+
2114  info.artificial_cell ? "artcell_net_move" : "net_move",
+
2115  tqitem,
+
2116  point_process);
+
2117 
+
2118  print_vector_elements(node.get_arguments(), ", ");
+
2119  printer->add_text(')');
+
2120 }
+
2121 
+ +
2123  const auto& point_process = get_variable_name(naming::POINT_PROCESS_VARIABLE,
+
2124  /* use_instance */ false);
+
2125  printer->fmt_text("net_event({}, t)", point_process);
+
2126 }
+
2127 
+
2128 /**
+
2129  * Rename arguments to NET_RECEIVE block with corresponding pointer variable
+
2130  *
+
2131  * \code{.mod}
+
2132  * NET_RECEIVE (weight, R){
+
2133  * x = R
+
2134  * }
+
2135  * \endcode
+
2136  *
+
2137  * then generated code should be:
+
2138  *
+
2139  * \code{.cpp}
+
2140  * x[id] = _args[1];
+
2141  * \endcode
+
2142  *
+
2143  * So, the `R` in AST needs to be renamed with `_args[1]`.
+
2144  */
+
2145 static void rename_net_receive_arguments(const ast::NetReceiveBlock& net_receive_node,
+
2146  const ast::Node& node) {
+
2147  const auto& parameters = net_receive_node.get_parameters();
+
2148 
+
2149  auto n_parameters = parameters.size();
+
2150  for (size_t i = 0; i < n_parameters; ++i) {
+
2151  const auto& name = parameters[i]->get_node_name();
+
2152  auto var_used = VarUsageVisitor().variable_used(node, name);
+
2153  if (var_used) {
+
2154  RenameVisitor vr(name, fmt::format("_args[{}]", i));
+
2155  node.get_statement_block()->visit_children(vr);
+
2156  }
+
2157  }
+
2158 }
+
2159 
+ +
2161  printing_net_receive = true;
+
2162  auto node = info.net_receive_node;
+
2163  if (!node) {
+
2164  return;
+
2165  }
+
2166 
+
2167  ParamVector args = {{"", "Point_process*", "", "_pnt"},
+
2168  {"", "double*", "", "_args"},
+
2169  {"", "double", "", "flag"}};
2170 
-
2171  printer->add_line("size_t id = 0;");
-
2172  printer->add_line("double t = nt->_t;");
-
2173 
-
2174  print_statement_block(*node->get_statement_block(), false, false);
-
2175 
-
2176  printer->add_newline();
-
2177  printer->pop_block();
-
2178  printing_net_receive = false;
-
2179 }
+
2171  printer->fmt_push_block("static void nrn_net_receive_{}({})",
+
2172  info.mod_suffix,
+
2173  get_parameter_str(args));
+
2174 
+
2175  rename_net_receive_arguments(*node, *node);
+
2176 
+
2177  printer->add_line("_nrn_mechanism_cache_instance _lmc{_pnt->prop};");
+
2178  printer->add_line("auto * nt = static_cast<NrnThread*>(_pnt->_vnt);");
+
2179  printer->add_line("auto * _ppvar = _nrn_mechanism_access_dparam(_pnt->prop);");
2180 
-
2181 
-
2182 /****************************************************************************************/
-
2183 /* Overloaded visitor routines */
-
2184 /****************************************************************************************/
-
2185 
-
2186 /// TODO: Edit for NEURON
- -
2188  return;
-
2189 }
-
2190 
+
2181  printer->fmt_line("auto inst = make_instance_{}(_lmc);", info.mod_suffix);
+
2182  printer->fmt_line("// nocmodl has a nullptr dereference for thread variables.");
+
2183  printer->fmt_line("// NMODL will fail to compile at a later point, because of");
+
2184  printer->fmt_line("// missing '_thread_vars'.");
+
2185  printer->fmt_line("Datum * _thread = nullptr;");
+
2186 
+
2187  printer->add_line("size_t id = 0;");
+
2188  printer->add_line("double t = nt->_t;");
+
2189 
+
2190  print_statement_block(*node->get_statement_block(), false, false);
2191 
-
2192 } // namespace codegen
-
2193 } // namespace nmodl
+
2192  printer->add_newline();
+
2193  printer->pop_block();
+
2194  printing_net_receive = false;
+
2195 }
+
2196 
+
2197 
+
2198 /****************************************************************************************/
+
2199 /* Overloaded visitor routines */
+
2200 /****************************************************************************************/
+
2201 
+
2202 /// TODO: Edit for NEURON
+ +
2204  return;
+
2205 }
+
2206 
+
2207 
+
2208 } // namespace codegen
+
2209 } // namespace nmodl
static bool starts_with(const std::string &haystack, const std::string &needle)
Check if haystack starts with needle.
-
void print_nrn_destructor() override
Print nrn_destructor function definition.
+
void print_nrn_destructor() override
Print nrn_destructor function definition.
Base class for all AST node.
Definition: node.hpp:40
bool is_index
if this is pure index (e.g.
-
void print_nrn_cur_non_conductance_kernel() override
Print the nrn_cur kernel without NMODL conductance keyword provisions.
+
void print_nrn_cur_non_conductance_kernel() override
Print the nrn_cur kernel without NMODL conductance keyword provisions.
std::string py_function_signature(const std::string &function_or_procedure_name) const
Get the signature of the npy <func_or_proc_name> function.
Helper to represent information about index/int variables.
-
void print_nrn_cur() override
Print nrn_cur / current update function definition.
-
void print_macro_definitions()
Print all NEURON macros.
-
void print_net_event_call(const ast::FunctionCall &node) override
Print call to net_event.
+
void print_nrn_cur() override
Print nrn_cur / current update function definition.
+
void print_macro_definitions()
Print all NEURON macros.
+
void print_net_event_call(const ast::FunctionCall &node) override
Print call to net_event.
static constexpr char POINT_PROCESS_VARIABLE[]
inbuilt neuron variable for point process
void print_neuron_includes()
Print includes from NEURON.
static constexpr char NRN_JACOB_METHOD[]
nrn_jacob method in generated code
@@ -2307,13 +2323,13 @@
void print_hoc_py_wrapper_function_body(const ast::Block *function_or_procedure_block, InterpreterWrapper wrapper_type)
std::string internal_method_arguments() override
Arguments for functions that are defined and used internally.
std::shared_ptr< symtab::Symbol > SymbolType
-
void print_nrn_alloc() override
Print nrn_alloc function definition.
+
void print_nrn_alloc() override
Print nrn_alloc function definition.
static constexpr char VOLTAGE_UNUSED_VARIABLE[]
range variable for voltage when unused (for vectorized model)
std::string register_mechanism_arguments() const override
Arguments for register_mech or point_register_mech function.
int position_of_int_var(const std::string &name) const override
Determine the position in the data array for a given int variable.
const ArgumentVector & get_parameters() const noexcept override
Getter for member variable NetReceiveBlock::parameters.
- +
std::string table_thread_function_name() const
Name of the threaded table checking function.
bool optimize_ion_variable_copies() const override
Check if ion variable copies should be avoided.
std::string hoc_function_name(const std::string &function_or_procedure_name) const
All functions and procedures need a hoc <func_or_proc_name> to be available to the HOC interpreter.
@@ -2325,20 +2341,20 @@
Visitor for printing C++ code compatible with legacy api of NEURON
std::string backend_name() const override
Name of the code generation backend.
std::string process_verbatim_text(std::string const &text) override
Process a verbatim block for possible variable renaming.
- +
void print_global_param_default_values()
Print global struct with default value of RANGE PARAMETERs.
std::string name
name of the ion
static constexpr char NTHREAD_DT_VARIABLE[]
dt variable in neuron thread structure
-
void print_g_unused() const override
Set g_unused (conductance) for NRN_PRCELLSTATE feature.
-
void visit_watch_statement(const ast::WatchStatement &node) override
TODO: Edit for NEURON.
+
void print_g_unused() const override
Set g_unused (conductance) for NRN_PRCELLSTATE feature.
+
void visit_watch_statement(const ast::WatchStatement &node) override
TODO: Edit for NEURON.
virtual bool is_procedure_block() const noexcept
Check if the ast node is an instance of ast::ProcedureBlock.
Definition: ast.cpp:144
-
void print_net_send_call(const ast::FunctionCall &node) override
Print call to net_send.
+
void print_net_send_call(const ast::FunctionCall &node) override
Print call to net_send.
Check if variable is used in given block.
Implement string manipulation functions.
-
void print_net_move_call(const ast::FunctionCall &node) override
Print call to net_move.
+
void print_net_move_call(const ast::FunctionCall &node) override
Print call to net_move.
std::string thread_variable_name(const ThreadVariableInfo &var_info, bool use_instance=true) const
Determine the C++ string to print for thread variables.
static constexpr char NODE_AREA_VARIABLE[]
inbuilt neuron variable for area of the compartment
-
void print_nrn_state() override
Print nrn_state / state update function definition.
+
void print_nrn_state() override
Print nrn_state / state update function definition.
virtual bool is_function_block() const noexcept
Check if the ast node is an instance of ast::FunctionBlock.
Definition: ast.cpp:142
static constexpr char NRN_ALLOC_METHOD[]
nrn_alloc method in generated code
void print_initial_block(const ast::InitialBlock *node)
Print the initial block.
@@ -2349,8 +2365,8 @@
std::shared_ptr< StatementBlock > get_statement_block() const noexcept override
Getter for member variable BreakpointBlock::statement_block.
std::string rev_potential_pointer_name() const
-
void print_v_unused() const override
Set v_unused (voltage) for NRN_PRCELLSTATE feature.
- +
void print_v_unused() const override
Set v_unused (voltage) for NRN_PRCELLSTATE feature.
+
static constexpr char CONDUCTANCE_VARIABLE[]
range variable for conductance
ParamVector functor_params() override
The parameters of the Newton solver "functor".
Visitor for printing C++ code compatible with legacy api of CoreNEURON
@@ -2365,7 +2381,7 @@
Represent WATCH statement in NMODL.
void print_neuron_global_variable_declarations()
Print extern declarations for neuron global variables.
Represents a BREAKPOINT block in NMODL.
-
void print_nrn_cur_conductance_kernel(const ast::BreakpointBlock &node) override
Print the nrn_cur kernel with NMODL conductance keyword provisions.
+
void print_nrn_cur_conductance_kernel(const ast::BreakpointBlock &node) override
Print the nrn_cur kernel with NMODL conductance keyword provisions.
std::string int_variable_name(const IndexVariableInfo &symbol, const std::string &name, bool use_instance) const override
Determine the name of an int variable given its symbol.
InterpreterWrapper
Enum to switch between HOC and Python wrappers for functions and procedures defined in mechanisms.
@@ -2376,21 +2392,21 @@
std::string hoc_function_signature(const std::string &function_or_procedure_name) const
Get the signature of the hoc <func_or_proc_name> function.
void print_thread_variables_structure(bool print_initializers)
Print the data structure used to access thread variables.
std::string to_string(const T &obj)
-
void print_compute_functions() override
Print all compute functions for every backend.
+
void print_compute_functions() override
Print all compute functions for every backend.
static constexpr char NRN_INIT_METHOD[]
nrn_init method in generated code
const ExpressionVector & get_arguments() const noexcept
Getter for member variable FunctionCall::arguments.
void print_thread_memory_callbacks()
Print thread variable (de-)initialization functions.
static void rename_net_receive_arguments(const ast::NetReceiveBlock &net_receive_node, const ast::Node &node)
Rename arguments to NET_RECEIVE block with corresponding pointer variable.
-
void print_nrn_cur_kernel(const ast::BreakpointBlock &node) override
Print main body of nrn_cur function.
+
void print_nrn_cur_kernel(const ast::BreakpointBlock &node) override
Print main body of nrn_cur function.
Blindly rename given variable to new name
static constexpr char NRN_CUR_METHOD[]
nrn_cur method in generated code
void print_mechanism_register() override
Print the mechanism registration function.
Implement utility functions for codegen visitors.
static constexpr char TQITEM_VARIABLE[]
inbuilt neuron variable for tqitem process
-
void print_nrn_jacob()
Print nrn_jacob function definition.
+
void print_nrn_jacob()
Print nrn_jacob function definition.
-
void print_fast_imem_calculation() override
Print fast membrane current calculation code.
-
void print_data_structures(bool print_initializers) override
Print all classes.
+
void print_fast_imem_calculation() override
Print fast membrane current calculation code.
+
void print_data_structures(bool print_initializers) override
Print all classes.
void print_sdlists_init(bool print_initializers) override
const std::string external_method_arguments() noexcept override
Arguments for external functions called from generated code.
std::string py_function_name(const std::string &function_or_procedure_name) const
In non POINT_PROCESS mechanisms all functions and procedures need a py <func_or_proc_name> to be avai...
@@ -2404,17 +2420,17 @@
void print_setdata_functions()
Print NEURON functions related to setting global variables of the mechanism.
std::string get_name(const std::shared_ptr< symtab::Symbol > &sym)
Represents ion write statement during code generation.
-
void print_mechanism_variables_macros()
Print mechanism variables' related macros.
-
void print_nrn_constructor() override
Print nrn_constructor function definition.
+
void print_mechanism_variables_macros()
Print mechanism variables' related macros.
+
void print_nrn_constructor() override
Print nrn_constructor function definition.
void print_check_table_function_prototypes()
Print all check_* function declarations.
BlockType
Helper to represent various block types.
-
void print_headers_include() override
Print all includes.
+
void print_headers_include() override
Print all includes.
const ParamVector external_method_parameters(bool table=false) noexcept override
Parameters for functions in generated code that are called back from external code.
void print_function_or_procedure(const ast::Block &node, const std::string &name, const std::unordered_set< CppObjectSpecifier > &specifiers={ CppObjectSpecifier::Inline}) override
Print nmodl function or procedure (common code)
static constexpr char NRN_STATE_METHOD[]
nrn_state method in generated code
const std::shared_ptr< symtab::Symbol > symbol
Version information and units file path.
-
void print_nrn_current(const ast::BreakpointBlock &node) override
Print the nrn_current kernel.
+
void print_nrn_current(const ast::BreakpointBlock &node) override
Print the nrn_current kernel.
int position_of_float_var(const std::string &name) const override
Determine the position in the data array for a given float variable.
std::string get_variable_name(const std::string &name, bool use_instance=true) const override
Determine variable name in the structure of mechanism properties.
static constexpr char AREA_VARIABLE[]
similar to node_area but user can explicitly declare it as area
@@ -2434,7 +2450,7 @@
static bool ends_with(const std::string &haystack, const std::string &needle)
Check if haystack ends with needle.
static constexpr char CONDUCTANCE_UNUSED_VARIABLE[]
range variable when conductance is not used (for vectorized model)
-
void print_codegen_routines() override
Print entry point to code generation.
+
void print_codegen_routines() override
Print entry point to code generation.
void append_conc_write_statements(std::vector< ShadowUseStatement > &statements, const Ion &ion, const std::string &concentration) override
Generate Function call statement for nrn_wrote_conc.
static constexpr char NRN_POINTERINDEX[]
hoc_nrnpointerindex name
@@ -2442,11 +2458,11 @@
int get_index_from_name(const std::vector< T > &variables, const std::string &name)
virtual std::string get_node_name() const
Return name of of the node.
Definition: ast.cpp:28
Auto generated AST classes declaration.
-
void print_net_receive()
Print net_receive call-back.
+
void print_net_receive()
Print net_receive call-back.
void print_function_prototypes() override
Print function and procedures prototype declaration.
void print_mechanism_global_var_structure(bool print_initializers) override
Print the structure that wraps all global variables used in the NMODL.
std::string namespace_name() override
Name of "our" namespace.
-
void print_global_macros()
Print NEURON global variable macros.
+
void print_global_macros()
Print NEURON global variable macros.
std::string intra_conc_pointer_name() const
std::vector< std::tuple< std::string, std::string, std::string, std::string > > ParamVector
A vector of parameters represented by a 4-tuple of strings:
static constexpr char ION_VARNAME_PREFIX[]
prefix for ion variable
diff --git a/notebooks/nmodl-kinetic-schemes.ipynb b/notebooks/nmodl-kinetic-schemes.ipynb index f5be06122..ac05f9cf3 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-08-09T11:23:33.742696Z", - "iopub.status.busy": "2024-08-09T11:23:33.742467Z", - "iopub.status.idle": "2024-08-09T11:23:35.015466Z", - "shell.execute_reply": "2024-08-09T11:23:35.014691Z" + "iopub.execute_input": "2024-08-09T12:31:26.244012Z", + "iopub.status.busy": "2024-08-09T12:31:26.243460Z", + "iopub.status.idle": "2024-08-09T12:31:27.046034Z", + "shell.execute_reply": "2024-08-09T12:31:27.045177Z" } }, "outputs": [], @@ -169,10 +169,10 @@ "execution_count": 2, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:35.018581Z", - "iopub.status.busy": "2024-08-09T11:23:35.018362Z", - "iopub.status.idle": "2024-08-09T11:23:35.048162Z", - "shell.execute_reply": "2024-08-09T11:23:35.047489Z" + "iopub.execute_input": "2024-08-09T12:31:27.049064Z", + "iopub.status.busy": "2024-08-09T12:31:27.048854Z", + "iopub.status.idle": "2024-08-09T12:31:27.079695Z", + "shell.execute_reply": "2024-08-09T12:31:27.078887Z" } }, "outputs": [], @@ -277,10 +277,10 @@ "execution_count": 3, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:35.051409Z", - "iopub.status.busy": "2024-08-09T11:23:35.050982Z", - "iopub.status.idle": "2024-08-09T11:23:35.055706Z", - "shell.execute_reply": "2024-08-09T11:23:35.055029Z" + "iopub.execute_input": "2024-08-09T12:31:27.083055Z", + "iopub.status.busy": "2024-08-09T12:31:27.082694Z", + "iopub.status.idle": "2024-08-09T12:31:27.087562Z", + "shell.execute_reply": "2024-08-09T12:31:27.086913Z" } }, "outputs": [ @@ -323,10 +323,10 @@ "execution_count": 4, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:35.087608Z", - "iopub.status.busy": "2024-08-09T11:23:35.087126Z", - "iopub.status.idle": "2024-08-09T11:23:35.091110Z", - "shell.execute_reply": "2024-08-09T11:23:35.090441Z" + "iopub.execute_input": "2024-08-09T12:31:27.118850Z", + "iopub.status.busy": "2024-08-09T12:31:27.118384Z", + "iopub.status.idle": "2024-08-09T12:31:27.122871Z", + "shell.execute_reply": "2024-08-09T12:31:27.122158Z" } }, "outputs": [ @@ -367,10 +367,10 @@ "execution_count": 5, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:35.093707Z", - "iopub.status.busy": "2024-08-09T11:23:35.093243Z", - "iopub.status.idle": "2024-08-09T11:23:35.097066Z", - "shell.execute_reply": "2024-08-09T11:23:35.096410Z" + "iopub.execute_input": "2024-08-09T12:31:27.125418Z", + "iopub.status.busy": "2024-08-09T12:31:27.124899Z", + "iopub.status.idle": "2024-08-09T12:31:27.128755Z", + "shell.execute_reply": "2024-08-09T12:31:27.128199Z" }, "scrolled": true }, @@ -412,10 +412,10 @@ "execution_count": 6, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:35.099892Z", - "iopub.status.busy": "2024-08-09T11:23:35.099525Z", - "iopub.status.idle": "2024-08-09T11:23:35.103278Z", - "shell.execute_reply": "2024-08-09T11:23:35.102638Z" + "iopub.execute_input": "2024-08-09T12:31:27.131215Z", + "iopub.status.busy": "2024-08-09T12:31:27.130867Z", + "iopub.status.idle": "2024-08-09T12:31:27.134784Z", + "shell.execute_reply": "2024-08-09T12:31:27.134102Z" }, "scrolled": true }, @@ -459,10 +459,10 @@ "execution_count": 7, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:35.105742Z", - "iopub.status.busy": "2024-08-09T11:23:35.105382Z", - "iopub.status.idle": "2024-08-09T11:23:35.109694Z", - "shell.execute_reply": "2024-08-09T11:23:35.109049Z" + "iopub.execute_input": "2024-08-09T12:31:27.136990Z", + "iopub.status.busy": "2024-08-09T12:31:27.136799Z", + "iopub.status.idle": "2024-08-09T12:31:27.141212Z", + "shell.execute_reply": "2024-08-09T12:31:27.140552Z" } }, "outputs": [ diff --git a/notebooks/nmodl-python-tutorial.ipynb b/notebooks/nmodl-python-tutorial.ipynb index 0810f196c..108eaddd0 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-08-09T11:23:43.684245Z", - "iopub.status.busy": "2024-08-09T11:23:43.684036Z", - "iopub.status.idle": "2024-08-09T11:23:44.957833Z", - "shell.execute_reply": "2024-08-09T11:23:44.957043Z" + "iopub.execute_input": "2024-08-09T12:31:38.781523Z", + "iopub.status.busy": "2024-08-09T12:31:38.781319Z", + "iopub.status.idle": "2024-08-09T12:31:39.579751Z", + "shell.execute_reply": "2024-08-09T12:31:39.578985Z" } }, "outputs": [], @@ -63,10 +63,10 @@ "execution_count": 2, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:44.961286Z", - "iopub.status.busy": "2024-08-09T11:23:44.960772Z", - "iopub.status.idle": "2024-08-09T11:23:44.990112Z", - "shell.execute_reply": "2024-08-09T11:23:44.989419Z" + "iopub.execute_input": "2024-08-09T12:31:39.583094Z", + "iopub.status.busy": "2024-08-09T12:31:39.582627Z", + "iopub.status.idle": "2024-08-09T12:31:39.610578Z", + "shell.execute_reply": "2024-08-09T12:31:39.609903Z" } }, "outputs": [], @@ -86,10 +86,10 @@ "execution_count": 3, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:44.993193Z", - "iopub.status.busy": "2024-08-09T11:23:44.992903Z", - "iopub.status.idle": "2024-08-09T11:23:44.996748Z", - "shell.execute_reply": "2024-08-09T11:23:44.996178Z" + "iopub.execute_input": "2024-08-09T12:31:39.613667Z", + "iopub.status.busy": "2024-08-09T12:31:39.613261Z", + "iopub.status.idle": "2024-08-09T12:31:39.617092Z", + "shell.execute_reply": "2024-08-09T12:31:39.616423Z" } }, "outputs": [], @@ -152,10 +152,10 @@ "execution_count": 4, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:44.999514Z", - "iopub.status.busy": "2024-08-09T11:23:44.998988Z", - "iopub.status.idle": "2024-08-09T11:23:45.003038Z", - "shell.execute_reply": "2024-08-09T11:23:45.002486Z" + "iopub.execute_input": "2024-08-09T12:31:39.619577Z", + "iopub.status.busy": "2024-08-09T12:31:39.619225Z", + "iopub.status.idle": "2024-08-09T12:31:39.623100Z", + "shell.execute_reply": "2024-08-09T12:31:39.622434Z" } }, "outputs": [], @@ -183,10 +183,10 @@ "execution_count": 5, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:45.005749Z", - "iopub.status.busy": "2024-08-09T11:23:45.005302Z", - "iopub.status.idle": "2024-08-09T11:23:45.008929Z", - "shell.execute_reply": "2024-08-09T11:23:45.008294Z" + "iopub.execute_input": "2024-08-09T12:31:39.625836Z", + "iopub.status.busy": "2024-08-09T12:31:39.625420Z", + "iopub.status.idle": "2024-08-09T12:31:39.629020Z", + "shell.execute_reply": "2024-08-09T12:31:39.628374Z" } }, "outputs": [ @@ -235,10 +235,10 @@ "execution_count": 6, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:45.011217Z", - "iopub.status.busy": "2024-08-09T11:23:45.011021Z", - "iopub.status.idle": "2024-08-09T11:23:45.015096Z", - "shell.execute_reply": "2024-08-09T11:23:45.014595Z" + "iopub.execute_input": "2024-08-09T12:31:39.631903Z", + "iopub.status.busy": "2024-08-09T12:31:39.631425Z", + "iopub.status.idle": "2024-08-09T12:31:39.635446Z", + "shell.execute_reply": "2024-08-09T12:31:39.634812Z" } }, "outputs": [], @@ -260,10 +260,10 @@ "execution_count": 7, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:45.017449Z", - "iopub.status.busy": "2024-08-09T11:23:45.017252Z", - "iopub.status.idle": "2024-08-09T11:23:45.020904Z", - "shell.execute_reply": "2024-08-09T11:23:45.020216Z" + "iopub.execute_input": "2024-08-09T12:31:39.638235Z", + "iopub.status.busy": "2024-08-09T12:31:39.637742Z", + "iopub.status.idle": "2024-08-09T12:31:39.641404Z", + "shell.execute_reply": "2024-08-09T12:31:39.640743Z" } }, "outputs": [ @@ -297,10 +297,10 @@ "execution_count": 8, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:45.023191Z", - "iopub.status.busy": "2024-08-09T11:23:45.022996Z", - "iopub.status.idle": "2024-08-09T11:23:45.030592Z", - "shell.execute_reply": "2024-08-09T11:23:45.029970Z" + "iopub.execute_input": "2024-08-09T12:31:39.644066Z", + "iopub.status.busy": "2024-08-09T12:31:39.643607Z", + "iopub.status.idle": "2024-08-09T12:31:39.650821Z", + "shell.execute_reply": "2024-08-09T12:31:39.650134Z" } }, "outputs": [ @@ -365,10 +365,10 @@ "execution_count": 9, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:45.033131Z", - "iopub.status.busy": "2024-08-09T11:23:45.032670Z", - "iopub.status.idle": "2024-08-09T11:23:45.036994Z", - "shell.execute_reply": "2024-08-09T11:23:45.036350Z" + "iopub.execute_input": "2024-08-09T12:31:39.653487Z", + "iopub.status.busy": "2024-08-09T12:31:39.653037Z", + "iopub.status.idle": "2024-08-09T12:31:39.657215Z", + "shell.execute_reply": "2024-08-09T12:31:39.656545Z" } }, "outputs": [ @@ -416,10 +416,10 @@ "execution_count": 10, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:45.039561Z", - "iopub.status.busy": "2024-08-09T11:23:45.039081Z", - "iopub.status.idle": "2024-08-09T11:23:45.042487Z", - "shell.execute_reply": "2024-08-09T11:23:45.041864Z" + "iopub.execute_input": "2024-08-09T12:31:39.659937Z", + "iopub.status.busy": "2024-08-09T12:31:39.659479Z", + "iopub.status.idle": "2024-08-09T12:31:39.662846Z", + "shell.execute_reply": "2024-08-09T12:31:39.662288Z" } }, "outputs": [], @@ -441,10 +441,10 @@ "execution_count": 11, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:45.045022Z", - "iopub.status.busy": "2024-08-09T11:23:45.044645Z", - "iopub.status.idle": "2024-08-09T11:23:45.048705Z", - "shell.execute_reply": "2024-08-09T11:23:45.048015Z" + "iopub.execute_input": "2024-08-09T12:31:39.665352Z", + "iopub.status.busy": "2024-08-09T12:31:39.664905Z", + "iopub.status.idle": "2024-08-09T12:31:39.668605Z", + "shell.execute_reply": "2024-08-09T12:31:39.667949Z" } }, "outputs": [ @@ -510,10 +510,10 @@ "execution_count": 12, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:45.051198Z", - "iopub.status.busy": "2024-08-09T11:23:45.050826Z", - "iopub.status.idle": "2024-08-09T11:23:45.054478Z", - "shell.execute_reply": "2024-08-09T11:23:45.053842Z" + "iopub.execute_input": "2024-08-09T12:31:39.671158Z", + "iopub.status.busy": "2024-08-09T12:31:39.670652Z", + "iopub.status.idle": "2024-08-09T12:31:39.674145Z", + "shell.execute_reply": "2024-08-09T12:31:39.673587Z" } }, "outputs": [ @@ -548,10 +548,10 @@ "execution_count": 13, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:45.056923Z", - "iopub.status.busy": "2024-08-09T11:23:45.056544Z", - "iopub.status.idle": "2024-08-09T11:23:45.060415Z", - "shell.execute_reply": "2024-08-09T11:23:45.059740Z" + "iopub.execute_input": "2024-08-09T12:31:39.676535Z", + "iopub.status.busy": "2024-08-09T12:31:39.676334Z", + "iopub.status.idle": "2024-08-09T12:31:39.679793Z", + "shell.execute_reply": "2024-08-09T12:31:39.679129Z" } }, "outputs": [ @@ -584,10 +584,10 @@ "execution_count": 14, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:45.062856Z", - "iopub.status.busy": "2024-08-09T11:23:45.062672Z", - "iopub.status.idle": "2024-08-09T11:23:45.066645Z", - "shell.execute_reply": "2024-08-09T11:23:45.066001Z" + "iopub.execute_input": "2024-08-09T12:31:39.682195Z", + "iopub.status.busy": "2024-08-09T12:31:39.681980Z", + "iopub.status.idle": "2024-08-09T12:31:39.685693Z", + "shell.execute_reply": "2024-08-09T12:31:39.685030Z" } }, "outputs": [ @@ -622,10 +622,10 @@ "execution_count": 15, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:45.069079Z", - "iopub.status.busy": "2024-08-09T11:23:45.068715Z", - "iopub.status.idle": "2024-08-09T11:23:45.072872Z", - "shell.execute_reply": "2024-08-09T11:23:45.072222Z" + "iopub.execute_input": "2024-08-09T12:31:39.688288Z", + "iopub.status.busy": "2024-08-09T12:31:39.687888Z", + "iopub.status.idle": "2024-08-09T12:31:39.692103Z", + "shell.execute_reply": "2024-08-09T12:31:39.691442Z" } }, "outputs": [ @@ -669,10 +669,10 @@ "execution_count": 16, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:45.075352Z", - "iopub.status.busy": "2024-08-09T11:23:45.074954Z", - "iopub.status.idle": "2024-08-09T11:23:45.080172Z", - "shell.execute_reply": "2024-08-09T11:23:45.079489Z" + "iopub.execute_input": "2024-08-09T12:31:39.694856Z", + "iopub.status.busy": "2024-08-09T12:31:39.694371Z", + "iopub.status.idle": "2024-08-09T12:31:39.699960Z", + "shell.execute_reply": "2024-08-09T12:31:39.699297Z" } }, "outputs": [ @@ -733,10 +733,10 @@ "execution_count": 17, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:45.082637Z", - "iopub.status.busy": "2024-08-09T11:23:45.082336Z", - "iopub.status.idle": "2024-08-09T11:23:45.085902Z", - "shell.execute_reply": "2024-08-09T11:23:45.085309Z" + "iopub.execute_input": "2024-08-09T12:31:39.702278Z", + "iopub.status.busy": "2024-08-09T12:31:39.702029Z", + "iopub.status.idle": "2024-08-09T12:31:39.705641Z", + "shell.execute_reply": "2024-08-09T12:31:39.705082Z" } }, "outputs": [], @@ -761,10 +761,10 @@ "execution_count": 18, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:45.088431Z", - "iopub.status.busy": "2024-08-09T11:23:45.088048Z", - "iopub.status.idle": "2024-08-09T11:23:45.097876Z", - "shell.execute_reply": "2024-08-09T11:23:45.097342Z" + "iopub.execute_input": "2024-08-09T12:31:39.708051Z", + "iopub.status.busy": "2024-08-09T12:31:39.707671Z", + "iopub.status.idle": "2024-08-09T12:31:39.717818Z", + "shell.execute_reply": "2024-08-09T12:31:39.717261Z" } }, "outputs": [], @@ -857,10 +857,10 @@ "execution_count": 19, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:45.100249Z", - "iopub.status.busy": "2024-08-09T11:23:45.099871Z", - "iopub.status.idle": "2024-08-09T11:23:45.103759Z", - "shell.execute_reply": "2024-08-09T11:23:45.103058Z" + "iopub.execute_input": "2024-08-09T12:31:39.720164Z", + "iopub.status.busy": "2024-08-09T12:31:39.719802Z", + "iopub.status.idle": "2024-08-09T12:31:39.723416Z", + "shell.execute_reply": "2024-08-09T12:31:39.722771Z" } }, "outputs": [ @@ -897,10 +897,10 @@ "execution_count": 20, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:45.106206Z", - "iopub.status.busy": "2024-08-09T11:23:45.105827Z", - "iopub.status.idle": "2024-08-09T11:23:45.111545Z", - "shell.execute_reply": "2024-08-09T11:23:45.110843Z" + "iopub.execute_input": "2024-08-09T12:31:39.725920Z", + "iopub.status.busy": "2024-08-09T12:31:39.725526Z", + "iopub.status.idle": "2024-08-09T12:31:39.731259Z", + "shell.execute_reply": "2024-08-09T12:31:39.730584Z" } }, "outputs": [ diff --git a/notebooks/nmodl-sympy-conductance.ipynb b/notebooks/nmodl-sympy-conductance.ipynb index 50be79ac1..6b9b9e5b8 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-08-09T11:23:47.540242Z", - "iopub.status.busy": "2024-08-09T11:23:47.539645Z", - "iopub.status.idle": "2024-08-09T11:23:48.418980Z", - "shell.execute_reply": "2024-08-09T11:23:48.418111Z" + "iopub.execute_input": "2024-08-09T12:31:42.220982Z", + "iopub.status.busy": "2024-08-09T12:31:42.220430Z", + "iopub.status.idle": "2024-08-09T12:31:43.016691Z", + "shell.execute_reply": "2024-08-09T12:31:43.015956Z" } }, "outputs": [], @@ -103,10 +103,10 @@ "execution_count": 2, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:48.422275Z", - "iopub.status.busy": "2024-08-09T11:23:48.422002Z", - "iopub.status.idle": "2024-08-09T11:23:48.452969Z", - "shell.execute_reply": "2024-08-09T11:23:48.452170Z" + "iopub.execute_input": "2024-08-09T12:31:43.019986Z", + "iopub.status.busy": "2024-08-09T12:31:43.019460Z", + "iopub.status.idle": "2024-08-09T12:31:43.050098Z", + "shell.execute_reply": "2024-08-09T12:31:43.049426Z" } }, "outputs": [], @@ -149,10 +149,10 @@ "execution_count": 3, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:48.456301Z", - "iopub.status.busy": "2024-08-09T11:23:48.455885Z", - "iopub.status.idle": "2024-08-09T11:23:48.729427Z", - "shell.execute_reply": "2024-08-09T11:23:48.728684Z" + "iopub.execute_input": "2024-08-09T12:31:43.053184Z", + "iopub.status.busy": "2024-08-09T12:31:43.052915Z", + "iopub.status.idle": "2024-08-09T12:31:43.343134Z", + "shell.execute_reply": "2024-08-09T12:31:43.342406Z" } }, "outputs": [ @@ -196,10 +196,10 @@ "execution_count": 4, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:48.732117Z", - "iopub.status.busy": "2024-08-09T11:23:48.731866Z", - "iopub.status.idle": "2024-08-09T11:23:48.863336Z", - "shell.execute_reply": "2024-08-09T11:23:48.862592Z" + "iopub.execute_input": "2024-08-09T12:31:43.346332Z", + "iopub.status.busy": "2024-08-09T12:31:43.345711Z", + "iopub.status.idle": "2024-08-09T12:31:43.484387Z", + "shell.execute_reply": "2024-08-09T12:31:43.483717Z" } }, "outputs": [ @@ -243,10 +243,10 @@ "execution_count": 5, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:48.866223Z", - "iopub.status.busy": "2024-08-09T11:23:48.865832Z", - "iopub.status.idle": "2024-08-09T11:23:48.874191Z", - "shell.execute_reply": "2024-08-09T11:23:48.873588Z" + "iopub.execute_input": "2024-08-09T12:31:43.487225Z", + "iopub.status.busy": "2024-08-09T12:31:43.486823Z", + "iopub.status.idle": "2024-08-09T12:31:43.495171Z", + "shell.execute_reply": "2024-08-09T12:31:43.494582Z" } }, "outputs": [ @@ -290,10 +290,10 @@ "execution_count": 6, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:48.876847Z", - "iopub.status.busy": "2024-08-09T11:23:48.876466Z", - "iopub.status.idle": "2024-08-09T11:23:48.894300Z", - "shell.execute_reply": "2024-08-09T11:23:48.893703Z" + "iopub.execute_input": "2024-08-09T12:31:43.497717Z", + "iopub.status.busy": "2024-08-09T12:31:43.497372Z", + "iopub.status.idle": "2024-08-09T12:31:43.515585Z", + "shell.execute_reply": "2024-08-09T12:31:43.514981Z" } }, "outputs": [ @@ -337,10 +337,10 @@ "execution_count": 7, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:48.896978Z", - "iopub.status.busy": "2024-08-09T11:23:48.896581Z", - "iopub.status.idle": "2024-08-09T11:23:49.016171Z", - "shell.execute_reply": "2024-08-09T11:23:49.015505Z" + "iopub.execute_input": "2024-08-09T12:31:43.518076Z", + "iopub.status.busy": "2024-08-09T12:31:43.517708Z", + "iopub.status.idle": "2024-08-09T12:31:43.635154Z", + "shell.execute_reply": "2024-08-09T12:31:43.634574Z" } }, "outputs": [ @@ -400,10 +400,10 @@ "execution_count": 8, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:49.018829Z", - "iopub.status.busy": "2024-08-09T11:23:49.018416Z", - "iopub.status.idle": "2024-08-09T11:23:49.113628Z", - "shell.execute_reply": "2024-08-09T11:23:49.112871Z" + "iopub.execute_input": "2024-08-09T12:31:43.637850Z", + "iopub.status.busy": "2024-08-09T12:31:43.637350Z", + "iopub.status.idle": "2024-08-09T12:31:43.731059Z", + "shell.execute_reply": "2024-08-09T12:31:43.730368Z" } }, "outputs": [ @@ -456,10 +456,10 @@ "execution_count": 9, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:49.116257Z", - "iopub.status.busy": "2024-08-09T11:23:49.116048Z", - "iopub.status.idle": "2024-08-09T11:23:49.190868Z", - "shell.execute_reply": "2024-08-09T11:23:49.190213Z" + "iopub.execute_input": "2024-08-09T12:31:43.733740Z", + "iopub.status.busy": "2024-08-09T12:31:43.733309Z", + "iopub.status.idle": "2024-08-09T12:31:43.806797Z", + "shell.execute_reply": "2024-08-09T12:31:43.806212Z" } }, "outputs": [ diff --git a/notebooks/nmodl-sympy-solver-cnexp.ipynb b/notebooks/nmodl-sympy-solver-cnexp.ipynb index b7eff7b65..de7ee92d0 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-08-09T11:23:50.927147Z", - "iopub.status.busy": "2024-08-09T11:23:50.926942Z", - "iopub.status.idle": "2024-08-09T11:23:51.733585Z", - "shell.execute_reply": "2024-08-09T11:23:51.732674Z" + "iopub.execute_input": "2024-08-09T12:31:45.532407Z", + "iopub.status.busy": "2024-08-09T12:31:45.532215Z", + "iopub.status.idle": "2024-08-09T12:31:46.327723Z", + "shell.execute_reply": "2024-08-09T12:31:46.326863Z" } }, "outputs": [], @@ -79,10 +79,10 @@ "execution_count": 2, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:51.736977Z", - "iopub.status.busy": "2024-08-09T11:23:51.736572Z", - "iopub.status.idle": "2024-08-09T11:23:51.767441Z", - "shell.execute_reply": "2024-08-09T11:23:51.766756Z" + "iopub.execute_input": "2024-08-09T12:31:46.331022Z", + "iopub.status.busy": "2024-08-09T12:31:46.330605Z", + "iopub.status.idle": "2024-08-09T12:31:46.359881Z", + "shell.execute_reply": "2024-08-09T12:31:46.359259Z" } }, "outputs": [], @@ -123,10 +123,10 @@ "execution_count": 3, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:51.770340Z", - "iopub.status.busy": "2024-08-09T11:23:51.770128Z", - "iopub.status.idle": "2024-08-09T11:23:52.190337Z", - "shell.execute_reply": "2024-08-09T11:23:52.189586Z" + "iopub.execute_input": "2024-08-09T12:31:46.362676Z", + "iopub.status.busy": "2024-08-09T12:31:46.362269Z", + "iopub.status.idle": "2024-08-09T12:31:46.783788Z", + "shell.execute_reply": "2024-08-09T12:31:46.783009Z" } }, "outputs": [ @@ -165,10 +165,10 @@ "execution_count": 4, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:52.192870Z", - "iopub.status.busy": "2024-08-09T11:23:52.192627Z", - "iopub.status.idle": "2024-08-09T11:23:52.304325Z", - "shell.execute_reply": "2024-08-09T11:23:52.303508Z" + "iopub.execute_input": "2024-08-09T12:31:46.786650Z", + "iopub.status.busy": "2024-08-09T12:31:46.786244Z", + "iopub.status.idle": "2024-08-09T12:31:46.899517Z", + "shell.execute_reply": "2024-08-09T12:31:46.898806Z" } }, "outputs": [ @@ -207,10 +207,10 @@ "execution_count": 5, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:52.307155Z", - "iopub.status.busy": "2024-08-09T11:23:52.306924Z", - "iopub.status.idle": "2024-08-09T11:23:52.509128Z", - "shell.execute_reply": "2024-08-09T11:23:52.508370Z" + "iopub.execute_input": "2024-08-09T12:31:46.902372Z", + "iopub.status.busy": "2024-08-09T12:31:46.901806Z", + "iopub.status.idle": "2024-08-09T12:31:47.103789Z", + "shell.execute_reply": "2024-08-09T12:31:47.103058Z" } }, "outputs": [ @@ -255,10 +255,10 @@ "execution_count": 6, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:52.511877Z", - "iopub.status.busy": "2024-08-09T11:23:52.511466Z", - "iopub.status.idle": "2024-08-09T11:23:52.670148Z", - "shell.execute_reply": "2024-08-09T11:23:52.669451Z" + "iopub.execute_input": "2024-08-09T12:31:47.106566Z", + "iopub.status.busy": "2024-08-09T12:31:47.106136Z", + "iopub.status.idle": "2024-08-09T12:31:47.265610Z", + "shell.execute_reply": "2024-08-09T12:31:47.264899Z" } }, "outputs": [ @@ -303,10 +303,10 @@ "execution_count": 7, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:52.672993Z", - "iopub.status.busy": "2024-08-09T11:23:52.672590Z", - "iopub.status.idle": "2024-08-09T11:23:54.432006Z", - "shell.execute_reply": "2024-08-09T11:23:54.431320Z" + "iopub.execute_input": "2024-08-09T12:31:47.268397Z", + "iopub.status.busy": "2024-08-09T12:31:47.267893Z", + "iopub.status.idle": "2024-08-09T12:31:49.040383Z", + "shell.execute_reply": "2024-08-09T12:31:49.039638Z" } }, "outputs": [ @@ -351,10 +351,10 @@ "execution_count": 8, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:54.434800Z", - "iopub.status.busy": "2024-08-09T11:23:54.434352Z", - "iopub.status.idle": "2024-08-09T11:23:56.654894Z", - "shell.execute_reply": "2024-08-09T11:23:56.654219Z" + "iopub.execute_input": "2024-08-09T12:31:49.043257Z", + "iopub.status.busy": "2024-08-09T12:31:49.043016Z", + "iopub.status.idle": "2024-08-09T12:31:51.268104Z", + "shell.execute_reply": "2024-08-09T12:31:51.267391Z" } }, "outputs": [ diff --git a/notebooks/nmodl-sympy-solver-derivimplicit.ipynb b/notebooks/nmodl-sympy-solver-derivimplicit.ipynb index 792410aa9..f1d143e1b 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-08-09T11:23:58.374313Z", - "iopub.status.busy": "2024-08-09T11:23:58.374010Z", - "iopub.status.idle": "2024-08-09T11:23:59.180353Z", - "shell.execute_reply": "2024-08-09T11:23:59.179574Z" + "iopub.execute_input": "2024-08-09T12:31:52.939668Z", + "iopub.status.busy": "2024-08-09T12:31:52.939098Z", + "iopub.status.idle": "2024-08-09T12:31:53.733476Z", + "shell.execute_reply": "2024-08-09T12:31:53.732658Z" } }, "outputs": [], @@ -56,10 +56,10 @@ "execution_count": 2, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:59.183659Z", - "iopub.status.busy": "2024-08-09T11:23:59.183226Z", - "iopub.status.idle": "2024-08-09T11:23:59.213418Z", - "shell.execute_reply": "2024-08-09T11:23:59.212747Z" + "iopub.execute_input": "2024-08-09T12:31:53.736662Z", + "iopub.status.busy": "2024-08-09T12:31:53.736267Z", + "iopub.status.idle": "2024-08-09T12:31:53.765817Z", + "shell.execute_reply": "2024-08-09T12:31:53.765041Z" } }, "outputs": [], @@ -100,10 +100,10 @@ "execution_count": 3, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:59.216562Z", - "iopub.status.busy": "2024-08-09T11:23:59.216153Z", - "iopub.status.idle": "2024-08-09T11:23:59.684614Z", - "shell.execute_reply": "2024-08-09T11:23:59.683850Z" + "iopub.execute_input": "2024-08-09T12:31:53.768721Z", + "iopub.status.busy": "2024-08-09T12:31:53.768462Z", + "iopub.status.idle": "2024-08-09T12:31:54.239555Z", + "shell.execute_reply": "2024-08-09T12:31:54.238855Z" } }, "outputs": [ @@ -165,10 +165,10 @@ "execution_count": 4, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:23:59.687474Z", - "iopub.status.busy": "2024-08-09T11:23:59.687079Z", - "iopub.status.idle": "2024-08-09T11:23:59.904874Z", - "shell.execute_reply": "2024-08-09T11:23:59.904140Z" + "iopub.execute_input": "2024-08-09T12:31:54.242370Z", + "iopub.status.busy": "2024-08-09T12:31:54.241799Z", + "iopub.status.idle": "2024-08-09T12:31:54.457353Z", + "shell.execute_reply": "2024-08-09T12:31:54.456631Z" } }, "outputs": [ diff --git a/notebooks/nmodl-sympy-solver-sparse.ipynb b/notebooks/nmodl-sympy-solver-sparse.ipynb index 53618837a..6fd300081 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-08-09T11:24:01.201543Z", - "iopub.status.busy": "2024-08-09T11:24:01.201337Z", - "iopub.status.idle": "2024-08-09T11:24:02.004904Z", - "shell.execute_reply": "2024-08-09T11:24:02.004141Z" + "iopub.execute_input": "2024-08-09T12:31:55.811969Z", + "iopub.status.busy": "2024-08-09T12:31:55.811770Z", + "iopub.status.idle": "2024-08-09T12:31:56.634640Z", + "shell.execute_reply": "2024-08-09T12:31:56.633750Z" } }, "outputs": [], @@ -56,10 +56,10 @@ "execution_count": 2, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:24:02.008365Z", - "iopub.status.busy": "2024-08-09T11:24:02.007824Z", - "iopub.status.idle": "2024-08-09T11:24:02.037705Z", - "shell.execute_reply": "2024-08-09T11:24:02.036942Z" + "iopub.execute_input": "2024-08-09T12:31:56.637855Z", + "iopub.status.busy": "2024-08-09T12:31:56.637612Z", + "iopub.status.idle": "2024-08-09T12:31:56.667938Z", + "shell.execute_reply": "2024-08-09T12:31:56.667138Z" } }, "outputs": [], @@ -100,10 +100,10 @@ "execution_count": 3, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:24:02.040875Z", - "iopub.status.busy": "2024-08-09T11:24:02.040610Z", - "iopub.status.idle": "2024-08-09T11:24:02.503130Z", - "shell.execute_reply": "2024-08-09T11:24:02.502406Z" + "iopub.execute_input": "2024-08-09T12:31:56.671222Z", + "iopub.status.busy": "2024-08-09T12:31:56.670928Z", + "iopub.status.idle": "2024-08-09T12:31:57.141309Z", + "shell.execute_reply": "2024-08-09T12:31:57.140567Z" } }, "outputs": [ @@ -165,10 +165,10 @@ "execution_count": 4, "metadata": { "execution": { - "iopub.execute_input": "2024-08-09T11:24:02.506047Z", - "iopub.status.busy": "2024-08-09T11:24:02.505488Z", - "iopub.status.idle": "2024-08-09T11:24:02.717641Z", - "shell.execute_reply": "2024-08-09T11:24:02.716928Z" + "iopub.execute_input": "2024-08-09T12:31:57.144091Z", + "iopub.status.busy": "2024-08-09T12:31:57.143709Z", + "iopub.status.idle": "2024-08-09T12:31:57.356857Z", + "shell.execute_reply": "2024-08-09T12:31:57.356162Z" } }, "outputs": [