PyObject *xpy = PyArray_New(&PyArray_Type, 1, &sz, NPY_DOUBLE, &stride1,
const_cast<double*>(x), // not NPY_WRITEABLE
0, NPY_C_CONTIGUOUS | NPY_ALIGNED, NULL);
- PyObject *gradpy = grad ? PyArray_SimpleNew(1, &sz0, NPY_DOUBLE)
- : PyArray_SimpleNewFromData(1, &sz, NPY_DOUBLE, grad);
+ PyObject *gradpy = grad
+ ? PyArray_SimpleNewFromData(1, &sz, NPY_DOUBLE, grad)
+ : PyArray_SimpleNew(1, &sz0, NPY_DOUBLE);
PyObject *arglist = Py_BuildValue("OO", xpy, gradpy);
PyObject *result = PyEval_CallObject((PyObject *) f, arglist);
Py_DECREF(xpy);
double val = HUGE_VAL;
- if (SWIG_IsOK(SWIG_AsVal_double(result, &val))) {
+ if (result && PyFloat_Check(result)) {
+ val = PyFloat_AsDouble(result);
Py_DECREF(result);
}
else {
- Py_DECREF(result);
+ Py_XDECREF(result);
throw std::invalid_argument("invalid result passed to nlopt");
}
return val;
%template(nlopt_doublevector) vector<double>;
};
+#ifndef SWIGPYTHON
%rename(nlopt_opt) nlopt::opt;
%rename(nlopt_roundoff_limited) nlopt::roundoff_limited;
%rename(nlopt_forced_stop) nlopt::forced_stop;
%rename(nlopt_version) nlopt::version;
%rename(nlopt_algorithm_name) nlopt::algorithm_name;
%include "nlopt-enum-renames.i"
+#endif
%include "nlopt-exceptions.i"