tmp
/
pip-install-ghxuqwgs
/numpy_78e94bf2b6094bf9a1f3d92042f9bf46
/numpy
/testing
/print_coercion_tables.py
#!/usr/bin/env python | |
"""Prints type-coercion tables for the built-in NumPy types | |
""" | |
from __future__ import division, absolute_import, print_function | |
import numpy as np | |
# Generic object that can be added, but doesn't do anything else | |
class GenericObject(object): | |
def __init__(self, v): | |
self.v = v | |
def __add__(self, other): | |
return self | |
def __radd__(self, other): | |
return self | |
dtype = np.dtype('O') | |
def print_cancast_table(ntypes): | |
print('X', end=' ') | |
for char in ntypes: print(char, end=' ') | |
print() | |
for row in ntypes: | |
print(row, end=' ') | |
for col in ntypes: | |
print(int(np.can_cast(row, col)), end=' ') | |
print() | |
def print_coercion_table(ntypes, inputfirstvalue, inputsecondvalue, firstarray, use_promote_types=False): | |
print('+', end=' ') | |
for char in ntypes: print(char, end=' ') | |
print() | |
for row in ntypes: | |
if row == 'O': | |
rowtype = GenericObject | |
else: | |
rowtype = np.obj2sctype(row) | |
print(row, end=' ') | |
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) | |
if use_promote_types: | |
char = np.promote_types(rowvalue.dtype, colvalue.dtype).char | |
else: | |
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, end=' ') | |
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) | |
print() | |
print("promote_types") | |
print_coercion_table(np.typecodes['All'], 0, 0, False, True) | |