summaryrefslogtreecommitdiff
path: root/numpy/testing
diff options
context:
space:
mode:
Diffstat (limited to 'numpy/testing')
-rwxr-xr-xnumpy/testing/print_coercion_tables.py79
1 files changed, 79 insertions, 0 deletions
diff --git a/numpy/testing/print_coercion_tables.py b/numpy/testing/print_coercion_tables.py
new file mode 100755
index 000000000..0c8a87d9a
--- /dev/null
+++ b/numpy/testing/print_coercion_tables.py
@@ -0,0 +1,79 @@
+#!/usr/bin/env python
+"""Prints type-coercion tables for the built-in NumPy types"""
+
+import numpy as np
+
+# Generic object that can be added, but doesn't do anything else
+class GenericObject:
+ def __init__(self, v):
+ self.v = v
+
+ def __add__(self, other):
+ return self
+
+ def __radd__(self, other):
+ return self
+
+def print_cancast_table(ntypes):
+ print 'X',
+ for char in ntypes: print char,
+ print
+ for row in ntypes:
+ print row,
+ for col in ntypes:
+ print int(np.can_cast(row, col)),
+ print
+
+def print_coercion_table(ntypes, inputfirstvalue, inputsecondvalue, firstarray):
+ print '+',
+ for char in ntypes: print char,
+ print
+ for row in ntypes:
+ if row == 'O':
+ rowtype = GenericObject
+ else:
+ rowtype = np.obj2sctype(row)
+
+ print row,
+ for col in ntypes:
+ if col == 'O':
+ coltype = GenericObject
+ else:
+ coltype = np.obj2sctype(col)
+ try:
+ if firstarray:
+ rowvalue = np.array([rowtype(inputfirstvalue)], dtype=rowtype)
+ else:
+ rowvalue = rowtype(inputfirstvalue)
+ colvalue = coltype(inputsecondvalue)
+ value = np.add(rowvalue,colvalue)
+ if isinstance(value, np.ndarray):
+ char = value.dtype.char
+ else:
+ char = np.dtype(type(value)).char
+ except ValueError:
+ char = '!'
+ except OverflowError:
+ char = '@'
+ except TypeError:
+ char = '#'
+ print char,
+ print
+
+print "can cast"
+print_cancast_table(np.typecodes['All'])
+print
+print "In these tables, ValueError is '!', OverflowError is '@', TypeError is '#'"
+print
+print "scalar + scalar"
+print_coercion_table(np.typecodes['All'], 0, 0, False)
+print
+print "scalar + neg scalar"
+print_coercion_table(np.typecodes['All'], 0, -1, False)
+print
+print "array + scalar"
+print_coercion_table(np.typecodes['All'], 0, 0, True)
+print
+print "array + neg scalar"
+print_coercion_table(np.typecodes['All'], 0, -1, True)
+