diff options
author | David Cournapeau <cournape@gmail.com> | 2009-10-08 13:54:00 +0000 |
---|---|---|
committer | David Cournapeau <cournape@gmail.com> | 2009-10-08 13:54:00 +0000 |
commit | 2aa5d247f876ee8d69f53303a0a6147f10fb66b1 (patch) | |
tree | 7291a0877ab78f21f0fe6a82bdc73c1764dc84b2 | |
parent | 77966f7aa170f0a6eb603f5dae7111429f015262 (diff) | |
download | numpy-2aa5d247f876ee8d69f53303a0a6147f10fb66b1.tar.gz |
ENH: move *Api classes into genapi2, as we will use them for ufunc.
-rw-r--r-- | numpy/core/code_generators/genapi2.py | 110 | ||||
-rw-r--r-- | numpy/core/code_generators/generate_numpy_api.py | 113 |
2 files changed, 113 insertions, 110 deletions
diff --git a/numpy/core/code_generators/genapi2.py b/numpy/core/code_generators/genapi2.py index 9937ec5a5..42c24fdd8 100644 --- a/numpy/core/code_generators/genapi2.py +++ b/numpy/core/code_generators/genapi2.py @@ -5,6 +5,116 @@ if sys.version_info[:2] < (2, 6): from genapi import API_FILES, find_functions +# Those *Api classes instances know how to output strings for the generated code +class TypeApi: + def __init__(self, name, index, ptr_cast): + self.index = index + self.name = name + self.ptr_cast = ptr_cast + + def define_from_array_api_string(self): + return "#define %s (*(%s *)PyArray_API[%d])" % (self.name, + self.ptr_cast, + self.index) + + def array_api_define(self): + return " (void *) &%s" % self.name + + def internal_define(self): + astr = """\ +#ifdef NPY_ENABLE_SEPARATE_COMPILATION + extern NPY_NO_EXPORT PyTypeObject %(type)s; +#else + NPY_NO_EXPORT PyTypeObject %(type)s; +#endif +""" % {'type': self.name} + return astr + +class GlobalVarApi: + def __init__(self, name, index, type): + self.name = name + self.index = index + self.type = type + + def define_from_array_api_string(self): + return "#define %s (*(%s *)PyArray_API[%d])" % (self.name, + self.type, + self.index) + + def array_api_define(self): + return " (%s *) &%s" % (self.type, self.name) + + def internal_define(self): + astr = """\ +#ifdef NPY_ENABLE_SEPARATE_COMPILATION + extern NPY_NO_EXPORT %(type)s %(name)s; +#else + NPY_NO_EXPORT %(type)s %(name)s; +#endif +""" % {'type': self.type, 'name': self.name} + return astr + +# Dummy to be able to consistently use *Api instances for all items in the +# array api +class BoolValuesApi: + def __init__(self, name, index): + self.name = name + self.index = index + self.type = 'PyBoolScalarObject' + + def define_from_array_api_string(self): + return "#define %s ((%s *)PyArray_API[%d])" % (self.name, + self.type, + self.index) + + def array_api_define(self): + return " (void *) &%s" % self.name + + def internal_define(self): + astr = """\ +#ifdef NPY_ENABLE_SEPARATE_COMPILATION +extern NPY_NO_EXPORT PyBoolScalarObject _PyArrayScalar_BoolValues[2]; +#else +NPY_NO_EXPORT PyBoolScalarObject _PyArrayScalar_BoolValues[2]; +#endif +""" + return astr + +def _repl(str): + return str.replace('intp', 'npy_intp').replace('Bool','npy_bool') + +class FunctionApi: + def __init__(self, name, index, return_type, args): + self.name = name + self.index = index + self.return_type = return_type + self.args = args + + def _argtypes_string(self): + if not self.args: + return 'void' + argstr = ', '.join([_repl(a[0]) for a in self.args]) + return argstr + + def define_from_array_api_string(self): + define = """\ +#define %s \\\n (*(%s (*)(%s)) \\ + PyArray_API[%d])""" % (self.name, + self.return_type, + self._argtypes_string(), + self.index) + return define + + def array_api_define(self): + return " (void *) %s" % self.name + + def internal_define(self): + astr = """\ +NPY_NO_EXPORT %s %s \\\n (%s);""" % (self.return_type, + self.name, + self._argtypes_string()) + return astr + def order_dict(d): """Order dict by its values.""" o = d.items() diff --git a/numpy/core/code_generators/generate_numpy_api.py b/numpy/core/code_generators/generate_numpy_api.py index 02f0aa339..0cf2063a7 100644 --- a/numpy/core/code_generators/generate_numpy_api.py +++ b/numpy/core/code_generators/generate_numpy_api.py @@ -2,6 +2,9 @@ import os import genapi import genapi2 +from genapi2 import \ + TypeApi, GlobalVarApi, FunctionApi, BoolValuesApi + import numpy_api h_template = r""" @@ -142,116 +145,6 @@ def generate_api(output_dir, force=False): return targets -# Those *Api classes instances know how to output strings for the generated code -class TypeApi: - def __init__(self, name, index, ptr_cast): - self.index = index - self.name = name - self.ptr_cast = ptr_cast - - def define_from_array_api_string(self): - return "#define %s (*(%s *)PyArray_API[%d])" % (self.name, - self.ptr_cast, - self.index) - - def array_api_define(self): - return " (void *) &%s" % self.name - - def internal_define(self): - astr = """\ -#ifdef NPY_ENABLE_SEPARATE_COMPILATION - extern NPY_NO_EXPORT PyTypeObject %(type)s; -#else - NPY_NO_EXPORT PyTypeObject %(type)s; -#endif -""" % {'type': self.name} - return astr - -class GlobalVarApi: - def __init__(self, name, index, type): - self.name = name - self.index = index - self.type = type - - def define_from_array_api_string(self): - return "#define %s (*(%s *)PyArray_API[%d])" % (self.name, - self.type, - self.index) - - def array_api_define(self): - return " (%s *) &%s" % (self.type, self.name) - - def internal_define(self): - astr = """\ -#ifdef NPY_ENABLE_SEPARATE_COMPILATION - extern NPY_NO_EXPORT %(type)s %(name)s; -#else - NPY_NO_EXPORT %(type)s %(name)s; -#endif -""" % {'type': self.type, 'name': self.name} - return astr - -# Dummy to be able to consistently use *Api instances for all items in the -# array api -class BoolValuesApi: - def __init__(self, name, index): - self.name = name - self.index = index - self.type = 'PyBoolScalarObject' - - def define_from_array_api_string(self): - return "#define %s ((%s *)PyArray_API[%d])" % (self.name, - self.type, - self.index) - - def array_api_define(self): - return " (void *) &%s" % self.name - - def internal_define(self): - astr = """\ -#ifdef NPY_ENABLE_SEPARATE_COMPILATION -extern NPY_NO_EXPORT PyBoolScalarObject _PyArrayScalar_BoolValues[2]; -#else -NPY_NO_EXPORT PyBoolScalarObject _PyArrayScalar_BoolValues[2]; -#endif -""" - return astr - -def _repl(str): - return str.replace('intp', 'npy_intp').replace('Bool','npy_bool') - -class FunctionApi: - def __init__(self, name, index, return_type, args): - self.name = name - self.index = index - self.return_type = return_type - self.args = args - - def _argtypes_string(self): - if not self.args: - return 'void' - argstr = ', '.join([_repl(a[0]) for a in self.args]) - return argstr - - def define_from_array_api_string(self): - define = """\ -#define %s \\\n (*(%s (*)(%s)) \\ - PyArray_API[%d])""" % (self.name, - self.return_type, - self._argtypes_string(), - self.index) - return define - - def array_api_define(self): - return " (void *) %s" % self.name - - def internal_define(self): - astr = """\ -NPY_NO_EXPORT %s %s \\\n (%s);""" % (self.return_type, - self.name, - self._argtypes_string()) - return astr - def do_generate_api(targets, sources): header_file = targets[0] c_file = targets[1] |