static void checkRowVectorSizes(PyObject * obj_ptr, int cols) { if(!isDimensionValid(cols, ColsAtCompileTime, MaxColsAtCompileTime)) { THROW_TYPE_ERROR("Can not convert " << npyArrayTypeString(obj_ptr) << " to " << toString() << ". Mismatched sizes."); } }
static void checkColumnVectorSizes(PyObject * obj_ptr, int rows) { // Check if the type can accomidate one column. if(ColsAtCompileTime == Eigen::Dynamic || ColsAtCompileTime == 1) { if(!isDimensionValid(rows, RowsAtCompileTime, MaxRowsAtCompileTime)) { THROW_TYPE_ERROR("Can not convert " << npyArrayTypeString(obj_ptr) << " to " << toString() << ". Mismatched sizes."); } } else { THROW_TYPE_ERROR("Can not convert " << npyArrayTypeString(obj_ptr) << " to " << toString() << ". Mismatched sizes."); } }
static void checkMatrixSizes(PyObject * obj_ptr) { int rows = PyArray_DIM(obj_ptr, 0); int cols = PyArray_DIM(obj_ptr, 1); bool rowsValid = isDimensionValid(rows, RowsAtCompileTime, MaxRowsAtCompileTime); bool colsValid = isDimensionValid(cols, ColsAtCompileTime, MaxColsAtCompileTime); if(!rowsValid || !colsValid) { THROW_TYPE_ERROR("Can not convert " << npyArrayTypeString(obj_ptr) << " to " << toString() << ". Mismatched sizes."); } }
static void* convertible(PyObject *obj_ptr) { // Check for a null pointer. if(!obj_ptr) { THROW_TYPE_ERROR("PyObject pointer was null"); } // Make sure this is a numpy array. if (!PyArray_Check(obj_ptr)) { THROW_TYPE_ERROR("Conversion is only defined for numpy array and matrix types"); } // Check the type of the array. int npyType = PyArray_ObjectType(obj_ptr, 0); if(!TypeToNumPy<scalar_t>::canConvert(npyType)) { THROW_TYPE_ERROR("Can not convert " << npyArrayTypeString(obj_ptr) << " to " << toString() << ". Mismatched types."); } // Check the array dimensions. int nd = PyArray_NDIM(obj_ptr); if(nd != 1 && nd != 2) { THROW_TYPE_ERROR("Conversion is only valid for arrays with 1 or 2 dimensions. Argument has " << nd << " dimensions"); } if(nd == 1) { checkVectorSizes(obj_ptr); } else { // Two-dimensional matrix type. checkMatrixSizes(obj_ptr); } return obj_ptr; }