summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Cournapeau <cournape@gmail.com>2009-10-08 13:54:00 +0000
committerDavid Cournapeau <cournape@gmail.com>2009-10-08 13:54:00 +0000
commit2aa5d247f876ee8d69f53303a0a6147f10fb66b1 (patch)
tree7291a0877ab78f21f0fe6a82bdc73c1764dc84b2
parent77966f7aa170f0a6eb603f5dae7111429f015262 (diff)
downloadnumpy-2aa5d247f876ee8d69f53303a0a6147f10fb66b1.tar.gz
ENH: move *Api classes into genapi2, as we will use them for ufunc.
-rw-r--r--numpy/core/code_generators/genapi2.py110
-rw-r--r--numpy/core/code_generators/generate_numpy_api.py113
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]