x[id] = _args[1];
So, the R
in AST needs to be renamed with _args[1]
.
-Definition at line 2564 of file codegen_neuron_cpp_visitor.cpp.
+Definition at line 2567 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 a9f5b3046..146c89a82 100644
--- a/doxygen/src_2codegen_2codegen__neuron__cpp__visitor_8cpp_source.html
+++ b/doxygen/src_2codegen_2codegen__neuron__cpp__visitor_8cpp_source.html
@@ -891,170 +891,170 @@
797 bool use_instance)
const {
- 798 const std::string& varname = update_if_ion_variable_name(name);
-
- 800 auto name_comparator = [&varname](
const auto& sym) {
return varname ==
get_name(sym); };
-
-
- 803 if (printing_net_receive) {
-
-
-
-
-
-
-
-
-
- 813 return fmt::format(
"{}.{}", global_struct_instance(), name);
-
-
-
- 817 auto f = std::find_if(codegen_float_variables.begin(),
- 818 codegen_float_variables.end(),
-
- 820 if (f != codegen_float_variables.end()) {
- 821 return float_variable_name(*f, use_instance);
-
-
-
-
- 826 std::find_if(codegen_int_variables.begin(), codegen_int_variables.end(), name_comparator);
- 827 if (i != codegen_int_variables.end()) {
- 828 return int_variable_name(*i, varname, use_instance);
-
-
-
- 832 auto t = std::find_if(codegen_thread_variables.begin(),
- 833 codegen_thread_variables.end(),
-
- 835 if (t != codegen_thread_variables.end()) {
- 836 return thread_variable_name(*t, use_instance);
-
-
-
- 840 auto g = std::find_if(codegen_global_variables.begin(),
- 841 codegen_global_variables.end(),
-
- 843 if (g != codegen_global_variables.end()) {
- 844 return global_variable_name(*g, use_instance);
-
-
-
-
-
-
-
-
-
-
-
- 856 auto e = std::find_if(info.external_variables.begin(),
- 857 info.external_variables.end(),
-
- 859 if (e != info.external_variables.end()) {
- 860 return fmt::format(
"{}()", varname);
-
-
-
- 864 std::find_if(info.neuron_global_variables.begin(),
- 865 info.neuron_global_variables.end(),
- 866 [&varname](
auto const& entry) { return entry.first->get_name() == varname; });
- 867 if (iter != info.neuron_global_variables.end()) {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 890 printer->add_newline();
- 891 printer->add_multi_line(R
"CODE(
- 892 #include <Eigen/Dense>
-
-
-
-
-
-
- 899 if (info.eigen_newton_solver_exist) {
- 900 printer->add_multi_line(nmodl::solvers::newton_hpp);
-
-
-
-
-
- 906 printer->add_newline();
- 907 printer->add_multi_line(R
"CODE(
- 908 #include "mech_api.h"
- 909 #include "neuron/cache/mechanism_range.hpp"
- 910 #include "nrniv_mf.h"
- 911 #include "section_fwd.hpp"
-
-
-
-
-
-
-
- 919 printer->add_newline(2);
- 920 printer->push_block(
"static void _initlists()");
- 921 for (
auto i = 0; i < info.prime_variables_by_order.size(); ++i) {
- 922 const auto& prime_var = info.prime_variables_by_order[i];
-
-
-
-
- 927 if (prime_var->is_array()) {
-
-
-
- 931 printer->fmt_push_block(
"for (int _i = 0; _i < {}; ++_i)", prime_var->get_length());
- 932 printer->fmt_line(
"/* {}[{}] */", prime_var->get_name(), prime_var->get_length());
- 933 printer->fmt_line(
"_slist1[{}+_i] = {{{}, _i}};",
-
- 935 position_of_float_var(prime_var->get_name()));
- 936 const auto prime_var_deriv_name =
"D" + prime_var->get_name();
- 937 printer->fmt_line(
"/* {}[{}] */", prime_var_deriv_name, prime_var->get_length());
- 938 printer->fmt_line(
"_dlist1[{}+_i] = {{{}, _i}};",
-
- 940 position_of_float_var(prime_var_deriv_name));
- 941 printer->pop_block();
-
- 943 printer->fmt_line(
"/* {} */", prime_var->get_name());
- 944 printer->fmt_line(
"_slist1[{}] = {{{}, 0}};",
-
- 946 position_of_float_var(prime_var->get_name()));
- 947 const auto prime_var_deriv_name =
"D" + prime_var->get_name();
- 948 printer->fmt_line(
"/* {} */", prime_var_deriv_name);
- 949 printer->fmt_line(
"_dlist1[{}] = {{{}, 0}};",
-
- 951 position_of_float_var(prime_var_deriv_name));
-
-
- 954 printer->pop_block();
-
-
-
- 958 auto params = internal_method_parameters();
- 959 if (!info.artificial_cell) {
- 960 params.push_back({
"",
"double",
"",
"v"});
-
+ 798 std::string varname = update_if_ion_variable_name(name);
+ 799 if (!info.artificial_cell && varname ==
"v") {
+
+
+
+ 803 auto name_comparator = [&varname](
const auto& sym) {
return varname ==
get_name(sym); };
+
+
+ 806 if (printing_net_receive) {
+
+
+
+
+
+
+
+
+
+ 816 return fmt::format(
"{}.{}", global_struct_instance(), name);
+
+
+
+ 820 auto f = std::find_if(codegen_float_variables.begin(),
+ 821 codegen_float_variables.end(),
+
+ 823 if (f != codegen_float_variables.end()) {
+ 824 return float_variable_name(*f, use_instance);
+
+
+
+
+ 829 std::find_if(codegen_int_variables.begin(), codegen_int_variables.end(), name_comparator);
+ 830 if (i != codegen_int_variables.end()) {
+ 831 return int_variable_name(*i, varname, use_instance);
+
+
+
+ 835 auto t = std::find_if(codegen_thread_variables.begin(),
+ 836 codegen_thread_variables.end(),
+
+ 838 if (t != codegen_thread_variables.end()) {
+ 839 return thread_variable_name(*t, use_instance);
+
+
+
+ 843 auto g = std::find_if(codegen_global_variables.begin(),
+ 844 codegen_global_variables.end(),
+
+ 846 if (g != codegen_global_variables.end()) {
+ 847 return global_variable_name(*g, use_instance);
+
+
+
+
+
+
+
+
+
+
+
+ 859 auto e = std::find_if(info.external_variables.begin(),
+ 860 info.external_variables.end(),
+
+ 862 if (e != info.external_variables.end()) {
+ 863 return fmt::format(
"{}()", varname);
+
+
+
+ 867 std::find_if(info.neuron_global_variables.begin(),
+ 868 info.neuron_global_variables.end(),
+ 869 [&varname](
auto const& entry) { return entry.first->get_name() == varname; });
+ 870 if (iter != info.neuron_global_variables.end()) {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 893 printer->add_newline();
+ 894 printer->add_multi_line(R
"CODE(
+ 895 #include <Eigen/Dense>
+
+
+
+
+
+
+ 902 if (info.eigen_newton_solver_exist) {
+ 903 printer->add_multi_line(nmodl::solvers::newton_hpp);
+
+
+
+
+
+ 909 printer->add_newline();
+ 910 printer->add_multi_line(R
"CODE(
+ 911 #include "mech_api.h"
+ 912 #include "neuron/cache/mechanism_range.hpp"
+ 913 #include "nrniv_mf.h"
+ 914 #include "section_fwd.hpp"
+
+
+
+
+
+
+
+ 922 printer->add_newline(2);
+ 923 printer->push_block(
"static void _initlists()");
+ 924 for (
auto i = 0; i < info.prime_variables_by_order.size(); ++i) {
+ 925 const auto& prime_var = info.prime_variables_by_order[i];
+
+
+
+
+ 930 if (prime_var->is_array()) {
+
+
+
+ 934 printer->fmt_push_block(
"for (int _i = 0; _i < {}; ++_i)", prime_var->get_length());
+ 935 printer->fmt_line(
"/* {}[{}] */", prime_var->get_name(), prime_var->get_length());
+ 936 printer->fmt_line(
"_slist1[{}+_i] = {{{}, _i}};",
+
+ 938 position_of_float_var(prime_var->get_name()));
+ 939 const auto prime_var_deriv_name =
"D" + prime_var->get_name();
+ 940 printer->fmt_line(
"/* {}[{}] */", prime_var_deriv_name, prime_var->get_length());
+ 941 printer->fmt_line(
"_dlist1[{}+_i] = {{{}, _i}};",
+
+ 943 position_of_float_var(prime_var_deriv_name));
+ 944 printer->pop_block();
+
+ 946 printer->fmt_line(
"/* {} */", prime_var->get_name());
+ 947 printer->fmt_line(
"_slist1[{}] = {{{}, 0}};",
+
+ 949 position_of_float_var(prime_var->get_name()));
+ 950 const auto prime_var_deriv_name =
"D" + prime_var->get_name();
+ 951 printer->fmt_line(
"/* {} */", prime_var_deriv_name);
+ 952 printer->fmt_line(
"_dlist1[{}] = {{{}, 0}};",
+
+ 954 position_of_float_var(prime_var_deriv_name));
+
+
+ 957 printer->pop_block();
+
+
+
+ 961 auto params = internal_method_parameters();
@@ -1918,7 +1918,7 @@
1822 printer->add_line(
"auto* _ppvar = _ml_arg->pdata[id];");
1823 if (!info.artificial_cell) {
1824 printer->add_line(
"int node_id = node_data.nodeindices[id];");
- 1825 printer->add_line(
"auto v = node_data.node_voltages[node_id];");
+ 1825 printer->add_line(
"inst.v_unused[id] = node_data.node_voltages[node_id];");
1828 print_rename_state_vars();
@@ -2165,655 +2165,658 @@
2069 printer->push_block(
"for (int id = 0; id < nodecount; id++)");
2070 printer->add_line(
"int node_id = node_data.nodeindices[id];");
2071 printer->add_line(
"auto* _ppvar = _ml_arg->pdata[id];");
- 2072 printer->add_line(
"auto v = node_data.node_voltages[node_id];");
-
-
-
-
-
- 2078 if (ion_variable_struct_required()) {
- 2079 throw std::runtime_error(
"Not implemented.");
-
-
-
- 2083 for (
auto& statement: read_statements) {
- 2084 printer->add_line(statement);
-
-
- 2087 if (info.nrn_state_block) {
- 2088 info.nrn_state_block->visit_children(*
this);
-
-
- 2091 if (info.currents.empty() && info.breakpoint_node !=
nullptr) {
- 2092 auto block = info.breakpoint_node->get_statement_block();
- 2093 print_statement_block(*block,
false,
false);
-
-
-
- 2097 for (
auto& statement: write_statements) {
- 2098 const auto& text = process_shadow_update_statement(statement,
BlockType::State);
- 2099 printer->add_line(text);
-
-
- 2102 printer->pop_block();
- 2103 printer->pop_block();
-
-
-
-
-
+ 2072 if (!info.artificial_cell) {
+ 2073 printer->add_line(
"inst.v_unused[id] = node_data.node_voltages[node_id];");
+
+
+
+
+
+
+ 2080 if (ion_variable_struct_required()) {
+ 2081 throw std::runtime_error(
"Not implemented.");
+
+
+
+ 2085 for (
auto& statement: read_statements) {
+ 2086 printer->add_line(statement);
+
+
+ 2089 if (info.nrn_state_block) {
+ 2090 info.nrn_state_block->visit_children(*
this);
+
+
+ 2093 if (info.currents.empty() && info.breakpoint_node !=
nullptr) {
+ 2094 auto block = info.breakpoint_node->get_statement_block();
+ 2095 print_statement_block(*block,
false,
false);
+
+
+
+ 2099 for (
auto& statement: write_statements) {
+ 2100 const auto& text = process_shadow_update_statement(statement,
BlockType::State);
+ 2101 printer->add_line(text);
+
+
+ 2104 printer->pop_block();
+ 2105 printer->pop_block();
+
+
+
-
-
- 2112 return get_arg_str(nrn_current_parameters());
-
-
-
-
- 2117 if (ion_variable_struct_required()) {
- 2118 throw std::runtime_error(
"Not implemented.");
-
-
- 2121 ParamVector params = {{
"",
"_nrn_mechanism_cache_range&",
"",
"_lmc"},
- 2122 {
"",
"NrnThread*",
"",
"nt"},
- 2123 {
"",
"Datum*",
"",
"_ppvar"},
- 2124 {
"",
"Datum*",
"",
"_thread"}};
-
- 2126 if (info.thread_callback_register) {
- 2127 auto type_name = fmt::format(
"{}&", thread_variables_struct());
- 2128 params.emplace_back(
"", type_name,
"",
"_thread_vars");
-
- 2130 params.emplace_back(
"",
"size_t",
"",
"id");
- 2131 params.emplace_back(
"", fmt::format(
"{}&", instance_struct()),
"",
"inst");
- 2132 params.emplace_back(
"", fmt::format(
"{}&", node_data_struct()),
"",
"node_data");
- 2133 params.emplace_back(
"",
"double",
"",
"v");
-
-
-
-
-
- 2139 const auto& args = nrn_current_parameters();
-
- 2141 printer->add_newline(2);
- 2142 printer->fmt_push_block(
"static inline double nrn_current_{}({})",
-
- 2144 get_parameter_str(args));
- 2145 printer->add_line(
"double current = 0.0;");
- 2146 print_statement_block(*block,
false,
false);
- 2147 for (
auto& current: info.currents) {
- 2148 const auto& name = get_variable_name(current);
- 2149 printer->fmt_line(
"current += {};", name);
-
- 2151 printer->add_line(
"return current;");
- 2152 printer->pop_block();
-
-
-
-
-
- 2158 print_statement_block(*block,
false,
false);
- 2159 if (!info.currents.empty()) {
-
- 2161 for (
const auto& current: info.currents) {
- 2162 auto var = breakpoint_current(current);
- 2163 sum += get_variable_name(var);
- 2164 if (¤t != &info.currents.back()) {
-
-
-
- 2168 printer->fmt_line(
"double rhs = {};", sum);
-
-
-
- 2172 for (
const auto& conductance: info.conductances) {
- 2173 auto var = breakpoint_current(conductance.variable);
- 2174 sum += get_variable_name(var);
- 2175 if (&conductance != &info.conductances.back()) {
-
-
-
- 2179 printer->fmt_line(
"double g = {};", sum);
-
- 2181 for (
const auto& conductance: info.conductances) {
- 2182 if (!conductance.ion.empty()) {
-
-
- 2185 const auto& rhs = get_variable_name(conductance.variable);
-
-
- 2188 printer->add_line(text);
-
-
-
-
-
-
- 2195 printer->fmt_line(
"double I1 = nrn_current_{}({}+0.001);",
-
- 2197 nrn_current_arguments());
- 2198 for (
auto& ion: info.ions) {
- 2199 for (
auto& var: ion.writes) {
- 2200 if (ion.is_ionic_current(var)) {
- 2201 const auto& name = get_variable_name(var);
- 2202 printer->fmt_line(
"double di{} = {};", ion.name, name);
-
-
-
- 2206 printer->fmt_line(
"double I0 = nrn_current_{}({});", info.mod_suffix, nrn_current_arguments());
- 2207 printer->add_line(
"double rhs = I0;");
-
- 2209 printer->add_line(
"double g = (I1-I0)/0.001;");
- 2210 for (
auto& ion: info.ions) {
- 2211 for (
auto& var: ion.writes) {
- 2212 if (ion.is_ionic_current(var)) {
-
- 2214 auto rhs = fmt::format(
"(di{}-{})/0.001", ion.name, get_variable_name(var));
- 2215 if (info.point_process) {
-
- 2217 rhs += fmt::format(
"*1.e2/{}", area);
-
-
-
- 2221 printer->add_line(text);
-
-
-
-
-
-
-
- 2229 printer->add_line(
"int node_id = node_data.nodeindices[id];");
- 2230 printer->add_line(
"double v = node_data.node_voltages[node_id];");
- 2231 printer->add_line(
"auto* _ppvar = _ml_arg->pdata[id];");
-
- 2233 for (
auto& statement: read_statements) {
- 2234 printer->add_line(statement);
-
-
- 2237 if (info.conductances.empty()) {
- 2238 print_nrn_cur_non_conductance_kernel();
-
- 2240 print_nrn_cur_conductance_kernel(node);
-
-
-
- 2244 for (
auto& statement: write_statements) {
-
- 2246 printer->add_line(text);
-
-
- 2249 if (info.point_process) {
-
- 2251 printer->fmt_line(
"double mfactor = 1.e2/{};", area);
- 2252 printer->add_line(
"g = g*mfactor;");
- 2253 printer->add_line(
"rhs = rhs*mfactor;");
-
-
-
-
+
+
+
+
+ 2114 return get_arg_str(nrn_current_parameters());
+
+
+
+
+ 2119 if (ion_variable_struct_required()) {
+ 2120 throw std::runtime_error(
"Not implemented.");
+
+
+ 2123 ParamVector params = {{
"",
"_nrn_mechanism_cache_range&",
"",
"_lmc"},
+ 2124 {
"",
"NrnThread*",
"",
"nt"},
+ 2125 {
"",
"Datum*",
"",
"_ppvar"},
+ 2126 {
"",
"Datum*",
"",
"_thread"}};
+
+ 2128 if (info.thread_callback_register) {
+ 2129 auto type_name = fmt::format(
"{}&", thread_variables_struct());
+ 2130 params.emplace_back(
"", type_name,
"",
"_thread_vars");
+
+ 2132 params.emplace_back(
"",
"size_t",
"",
"id");
+ 2133 params.emplace_back(
"", fmt::format(
"{}&", instance_struct()),
"",
"inst");
+ 2134 params.emplace_back(
"", fmt::format(
"{}&", node_data_struct()),
"",
"node_data");
+ 2135 params.emplace_back(
"",
"double",
"",
"v");
+
+
+
+
+
+ 2141 const auto& args = nrn_current_parameters();
+
+ 2143 printer->add_newline(2);
+ 2144 printer->fmt_push_block(
"static inline double nrn_current_{}({})",
+
+ 2146 get_parameter_str(args));
+ 2147 printer->add_line(
"inst.v_unused[id] = v;");
+ 2148 printer->add_line(
"double current = 0.0;");
+ 2149 print_statement_block(*block,
false,
false);
+ 2150 for (
auto& current: info.currents) {
+ 2151 const auto& name = get_variable_name(current);
+ 2152 printer->fmt_line(
"current += {};", name);
+
+ 2154 printer->add_line(
"return current;");
+ 2155 printer->pop_block();
+
+
+
+
+
+ 2161 print_statement_block(*block,
false,
false);
+ 2162 if (!info.currents.empty()) {
+
+ 2164 for (
const auto& current: info.currents) {
+ 2165 auto var = breakpoint_current(current);
+ 2166 sum += get_variable_name(var);
+ 2167 if (¤t != &info.currents.back()) {
+
+
+
+ 2171 printer->fmt_line(
"double rhs = {};", sum);
+
+
+
+ 2175 for (
const auto& conductance: info.conductances) {
+ 2176 auto var = breakpoint_current(conductance.variable);
+ 2177 sum += get_variable_name(var);
+ 2178 if (&conductance != &info.conductances.back()) {
+
+
+
+ 2182 printer->fmt_line(
"double g = {};", sum);
+
+ 2184 for (
const auto& conductance: info.conductances) {
+ 2185 if (!conductance.ion.empty()) {
+
+
+ 2188 const auto& rhs = get_variable_name(conductance.variable);
+
+
+ 2191 printer->add_line(text);
+
+
+
+
+
+
+ 2198 printer->fmt_line(
"double I1 = nrn_current_{}({}+0.001);",
+
+ 2200 nrn_current_arguments());
+ 2201 for (
auto& ion: info.ions) {
+ 2202 for (
auto& var: ion.writes) {
+ 2203 if (ion.is_ionic_current(var)) {
+ 2204 const auto& name = get_variable_name(var);
+ 2205 printer->fmt_line(
"double di{} = {};", ion.name, name);
+
+
+
+ 2209 printer->fmt_line(
"double I0 = nrn_current_{}({});", info.mod_suffix, nrn_current_arguments());
+ 2210 printer->add_line(
"double rhs = I0;");
+
+ 2212 printer->add_line(
"double g = (I1-I0)/0.001;");
+ 2213 for (
auto& ion: info.ions) {
+ 2214 for (
auto& var: ion.writes) {
+ 2215 if (ion.is_ionic_current(var)) {
+
+ 2217 auto rhs = fmt::format(
"(di{}-{})/0.001", ion.name, get_variable_name(var));
+ 2218 if (info.point_process) {
+
+ 2220 rhs += fmt::format(
"*1.e2/{}", area);
+
+
+
+ 2224 printer->add_line(text);
+
+
+
+
+
+
+
+ 2232 printer->add_line(
"int node_id = node_data.nodeindices[id];");
+ 2233 printer->add_line(
"double v = node_data.node_voltages[node_id];");
+ 2234 printer->add_line(
"auto* _ppvar = _ml_arg->pdata[id];");
+
+ 2236 for (
auto& statement: read_statements) {
+ 2237 printer->add_line(statement);
+
+
+ 2240 if (info.conductances.empty()) {
+ 2241 print_nrn_cur_non_conductance_kernel();
+
+ 2243 print_nrn_cur_conductance_kernel(node);
+
+
+
+ 2247 for (
auto& statement: write_statements) {
+
+ 2249 printer->add_line(text);
+
+
+ 2252 if (info.point_process) {
+
+ 2254 printer->fmt_line(
"double mfactor = 1.e2/{};", area);
+ 2255 printer->add_line(
"g = g*mfactor;");
+ 2256 printer->add_line(
"rhs = rhs*mfactor;");
+
-
-
-
-
-
-
-
-
-
- 2268 if (!nrn_cur_required()) {
-
-
-
- 2272 if (info.conductances.empty()) {
- 2273 print_nrn_current(*info.breakpoint_node);
-
-
- 2276 printer->add_newline(2);
- 2277 printer->add_line(
"/** update current */");
-
-
- 2280 printer->push_block(
"for (int id = 0; id < nodecount; id++)");
- 2281 print_nrn_cur_kernel(*info.breakpoint_node);
-
-
-
-
-
-
- 2288 printer->fmt_line(
"node_data.node_rhs[node_id] {} rhs;", operator_for_rhs());
+
+
+
+
+
+
+
+
+
+
+
+
+ 2271 if (!nrn_cur_required()) {
+
+
+
+ 2275 if (info.conductances.empty()) {
+ 2276 print_nrn_current(*info.breakpoint_node);
+
+
+ 2279 printer->add_newline(2);
+ 2280 printer->add_line(
"/** update current */");
+
+
+ 2283 printer->push_block(
"for (int id = 0; id < nodecount; id++)");
+ 2284 print_nrn_cur_kernel(*info.breakpoint_node);
+
+
+
+
- 2290 if (breakpoint_exist()) {
- 2291 printer->fmt_line(
"inst.{}[id] = g;",
-
-
-
- 2295 printer->pop_block();
-
-
-
-
-
-
-
-
-
- 2305 printer->pop_block();
-
-
-
-
-
-
-
-
- 2314 print_standard_includes();
- 2315 print_neuron_includes();
-
- 2317 if (info.thread_callback_register) {
- 2318 printer->add_line(
"extern void _nrn_thread_reg(int, int, void(*)(Datum*));");
-
-
-
-
-
- 2324 print_global_macros();
- 2325 print_mechanism_variables_macros();
-
- 2327 printer->add_line(
"extern Node* nrn_alloc_node_;");
-
+
+ 2291 printer->fmt_line(
"node_data.node_rhs[node_id] {} rhs;", operator_for_rhs());
+
+ 2293 if (breakpoint_exist()) {
+ 2294 printer->fmt_line(
"inst.{}[id] = g;",
+
+
+
+ 2298 printer->pop_block();
+
+
+
+
+
+
+
+
+
+ 2308 printer->pop_block();
+
+
+
+
+
+
+
+
+ 2317 print_standard_includes();
+ 2318 print_neuron_includes();
+
+ 2320 if (info.thread_callback_register) {
+ 2321 printer->add_line(
"extern void _nrn_thread_reg(int, int, void(*)(Datum*));");
+
+
+
+
+
+ 2327 print_global_macros();
+ 2328 print_mechanism_variables_macros();
-
-
- 2332 printer->add_newline();
- 2333 printer->add_line(
"/* NEURON global macro definitions */");
- 2334 if (info.vectorize) {
- 2335 printer->add_multi_line(R
"CODE(
-
- 2337 #define NRN_VECTORIZED 1
-
-
- 2340 printer->add_multi_line(R
"CODE(
- 2341 /* NOT VECTORIZED */
- 2342 #define NRN_VECTORIZED 0
-
-
-
-
-
-
- 2349 printer->add_newline();
- 2350 printer->add_line(
"static constexpr auto number_of_datum_variables = ",
-
-
- 2353 printer->add_line(
"static constexpr auto number_of_floating_point_variables = ",
-
+ 2330 printer->add_line(
"extern Node* nrn_alloc_node_;");
+
+
+
+
+ 2335 printer->add_newline();
+ 2336 printer->add_line(
"/* NEURON global macro definitions */");
+ 2337 if (info.vectorize) {
+ 2338 printer->add_multi_line(R
"CODE(
+
+ 2340 #define NRN_VECTORIZED 1
+
+
+ 2343 printer->add_multi_line(R
"CODE(
+ 2344 /* NOT VECTORIZED */
+ 2345 #define NRN_VECTORIZED 0
+
+
+
+
+
+
+ 2352 printer->add_newline();
+ 2353 printer->add_line(
"static constexpr auto number_of_datum_variables = ",
+
- 2356 printer->add_newline();
- 2357 printer->add_multi_line(R
"CODE(
-
- 2359 template <typename T>
- 2360 using _nrn_mechanism_std_vector = std::vector<T>;
- 2361 using _nrn_model_sorted_token = neuron::model_sorted_token;
- 2362 using _nrn_mechanism_cache_range = neuron::cache::MechanismRange<number_of_floating_point_variables, number_of_datum_variables>;
- 2363 using _nrn_mechanism_cache_instance = neuron::cache::MechanismInstance<number_of_floating_point_variables, number_of_datum_variables>;
- 2364 using _nrn_non_owning_id_without_container = neuron::container::non_owning_identifier_without_container;
- 2365 template <typename T>
- 2366 using _nrn_mechanism_field = neuron::mechanism::field<T>;
- 2367 template <typename... Args>
- 2368 void _nrn_mechanism_register_data_fields(Args&&... args) {
- 2369 neuron::mechanism::register_data_fields(std::forward<Args>(args)...);
-
-
-
-
- 2374 if (info.point_process) {
- 2375 printer->add_line(
"extern Prop* nrn_point_prop_;");
-
- 2377 printer->add_line(
"Prop* hoc_getdata_range(int type);");
-
-
- 2380 if (info.table_count > 0) {
- 2381 printer->add_line(
"void _nrn_thread_table_reg(int, nrn_thread_table_check_t);");
-
- 2383 if (info.for_netcon_used) {
- 2384 printer->add_line(
"int _nrn_netcon_args(void*, double***);");
+ 2356 printer->add_line(
"static constexpr auto number_of_floating_point_variables = ",
+
+
+ 2359 printer->add_newline();
+ 2360 printer->add_multi_line(R
"CODE(
+
+ 2362 template <typename T>
+ 2363 using _nrn_mechanism_std_vector = std::vector<T>;
+ 2364 using _nrn_model_sorted_token = neuron::model_sorted_token;
+ 2365 using _nrn_mechanism_cache_range = neuron::cache::MechanismRange<number_of_floating_point_variables, number_of_datum_variables>;
+ 2366 using _nrn_mechanism_cache_instance = neuron::cache::MechanismInstance<number_of_floating_point_variables, number_of_datum_variables>;
+ 2367 using _nrn_non_owning_id_without_container = neuron::container::non_owning_identifier_without_container;
+ 2368 template <typename T>
+ 2369 using _nrn_mechanism_field = neuron::mechanism::field<T>;
+ 2370 template <typename... Args>
+ 2371 void _nrn_mechanism_register_data_fields(Args&&... args) {
+ 2372 neuron::mechanism::register_data_fields(std::forward<Args>(args)...);
+
+
+
+
+ 2377 if (info.point_process) {
+ 2378 printer->add_line(
"extern Prop* nrn_point_prop_;");
+
+ 2380 printer->add_line(
"Prop* hoc_getdata_range(int type);");
+
+
+ 2383 if (info.table_count > 0) {
+ 2384 printer->add_line(
"void _nrn_thread_table_reg(int, nrn_thread_table_check_t);");
-
-
-
-
- 2390 print_mechanism_global_var_structure(print_initializers);
- 2391 print_mechanism_range_var_structure(print_initializers);
- 2392 print_node_data_structure(print_initializers);
- 2393 print_thread_variables_structure(print_initializers);
- 2394 print_make_instance();
- 2395 print_make_node_data();
-
-
-
-
- 2400 if (!info.vectorize) {
-
-
- 2403 printer->add_multi_line(R
"CODE(
-
- 2405 inst->v_unused[id] = v;
-
-
-
-
-
-
- 2412 printer->add_multi_line(R
"CODE(
-
- 2414 inst->g_unused[id] = g;
-
-
-
-
-
- 2420 print_hoc_py_wrapper_function_definitions();
- 2421 for (
const auto& procedure: info.procedures) {
- 2422 print_procedure(*procedure);
-
- 2424 for (
const auto&
function: info.functions) {
- 2425 print_function(*
function);
+ 2386 if (info.for_netcon_used) {
+ 2387 printer->add_line(
"int _nrn_netcon_args(void*, double***);");
+
+
+
+
+
+ 2393 print_mechanism_global_var_structure(print_initializers);
+ 2394 print_mechanism_range_var_structure(print_initializers);
+ 2395 print_node_data_structure(print_initializers);
+ 2396 print_thread_variables_structure(print_initializers);
+ 2397 print_make_instance();
+ 2398 print_make_node_data();
+
+
+
+
+ 2403 if (!info.vectorize) {
+
+
+ 2406 printer->add_multi_line(R
"CODE(
+
+ 2408 inst->v_unused[id] = v;
+
+
+
+
+
+
+ 2415 printer->add_multi_line(R
"CODE(
+
+ 2417 inst->g_unused[id] = g;
+
+
+
+
+
+ 2423 print_hoc_py_wrapper_function_definitions();
+ 2424 for (
const auto& procedure: info.procedures) {
+ 2425 print_procedure(*procedure);
- 2427 for (
const auto& function_table: info.function_tables) {
- 2428 print_function_tables(*function_table);
+ 2427 for (
const auto&
function: info.functions) {
+ 2428 print_function(*
function);
-
-
-
-
-
-
-
- 2437 print_net_receive();
-
-
-
-
- 2442 print_backend_info();
- 2443 print_headers_include();
- 2444 print_macro_definitions();
- 2445 print_neuron_global_variable_declarations();
- 2446 print_namespace_start();
- 2447 print_nmodl_constants();
- 2448 print_prcellstate_macros();
- 2449 print_mechanism_info();
- 2450 print_data_structures(
true);
- 2451 print_nrn_constructor_declaration();
- 2452 print_nrn_destructor_declaration();
-
- 2454 print_function_prototypes();
- 2455 print_longitudinal_diffusion_callbacks();
- 2456 print_point_process_function_definitions();
- 2457 print_setdata_functions();
- 2458 print_check_table_entrypoint();
- 2459 print_functors_definitions();
- 2460 print_global_variables_for_hoc();
- 2461 print_thread_memory_callbacks();
- 2462 print_function_definitions();
- 2463 print_compute_functions();
- 2464 print_nrn_constructor();
- 2465 print_nrn_destructor();
- 2466 print_sdlists_init(
true);
- 2467 print_mechanism_register();
- 2468 print_namespace_stop();
-
-
-
- 2472 print_backend_info();
- 2473 print_headers_include();
- 2474 print_namespace_start();
- 2475 print_function_prototypes();
- 2476 print_global_variables_for_hoc();
- 2477 print_function_definitions();
- 2478 print_mechanism_register();
- 2479 print_namespace_stop();
-
-
-
- 2483 if (info.mod_suffix ==
"nothing") {
- 2484 print_codegen_routines_nothing();
-
- 2486 print_codegen_routines_regular();
-
-
-
-
- 2491 throw std::runtime_error(
"Not implemented.");
-
-
-
-
-
+ 2430 for (
const auto& function_table: info.function_tables) {
+ 2431 print_function_tables(*function_table);
+
+
+
+
+
+
+
+
+ 2440 print_net_receive();
+
+
+
+
+ 2445 print_backend_info();
+ 2446 print_headers_include();
+ 2447 print_macro_definitions();
+ 2448 print_neuron_global_variable_declarations();
+ 2449 print_namespace_start();
+ 2450 print_nmodl_constants();
+ 2451 print_prcellstate_macros();
+ 2452 print_mechanism_info();
+ 2453 print_data_structures(
true);
+ 2454 print_nrn_constructor_declaration();
+ 2455 print_nrn_destructor_declaration();
+
+ 2457 print_function_prototypes();
+ 2458 print_longitudinal_diffusion_callbacks();
+ 2459 print_point_process_function_definitions();
+ 2460 print_setdata_functions();
+ 2461 print_check_table_entrypoint();
+ 2462 print_functors_definitions();
+ 2463 print_global_variables_for_hoc();
+ 2464 print_thread_memory_callbacks();
+ 2465 print_function_definitions();
+ 2466 print_compute_functions();
+ 2467 print_nrn_constructor();
+ 2468 print_nrn_destructor();
+ 2469 print_sdlists_init(
true);
+ 2470 print_mechanism_register();
+ 2471 print_namespace_stop();
+
+
+
+ 2475 print_backend_info();
+ 2476 print_headers_include();
+ 2477 print_namespace_start();
+ 2478 print_function_prototypes();
+ 2479 print_global_variables_for_hoc();
+ 2480 print_function_definitions();
+ 2481 print_mechanism_register();
+ 2482 print_namespace_stop();
+
+
+
+ 2486 if (info.mod_suffix ==
"nothing") {
+ 2487 print_codegen_routines_nothing();
+
+ 2489 print_codegen_routines_regular();
+
+
+
+
+ 2494 throw std::runtime_error(
"Not implemented.");
+
+
- 2498 if (printing_net_init) {
- 2499 throw std::runtime_error(
"Not implemented. [jfiwoei]");
-
-
- 2502 std::string weight_pointer =
"nullptr";
-
-
- 2505 if (!printing_net_receive) {
- 2506 point_process +=
".get<Point_process*>()";
-
- 2508 const auto& tqitem = get_variable_name(
"tqitem",
false);
-
- 2510 printer->fmt_text(
"{}(/* tqitem */ &{}, {}, {}, {} + ",
- 2511 info.artificial_cell ?
"artcell_net_send" :
"net_send",
-
-
-
- 2515 get_variable_name(
"t"));
- 2516 print_vector_elements(arguments,
", ");
- 2517 printer->add_text(
')');
-
-
-
- 2521 const auto& point_process = get_variable_name(
"point_process",
false);
- 2522 const auto& tqitem = get_variable_name(
"tqitem",
false);
-
- 2524 printer->fmt_text(
"{}(/* tqitem */ &{}, {}, ",
- 2525 info.artificial_cell ?
"artcell_net_move" :
"net_move",
-
-
-
-
- 2530 printer->add_text(
')');
-
-
-
-
-
- 2536 printer->fmt_text(
"net_event({}, t)", point_process);
-
-
-
-
-
- 2542 printer->add_text(method_name(name),
"(");
- 2543 print_vector_elements(arguments,
", ");
- 2544 printer->add_text(
')');
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 2568 auto n_parameters = parameters.size();
- 2569 for (
size_t i = 0; i < n_parameters; ++i) {
- 2570 const auto& name = parameters[i]->get_node_name();
-
-
-
-
-
-
-
-
-
- 2580 return {{
"",
"Point_process*",
"",
"_pnt"},
- 2581 {
"",
"double*",
"",
"_args"},
- 2582 {
"",
"double",
"",
"flag"}};
-
-
-
-
- 2587 printer->add_line(
"_nrn_mechanism_cache_instance _lmc{_pnt->prop};");
- 2588 printer->add_line(
"auto * nt = static_cast<NrnThread*>(_pnt->_vnt);");
- 2589 printer->add_line(
"auto * _ppvar = _nrn_mechanism_access_dparam(_pnt->prop);");
-
- 2591 printer->fmt_line(
"auto inst = make_instance_{}(&_lmc);", info.mod_suffix);
- 2592 if (!info.artificial_cell) {
- 2593 printer->fmt_line(
"auto node_data = make_node_data_{}(_pnt->prop);", info.mod_suffix);
-
- 2595 printer->fmt_line(
"// nocmodl has a nullptr dereference for thread variables.");
- 2596 printer->fmt_line(
"// NMODL will fail to compile at a later point, because of");
- 2597 printer->fmt_line(
"// missing '_thread_vars'.");
- 2598 printer->fmt_line(
"Datum * _thread = nullptr;");
-
- 2600 printer->add_line(
"size_t id = 0;");
- 2601 printer->add_line(
"double t = nt->_t;");
-
-
-
- 2605 printing_net_receive =
true;
- 2606 auto node = info.net_receive_node;
-
-
-
-
- 2611 printer->fmt_push_block(
"static void nrn_net_receive_{}({})",
-
- 2613 get_parameter_str(net_receive_args()));
-
-
- 2616 print_net_receive_common_code();
+
+
+
+ 2501 if (printing_net_init) {
+ 2502 throw std::runtime_error(
"Not implemented. [jfiwoei]");
+
+
+ 2505 std::string weight_pointer =
"nullptr";
+
+
+ 2508 if (!printing_net_receive) {
+ 2509 point_process +=
".get<Point_process*>()";
+
+ 2511 const auto& tqitem = get_variable_name(
"tqitem",
false);
+
+ 2513 printer->fmt_text(
"{}(/* tqitem */ &{}, {}, {}, {} + ",
+ 2514 info.artificial_cell ?
"artcell_net_send" :
"net_send",
+
+
+
+ 2518 get_variable_name(
"t"));
+ 2519 print_vector_elements(arguments,
", ");
+ 2520 printer->add_text(
')');
+
+
+
+ 2524 const auto& point_process = get_variable_name(
"point_process",
false);
+ 2525 const auto& tqitem = get_variable_name(
"tqitem",
false);
+
+ 2527 printer->fmt_text(
"{}(/* tqitem */ &{}, {}, ",
+ 2528 info.artificial_cell ?
"artcell_net_move" :
"net_move",
+
+
+
+
+ 2533 printer->add_text(
')');
+
+
+
+
+
+ 2539 printer->fmt_text(
"net_event({}, t)", point_process);
+
+
+
+
+
+ 2545 printer->add_text(method_name(name),
"(");
+ 2546 print_vector_elements(arguments,
", ");
+ 2547 printer->add_text(
')');
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2571 auto n_parameters = parameters.size();
+ 2572 for (
size_t i = 0; i < n_parameters; ++i) {
+ 2573 const auto& name = parameters[i]->get_node_name();
+
+
+
+
+
+
+
+
+
+ 2583 return {{
"",
"Point_process*",
"",
"_pnt"},
+ 2584 {
"",
"double*",
"",
"_args"},
+ 2585 {
"",
"double",
"",
"flag"}};
+
+
+
+
+ 2590 printer->add_line(
"_nrn_mechanism_cache_instance _lmc{_pnt->prop};");
+ 2591 printer->add_line(
"auto * nt = static_cast<NrnThread*>(_pnt->_vnt);");
+ 2592 printer->add_line(
"auto * _ppvar = _nrn_mechanism_access_dparam(_pnt->prop);");
+
+ 2594 printer->fmt_line(
"auto inst = make_instance_{}(&_lmc);", info.mod_suffix);
+ 2595 if (!info.artificial_cell) {
+ 2596 printer->fmt_line(
"auto node_data = make_node_data_{}(_pnt->prop);", info.mod_suffix);
+
+ 2598 printer->fmt_line(
"// nocmodl has a nullptr dereference for thread variables.");
+ 2599 printer->fmt_line(
"// NMODL will fail to compile at a later point, because of");
+ 2600 printer->fmt_line(
"// missing '_thread_vars'.");
+ 2601 printer->fmt_line(
"Datum * _thread = nullptr;");
+
+ 2603 printer->add_line(
"size_t id = 0;");
+ 2604 printer->add_line(
"double t = nt->_t;");
+
+
+
+ 2608 printing_net_receive =
true;
+ 2609 auto node = info.net_receive_node;
+
+
+
+
+ 2614 printer->fmt_push_block(
"static void nrn_net_receive_{}({})",
+
+ 2616 get_parameter_str(net_receive_args()));
-
- 2619 print_statement_block(*node->get_statement_block(),
false,
false);
+
+ 2619 print_net_receive_common_code();
- 2621 printer->add_newline();
- 2622 printer->pop_block();
- 2623 printing_net_receive =
false;
-
-
-
- 2627 const auto node = info.net_receive_initial_node;
- 2628 if (node ==
nullptr) {
-
-
-
-
-
+
+ 2622 print_statement_block(*node->get_statement_block(),
false,
false);
+
+ 2624 printer->add_newline();
+ 2625 printer->pop_block();
+ 2626 printing_net_receive =
false;
+
+
+
+ 2630 const auto node = info.net_receive_initial_node;
+ 2631 if (node ==
nullptr) {
+
+
- 2635 printing_net_init =
true;
- 2636 printer->add_newline(2);
- 2637 printer->fmt_push_block(
"static void net_init({})", get_parameter_str(net_receive_args()));
-
- 2639 auto block = node->get_statement_block().get();
- 2640 if (!block->get_statements().empty()) {
- 2641 print_net_receive_common_code();
- 2642 print_statement_block(*block,
false,
false);
-
- 2644 printer->pop_block();
- 2645 printing_net_init =
false;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ 2638 printing_net_init =
true;
+ 2639 printer->add_newline(2);
+ 2640 printer->fmt_push_block(
"static void net_init({})", get_parameter_str(net_receive_args()));
+
+ 2642 auto block = node->get_statement_block().get();
+ 2643 if (!block->get_statements().empty()) {
+ 2644 print_net_receive_common_code();
+ 2645 print_statement_block(*block,
false,
false);
+
+ 2647 printer->pop_block();
+ 2648 printing_net_init =
false;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
- 2686 for (
size_t i_arg = 0; i_arg < args.size(); ++i_arg) {
- 2687 auto old_name = args[i_arg]->get_node_name();
- 2688 auto new_name = fmt::format(
"_netcon_data[{}]", i_arg);
- 2689 v.
set(old_name, new_name);
- 2690 statement_block->accept(v);
-
-
-
- 2694 std::find_if(info.semantics.begin(), info.semantics.end(), [](
const IndexSemantics& a) {
- 2695 return a.name == naming::FOR_NETCON_SEMANTIC;
-
- 2697 if (dparam_it == info.semantics.end()) {
- 2698 throw std::runtime_error(
"Couldn't find `fornetcon` variable.");
-
-
- 2701 int dparam_index = dparam_it->index;
- 2702 auto netcon_var =
get_name(codegen_int_variables[dparam_index]);
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2689 for (
size_t i_arg = 0; i_arg < args.size(); ++i_arg) {
+ 2690 auto old_name = args[i_arg]->get_node_name();
+ 2691 auto new_name = fmt::format(
"_netcon_data[{}]", i_arg);
+ 2692 v.
set(old_name, new_name);
+ 2693 statement_block->accept(v);
+
+
+
+ 2697 std::find_if(info.semantics.begin(), info.semantics.end(), [](
const IndexSemantics& a) {
+ 2698 return a.name == naming::FOR_NETCON_SEMANTIC;
+
+ 2700 if (dparam_it == info.semantics.end()) {
+ 2701 throw std::runtime_error(
"Couldn't find `fornetcon` variable.");
+
-
-
- 2706 printer->add_text(
"double ** _fornetcon_data;");
- 2707 printer->add_newline();
-
- 2709 printer->fmt_line(
"int _n_netcons = _nrn_netcon_args({}, &_fornetcon_data);",
- 2710 get_variable_name(netcon_var,
false));
+ 2704 int dparam_index = dparam_it->index;
+ 2705 auto netcon_var =
get_name(codegen_int_variables[dparam_index]);
+
+
+
+ 2709 printer->add_text(
"double ** _fornetcon_data;");
+ 2710 printer->add_newline();
- 2712 printer->push_block(
"for (size_t _i = 0; _i < _n_netcons; ++_i)");
- 2713 printer->add_line(
"double * _netcon_data = _fornetcon_data[_i];");
- 2714 print_statement_block(*statement_block,
false,
false);
- 2715 printer->pop_block();
-
-
-
-
-
+ 2712 printer->fmt_line(
"int _n_netcons = _nrn_netcon_args({}, &_fornetcon_data);",
+ 2713 get_variable_name(netcon_var,
false));
+
+ 2715 printer->push_block(
"for (size_t _i = 0; _i < _n_netcons; ++_i)");
+ 2716 printer->add_line(
"double * _netcon_data = _fornetcon_data[_i];");
+ 2717 print_statement_block(*statement_block,
false,
false);
+ 2718 printer->pop_block();
+
+
+
+
+
std::string get_node_name() const override
Return name of the node.
@@ -2823,19 +2826,19 @@
void print_global_var_external_access()
Print functions for EXTERNAL use.
Base class for all AST node.
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_function_definitions()
Print function and procedures prototype definitions.
-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_function_definitions()
Print function and procedures prototype definitions.
+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
const ArgumentVector & get_parameters() const noexcept override
Getter for member variable FunctionTableBlock::parameters.
std::string hoc_py_wrapper_signature(const ast::Block *function_or_procedure_block, InterpreterWrapper wrapper_type)
Return the wrapper signature.
void print_nrn_constructor_declaration()
-void print_neuron_includes()
Print includes from NEURON.
-void print_codegen_routines_regular()
Anything not SUFFIX nothing.
+void print_neuron_includes()
Print includes from NEURON.
+void print_codegen_routines_regular()
Anything not SUFFIX nothing.
static constexpr char NRN_JACOB_METHOD[]
nrn_jacob method in generated code
void print_nrn_init(bool skip_init_check=true)
Print the nrn_init function definition.
@@ -2844,12 +2847,13 @@
std::shared_ptr< symtab::Symbol > SymbolType
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.
-void visit_lon_diffuse(const ast::LonDiffuse &node) override
visit node of type ast::LonDiffuse
-std::string nrn_current_arguments()
+void visit_lon_diffuse(const ast::LonDiffuse &node) override
visit node of type ast::LonDiffuse
+std::string nrn_current_arguments()
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.
@@ -2862,18 +2866,18 @@
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.
-ParamVector nrn_current_parameters()
+ParamVector nrn_current_parameters()
void print_entrypoint_setup_code_from_prop()
Prints setup code for entrypoints NEURON.
void print_global_param_default_values()
Print global struct with default value of RANGE PARAMETERs.
ParamVector ldifusfunc1_parameters() const
Parameters for what NEURON calls ldifusfunc1_t.
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_net_send_call(const ast::FunctionCall &node) override
Print call to net_send.
+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.
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.
@@ -2888,10 +2892,10 @@
std::shared_ptr< StatementBlock > get_statement_block() const noexcept override
Getter for member variable BreakpointBlock::statement_block.
void print_hoc_py_wrapper_function_definitions()
std::string rev_potential_pointer_name() const
-void print_v_unused() const override
Set v_unused (voltage) for NRN_PRCELLSTATE feature.
-void print_ion_variable() override
+void print_v_unused() const override
Set v_unused (voltage) for NRN_PRCELLSTATE feature.
+void print_ion_variable() override
static constexpr char CONDUCTANCE_VARIABLE[]
range variable for conductance
-ParamVector functor_params() override
The parameters of the Newton solver "functor".
+ParamVector functor_params() override
The parameters of the Newton solver "functor".
void print_mechanism_register_regular()
Function body for anything not SUFFIX nothing.
void print_mechanism_register_nothing()
Function body for SUFFIX nothing.
Visitor for printing C++ code compatible with legacy api of CoreNEURON
@@ -2902,18 +2906,18 @@
void print_point_process_function_definitions()
Print POINT_PROCESS related functions Wrap external NEURON functions related to POINT_PROCESS mechani...
void print_nrn_destructor_declaration()
Utility functions for visitors implementation.
-void print_net_init()
Print NET_RECEIVE{ INITIAL{ ...
+void print_net_init()
Print NET_RECEIVE{ INITIAL{ ...
@ Equation
breakpoint block
static constexpr char USE_TABLE_VARIABLE[]
global variable to indicate if table is used
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.
void print_global_variables_for_hoc() override
Print byte arrays that register scalar and vector variables for hoc interface.
-void print_standard_includes() override
Print standard C/C++ includes.
+void print_standard_includes() override
Print standard C/C++ includes.
Extracts information required for LONGITUDINAL_DIFFUSION for each KINETIC block.
void print_mechanism_range_var_structure(bool print_initializers) override
Print the structure that wraps all range and int variables required for the NMODL.
void add_variable_tqitem(std::vector< IndexVariableInfo > &variables) override
Add the variable tqitem during get_int_variables.
@@ -2923,28 +2927,28 @@
void print_thread_variables_structure(bool print_initializers)
Print the data structure used to access thread variables.
Represent semantic information for index variable.
std::string to_string(const T &obj)
-void visit_longitudinal_diffusion_block(const ast::LongitudinalDiffusionBlock &node) override
visit node of type ast::LongitudinalDiffusionBlock
-void print_function_table_call(const ast::FunctionCall &node) override
Print special code when calling FUNCTION_TABLEs.
-void print_compute_functions() override
Print all compute functions for every backend.
+void visit_longitudinal_diffusion_block(const ast::LongitudinalDiffusionBlock &node) override
visit node of type ast::LongitudinalDiffusionBlock
+void print_function_table_call(const ast::FunctionCall &node) override
Print special code when calling FUNCTION_TABLEs.
+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.
static constexpr char POINTER_SEMANTIC[]
semantic type for pointer variable
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_entrypoint_setup_code_from_memb_list()
Prints setup code for entrypoints from NEURON.
-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_net_receive_common_code()
+void print_net_receive_common_code()
-void print_fast_imem_calculation() override
Print fast membrane current calculation code.
+void print_fast_imem_calculation() override
Print fast membrane current calculation code.
void set(const std::string &old_name, std::string new_name)
-void print_data_structures(bool print_initializers) override
Print all classes.
-void print_sdlists_init(bool print_initializers) override
+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.
Represent LONGITUDINAL_DIFFUSION statement in NMODL.
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...
@@ -2960,22 +2964,22 @@
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.
void print_nrn_constructor() override
Print nrn_constructor function definition.
BlockType
Helper to represent various block types.
-void print_headers_include() override
Print all includes.
+void print_headers_include() override
Print all includes.
void print_check_table_entrypoint()
Print all check_* function declarations.
const ParamVector external_method_parameters(bool table=false) noexcept override
Parameters for functions in generated code that are called back from external code.
-void visit_for_netcon(const ast::ForNetcon &node) override
visit node of type ast::ForNetcon
+void visit_for_netcon(const ast::ForNetcon &node) override
visit node of type ast::ForNetcon
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.
void print_hoc_py_wrapper_call_impl(const ast::Block *function_or_procedure_block, InterpreterWrapper wrapper_type)
Print the code that calls the impl from the HOC/Py wrapper.
-void print_codegen_routines_nothing()
SUFFIX nothing is special.
+void print_codegen_routines_nothing()
SUFFIX nothing is special.
static constexpr char AREA_VARIABLE[]
similar to node_area but user can explicitly declare it as area
void print_make_node_data() const
Print make_*_node_data.
virtual std::shared_ptr< StatementBlock > get_statement_block() const
Return associated statement block for the AST node.
@@ -2996,7 +3000,7 @@
static constexpr char CONDUCTANCE_UNUSED_VARIABLE[]
range variable when conductance is not used (for vectorized model)
ParamVector ldifusfunc3_parameters() const
Parameters for what NEURON calls ldifusfunc3_t.
-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.
void print_longitudinal_diffusion_callbacks()
Prints the callbacks required for LONGITUDINAL_DIFFUSION.
@@ -3004,14 +3008,14 @@
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.
void print_hoc_py_wrapper(const ast::Block *function_or_procedure_block, InterpreterWrapper wrapper_type)
Print the wrapper for calling FUNCION/PROCEDURES from HOC/Py.
-ParamVector net_receive_args()
+ParamVector net_receive_args()
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.
void print_hoc_py_wrapper_setup(const ast::Block *function_or_procedure_block, InterpreterWrapper wrapper_type)
Print the setup code for HOC/Py wrapper.
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 140c3b7e1..5339db4a6 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-10-29T13:27:25.897152Z",
- "iopub.status.busy": "2024-10-29T13:27:25.896954Z",
- "iopub.status.idle": "2024-10-29T13:27:26.687732Z",
- "shell.execute_reply": "2024-10-29T13:27:26.686890Z"
+ "iopub.execute_input": "2024-10-29T14:02:40.031622Z",
+ "iopub.status.busy": "2024-10-29T14:02:40.031085Z",
+ "iopub.status.idle": "2024-10-29T14:02:40.849891Z",
+ "shell.execute_reply": "2024-10-29T14:02:40.849041Z"
}
},
"outputs": [],
@@ -169,10 +169,10 @@
"execution_count": 2,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:26.690685Z",
- "iopub.status.busy": "2024-10-29T13:27:26.690118Z",
- "iopub.status.idle": "2024-10-29T13:27:26.721611Z",
- "shell.execute_reply": "2024-10-29T13:27:26.720823Z"
+ "iopub.execute_input": "2024-10-29T14:02:40.852800Z",
+ "iopub.status.busy": "2024-10-29T14:02:40.852439Z",
+ "iopub.status.idle": "2024-10-29T14:02:40.884501Z",
+ "shell.execute_reply": "2024-10-29T14:02:40.883804Z"
}
},
"outputs": [],
@@ -277,10 +277,10 @@
"execution_count": 3,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:26.723900Z",
- "iopub.status.busy": "2024-10-29T13:27:26.723688Z",
- "iopub.status.idle": "2024-10-29T13:27:26.729038Z",
- "shell.execute_reply": "2024-10-29T13:27:26.728337Z"
+ "iopub.execute_input": "2024-10-29T14:02:40.887227Z",
+ "iopub.status.busy": "2024-10-29T14:02:40.886817Z",
+ "iopub.status.idle": "2024-10-29T14:02:40.892062Z",
+ "shell.execute_reply": "2024-10-29T14:02:40.891397Z"
}
},
"outputs": [
@@ -323,10 +323,10 @@
"execution_count": 4,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:26.758904Z",
- "iopub.status.busy": "2024-10-29T13:27:26.758620Z",
- "iopub.status.idle": "2024-10-29T13:27:26.762953Z",
- "shell.execute_reply": "2024-10-29T13:27:26.762300Z"
+ "iopub.execute_input": "2024-10-29T14:02:40.924482Z",
+ "iopub.status.busy": "2024-10-29T14:02:40.924002Z",
+ "iopub.status.idle": "2024-10-29T14:02:40.928199Z",
+ "shell.execute_reply": "2024-10-29T14:02:40.927575Z"
}
},
"outputs": [
@@ -367,10 +367,10 @@
"execution_count": 5,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:26.764829Z",
- "iopub.status.busy": "2024-10-29T13:27:26.764637Z",
- "iopub.status.idle": "2024-10-29T13:27:26.768654Z",
- "shell.execute_reply": "2024-10-29T13:27:26.768074Z"
+ "iopub.execute_input": "2024-10-29T14:02:40.930650Z",
+ "iopub.status.busy": "2024-10-29T14:02:40.930257Z",
+ "iopub.status.idle": "2024-10-29T14:02:40.933797Z",
+ "shell.execute_reply": "2024-10-29T14:02:40.933250Z"
},
"scrolled": true
},
@@ -412,10 +412,10 @@
"execution_count": 6,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:26.770794Z",
- "iopub.status.busy": "2024-10-29T13:27:26.770325Z",
- "iopub.status.idle": "2024-10-29T13:27:26.774306Z",
- "shell.execute_reply": "2024-10-29T13:27:26.773739Z"
+ "iopub.execute_input": "2024-10-29T14:02:40.935874Z",
+ "iopub.status.busy": "2024-10-29T14:02:40.935389Z",
+ "iopub.status.idle": "2024-10-29T14:02:40.939196Z",
+ "shell.execute_reply": "2024-10-29T14:02:40.938638Z"
},
"scrolled": true
},
@@ -459,10 +459,10 @@
"execution_count": 7,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:26.776496Z",
- "iopub.status.busy": "2024-10-29T13:27:26.775969Z",
- "iopub.status.idle": "2024-10-29T13:27:26.780256Z",
- "shell.execute_reply": "2024-10-29T13:27:26.779709Z"
+ "iopub.execute_input": "2024-10-29T14:02:40.941176Z",
+ "iopub.status.busy": "2024-10-29T14:02:40.940820Z",
+ "iopub.status.idle": "2024-10-29T14:02:40.945199Z",
+ "shell.execute_reply": "2024-10-29T14:02:40.944546Z"
}
},
"outputs": [
diff --git a/notebooks/nmodl-python-tutorial.ipynb b/notebooks/nmodl-python-tutorial.ipynb
index 26d801a54..1e088fd7d 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-10-29T13:27:32.023767Z",
- "iopub.status.busy": "2024-10-29T13:27:32.023562Z",
- "iopub.status.idle": "2024-10-29T13:27:32.815729Z",
- "shell.execute_reply": "2024-10-29T13:27:32.814777Z"
+ "iopub.execute_input": "2024-10-29T14:02:49.714418Z",
+ "iopub.status.busy": "2024-10-29T14:02:49.714207Z",
+ "iopub.status.idle": "2024-10-29T14:02:50.549305Z",
+ "shell.execute_reply": "2024-10-29T14:02:50.548371Z"
}
},
"outputs": [],
@@ -63,10 +63,10 @@
"execution_count": 2,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:32.818541Z",
- "iopub.status.busy": "2024-10-29T13:27:32.818322Z",
- "iopub.status.idle": "2024-10-29T13:27:32.847963Z",
- "shell.execute_reply": "2024-10-29T13:27:32.847228Z"
+ "iopub.execute_input": "2024-10-29T14:02:50.552104Z",
+ "iopub.status.busy": "2024-10-29T14:02:50.551879Z",
+ "iopub.status.idle": "2024-10-29T14:02:50.582490Z",
+ "shell.execute_reply": "2024-10-29T14:02:50.581649Z"
}
},
"outputs": [],
@@ -86,10 +86,10 @@
"execution_count": 3,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:32.850366Z",
- "iopub.status.busy": "2024-10-29T13:27:32.850115Z",
- "iopub.status.idle": "2024-10-29T13:27:32.853682Z",
- "shell.execute_reply": "2024-10-29T13:27:32.853055Z"
+ "iopub.execute_input": "2024-10-29T14:02:50.585257Z",
+ "iopub.status.busy": "2024-10-29T14:02:50.584822Z",
+ "iopub.status.idle": "2024-10-29T14:02:50.588675Z",
+ "shell.execute_reply": "2024-10-29T14:02:50.588050Z"
}
},
"outputs": [],
@@ -152,10 +152,10 @@
"execution_count": 4,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:32.855789Z",
- "iopub.status.busy": "2024-10-29T13:27:32.855293Z",
- "iopub.status.idle": "2024-10-29T13:27:32.859201Z",
- "shell.execute_reply": "2024-10-29T13:27:32.858570Z"
+ "iopub.execute_input": "2024-10-29T14:02:50.591027Z",
+ "iopub.status.busy": "2024-10-29T14:02:50.590557Z",
+ "iopub.status.idle": "2024-10-29T14:02:50.594389Z",
+ "shell.execute_reply": "2024-10-29T14:02:50.593776Z"
}
},
"outputs": [],
@@ -183,10 +183,10 @@
"execution_count": 5,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:32.861665Z",
- "iopub.status.busy": "2024-10-29T13:27:32.861086Z",
- "iopub.status.idle": "2024-10-29T13:27:32.864856Z",
- "shell.execute_reply": "2024-10-29T13:27:32.864144Z"
+ "iopub.execute_input": "2024-10-29T14:02:50.596461Z",
+ "iopub.status.busy": "2024-10-29T14:02:50.596117Z",
+ "iopub.status.idle": "2024-10-29T14:02:50.599704Z",
+ "shell.execute_reply": "2024-10-29T14:02:50.599073Z"
}
},
"outputs": [
@@ -235,10 +235,10 @@
"execution_count": 6,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:32.867003Z",
- "iopub.status.busy": "2024-10-29T13:27:32.866569Z",
- "iopub.status.idle": "2024-10-29T13:27:32.870577Z",
- "shell.execute_reply": "2024-10-29T13:27:32.869925Z"
+ "iopub.execute_input": "2024-10-29T14:02:50.601627Z",
+ "iopub.status.busy": "2024-10-29T14:02:50.601273Z",
+ "iopub.status.idle": "2024-10-29T14:02:50.605506Z",
+ "shell.execute_reply": "2024-10-29T14:02:50.604866Z"
}
},
"outputs": [],
@@ -260,10 +260,10 @@
"execution_count": 7,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:32.872801Z",
- "iopub.status.busy": "2024-10-29T13:27:32.872302Z",
- "iopub.status.idle": "2024-10-29T13:27:32.876093Z",
- "shell.execute_reply": "2024-10-29T13:27:32.875545Z"
+ "iopub.execute_input": "2024-10-29T14:02:50.607662Z",
+ "iopub.status.busy": "2024-10-29T14:02:50.607297Z",
+ "iopub.status.idle": "2024-10-29T14:02:50.610791Z",
+ "shell.execute_reply": "2024-10-29T14:02:50.610189Z"
}
},
"outputs": [
@@ -297,10 +297,10 @@
"execution_count": 8,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:32.878078Z",
- "iopub.status.busy": "2024-10-29T13:27:32.877745Z",
- "iopub.status.idle": "2024-10-29T13:27:32.884722Z",
- "shell.execute_reply": "2024-10-29T13:27:32.884149Z"
+ "iopub.execute_input": "2024-10-29T14:02:50.612829Z",
+ "iopub.status.busy": "2024-10-29T14:02:50.612449Z",
+ "iopub.status.idle": "2024-10-29T14:02:50.619671Z",
+ "shell.execute_reply": "2024-10-29T14:02:50.619040Z"
}
},
"outputs": [
@@ -365,10 +365,10 @@
"execution_count": 9,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:32.886833Z",
- "iopub.status.busy": "2024-10-29T13:27:32.886373Z",
- "iopub.status.idle": "2024-10-29T13:27:32.890499Z",
- "shell.execute_reply": "2024-10-29T13:27:32.889925Z"
+ "iopub.execute_input": "2024-10-29T14:02:50.621692Z",
+ "iopub.status.busy": "2024-10-29T14:02:50.621376Z",
+ "iopub.status.idle": "2024-10-29T14:02:50.625542Z",
+ "shell.execute_reply": "2024-10-29T14:02:50.624998Z"
}
},
"outputs": [
@@ -416,10 +416,10 @@
"execution_count": 10,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:32.892448Z",
- "iopub.status.busy": "2024-10-29T13:27:32.892165Z",
- "iopub.status.idle": "2024-10-29T13:27:32.895672Z",
- "shell.execute_reply": "2024-10-29T13:27:32.895012Z"
+ "iopub.execute_input": "2024-10-29T14:02:50.627561Z",
+ "iopub.status.busy": "2024-10-29T14:02:50.627216Z",
+ "iopub.status.idle": "2024-10-29T14:02:50.630676Z",
+ "shell.execute_reply": "2024-10-29T14:02:50.630018Z"
}
},
"outputs": [],
@@ -441,10 +441,10 @@
"execution_count": 11,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:32.897890Z",
- "iopub.status.busy": "2024-10-29T13:27:32.897679Z",
- "iopub.status.idle": "2024-10-29T13:27:32.901719Z",
- "shell.execute_reply": "2024-10-29T13:27:32.901159Z"
+ "iopub.execute_input": "2024-10-29T14:02:50.632674Z",
+ "iopub.status.busy": "2024-10-29T14:02:50.632338Z",
+ "iopub.status.idle": "2024-10-29T14:02:50.636095Z",
+ "shell.execute_reply": "2024-10-29T14:02:50.635453Z"
}
},
"outputs": [
@@ -510,10 +510,10 @@
"execution_count": 12,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:32.903639Z",
- "iopub.status.busy": "2024-10-29T13:27:32.903442Z",
- "iopub.status.idle": "2024-10-29T13:27:32.907082Z",
- "shell.execute_reply": "2024-10-29T13:27:32.906413Z"
+ "iopub.execute_input": "2024-10-29T14:02:50.638307Z",
+ "iopub.status.busy": "2024-10-29T14:02:50.637924Z",
+ "iopub.status.idle": "2024-10-29T14:02:50.641207Z",
+ "shell.execute_reply": "2024-10-29T14:02:50.640655Z"
}
},
"outputs": [
@@ -548,10 +548,10 @@
"execution_count": 13,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:32.909349Z",
- "iopub.status.busy": "2024-10-29T13:27:32.908903Z",
- "iopub.status.idle": "2024-10-29T13:27:32.912359Z",
- "shell.execute_reply": "2024-10-29T13:27:32.911733Z"
+ "iopub.execute_input": "2024-10-29T14:02:50.643261Z",
+ "iopub.status.busy": "2024-10-29T14:02:50.642812Z",
+ "iopub.status.idle": "2024-10-29T14:02:50.646466Z",
+ "shell.execute_reply": "2024-10-29T14:02:50.645813Z"
}
},
"outputs": [
@@ -584,10 +584,10 @@
"execution_count": 14,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:32.914387Z",
- "iopub.status.busy": "2024-10-29T13:27:32.914040Z",
- "iopub.status.idle": "2024-10-29T13:27:32.917770Z",
- "shell.execute_reply": "2024-10-29T13:27:32.917230Z"
+ "iopub.execute_input": "2024-10-29T14:02:50.648637Z",
+ "iopub.status.busy": "2024-10-29T14:02:50.648439Z",
+ "iopub.status.idle": "2024-10-29T14:02:50.652213Z",
+ "shell.execute_reply": "2024-10-29T14:02:50.651556Z"
}
},
"outputs": [
@@ -622,10 +622,10 @@
"execution_count": 15,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:32.919871Z",
- "iopub.status.busy": "2024-10-29T13:27:32.919497Z",
- "iopub.status.idle": "2024-10-29T13:27:32.923403Z",
- "shell.execute_reply": "2024-10-29T13:27:32.922867Z"
+ "iopub.execute_input": "2024-10-29T14:02:50.654155Z",
+ "iopub.status.busy": "2024-10-29T14:02:50.653959Z",
+ "iopub.status.idle": "2024-10-29T14:02:50.658217Z",
+ "shell.execute_reply": "2024-10-29T14:02:50.657583Z"
}
},
"outputs": [
@@ -669,10 +669,10 @@
"execution_count": 16,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:32.925489Z",
- "iopub.status.busy": "2024-10-29T13:27:32.925017Z",
- "iopub.status.idle": "2024-10-29T13:27:32.930398Z",
- "shell.execute_reply": "2024-10-29T13:27:32.929745Z"
+ "iopub.execute_input": "2024-10-29T14:02:50.660397Z",
+ "iopub.status.busy": "2024-10-29T14:02:50.659927Z",
+ "iopub.status.idle": "2024-10-29T14:02:50.665376Z",
+ "shell.execute_reply": "2024-10-29T14:02:50.664717Z"
}
},
"outputs": [
@@ -733,10 +733,10 @@
"execution_count": 17,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:32.932275Z",
- "iopub.status.busy": "2024-10-29T13:27:32.932061Z",
- "iopub.status.idle": "2024-10-29T13:27:32.935610Z",
- "shell.execute_reply": "2024-10-29T13:27:32.935088Z"
+ "iopub.execute_input": "2024-10-29T14:02:50.667442Z",
+ "iopub.status.busy": "2024-10-29T14:02:50.667050Z",
+ "iopub.status.idle": "2024-10-29T14:02:50.670797Z",
+ "shell.execute_reply": "2024-10-29T14:02:50.670197Z"
}
},
"outputs": [],
@@ -761,10 +761,10 @@
"execution_count": 18,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:32.937484Z",
- "iopub.status.busy": "2024-10-29T13:27:32.937287Z",
- "iopub.status.idle": "2024-10-29T13:27:32.947545Z",
- "shell.execute_reply": "2024-10-29T13:27:32.947000Z"
+ "iopub.execute_input": "2024-10-29T14:02:50.672966Z",
+ "iopub.status.busy": "2024-10-29T14:02:50.672572Z",
+ "iopub.status.idle": "2024-10-29T14:02:50.683125Z",
+ "shell.execute_reply": "2024-10-29T14:02:50.682436Z"
}
},
"outputs": [],
@@ -857,10 +857,10 @@
"execution_count": 19,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:32.949385Z",
- "iopub.status.busy": "2024-10-29T13:27:32.949189Z",
- "iopub.status.idle": "2024-10-29T13:27:32.952901Z",
- "shell.execute_reply": "2024-10-29T13:27:32.952359Z"
+ "iopub.execute_input": "2024-10-29T14:02:50.685532Z",
+ "iopub.status.busy": "2024-10-29T14:02:50.685105Z",
+ "iopub.status.idle": "2024-10-29T14:02:50.689179Z",
+ "shell.execute_reply": "2024-10-29T14:02:50.688548Z"
}
},
"outputs": [
@@ -897,10 +897,10 @@
"execution_count": 20,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:32.954698Z",
- "iopub.status.busy": "2024-10-29T13:27:32.954506Z",
- "iopub.status.idle": "2024-10-29T13:27:32.959868Z",
- "shell.execute_reply": "2024-10-29T13:27:32.959329Z"
+ "iopub.execute_input": "2024-10-29T14:02:50.691571Z",
+ "iopub.status.busy": "2024-10-29T14:02:50.691101Z",
+ "iopub.status.idle": "2024-10-29T14:02:50.697060Z",
+ "shell.execute_reply": "2024-10-29T14:02:50.696480Z"
}
},
"outputs": [
diff --git a/notebooks/nmodl-sympy-conductance.ipynb b/notebooks/nmodl-sympy-conductance.ipynb
index e295f8b0e..574097eab 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-10-29T13:27:35.461614Z",
- "iopub.status.busy": "2024-10-29T13:27:35.461420Z",
- "iopub.status.idle": "2024-10-29T13:27:36.256939Z",
- "shell.execute_reply": "2024-10-29T13:27:36.256048Z"
+ "iopub.execute_input": "2024-10-29T14:02:53.366578Z",
+ "iopub.status.busy": "2024-10-29T14:02:53.366346Z",
+ "iopub.status.idle": "2024-10-29T14:02:54.189186Z",
+ "shell.execute_reply": "2024-10-29T14:02:54.188428Z"
}
},
"outputs": [],
@@ -103,10 +103,10 @@
"execution_count": 2,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:36.259364Z",
- "iopub.status.busy": "2024-10-29T13:27:36.259149Z",
- "iopub.status.idle": "2024-10-29T13:27:36.290359Z",
- "shell.execute_reply": "2024-10-29T13:27:36.289710Z"
+ "iopub.execute_input": "2024-10-29T14:02:54.191771Z",
+ "iopub.status.busy": "2024-10-29T14:02:54.191554Z",
+ "iopub.status.idle": "2024-10-29T14:02:54.224027Z",
+ "shell.execute_reply": "2024-10-29T14:02:54.223340Z"
}
},
"outputs": [],
@@ -149,10 +149,10 @@
"execution_count": 3,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:36.292741Z",
- "iopub.status.busy": "2024-10-29T13:27:36.292420Z",
- "iopub.status.idle": "2024-10-29T13:27:36.567320Z",
- "shell.execute_reply": "2024-10-29T13:27:36.566614Z"
+ "iopub.execute_input": "2024-10-29T14:02:54.226659Z",
+ "iopub.status.busy": "2024-10-29T14:02:54.226216Z",
+ "iopub.status.idle": "2024-10-29T14:02:54.518945Z",
+ "shell.execute_reply": "2024-10-29T14:02:54.518225Z"
}
},
"outputs": [
@@ -196,10 +196,10 @@
"execution_count": 4,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:36.569463Z",
- "iopub.status.busy": "2024-10-29T13:27:36.569234Z",
- "iopub.status.idle": "2024-10-29T13:27:36.701171Z",
- "shell.execute_reply": "2024-10-29T13:27:36.700583Z"
+ "iopub.execute_input": "2024-10-29T14:02:54.521355Z",
+ "iopub.status.busy": "2024-10-29T14:02:54.520784Z",
+ "iopub.status.idle": "2024-10-29T14:02:54.656474Z",
+ "shell.execute_reply": "2024-10-29T14:02:54.655754Z"
}
},
"outputs": [
@@ -243,10 +243,10 @@
"execution_count": 5,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:36.703111Z",
- "iopub.status.busy": "2024-10-29T13:27:36.702902Z",
- "iopub.status.idle": "2024-10-29T13:27:36.711080Z",
- "shell.execute_reply": "2024-10-29T13:27:36.710545Z"
+ "iopub.execute_input": "2024-10-29T14:02:54.658748Z",
+ "iopub.status.busy": "2024-10-29T14:02:54.658479Z",
+ "iopub.status.idle": "2024-10-29T14:02:54.667618Z",
+ "shell.execute_reply": "2024-10-29T14:02:54.667034Z"
}
},
"outputs": [
@@ -290,10 +290,10 @@
"execution_count": 6,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:36.713063Z",
- "iopub.status.busy": "2024-10-29T13:27:36.712701Z",
- "iopub.status.idle": "2024-10-29T13:27:36.730059Z",
- "shell.execute_reply": "2024-10-29T13:27:36.729488Z"
+ "iopub.execute_input": "2024-10-29T14:02:54.669733Z",
+ "iopub.status.busy": "2024-10-29T14:02:54.669521Z",
+ "iopub.status.idle": "2024-10-29T14:02:54.688937Z",
+ "shell.execute_reply": "2024-10-29T14:02:54.688184Z"
}
},
"outputs": [
@@ -337,10 +337,10 @@
"execution_count": 7,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:36.732078Z",
- "iopub.status.busy": "2024-10-29T13:27:36.731871Z",
- "iopub.status.idle": "2024-10-29T13:27:36.852287Z",
- "shell.execute_reply": "2024-10-29T13:27:36.851674Z"
+ "iopub.execute_input": "2024-10-29T14:02:54.691421Z",
+ "iopub.status.busy": "2024-10-29T14:02:54.690934Z",
+ "iopub.status.idle": "2024-10-29T14:02:54.814467Z",
+ "shell.execute_reply": "2024-10-29T14:02:54.813810Z"
}
},
"outputs": [
@@ -400,10 +400,10 @@
"execution_count": 8,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:36.854465Z",
- "iopub.status.busy": "2024-10-29T13:27:36.854259Z",
- "iopub.status.idle": "2024-10-29T13:27:36.950229Z",
- "shell.execute_reply": "2024-10-29T13:27:36.949535Z"
+ "iopub.execute_input": "2024-10-29T14:02:54.816574Z",
+ "iopub.status.busy": "2024-10-29T14:02:54.816362Z",
+ "iopub.status.idle": "2024-10-29T14:02:54.912691Z",
+ "shell.execute_reply": "2024-10-29T14:02:54.912064Z"
}
},
"outputs": [
@@ -456,10 +456,10 @@
"execution_count": 9,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:36.952224Z",
- "iopub.status.busy": "2024-10-29T13:27:36.952021Z",
- "iopub.status.idle": "2024-10-29T13:27:37.026056Z",
- "shell.execute_reply": "2024-10-29T13:27:37.025383Z"
+ "iopub.execute_input": "2024-10-29T14:02:54.914836Z",
+ "iopub.status.busy": "2024-10-29T14:02:54.914614Z",
+ "iopub.status.idle": "2024-10-29T14:02:54.991253Z",
+ "shell.execute_reply": "2024-10-29T14:02:54.990543Z"
}
},
"outputs": [
diff --git a/notebooks/nmodl-sympy-solver-cnexp.ipynb b/notebooks/nmodl-sympy-solver-cnexp.ipynb
index 33fac4c5f..9f1ed4d8d 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-10-29T13:27:38.968655Z",
- "iopub.status.busy": "2024-10-29T13:27:38.968441Z",
- "iopub.status.idle": "2024-10-29T13:27:39.777272Z",
- "shell.execute_reply": "2024-10-29T13:27:39.775877Z"
+ "iopub.execute_input": "2024-10-29T14:02:56.995594Z",
+ "iopub.status.busy": "2024-10-29T14:02:56.995390Z",
+ "iopub.status.idle": "2024-10-29T14:02:57.819174Z",
+ "shell.execute_reply": "2024-10-29T14:02:57.818375Z"
}
},
"outputs": [],
@@ -79,10 +79,10 @@
"execution_count": 2,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:39.780055Z",
- "iopub.status.busy": "2024-10-29T13:27:39.779620Z",
- "iopub.status.idle": "2024-10-29T13:27:39.810993Z",
- "shell.execute_reply": "2024-10-29T13:27:39.810251Z"
+ "iopub.execute_input": "2024-10-29T14:02:57.821994Z",
+ "iopub.status.busy": "2024-10-29T14:02:57.821582Z",
+ "iopub.status.idle": "2024-10-29T14:02:57.854128Z",
+ "shell.execute_reply": "2024-10-29T14:02:57.853287Z"
}
},
"outputs": [],
@@ -123,10 +123,10 @@
"execution_count": 3,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:39.813587Z",
- "iopub.status.busy": "2024-10-29T13:27:39.813200Z",
- "iopub.status.idle": "2024-10-29T13:27:40.234560Z",
- "shell.execute_reply": "2024-10-29T13:27:40.233839Z"
+ "iopub.execute_input": "2024-10-29T14:02:57.856924Z",
+ "iopub.status.busy": "2024-10-29T14:02:57.856510Z",
+ "iopub.status.idle": "2024-10-29T14:02:58.309772Z",
+ "shell.execute_reply": "2024-10-29T14:02:58.309017Z"
}
},
"outputs": [
@@ -165,10 +165,10 @@
"execution_count": 4,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:40.236830Z",
- "iopub.status.busy": "2024-10-29T13:27:40.236414Z",
- "iopub.status.idle": "2024-10-29T13:27:40.347679Z",
- "shell.execute_reply": "2024-10-29T13:27:40.346960Z"
+ "iopub.execute_input": "2024-10-29T14:02:58.312261Z",
+ "iopub.status.busy": "2024-10-29T14:02:58.311814Z",
+ "iopub.status.idle": "2024-10-29T14:02:58.427839Z",
+ "shell.execute_reply": "2024-10-29T14:02:58.427197Z"
}
},
"outputs": [
@@ -207,10 +207,10 @@
"execution_count": 5,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:40.350168Z",
- "iopub.status.busy": "2024-10-29T13:27:40.349770Z",
- "iopub.status.idle": "2024-10-29T13:27:40.550305Z",
- "shell.execute_reply": "2024-10-29T13:27:40.549663Z"
+ "iopub.execute_input": "2024-10-29T14:02:58.430145Z",
+ "iopub.status.busy": "2024-10-29T14:02:58.429729Z",
+ "iopub.status.idle": "2024-10-29T14:02:58.635646Z",
+ "shell.execute_reply": "2024-10-29T14:02:58.634895Z"
}
},
"outputs": [
@@ -255,10 +255,10 @@
"execution_count": 6,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:40.552642Z",
- "iopub.status.busy": "2024-10-29T13:27:40.552191Z",
- "iopub.status.idle": "2024-10-29T13:27:40.715706Z",
- "shell.execute_reply": "2024-10-29T13:27:40.714995Z"
+ "iopub.execute_input": "2024-10-29T14:02:58.637697Z",
+ "iopub.status.busy": "2024-10-29T14:02:58.637494Z",
+ "iopub.status.idle": "2024-10-29T14:02:58.801703Z",
+ "shell.execute_reply": "2024-10-29T14:02:58.801049Z"
}
},
"outputs": [
@@ -303,10 +303,10 @@
"execution_count": 7,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:40.718084Z",
- "iopub.status.busy": "2024-10-29T13:27:40.717685Z",
- "iopub.status.idle": "2024-10-29T13:27:42.494346Z",
- "shell.execute_reply": "2024-10-29T13:27:42.493696Z"
+ "iopub.execute_input": "2024-10-29T14:02:58.803883Z",
+ "iopub.status.busy": "2024-10-29T14:02:58.803631Z",
+ "iopub.status.idle": "2024-10-29T14:03:00.610726Z",
+ "shell.execute_reply": "2024-10-29T14:03:00.610076Z"
}
},
"outputs": [
@@ -351,10 +351,10 @@
"execution_count": 8,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:42.496658Z",
- "iopub.status.busy": "2024-10-29T13:27:42.496193Z",
- "iopub.status.idle": "2024-10-29T13:27:44.762201Z",
- "shell.execute_reply": "2024-10-29T13:27:44.761502Z"
+ "iopub.execute_input": "2024-10-29T14:03:00.612985Z",
+ "iopub.status.busy": "2024-10-29T14:03:00.612560Z",
+ "iopub.status.idle": "2024-10-29T14:03:02.877976Z",
+ "shell.execute_reply": "2024-10-29T14:03:02.877244Z"
}
},
"outputs": [
diff --git a/notebooks/nmodl-sympy-solver-derivimplicit.ipynb b/notebooks/nmodl-sympy-solver-derivimplicit.ipynb
index a97681a26..b24490f45 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-10-29T13:27:46.477385Z",
- "iopub.status.busy": "2024-10-29T13:27:46.477190Z",
- "iopub.status.idle": "2024-10-29T13:27:47.281937Z",
- "shell.execute_reply": "2024-10-29T13:27:47.281178Z"
+ "iopub.execute_input": "2024-10-29T14:03:04.590904Z",
+ "iopub.status.busy": "2024-10-29T14:03:04.590329Z",
+ "iopub.status.idle": "2024-10-29T14:03:05.422998Z",
+ "shell.execute_reply": "2024-10-29T14:03:05.422027Z"
}
},
"outputs": [],
@@ -56,10 +56,10 @@
"execution_count": 2,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:47.284714Z",
- "iopub.status.busy": "2024-10-29T13:27:47.284156Z",
- "iopub.status.idle": "2024-10-29T13:27:47.315134Z",
- "shell.execute_reply": "2024-10-29T13:27:47.314388Z"
+ "iopub.execute_input": "2024-10-29T14:03:05.426050Z",
+ "iopub.status.busy": "2024-10-29T14:03:05.425787Z",
+ "iopub.status.idle": "2024-10-29T14:03:05.459072Z",
+ "shell.execute_reply": "2024-10-29T14:03:05.458344Z"
}
},
"outputs": [],
@@ -100,10 +100,10 @@
"execution_count": 3,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:47.317821Z",
- "iopub.status.busy": "2024-10-29T13:27:47.317357Z",
- "iopub.status.idle": "2024-10-29T13:27:47.804485Z",
- "shell.execute_reply": "2024-10-29T13:27:47.803819Z"
+ "iopub.execute_input": "2024-10-29T14:03:05.461761Z",
+ "iopub.status.busy": "2024-10-29T14:03:05.461269Z",
+ "iopub.status.idle": "2024-10-29T14:03:05.967885Z",
+ "shell.execute_reply": "2024-10-29T14:03:05.967190Z"
}
},
"outputs": [
@@ -165,10 +165,10 @@
"execution_count": 4,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:47.806846Z",
- "iopub.status.busy": "2024-10-29T13:27:47.806415Z",
- "iopub.status.idle": "2024-10-29T13:27:48.102612Z",
- "shell.execute_reply": "2024-10-29T13:27:48.101897Z"
+ "iopub.execute_input": "2024-10-29T14:03:05.970331Z",
+ "iopub.status.busy": "2024-10-29T14:03:05.969831Z",
+ "iopub.status.idle": "2024-10-29T14:03:06.271426Z",
+ "shell.execute_reply": "2024-10-29T14:03:06.270696Z"
}
},
"outputs": [
diff --git a/notebooks/nmodl-sympy-solver-sparse.ipynb b/notebooks/nmodl-sympy-solver-sparse.ipynb
index 006e1e6e2..3e87d24d1 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-10-29T13:27:49.600302Z",
- "iopub.status.busy": "2024-10-29T13:27:49.599722Z",
- "iopub.status.idle": "2024-10-29T13:27:50.417165Z",
- "shell.execute_reply": "2024-10-29T13:27:50.416403Z"
+ "iopub.execute_input": "2024-10-29T14:03:07.623142Z",
+ "iopub.status.busy": "2024-10-29T14:03:07.622904Z",
+ "iopub.status.idle": "2024-10-29T14:03:08.461542Z",
+ "shell.execute_reply": "2024-10-29T14:03:08.460699Z"
}
},
"outputs": [],
@@ -56,10 +56,10 @@
"execution_count": 2,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:50.419891Z",
- "iopub.status.busy": "2024-10-29T13:27:50.419480Z",
- "iopub.status.idle": "2024-10-29T13:27:50.449961Z",
- "shell.execute_reply": "2024-10-29T13:27:50.449339Z"
+ "iopub.execute_input": "2024-10-29T14:03:08.464087Z",
+ "iopub.status.busy": "2024-10-29T14:03:08.463856Z",
+ "iopub.status.idle": "2024-10-29T14:03:08.496268Z",
+ "shell.execute_reply": "2024-10-29T14:03:08.495587Z"
}
},
"outputs": [],
@@ -100,10 +100,10 @@
"execution_count": 3,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:50.452300Z",
- "iopub.status.busy": "2024-10-29T13:27:50.451955Z",
- "iopub.status.idle": "2024-10-29T13:27:50.948325Z",
- "shell.execute_reply": "2024-10-29T13:27:50.947670Z"
+ "iopub.execute_input": "2024-10-29T14:03:08.498707Z",
+ "iopub.status.busy": "2024-10-29T14:03:08.498457Z",
+ "iopub.status.idle": "2024-10-29T14:03:09.009890Z",
+ "shell.execute_reply": "2024-10-29T14:03:09.009191Z"
}
},
"outputs": [
@@ -165,10 +165,10 @@
"execution_count": 4,
"metadata": {
"execution": {
- "iopub.execute_input": "2024-10-29T13:27:50.950675Z",
- "iopub.status.busy": "2024-10-29T13:27:50.950106Z",
- "iopub.status.idle": "2024-10-29T13:27:51.247951Z",
- "shell.execute_reply": "2024-10-29T13:27:51.247225Z"
+ "iopub.execute_input": "2024-10-29T14:03:09.012271Z",
+ "iopub.status.busy": "2024-10-29T14:03:09.011788Z",
+ "iopub.status.idle": "2024-10-29T14:03:09.311561Z",
+ "shell.execute_reply": "2024-10-29T14:03:09.310925Z"
}
},
"outputs": [