1 #include <../../nrnconf.h>
20 #include <InterViews/glyph.h>
21 #include <InterViews/hit.h>
22 #include <InterViews/event.h>
23 #include <InterViews/color.h>
24 #include <InterViews/brush.h>
25 #include <InterViews/window.h>
26 #include <InterViews/printer.h>
27 #include <InterViews/label.h>
28 #include <InterViews/font.h>
29 #include <InterViews/background.h>
30 #include <InterViews/style.h>
33 #include <IV-look/kit.h>
40 extern void exit(
int status);
57 #define M_PI 3.14159265358979323846
61 #define BrainDamaged 0
63 #define FWrite(arg1, arg2, arg3, arg4) \
64 if (fwrite((arg1), arg2, arg3, arg4) != arg3) { \
65 hoc_execerror("fwrite error", 0); \
67 #define FRead(arg1, arg2, arg3, arg4) \
68 if (fread((arg1), arg2, arg3, arg4) != arg3) { \
69 hoc_execerror("fread error", 0); \
72 #define FWrite(arg1, arg2, arg3, arg4) \
73 if (fwrite(arg1, arg2, arg3, arg4) != arg3) { \
75 #define FRead(arg1, arg2, arg3, arg4) \
76 if (fread(arg1, arg2, arg3, arg4) != arg3) { \
112 int BYTESWAP_FLAG = 0;
113 #define BYTESWAP(_X__, _TYPE__) \
114 if (BYTESWAP_FLAG == 1) { \
115 _IN__ = (char*) &(_X__); \
116 for (_II__ = 0; _II__ < sizeof(_TYPE__); _II__++) { \
117 _OUT__[_II__] = _IN__[sizeof(_TYPE__) - _II__ - 1]; \
119 (_X__) = *((_TYPE__*) &_OUT__); \
139 Object** (*nrnpy_vec_to_python_p_)(
void*);
140 Object** (*nrnpy_vec_as_numpy_helper_)(int,
double*);
157 #define MAX_FIT_PARAMS 20
159 #define TWO_BYTE_HIGH 65535.
160 #define ONE_BYTE_HIGH 255.
161 #define ONE_BYTE_HALF 128.
167 return ((a) <= (b)) ? (((a) == (b)) ? 0 : -1) : 1;
194 : vec_(l, fill_value) {
233 return (
const char**) &x->label_;
261 virtual ~GraphMarkItem(){};
271 double fill_value = 0.;
279 vec =
new Vect(
n, fill_value,
o);
284 vec = (*nrnpy_vec_from_python_p_)(
new Vect(0, 0,
o));
287 vec =
new Vect(0, 0,
o);
317 return v->buffer_size();
326 return v->temp_objvar();
345 #if !defined(USEMATRIX) || USEMATRIX == 0
346 #include "../windll/dll.h"
349 void load_ocmatrix() {
350 struct DLL* dll =
NULL;
355 Pfri mreg = (
Pfri) dll_lookup(dll,
"_Matrix_reg");
360 printf(
"No Matrix class.\n");
386 #define PUBLIC_TYPE 1
440 int x_max = vp->size() - 1;
448 s = (
void*) (&vp->elem(
start));
449 const char* x = (
const char*) s;
460 return (
double) fwrite(x,
sizeof(
double),
n,
fp);
472 vp->resize(
int(
chkarg(2, 0, 1e10)));
489 short* xs = (
short*) malloc(
n * (
unsigned)
sizeof(short));
491 for (
i = 0;
i <
n; ++
i) {
492 vp->elem(
i) = double(xs[
i]);
499 FRead(&(vp->elem(0)),
sizeof(
double),
n,
fp);
504 float* xf = (
float*) malloc(
n * (
unsigned)
sizeof(float));
506 for (
i = 0;
i <
n; ++
i) {
507 vp->elem(
i) = double(xf[
i]);
515 unsigned short* xi = (
unsigned short*) malloc(
n * (
unsigned)
sizeof(
unsigned short));
516 FRead(xi,
sizeof(
unsigned short),
n,
fp);
517 for (
i = 0;
i <
n; ++
i) {
518 vp->elem(
i) = double(xi[
i]);
526 char*
xc = (
char*) malloc(
n * (
unsigned)
sizeof(char));
528 for (
i = 0;
i <
n; ++
i) {
529 vp->elem(
i) = double(
xc[
i]);
567 double min,
max, r, sf, sub, intermed;
571 int* xi = (
int*) malloc(
n *
sizeof(
int));
572 for (
i = 0;
i <
n; ++
i) {
573 xi[
i] = (int) (vp->elem(
i));
582 s = (
void*) (&(vp->elem(0)));
590 float* xf = (
float*) malloc(
n * (
unsigned)
sizeof(float));
591 for (
i = 0;
i <
n; ++
i) {
592 xf[
i] = float(vp->elem(
i));
602 auto minmax = std::minmax_element(vp->begin(), vp->end());
604 max = *minmax.second;
611 unsigned short* xi = (
unsigned short*) malloc(
n * (
unsigned)
sizeof(
unsigned short));
612 for (
i = 0;
i <
n; ++
i) {
613 intermed = (vp->elem(
i) -
min) * sf;
614 xi[
i] = (
unsigned short) intermed;
622 FWrite(x,
sizeof(
unsigned short),
n,
fp);
630 auto minmax = std::minmax_element(vp->begin(), vp->end());
632 max = *minmax.second;
640 char*
xc = (
char*) malloc(
n * (
unsigned)
sizeof(char));
641 for (
i = 0;
i <
n; ++
i) {
642 xc[
i] = char(((vp->elem(
i) -
min) * sf) - sub);
660 void* s = (
void*) (vp->data());
680 if (type < 1 || type > 5) {
688 if (type < 1 || type > 5) {
704 int* xi = (
int*) malloc(
n *
sizeof(
int));
706 for (
i = 0;
i <
n; ++
i) {
708 vp->elem(
i) = double(xi[
i]);
715 FRead(&(vp->elem(0)),
sizeof(
double),
n,
fp);
716 if (BYTESWAP_FLAG == 1) {
717 for (
i = 0;
i <
n; ++
i) {
725 float* xf = (
float*) malloc(
n * (
unsigned)
sizeof(float));
727 for (
i = 0;
i <
n; ++
i) {
729 vp->elem(
i) = double(xf[
i]);
737 FRead(&sf,
sizeof(
double), 1,
fp);
742 unsigned short* xi = (
unsigned short*) malloc(
n * (
unsigned)
sizeof(
unsigned short));
743 FRead(xi,
sizeof(
unsigned short),
n,
fp);
744 for (
i = 0;
i <
n; ++
i) {
746 vp->elem(
i) = double(xi[
i] / sf +
min);
754 FRead(&sf,
sizeof(
double), 1,
fp);
758 char*
xc = (
char*) malloc(
n * (
unsigned)
sizeof(char));
761 for (
i = 0;
i <
n; ++
i) {
762 vp->elem(
i) = double((
xc[
i] +
add) / sf +
min);
775 int top = x->size() - 1;
779 const char*
format =
"%g\t";
781 int extra_newline = 1;
797 if (
ifarg(next_arg)) {
803 for (
int i =
start;
i <= end;
i++) {
808 for (
int i =
start;
i <= end;
i++) {
810 if (extra_newline && !((
i -
start + 1) % 5)) {
819 return double(end -
start + 1);
839 }
else if (
ifarg(3)) {
842 }
else if (
ifarg(2)) {
848 }
else if (x->size()) {
856 while ((
n < 0 ||
i <
n) && !f->
eof()) {
859 for (
j = 1;
j <
c;
j++) {
873 for (
j =
c;
j < nc;
j++) {
915 for (
j = 1;
j <
c;
j++) {
929 for (
j =
c;
j < nc;
j++) {
942 "A number was provided instead of a pointer.\nDid you forget an _ref_ "
943 "(Python) or an & (HOC)?");
947 return vp->temp_objvar();
953 return vp->temp_objvar();
963 double* y = vp->data();
978 }
else if (
narg() == 4) {
989 for (
i = 0;
i <
n; ++
i)
990 gv->
add(vp2->elem(
i), y +
i);
993 double interval = *
getarg(2);
994 for (
i = 0;
i <
n; ++
i)
995 gv->
add(
i * interval, y +
i);
999 for (
i = 0;
i <
n; ++
i)
1004 GLabel* glab =
g->label(vp->label_);
1013 return vp->temp_objvar();
1030 size =
chkarg(4, 0.1, 100.);
1031 const ivColor*
color =
g->color();
1032 const ivBrush* brush =
g->brush();
1039 if (vp2->size() <
n)
1043 if (vp3->size() <
n)
1046 for (
int i = 0;
i <
n; ++
i) {
1049 g->line(vp2->elem(
i), vp->elem(
i) - vp3->elem(
i));
1050 g->line(vp2->elem(
i), vp->elem(
i) + vp3->elem(
i));
1051 g->mark(vp2->elem(
i), vp->elem(
i) - vp3->elem(
i), style, size,
color, brush);
1052 g->mark(vp2->elem(
i), vp->elem(
i) + vp3->elem(
i), style, size,
color, brush);
1058 return vp->temp_objvar();
1067 auto n = vp->size();
1072 char* s = vp->label_;
1079 }
else if (
narg() == 4) {
1091 for (
i = 0;
i <
n; ++
i)
1092 g->line(vp2->elem(
i), vp->elem(
i));
1095 double interval = *
getarg(2);
1096 for (
i = 0;
i <
n; ++
i)
1097 g->line(
i * interval, vp->elem(
i));
1101 for (
i = 0;
i <
n; ++
i)
1102 g->line(
i, vp->elem(
i));
1108 return vp->temp_objvar();
1129 style = char(
chkarg(3, 0, 10));
1134 size =
chkarg(4, 0.1, 100.);
1135 const ivColor*
color =
g->color();
1138 const ivBrush* brush =
g->brush();
1146 for (
i = 0;
i <
n; ++
i) {
1147 g->mark(vp2->elem(
i), vp->elem(
i), style, size,
color, brush);
1152 double interval = *
getarg(2);
1153 for (
i = 0;
i <
n; ++
i) {
1154 g->mark(
i * interval, vp->elem(
i), style, size,
color, brush);
1159 return vp->temp_objvar();
1166 double high =
chkarg(2, low, 1e99);
1167 double width =
chkarg(3, 0, high - low);
1175 int n = int(
floor((high - low) / width)) + 2;
1177 std::fill(y->begin(), y->end(), 0.);
1180 for (
i = 0;
i < x->size(); ++
i) {
1181 int ind = int(
floor((x->elem(
i) - low) / width)) + 1;
1182 if (
ind >= 0 && ind < y->size()) {
1183 y->elem(
ind) += 1.0;
1186 return y->temp_objvar();
1195 int size = int(*
getarg(3));
1202 if (hv->size() != size)
1204 std::fill(hv->begin(), hv->end(), 0.);
1205 for (
int i = 0;
i <
data->size();
i++) {
1207 if (
ind >= 0 && ind < hv->size())
1213 return hv->temp_objvar();
1221 double high =
chkarg(2, low, 1e99);
1229 w =
new Vect(x->size());
1230 std::fill(w->begin(), w->end(), 1);
1242 for (
int i = 0;
i < x->size();
i++) {
1243 double xv = int((x->elem(
i) - low) /
step);
1245 double arg = -(
j - xv) * (
j - xv) / (2. * svar);
1253 return sum->temp_objvar();
1262 int size = int(*
getarg(3));
1271 if (w->size() !=
data->size()) {
1272 hoc_execerror(
"Vector.smhist: weight Vector must be same size as source Vector.", 0);
1284 int g2 = int(
sqrt(10 * svar));
1288 while (
n < size +
g)
1291 double*
gauss = (
double*) calloc(
n, (
unsigned)
sizeof(double));
1293 for (
i = 0;
i <= g2;
i++)
1295 for (
i = 1;
i <= g2;
i++)
1299 double* series = (
double*) calloc(
n, (
unsigned)
sizeof(double));
1303 for (
i = 0;
i <
data->size();
i++) {
1309 for (
i = 0;
i <
data->size();
i++) {
1317 double* ans = (
double*) calloc(2 *
n, (
unsigned)
sizeof(double));
1323 if (v1->size() != size)
1325 std::fill(v1->begin(), v1->end(), 0.);
1326 for (
i = 0;
i < size;
i++)
1328 v1->elem(
i) = ans[
i];
1334 return v1->temp_objvar();
1345 int top = x->size();
1346 z->resize(y->size());
1348 for (
int i = 0;
i < y->size();
i++) {
1349 yv = int(y->elem(
i));
1350 if ((yv < top) && (yv >= 0)) {
1352 z->elem(ztop - 1) = x->elem(yv);
1355 return z->temp_objvar();
1362 return double(x->size());
1372 return x->buffer_size();
1376 return vec_.capacity();
1386 return x->temp_objvar();
1392 return x->temp_objvar();
1397 return x->elem(
int(
chkarg(1, 0, x->size() - 1)));
1402 x->elem(
int(
chkarg(1, 0, x->size() - 1))) = *
getarg(2);
1403 return x->temp_objvar();
1416 x->buffer_size(x->size() + y->size());
1417 x->vec().insert(x->end(), y->begin(), y->end());
1421 return x->temp_objvar();
1429 m = x->size() -
indx;
1433 for (
j = 0;
j < m; ++
j) {
1434 z[
j] = x->elem(
indx +
j);
1445 x->buffer_size(
n + y->size());
1446 x->vec().insert(x->end(), y->begin(), y->end());
1453 for (
j = 0;
j < m; ++
j) {
1454 x->elem(
n +
j) = z[
j];
1458 return x->temp_objvar();
1472 x->elem(
i) = x->elem(
j);
1475 return x->temp_objvar();
1482 for (
int i = 0;
i < x->size();
i++) {
1495 int top = x->size() - 1;
1505 int ns = srcind->size();
1509 if (destind->size() < ns) {
1510 ns = destind->size();
1513 for (
int i = 0;
i < ns; ++
i) {
1516 if (ix >= 0 && iy >= 0 && ix < nx && iy < ny) {
1517 y->elem(iy) = x->elem(ix);
1521 if (y->size() < nx) {
1524 for (
int i = 0;
i < ns; ++
i) {
1526 if (ii >= 0 && ii < nx) {
1527 y->elem(ii) = x->elem(ii);
1531 return y->temp_objvar();
1535 deststart = int(*
getarg(2));
1538 deststart = int(*
getarg(2));
1539 srcstart = int(
chkarg(3, 0, top));
1540 srcend = int(
chkarg(4, -1, top));
1545 }
else if (
ifarg(3)) {
1546 srcstart = int(
chkarg(2, 0, top));
1547 srcend = int(
chkarg(3, -1, top));
1552 }
else if (srcend < srcstart) {
1553 hoc_execerror(
"Vector.copy: src_end arg smaller than src_start", 0);
1555 int size = (srcend - srcstart) / srcinc;
1557 size += deststart + 1;
1558 if (y->size() < size) {
1560 }
else if (y->size() > size && !
ifarg(2)) {
1564 for (
i = srcstart,
j = deststart;
i <= srcend;
i += srcinc,
j += destinc) {
1565 y->elem(
j) = x->elem(
i);
1568 return y->temp_objvar();
1573 auto* x =
static_cast<Vect*
>(
v);
1574 std::size_t
start{};
1575 std::size_t end{x->size()};
1582 std::size_t size{end -
start};
1583 auto* y =
new Vect(size);
1585 for (std::size_t
i = 0;
i < size; ++
i) {
1586 y->elem(
i) = x->elem(
i +
start);
1588 return y->temp_objvar();
1616 for (
i = 0;
i <
n; ++
i) {
1618 si[
i].
x = x->elem(
i);
1625 for (
i = 0;
i <
n;
i++)
1626 y->elem(
i) = (double) si[
i].
i;
1629 return y->temp_objvar();
1638 ((
Vect*) ((*r)->u.this_pointer))->label(((
Vect*)
v)->label_);
1647 int flag, is,
id, nd, ns;
1660 for (
id = 0;
id < nd && xd->elem(
id) <= xs->elem(0); ++
id) {
1661 yd->elem(
id) = ys->elem(0);
1664 for (is = 1; is < ns &&
id < nd; ++is) {
1665 if (xs->elem(is) <= xs->elem(is - 1)) {
1668 while (xd->elem(
id) <= xs->elem(is)) {
1669 thet = (xd->elem(
id) - xs->elem(is - 1)) / (xs->elem(is) - xs->elem(is - 1));
1670 yd->elem(
id) = (1. - thet) * (ys->elem(is - 1)) + thet * (ys->elem(is));
1678 for (;
id < nd; ++
id) {
1679 yd->elem(
id) = ys->elem(ns - 1);
1686 return yd->temp_objvar();
1695 src =
new Vect(*dest);
1718 if (!strcmp(op,
"==")) {
1719 for (
i = 0;
i <
n;
i++) {
1723 y->push_back(x->elem(
i));
1726 }
else if (!strcmp(op,
"!=")) {
1727 for (
i = 0;
i <
n;
i++) {
1729 y->push_back(x->elem(
i));
1732 }
else if (!strcmp(op,
">")) {
1733 for (
i = 0;
i <
n;
i++) {
1735 y->push_back(x->elem(
i));
1738 }
else if (!strcmp(op,
"<")) {
1739 for (
i = 0;
i <
n;
i++) {
1741 y->push_back(x->elem(
i));
1744 }
else if (!strcmp(op,
">=")) {
1745 for (
i = 0;
i <
n;
i++) {
1747 y->push_back(x->elem(
i));
1750 }
else if (!strcmp(op,
"<=")) {
1751 for (
i = 0;
i <
n;
i++) {
1753 y->push_back(x->elem(
i));
1756 }
else if (!strcmp(op,
"()")) {
1758 for (
i = 0;
i <
n;
i++) {
1760 y->push_back(x->elem(
i));
1763 }
else if (!strcmp(op,
"[]")) {
1765 for (
i = 0;
i <
n;
i++) {
1767 y->push_back(x->elem(
i));
1770 }
else if (!strcmp(op,
"[)")) {
1772 for (
i = 0;
i <
n;
i++) {
1774 y->push_back(x->elem(
i));
1777 }
else if (!strcmp(op,
"(]")) {
1779 for (
i = 0;
i <
n;
i++) {
1781 y->push_back(x->elem(
i));
1785 hoc_execerror(
"Vector",
"Invalid comparator in .where()\n");
1790 return y->temp_objvar();
1797 double value, value2;
1806 if (!strcmp(op,
"==")) {
1807 for (
i = 0;
i <
n;
i++) {
1812 }
else if (!strcmp(op,
"!=")) {
1813 for (
i = 0;
i <
n;
i++) {
1818 }
else if (!strcmp(op,
">")) {
1819 for (
i = 0;
i <
n;
i++) {
1824 }
else if (!strcmp(op,
"<")) {
1825 for (
i = 0;
i <
n;
i++) {
1830 }
else if (!strcmp(op,
">=")) {
1831 for (
i = 0;
i <
n;
i++) {
1836 }
else if (!strcmp(op,
"<=")) {
1837 for (
i = 0;
i <
n;
i++) {
1842 }
else if (!strcmp(op,
"()")) {
1844 for (
i = 0;
i <
n;
i++) {
1849 }
else if (!strcmp(op,
"[]")) {
1851 for (
i = 0;
i <
n;
i++) {
1856 }
else if (!strcmp(op,
"[)")) {
1858 for (
i = 0;
i <
n;
i++) {
1863 }
else if (!strcmp(op,
"(]")) {
1865 for (
i = 0;
i <
n;
i++) {
1871 hoc_execerror(
"Vector",
"Invalid comparator in .indwhere()\n");
1880 int i, iarg, m = 0, flag;
1882 double value, value2;
1892 if (!strcmp(op,
"==")) {
1893 for (
i = 0;
i <
n;
i++) {
1898 }
else if (!strcmp(op,
"!=")) {
1899 for (
i = 0;
i <
n;
i++) {
1904 }
else if (!strcmp(op,
">")) {
1905 for (
i = 0;
i <
n;
i++) {
1910 }
else if (!strcmp(op,
"<")) {
1911 for (
i = 0;
i <
n;
i++) {
1916 }
else if (!strcmp(op,
">=")) {
1917 for (
i = 0;
i <
n;
i++) {
1922 }
else if (!strcmp(op,
"<=")) {
1923 for (
i = 0;
i <
n;
i++) {
1928 }
else if (!strcmp(op,
"()")) {
1930 for (
i = 0;
i <
n;
i++) {
1935 }
else if (!strcmp(op,
"[]")) {
1937 for (
i = 0;
i <
n;
i++) {
1942 }
else if (!strcmp(op,
"[)")) {
1944 for (
i = 0;
i <
n;
i++) {
1949 }
else if (!strcmp(op,
"(]")) {
1951 for (
i = 0;
i <
n;
i++) {
1957 hoc_execerror(
"Vector",
"Invalid comparator in .indvwhere()\n");
1963 return y->temp_objvar();
1967 auto* x =
static_cast<Vect*
>(
v);
1968 std::size_t
start{};
1969 std::size_t end{x->size()};
1974 std::fill(x->begin() +
start, x->begin() + end, *
getarg(1));
1975 return x->temp_objvar();
1985 double end = double(
n - 1);
1996 }
else if (xn < 0) {
2002 }
else if (
ifarg(2)) {
2009 for (
int i = 0;
i <
n;
i++) {
2012 return x->temp_objvar();
2020 int top = x->size() - 1;
2028 x->elem(
i) += (*(r->
rand))();
2029 return x->temp_objvar();
2037 int top = x->size() - 1;
2045 x->elem(
i) = (*(r->
rand))();
2046 return x->temp_objvar();
2053 int top = x->size() - 1;
2070 for (
int i =
start;
i <= end;
i++) {
2074 return x->temp_objvar();
2080 int top = x->size() - 1;
2094 for (
int i =
start;
i <= end;
i++) {
2104 if (x->size() == 0) {
2107 int x_max = x->size() - 1;
2111 return *std::min_element(x->begin() +
start, x->begin() + end + 1);
2113 return *std::min_element(x->begin(), x->end());
2119 if (x->size() == 0) {
2122 int x_max = x->size() - 1;
2127 return std::min_element(x->begin() +
start, x->begin() + end + 1) - x->begin() +
start;
2129 return std::min_element(x->begin(), x->end()) - x->begin();
2135 if (x->size() == 0) {
2138 int x_max = x->size() - 1;
2142 return *std::max_element(x->begin() +
start, x->begin() + end + 1);
2144 return *std::max_element(x->begin(), x->end());
2150 if (x->size() == 0) {
2153 int x_max = x->size() - 1;
2158 return std::max_element(x->begin() +
start, x->begin() + end + 1) - x->begin() +
start;
2160 return std::max_element(x->begin(), x->end()) - x->begin();
2166 int x_max = x->size() - 1;
2170 return std::accumulate(x->begin() +
start, x->begin() + end + 1, 0.);
2172 return std::accumulate(x->begin(), x->end(), 0.);
2178 int x_max = x->size() - 1;
2182 return std::inner_product(x->begin() +
start, x->begin() + end + 1, x->begin() +
start, 0.);
2184 return std::inner_product(x->begin(), x->end(), x->begin(), 0.);
2190 int x_max = x->size() - 1;
2194 if (end -
start < 1) {
2197 const double sum = std::accumulate(x->begin() +
start, x->begin() + end + 1, 0.0);
2198 return sum / end -
start + 1;
2200 if (x->size() < 1) {
2203 const double sum = std::accumulate(x->begin(), x->end(), 0.0);
2204 return sum / x->size();
2210 int x_max = x->size() - 1;
2214 if (end -
start < 1) {
2217 return var(x->begin() +
start, x->begin() + end + 1);
2219 if (x->size() < 2) {
2222 return var(x->begin(), x->end());
2228 int x_max = x->size() - 1;
2232 if (end -
start < 1) {
2235 return stdDev(x->begin() +
start, x->begin() + end + 1);
2237 if (x->size() < 2) {
2240 return stdDev(x->begin(), x->end());
2246 int x_max = x->size() - 1;
2250 if (end -
start < 1) {
2255 if (x->size() < 2) {
2258 return stdDev(x->begin(), x->end()) /
hoc_Sqrt((
double) x_max + 1.);
2272 int size = x->size();
2273 if (size > y->size() || !size) {
2277 if (size > w->size()) {
2280 for (
int i = 0;
i < size;
i++) {
2281 double diff = x->elem(
i) - y->elem(
i);
2282 err += diff * diff * w->elem(
i);
2285 for (
int i = 0;
i < size;
i++) {
2286 double diff = x->elem(
i) - y->elem(
i);
2297 return std::inner_product(x->begin(), x->end(), y->begin(), 0.);
2302 return hoc_Sqrt(std::inner_product(x->begin(), x->end(), x->begin(), 0.));
2311 for (
i = 0;
i <
n; ++
i) {
2314 return x->temp_objvar();
2320 std::for_each(x->begin(), x->end(), [](
double& d) { d += *getarg(1); });
2324 if (x->size() != y->size()) {
2325 hoc_execerror(
"Vector",
"Vector argument to .add() wrong size\n");
2327 std::transform(x->begin(), x->end(), y->begin(), x->begin(), std::plus<double>());
2330 return x->temp_objvar();
2337 std::for_each(x->begin(), x->end(), [](
double& d) { d -= *getarg(1); });
2341 if (x->size() != y->size()) {
2342 hoc_execerror(
"Vector",
"Vector argument to .sub() wrong size\n");
2344 std::transform(x->begin(), x->end(), y->begin(), x->begin(), std::minus<double>());
2347 return x->temp_objvar();
2353 std::for_each(x->begin(), x->end(), [](
double& d) { d *= *getarg(1); });
2357 if (x->size() != y->size()) {
2358 hoc_execerror(
"Vector",
"Vector argument to .mult() wrong size\n");
2360 std::transform(x->begin(), x->end(), y->begin(), x->begin(), std::multiplies<double>());
2363 return x->temp_objvar();
2370 std::for_each(x->begin(), x->end(), [](
double& d) { d /= *getarg(1); });
2374 if (x->size() != y->size()) {
2375 hoc_execerror(
"Vector",
"Vector argument to .div() wrong size\n");
2377 std::transform(x->begin(), x->end(), y->begin(), x->begin(), std::divides<double>());
2380 return x->temp_objvar();
2389 auto minmax = std::minmax_element(x->begin(), x->end());
2390 double min = *minmax.first;
2391 double max = *minmax.second;
2395 std::for_each(x->begin(), x->end(), [&](
double& d) {
2409 int i,
n = x->size();
2410 if (
n != y->size()) {
2413 for (
i = 0;
i <
n; ++
i) {
2455 #define SIMPLEX_MAXN 1e+300
2456 #define SIMPLEX_INORM 1.2
2464 #define SIMPLEX_ALPHA 2.0
2465 #define SIMPLEX_BETA 1.4
2466 #define SIMPLEX_GAMMA 0.7
2467 #define SIMPLEX_DELTA 0.3
2484 double dexp,
t, amp1, tau1, amp2, tau2;
2486 if (!strcmp(fcn,
"exp2")) {
2488 hoc_execerror(
"Vector",
".fit(\"exp2\") requires amp1,tau1,amp2,tau2");
2494 for (
i = 0;
i < x->size();
i++) {
2497 guess = dexp - y->elem(
i);
2498 sq_err += guess * guess;
2500 }
else if (!strcmp(fcn,
"charging")) {
2502 hoc_execerror(
"Vector",
".fit(\"charging\") requires amp1,tau1,amp2,tau2");
2508 for (
i = 0;
i < x->size();
i++) {
2511 guess = dexp - y->elem(
i);
2512 sq_err += guess * guess;
2514 }
else if (!strcmp(fcn,
"exp1")) {
2521 for (
i = 0;
i < x->size();
i++) {
2524 guess = dexp - y->elem(
i);
2525 sq_err += guess * guess;
2527 }
else if (!strcmp(fcn,
"line")) {
2529 hoc_execerror(
"Vector",
".fit(\"line\") requires slope,intercept");
2531 for (
i = 0;
i < x->size();
i++) {
2532 guess = (
p[0] * x->elem(
i) +
p[1]) - y->elem(
i);
2533 sq_err += guess * guess;
2535 }
else if (!strcmp(fcn,
"quad")) {
2537 hoc_execerror(
"Vector",
".fit(\"quad\") requires ax^2+bx+c");
2539 for (
i = 0;
i < x->size();
i++) {
2540 guess = (
p[0] * x->elem(
i) * x->elem(
i) +
p[1] * x->elem(
i) +
p[2]) - y->elem(
i);
2541 sq_err += guess * guess;
2544 for (
i = 0;
i < x->size();
i++) {
2548 for (
int j = 0;
j <
n;
j++)
2552 sq_err += guess * guess;
2555 return sq_err / x->size();
2590 evortex = (
double*) calloc(
n + 1, (
unsigned)
sizeof(double));
2591 gvortex = (
double*) calloc(
n, (
unsigned)
sizeof(double));
2592 vortex = (
double*) calloc(
n * (
n + 1), (unsigned)
sizeof(
double));
2593 nvortex = (
double*) calloc(
n * 4, (
unsigned)
sizeof(double));
2595 if (0 == evortex || 0 == gvortex || 0 == vortex || 0 == nvortex) {
2596 Printf(
"allocation error in simplex()\n");
2603 for (
i = 0;
i <
n + 1;
i++) {
2604 for (
j = 0;
j <
n;
j++) {
2605 vortex[
i *
n +
j] =
p[
j];
2613 for (
i = 0;
i <
n + 1;
i++)
2617 emin = emax = evortex[0];
2619 for (
i = 0;
i <
n + 1;
i++) {
2631 for (
i = 0;
i <
n;
i++)
2633 for (
i = 0;
i <
n + 1;
i++)
2634 for (
j = 0;
j <
n;
j++)
2635 gvortex[
j] += vortex[
i *
n +
j];
2636 for (
i = 0;
i <
n;
i++)
2637 gvortex[
i] = (gvortex[
i] - vortex[emaxp *
n +
i]) /
n;
2641 for (
i = 0;
i <
n;
i++)
2644 if (fv1 < evortex[emaxp]) {
2649 for (
i = 0;
i <
n;
i++)
2653 if (fv1 < evortex[emaxp]) {
2658 for (
i = 0;
i <
n;
i++)
2662 if (fv1 < evortex[emaxp]) {
2667 for (
i = 0;
i <
n;
i++)
2671 if (fv1 < evortex[emaxp]) {
2683 for (
i = 0;
i <
n;
i++)
2684 vortex[emaxp *
n +
i] = nvortex[ptr *
n +
i];
2685 evortex[emaxp] = fv1;
2695 for (
i = 0;
i <
n + 1;
i++) {
2696 if (evortex[
i] < emin) {
2702 for (
i = 0;
i <
n;
i++)
2703 p[
i] = vortex[eminp *
n +
i];
2724 for (
int i = 0;
i < trial;
i++) {
2748 if (fitted->size() != y->size())
2749 fitted->resize(y->size());
2758 if (x->size() != y->size()) {
2759 hoc_execerror(
"Vector",
"Indep argument to .fit() wrong size\n");
2783 for (
i = 0;
i <
n;
i++) {
2787 if (!strcmp(fcn,
"exp2")) {
2788 for (
i = 0;
i < x->size();
i++) {
2789 fitted->elem(
i) =
p[0] *
hoc_Exp(-(x->elem(
i) /
p[1])) +
2792 }
else if (!strcmp(fcn,
"charging")) {
2793 for (
i = 0;
i < x->size();
i++) {
2794 fitted->elem(
i) =
p[0] * (1 -
hoc_Exp(-(x->elem(
i) /
p[1]))) +
2797 }
else if (!strcmp(fcn,
"exp1")) {
2798 for (
i = 0;
i < x->size();
i++) {
2799 fitted->elem(
i) =
p[0] *
hoc_Exp(-(x->elem(
i) /
p[1]));
2801 }
else if (!strcmp(fcn,
"line")) {
2802 for (
i = 0;
i < x->size();
i++) {
2803 fitted->elem(
i) =
p[0] * x->elem(
i) +
p[1];
2805 }
else if (!strcmp(fcn,
"quad")) {
2806 for (
i = 0;
i < x->size();
i++) {
2807 fitted->elem(
i) =
p[0] * x->elem(
i) * x->elem(
i) +
p[1] * x->elem(
i) +
p[2];
2810 for (
i = 0;
i < x->size();
i++) {
2812 for (
int j = 0;
j <
n;
j++)
2842 int v1n = v1->size();
2843 int v2n = v2->size();
2844 int m = (v1n > v2n) ? v1n : v2n;
2849 double* d1 = (
double*) calloc(
n, (
unsigned)
sizeof(double));
2851 for (
i = 0;
i < v1n; ++
i)
2852 d1[
i] = v1->elem(
i);
2853 double* d2 = (
double*) calloc(
n, (
unsigned)
sizeof(double));
2854 for (
i = 0;
i < v2n; ++
i)
2855 d2[
i] = v2->elem(
i);
2856 double* ans = (
double*) calloc(
n, (
unsigned)
sizeof(double));
2860 if (v3->size() !=
n)
2862 for (
i = 0;
i <
n; ++
i)
2863 v3->elem(
i) = ans[
i];
2868 return v3->temp_objvar();
2886 isign = (int) (*
getarg(3));
2891 int v1n = v1->size();
2892 int v2n = v2->size();
2893 int m = (v1n > v2n) ? v1n : v2n;
2898 double*
data = (
double*) calloc(
n, (
unsigned)
sizeof(double));
2900 for (
i = 0;
i < v1n; ++
i)
2907 double* respns = (
double*) calloc(
n, (
unsigned)
sizeof(double));
2908 for (
i = 0;
i < v2n;
i++)
2909 respns[
i] = v2->elem(
i);
2911 double* ans = (
double*) calloc(2 *
n, (
unsigned)
sizeof(double));
2915 if (v3->size() !=
n)
2917 for (
i = 0;
i <
n; ++
i)
2918 v3->elem(
i) = ans[
i];
2921 free((
char*) respns);
2924 return v3->temp_objvar();
2938 int dc = v1->size();
2950 int k = int(
ceil((
double(
dc) / m - 1.) / 2.));
2951 int n = (2 *
k + 1) * m;
2953 double*
data = (
double*) calloc(
n, (
unsigned)
sizeof(double));
2954 for (
int i = 0;
i <
dc; ++
i)
2957 if (ans->size() < m)
2963 return ans->temp_objvar();
2983 int v1n = v1->size();
2984 int v2n = v2->size();
2985 int m = (v1n > v2n) ? v1n : v2n;
2990 double*
data = (
double*) calloc(
n, (
unsigned)
sizeof(double));
2992 for (
i = 0;
i < v1n; ++
i)
2995 double* filter = (
double*) calloc(
n, (
unsigned)
sizeof(double));
2996 for (
i = 0;
i < v2n;
i++)
2997 filter[
i] = v2->elem(
i);
2999 double* ans = (
double*) calloc(2 *
n, (
unsigned)
sizeof(double));
3005 if (v3->size() !=
n)
3007 for (
i = 0;
i <
n; ++
i)
3008 v3->elem(
i) = ans[
i];
3011 free((
char*) filter);
3014 return v3->temp_objvar();
3034 inv = int(
chkarg(iarg, -1, 1));
3037 int v1n = v1->size();
3042 double*
data = (
double*) calloc(
n, (
unsigned)
sizeof(double));
3044 for (
i = 0;
i < v1n; ++
i)
3046 if (v3->size() !=
n)
3058 return v3->temp_objvar();
3067 double thresh = *
getarg(2);
3071 bin = int(
chkarg(3, 0, 1e6));
3073 int n = v1->size() / bin;
3074 if (ans->size() !=
n)
3076 std::fill(ans->begin(), ans->end(), 0.);
3081 for (
int i = 0;
i <
n;
i++) {
3082 for (
int j = 0;
j < bin;
j++) {
3084 if (v1->elem(
k) >= thresh && !firing) {
3087 }
else if (firing && v1->elem(
k) < thresh) {
3093 return ans->temp_objvar();
3117 double* hold = (
double*) calloc(
n, (
unsigned)
sizeof(double));
3121 for (
i = 0;
i < rc;
i++)
3122 hold[
i + r] = a->elem(
i);
3123 for (
i = 0;
i < r;
i++)
3124 hold[
i] = a->elem(
i + rc);
3127 for (
i = 0;
i < rc;
i++)
3128 hold[
i + r] = a->elem(
i);
3129 for (
i = 0;
i < r;
i++)
3132 for (
i = 0;
i < r;
i++)
3133 hold[
i] = a->elem(
i + rc);
3134 for (
i = r;
i <
n;
i++)
3138 for (
i = 0;
i <
n;
i++)
3139 a->elem(
i) = hold[
i];
3145 return a->temp_objvar();
3158 hoc_execerror(
"Can't take derivative of Vector with less than two points", 0);
3160 if (ans->size() !=
n)
3169 sym = int(
chkarg(iarg++, 1, 2));
3176 ans->elem(0) = (v1->elem(1) - v1->elem(0)) / dx;
3177 ans->elem(
n - 1) = (v1->elem(
n - 1) - v1->elem(
n - 2)) / dx;
3179 for (
int i = 1;
i <
n - 1;
i++) {
3180 ans->elem(
i) = (v1->elem(
i + 1) - v1->elem(
i - 1)) / dx;
3185 for (
int i = 0;
i <
n - 1;
i++) {
3186 ans->elem(
i) = (v1->elem(
i + 1) - v1->elem(
i)) / dx;
3192 return ans->temp_objvar();
3208 if (ans->size() !=
n)
3215 ans->elem(0) = v1->elem(0);
3216 for (
int i = 1;
i <
n;
i++) {
3217 ans->elem(
i) = ans->elem(
i - 1) + v1->elem(
i) * dx;
3219 return ans->temp_objvar();
3231 int n =
data->size();
3232 int pre = int(
chkarg(3, 0,
n - 1));
3235 if (avg->size() != m)
3237 int l = trig->size();
3240 std::fill(avg->begin(), avg->end(), 0.);
3242 for (
int i = 0;
i < l;
i++) {
3243 int tr = int(trig->elem(
i));
3246 if (tr >= pre && tr <
n -
post) {
3248 for (
int j = -pre;
j <
post;
j++) {
3249 avg->elem(
j + pre) +=
data->elem(tr +
j);
3253 std::for_each(avg->begin(), avg->end(), [&](
double& d) { d /= trcount; });
3262 int w0, w1, wlen,
i, flag, iarg = 1;
3268 if (ans->size() !=
n)
3275 double* res = (
double*) calloc(
n, (
unsigned)
sizeof(double));
3276 for (
i = 0;
i <
n;
i++) {
3281 std::vector<double> window(v1->begin() + w0, v1->begin() + wlen);
3282 std::sort(window.begin(), window.end());
3283 res[
i] = window[wlen / 2];
3286 if (ans->size() !=
n)
3288 for (
i = 0;
i <
n;
i++) {
3289 ans->elem(
i) = res[
i];
3295 return ans->temp_objvar();
3301 int n = ans->size();
3307 std::sort(sorted->begin(), sorted->end());
3313 median = (sorted->elem(n2 - 1) + sorted->elem(n2)) / 2.;
3315 median = sorted->elem(n2);
3324 std::sort(ans->begin(), ans->end());
3325 return ans->temp_objvar();
3330 std::reverse(ans->begin(), ans->end());
3331 return ans->temp_objvar();
3338 int n = ans->size();
3339 double freq = *
getarg(1);
3340 double phase = *
getarg(2);
3345 double period = 2 *
PI / 1000 * freq * dx;
3347 for (
int i = 0;
i <
n;
i++) {
3348 ans->elem(
i) =
sin(period *
i + phase);
3350 return ans->temp_objvar();
3364 if (ans->size() !=
n)
3367 for (
int i = 0;
i <
n;
i++) {
3368 ans->elem(
i) =
log(v1->elem(
i));
3370 return ans->temp_objvar();
3384 if (ans->size() !=
n)
3387 for (
int i = 0;
i <
n;
i++) {
3388 ans->elem(
i) =
log10(v1->elem(
i));
3390 return ans->temp_objvar();
3401 int f = int(*
getarg(iarg));
3402 int n = v1->size() / f;
3403 if (ans->size() !=
n)
3406 for (
int i = 0;
i <
n;
i++) {
3408 for (
int j = 0;
j < f;
j++) {
3409 ans->elem(
i) += v1->elem(
i * f +
j);
3416 return ans->temp_objvar();
3425 double f =
chkarg(2, 0, v1->size() / 2);
3426 int n = int(v1->size() * f);
3430 for (
int i = 0;
i <
n;
i++)
3431 temp->elem(
i) = v1->elem(
int(
i / f));
3432 ans->vec().swap(temp->vec());
3436 return ans->temp_objvar();
3446 double trials =
chkarg(3, 0, 9e99);
3447 double size =
chkarg(4, 0, v1->size() / 2);
3448 int n = int(v1->size());
3452 for (
int i = 0;
i <
n;
i++) {
3455 double integral = v1->elem(
i);
3456 while (integral < size) {
3457 if (
i + fj <
n - 1) {
3459 integral += v1->elem(
i + fj);
3461 if (
i - bj > 0 && integral < size) {
3463 integral += v1->elem(
i - bj);
3466 temp->elem(
i) = integral / trials * 1000. / ((fj + bj + 1) *
dt);
3469 ans->vec().swap(temp->vec());
3473 return ans->temp_objvar();
3481 int n = stim->size();
3496 double i = 0,
v,
ref = 0;
3500 for (
int t = 0;
t <
n - 1;
t++) {
3501 i = -gl * (V->elem(
t) - el) + stim->elem(
t);
3502 v = V->elem(
t) +
i /
cm;
3503 if (
v >= th &&
ref <= 0) {
3506 V->elem(
t + 1) = res;
3513 return V->temp_objvar();
3530 if (ans->size() !=
n)
3534 for (
int i = 0;
i <
n;
i++) {
3535 if (ans->elem(
i) == 0) {
3536 hoc_execerror(
"Vector",
"Invalid comparator in .where()\n");
3538 ans->elem(
i) = 1 / v1->elem(
i);
3541 }
else if (
p == 0) {
3542 for (
int i = 0;
i <
n;
i++) {
3545 }
else if (
p == 0.5) {
3546 for (
int i = 0;
i <
n;
i++) {
3549 }
else if (
p == 1) {
3550 for (
int i = 0;
i <
n;
i++) {
3551 ans->elem(
i) = v1->elem(
i);
3553 }
else if (
p == 2) {
3554 for (
int i = 0;
i <
n;
i++) {
3555 ans->elem(
i) = v1->elem(
i) * v1->elem(
i);
3558 for (
int i = 0;
i <
n;
i++) {
3559 ans->elem(
i) =
pow(v1->elem(
i),
p);
3562 return ans->temp_objvar();
3576 if (ans->size() !=
n)
3579 for (
int i = 0;
i <
n;
i++) {
3582 return ans->temp_objvar();
3596 if (ans->size() !=
n)
3599 for (
int i = 0;
i <
n;
i++) {
3602 return ans->temp_objvar();
3616 if (ans->size() !=
n)
3619 for (
int i = 0;
i <
n;
i++) {
3620 ans->elem(
i) =
floor(v1->elem(
i));
3622 return ans->temp_objvar();
3636 if (ans->size() !=
n)
3639 for (
int i = 0;
i <
n;
i++) {
3640 ans->elem(
i) =
tanh(v1->elem(
i));
3642 return ans->temp_objvar();
3663 int n =
data->size();
3664 int m =
index->size();
3665 if (ans->size() != m)
3668 for (
int i = 0;
i < m;
i++) {
3670 if (
j >= 0 &&
j <
n) {
3671 ans->elem(
i) =
data->elem(
j);
3681 return ans->temp_objvar();
3688 Vect* vec = (*nrnpy_vec_from_python_p_)(
v);
3689 return vec->temp_objvar();
3944 return vp->data() +
index;
3970 #if defined(WIN32) && !defined(USEMATRIX)
3989 #define BYTES_PER_WORD 8
3990 #define BYTES_PER_LONG 4
3994 #define STACK_SIZE (BYTES_PER_WORD * BYTES_PER_LONG)
3995 #define PUSH(LOW, HIGH) \
4000 #define POP(LOW, HIGH) \
4002 LOW = (--top)->lo; \
4005 #define STACK_NOT_EMPTY (stack < top)
4009 #define MAX_THRESH 4
4047 int* hi = lo + (total_elems - 1);
4051 stack_node* top =
stack + 1;
4055 int* pivot = &pivot_buffer;
4062 int* mid = lo + ((hi - lo) >> 1);
4064 if (cmp(vec[*mid], vec[*lo]) < 0)
4066 if (cmp(vec[*hi], vec[*mid]) < 0) {
4068 if (cmp(vec[*mid], vec[*lo]) < 0)
4072 pivot = &pivot_buffer;
4081 while (cmp(vec[*left_ptr], vec[*pivot]) < 0)
4084 while (cmp(vec[*pivot], vec[*right_ptr]) < 0)
4087 if (left_ptr < right_ptr) {
4088 SWAP(left_ptr, right_ptr);
4091 }
else if (left_ptr == right_ptr) {
4096 }
while (left_ptr <= right_ptr);
4104 if ((right_ptr - lo) <= max_thresh) {
4105 if ((hi - left_ptr) <= max_thresh)
4109 }
else if ((hi - left_ptr) <= max_thresh)
4111 else if ((right_ptr - lo) > (hi - left_ptr))
4113 PUSH(lo, right_ptr);
4131 int* end_ptr = base_ptr + 1 * (total_elems - 1);
4133 int* tmp_ptr = base_ptr;
4134 int* thresh = (end_ptr < (base_ptr + max_thresh)) ? end_ptr : (base_ptr + max_thresh);
4140 for (run_ptr = tmp_ptr + 1; run_ptr <= thresh; run_ptr += 1)
4141 if (cmp(vec[*run_ptr], vec[*tmp_ptr]) < 0)
4144 if (tmp_ptr != base_ptr)
4145 SWAP(tmp_ptr, base_ptr);
4150 for (run_ptr = base_ptr + 1; (tmp_ptr = run_ptr += 1) <= end_ptr;) {
4151 while (cmp(vec[*run_ptr], vec[*(tmp_ptr -= 1)]) < 0)
4154 if ((tmp_ptr += 1) != run_ptr) {
4157 for (trav = run_ptr + 1; --trav >= run_ptr;) {
4161 for (hi = lo = trav; (lo -= 1) >= tmp_ptr; hi = lo)
const Brush * brush(int) const
const Color * color(int) const
virtual void save(std::ostream &, Coord, Coord)
void brush(const Brush *)
void color(const Color *)
virtual void erase(Scene *, GlyphIndex, int erase_type)
void add(float, double *)
IvocVect(Object *obj=NULL)
std::vector< double > vec_
static bool equal(float x, float y, float e)
virtual void remove(GlyphIndex)
Symbol * hoc_table_lookup(const char *, Symlist *)
sprintf(buf, " if (secondorder) {\n" " int _i;\n" " for (_i = 0; _i < %d; ++_i) {\n" " _p[_slist%d[_i]] += dt*_p[_dlist%d[_i]];\n" " }}\n", numeqn, listnum, listnum)
double chkarg(int, double low, double high)
void nrngsl_realft(double *data, unsigned long n, int direction)
void hoc_execerror(const char *, const char *)
void nrn_correl(double *x, double *y, unsigned long n, double *z)
void nrn_nrc2gsl(double *x, double *y, unsigned long n)
void nrn_convlv(double *data, unsigned long n, double *respns, unsigned long m, int isign, double *ans)
void nrn_spctrm(double *data, double *psd, int setsize, int numsegpairs)
void nrn_gsl2nrc(double *x, double *y, unsigned long n)
int hoc_is_object_arg(int narg)
double hoc_call_func(Symbol *s, int narg)
Object ** hoc_temp_objvar(Symbol *symtemp, void *v)
int vector_instance_px(void *, double **)
void hoc_pushpx(double *d)
int vector_arg_px(int, double **)
Symbol * hoc_install(const char *, int, double, Symlist **)
int hoc_is_str_arg(int narg)
Vect * vector_new(int n, Object *o)
int hoc_argtype(int narg)
double hoc_call_objfunc(Symbol *s, int narg, Object *ob)
void install_vector_method(const char *name, Pfrd_vp)
int hoc_is_double_arg(int narg)
Symbol * hoc_lookup(const char *)
Vect * vector_new1(int n)
double * hoc_pgetarg(int narg)
int nrn_mlh_gsort(double *vec, int *base_ptr, int total_elems, doubleComparator cmp)
#define TRY_GUI_REDIRECT_METHOD_ACTUAL_OBJ(name, sym, v)
struct Arrayinfo Arrayinfo
double(* Pfrd_vp)(void *)
Object ** hoc_objgetarg(int)
double * ivoc_vector_ptr(Object *o, int index)
static Object ** v_c(void *v)
static Object ** v_append(void *v)
static double v_scale(void *v1)
static Object ** v_sort(void *v)
static Object ** v_record(void *v)
static void SWAP(int *A, int *B)
static Object ** v_ploterr(void *v)
static double v_contains(void *v)
static Object ** v_sqrt(void *v)
static Object ** v_indgen(void *v)
static Object ** v_resample(void *v)
static Object ** v_sortindex(void *v)
static Object ** v_deriv(void *v)
#define FWrite(arg1, arg2, arg3, arg4)
static Member_func v_members[]
static double v_fwrite(void *v)
void vector_append(Vect *v, double x)
static void steer_x(void *v)
Object ** vector_temp_objvar(Vect *v)
int cmpfcn(double a, double b)
static double v_fit(void *v)
Object ** v_as_numpy(void *v)
static Object ** v_fft(void *v)
int vector_capacity(Vect *v)
static double v_stderr(void *v)
static Object ** v_index(void *v)
int(* doubleComparator)(double, double)
static Object ** v_line(void *v)
static int possible_srcvec(Vect *&src, Vect *dest, int &flag)
Symlist * hoc_top_level_symlist
static Object ** v_at(void *v)
static Object ** v_ind(void *v)
static double v_buffer_size(void *v)
int ivoc_vector_size(Object *o)
void vector_resize(Vect *v, int n)
static double v_eq(void *v1)
static Object ** v_insert(void *v)
static double v_sum(void *v)
static Object ** v_tanh(void *v)
static Object ** v_hist(void *v)
static Object ** v_set(void *v)
static Object ** v_smhist(void *v)
double hoc_Sqrt(double x)
Vect * vector_new2(Vect *v)
static Object ** v_medfltr(void *v)
static double v_sumsq(void *v)
static double v_trigavg(void *v)
static const char ** v_label(void *v)
double(* nrnpy_object_to_double_)(Object *)
static Object ** v_mark(void *v)
static Object ** v_sumgauss(void *v)
static double v_max(void *v)
#define FRead(arg1, arg2, arg3, arg4)
void notify_freed_val_array(double *, size_t)
static Object ** v_integral(void *v)
char * vector_get_label(Vect *v)
static Object ** v_add(void *v1)
static Object ** v_sub(void *v1)
static double simplex(double *p, int n, Vect *x, Vect *y, char *fcn)
static Object ** v_correl(void *v)
static double dmaxint_
As all parameters are passed from hoc as double, we need to calculate max integer that can fit into d...
double hoc_Log10(double x)
static Object ** v_pow(void *v)
Object **(* nrnpy_vec_as_numpy_helper_)(int, double *)
static double v_min(void *v)
static double v_size(void *v)
static double v_meansqerr(void *v1)
static int sort_index_cmp(const void *a, const void *b)
static double eval_error(double *p, int n, Vect *x, Vect *y, char *fcn)
static Object ** v_spctrm(void *v)
static double v_median(void *v)
static Object ** v_fill(void *v)
static double v_dot(void *v1)
static double v_var(void *v)
static Object ** v_plot(void *v)
Object ** vector_pobj(Vect *v)
static double eval(double *p, int n, Vect *x, Vect *y, char *fcn)
static double v_indwhere(void *v)
static Object ** v_abs(void *v)
int vector_buffer_size(Vect *v)
static double v_vread(void *v)
double * vector_vec(Vect *v)
Object **(* nrnpy_vec_to_python_p_)(void *)
static Object ** v_rebin(void *v)
static Object ** v_reverse(void *v)
static const char * nullstr
void vector_set_label(Vect *v, char *s)
static double v_scantil(void *v)
static double v_get(void *v)
Object ** v_from_python(void *v)
static Object ** v_log(void *v)
void nrn_vecsim_remove(void *)
static Object ** v_copy(void *v)
double call_simplex(double *p, int n, Vect *x, Vect *y, char *fcn, int trial)
static double v_min_ind(void *v)
void vector_delete(Vect *v)
static Object ** v_setrand(void *v)
static double v_stdev(void *v)
static Object ** v_addrand(void *v)
static double v_fread(void *v)
static Object ** v_cl(void *v)
static Object ** v_play(void *v)
static double v_reduce(void *v)
static Object ** v_sin(void *v)
static Object ** v_apply(void *v)
static Object ** v_convlv(void *v)
static void same_err(const char *s, Vect *x, Vect *y)
void nrn_vecsim_add(void *, bool)
int hoc_araypt(Symbol *, int)
static int possible_destvec(int arg, Vect *&dest)
static Object ** v_psth(void *v)
static double v_scanf(void *v)
static Object ** v_remove(void *v)
static Object ** v_from_double(void *v)
static Object ** v_filter(void *v)
static double v_max_ind(void *v)
static Object ** v_div(void *v1)
static double v_mag(void *v1)
static Object ** v_inf(void *x)
static Object ** v_resize(void *v)
static Object ** v_floor(void *v)
static double v_printf(void *v)
static Member_ret_obj_func v_retobj_members[]
static Object ** v_mul(void *v1)
static Object ** v_spikebin(void *v)
static double v_mean(void *v)
static Object ** v_log10(void *v)
static Object ** v_where(void *v)
static Object ** v_clear(void *v)
static Object ** v_histogram(void *v)
#define BYTESWAP(_X__, _TYPE__)
Object ** v_to_python(void *v)
static Object ** v_interpolate(void *v)
static void * v_cons(Object *o)
IvocVect *(* nrnpy_vec_from_python_p_)(void *)
static Member_ret_str_func v_retstr_members[]
static double v_play_remove(void *v)
static Object ** v_indvwhere(void *v)
static Object ** v_rotate(void *v)
static void v_destruct(void *v)
static double v_vwrite(void *v)
double var(InputIterator begin, InputIterator end)
double stdDev(InputIterator begin, InputIterator end)
Object ** hoc_temp_objptr(Object *)
int const size_t const size_t n
#define MUTCONSTRUCT(mkmut)
void class2oc(const char *, void *(*cons)(Object *), void(*destruct)(void *), Member_func *, int(*checkpoint)(void **), Member_ret_obj_func *, Member_ret_str_func *)
static philox4x32_key_t k
static double ref(void *v)
#define BinaryMode(ocfile)
static double post(void *v)
check_obj_type(o, "SectionList")
short cpublic
Note: public is a reserved keyword.
HocStruct cTemplate * ctemplate