void SharedSurfpackApproxData:: merge_variable_arrays(const RealVector& cv, const IntVector& div, const RealVector& drv, RealArray& ra) { size_t num_cv = cv.length(), num_div = div.length(), num_drv = drv.length(), num_v = num_cv + num_div + num_drv; ra.resize(num_v); if (num_cv) copy_data_partial(cv, ra, 0); if (num_div) merge_data_partial(div, ra, num_cv); if (num_drv) copy_data_partial(drv, ra, num_cv+num_div); }
// helper for converting xC, xDI, and xDR to single Python array of all variables bool NRELPythonApplicInterface:: python_convert(const RealVector& c_src, const IntVector& di_src, const RealVector& dr_src, PyObject** dst) { int c_sz = c_src.length(); int di_sz = di_src.length(); int dr_sz = dr_src.length(); #ifdef DAKOTA_PYTHON_NUMPY if (userNumpyFlag) { npy_intp dims[1]; dims[0] = c_sz + di_sz + dr_sz; if (!(*dst = PyArray_SimpleNew(1, dims, PyArray_DOUBLE))) { Cerr << "Error creating Python numpy array." << std::endl; return(false); } PyArrayObject *pao = (PyArrayObject *) *dst; for (int i=0; i<c_sz; ++i) *(double *)(pao->data + i*(pao->strides[0])) = c_src[i]; for (int i=0; i<di_sz; ++i) *(double *)(pao->data + (c_sz+i)*(pao->strides[0])) = (double) di_src[i]; for (int i=0; i<dr_sz; ++i) *(double *)(pao->data + (c_sz+di_sz+i)*(pao->strides[0])) = dr_src[i]; } else #endif { if (!(*dst = PyList_New(c_sz + di_sz + dr_sz))) { Cerr << "Error creating Python list." << std::endl; return(false); } for (int i=0; i<c_sz; ++i) PyList_SetItem(*dst, i, PyFloat_FromDouble(c_src[i])); for (int i=0; i<di_sz; ++i) PyList_SetItem(*dst, c_sz + i, PyInt_FromLong((long) di_src[i])); for (int i=0; i<dr_sz; ++i) PyList_SetItem(*dst, c_sz + di_sz + i, PyFloat_FromDouble(dr_src[i])); } return(true); }