Commit 5e6496af authored by Mark Florisson's avatar Mark Florisson

More fused runtime dispatch tests and some fixes

parent 39c966d2
......@@ -2577,7 +2577,7 @@ class FusedCFuncDefNode(StatListNode):
memslice = {{coerce_from_py_func}}(arg)
if memslice.memview:
__PYX_XDEC_MEMVIEW(&memslice, 1)
# print "found a match for the buffer through format parsing"
# print 'found a match for the buffer through format parsing'
%s
break
else:
......@@ -2603,8 +2603,8 @@ class FusedCFuncDefNode(StatListNode):
if isinstance(arg, numpy.ndarray):
dtype = arg.dtype
elif (__pyx_memoryview_check(arg) and
isinstance(arg.object, numpy.ndarray)):
dtype = arg.object.dtype
isinstance(arg.base, numpy.ndarray)):
dtype = arg.base.dtype
else:
dtype = None
......@@ -2612,7 +2612,7 @@ class FusedCFuncDefNode(StatListNode):
if dtype is not None:
itemsize = dtype.itemsize
kind = ord(dtype.kind)
dtype_signed = kind == ord('u')
dtype_signed = kind == ord('i')
""")
pyx_code.indent(2)
pyx_code.named_insertion_point("numpy_dtype_checks")
......@@ -2805,7 +2805,7 @@ class FusedCFuncDefNode(StatListNode):
u"""
candidates = []
for sig in signatures:
match_found = True
match_found = filter(None, dest_sig)
for src_type, dst_type in zip(sig.strip('()').split(', '), dest_sig):
if dst_type is not None and match_found:
match_found = src_type == dst_type
......
......@@ -978,7 +978,7 @@ cdef memoryview_fromslice({{memviewslice_name}} *memviewslice,
result.from_slice = memviewslice[0]
__PYX_INC_MEMVIEW(memviewslice, 1)
result.from_object = <object> memviewslice.memview.obj
result.from_object = (<memoryview> memviewslice.memview).base
result.typeinfo = memviewslice.memview.typeinfo
result.view = memviewslice.memview.view
......
......@@ -735,19 +735,22 @@ def test_dispatch_typedef(np.ndarray[typedeffed_fused_type] a):
cdef extern from "types.h":
ctypedef unsigned char actually_long_t
ctypedef char actually_long_t
cdef fused confusing_fused_typedef:
actually_long_t
int
unsigned long
double complex
unsigned char
signed char
def test_dispatch_external_typedef(np.ndarray[confusing_fused_typedef] a):
"""
>>> test_dispatch_external_typedef(np.arange(10, dtype=np.long))
5
>>> test_dispatch_external_typedef(np.arange(-5, 5, dtype=np.long))
-2
"""
print a[5]
print a[3]
# test fused memoryview slices
cdef fused memslice_fused_dtype:
......@@ -787,23 +790,34 @@ cdef fused memslice_fused:
double complex[:]
object[:]
def test_fused_memslice_fused(memslice_fused a):
def test_fused_memslice(memslice_fused a):
"""
>>> import cython
>>> sorted(test_fused_memslice_fused.__signatures__)
>>> sorted(test_fused_memslice.__signatures__)
['double complex[:]', 'double[:]', 'float complex[:]', 'float[:]', 'int[:]', 'long[:]', 'object[:]']
>>> test_fused_memslice_fused(np.arange(10, dtype=np.complex64))
>>> test_fused_memslice(np.arange(10, dtype=np.complex64))
float complex[:] float complex[:] (5+0j) (6+0j)
>>> test_fused_memslice_fused(np.arange(10, dtype=np.complex128))
>>> test_fused_memslice(np.arange(10, dtype=np.complex128))
double complex[:] double complex[:] (5+0j) (6+0j)
>>> test_fused_memslice_fused(np.arange(10, dtype=np.float32))
>>> test_fused_memslice(np.arange(10, dtype=np.float32))
float[:] float[:] 5.0 6.0
>>> test_fused_memslice_fused(np.arange(10, dtype=np.dtype('i')))
>>> test_fused_memslice(np.arange(10, dtype=np.dtype('i')))
int[:] int[:] 5 6
>>> test_fused_memslice_fused(np.arange(10, dtype=np.object))
>>> test_fused_memslice(np.arange(10, dtype=np.object))
object[:] object[:] 5 6
"""
cdef memslice_fused b = a
print cython.typeof(a), cython.typeof(b), a[5], b[6]
def test_dispatch_memoryview_object():
"""
>>> test_dispatch_memoryview_object()
int[:] int[:] 5 6
"""
cdef int[:] m = np.arange(10, dtype=np.dtype('i'))
cdef int[:] m2 = m
cdef int[:] m3 = <object> m
test_fused_memslice(m3)
include "numpy_common.pxi"
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment