summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Cournapeau <cournape@gmail.com>2009-10-08 13:47:27 +0000
committerDavid Cournapeau <cournape@gmail.com>2009-10-08 13:47:27 +0000
commit52738fdb4a4882da6ac252a913e057cc984c7747 (patch)
tree56130799fdece9e678c7d368979aa5e26b0ae5db
parentfba5fcddfdfd8f04a6d78896259cb4ff470dc608 (diff)
downloadnumpy-52738fdb4a4882da6ac252a913e057cc984c7747.tar.gz
ENH: generate first types decl from the type dict.
-rw-r--r--numpy/core/code_generators/generate_numpy_api.py24
1 files changed, 17 insertions, 7 deletions
diff --git a/numpy/core/code_generators/generate_numpy_api.py b/numpy/core/code_generators/generate_numpy_api.py
index 596fbc567..d03797eb7 100644
--- a/numpy/core/code_generators/generate_numpy_api.py
+++ b/numpy/core/code_generators/generate_numpy_api.py
@@ -1,6 +1,8 @@
import os
import genapi
+import numpy_api
+
# new_types are types added later on, for which the offset in the API function
# pointer array should be different (to avoid breaking the ABI).
new_types = ['TimeInteger', 'Datetime', 'Timedelta']
@@ -211,6 +213,13 @@ class Type:
self.ptr_cast,
self.index)
+def order_dict(d):
+ """Order dict by its values."""
+ o = d.items()
+ def cmp(x, y):
+ return x[1] - y[1]
+ return sorted(o, cmp=cmp)
+
def do_generate_api(targets, sources):
header_file = targets[0]
c_file = targets[1]
@@ -229,13 +238,14 @@ def do_generate_api(targets, sources):
#define %s (*(%s (*)(%s)) PyArray_API[0])
""" % (first_func.name, first_func.return_type, first_func.argtypes_string())
- first_types = [
- Type('PyBigArray_Type', 1, 'PyTypeObject'),
- Type('PyArray_Type', 2, 'PyTypeObject'),
- Type('PyArrayDescr_Type', 3, 'PyTypeObject'),
- Type('PyArrayFlags_Type', 4, 'PyTypeObject'),
- Type('PyArrayIter_Type', 5, 'PyTypeObject'),
- Type('PyArrayMultiIter_Type', 6, 'PyTypeObject')]
+ # Handle original types
+ multiarray_types = numpy_api.multiarray_types_api
+ ordered_types_api = order_dict(multiarray_types)
+
+ first_types = []
+ for i in range(6):
+ name, index = ordered_types_api.pop(0)
+ first_types.append(Type(name, index, 'PyTypeObject'))
for t in first_types:
beg_api += "%s\n" % t.decl_str()