size_check_code
size_check_code = """
class numpy_size_handler
{
public:
void conversion_numpy_check_size(PyArrayObject* arr_obj, int Ndims,
const char* name)
{
if (arr_obj->nd != Ndims)
{
char msg[500];
sprintf(msg,"Conversion Error: received '%d' dimensional array instead of '%d' dimensional array for variable '%s'",
arr_obj->nd,Ndims,name);
throw_error(PyExc_TypeError,msg);
}
}
void numpy_check_size(PyArrayObject* arr_obj, int Ndims, const char* name)
{
if (arr_obj->nd != Ndims)
{
char msg[500];
sprintf(msg,"received '%d' dimensional array instead of '%d' dimensional array for variable '%s'",
arr_obj->nd,Ndims,name);
throw_error(PyExc_TypeError,msg);
}
}
};
numpy_size_handler x__numpy_size_handler = numpy_size_handler();
#define conversion_numpy_check_size x__numpy_size_handler.conversion_numpy_check_size
#define numpy_check_size x__numpy_size_handler.numpy_check_size
"""
type_check_code
type_check_code = """
class numpy_type_handler
{
public:
void conversion_numpy_check_type(PyArrayObject* arr_obj, int numeric_type,
const char* name)
{
// Make sure input has correct numeric type.
int arr_type = arr_obj->descr->type_num;
if (PyTypeNum_ISEXTENDED(numeric_type))
{
char msg[80];
sprintf(msg, "Conversion Error: extended types not supported for variable '%s'",
name);
throw_error(PyExc_TypeError, msg);
}
if (!PyArray_EquivTypenums(arr_type, numeric_type))
{
char* type_names[23] = {"bool", "byte", "ubyte","short", "ushort",
"int", "uint", "long", "ulong", "longlong", "ulonglong",
"float", "double", "longdouble", "cfloat", "cdouble",
"clongdouble", "object", "string", "unicode", "void", "ntype",
"unknown"};
char msg[500];
sprintf(msg,"Conversion Error: received '%s' typed array instead of '%s' typed array for variable '%s'",
type_names[arr_type],type_names[numeric_type],name);
throw_error(PyExc_TypeError,msg);
}
}
void numpy_check_type(PyArrayObject* arr_obj, int numeric_type, const char* name)
{
// Make sure input has correct numeric type.
int arr_type = arr_obj->descr->type_num;
if (PyTypeNum_ISEXTENDED(numeric_type))
{
char msg[80];
sprintf(msg, "Conversion Error: extended types not supported for variable '%s'",
name);
throw_error(PyExc_TypeError, msg);
}
if (!PyArray_EquivTypenums(arr_type, numeric_type))
{
char* type_names[23] = {"bool", "byte", "ubyte","short", "ushort",
"int", "uint", "long", "ulong", "longlong", "ulonglong",
"float", "double", "longdouble", "cfloat", "cdouble",
"clongdouble", "object", "string", "unicode", "void", "ntype",
"unknown"};
char msg[500];
sprintf(msg,"received '%s' typed array instead of '%s' typed array for variable '%s'",
type_names[arr_type],type_names[numeric_type],name);
throw_error(PyExc_TypeError,msg);
}
}
};
numpy_type_handler x__numpy_type_handler = numpy_type_handler();
#define conversion_numpy_check_type x__numpy_type_handler.conversion_numpy_check_type
#define numpy_check_type x__numpy_type_handler.numpy_check_type
"""