[Cython] Too many instantiations with fused type memoryviews

Pauli Virtanen pav at iki.fi
Sat Mar 8 21:11:55 CET 2014


Hi,

FYI: Cython instantiates fused type routines with memoryview arguments
unnecessarily many times.

Example:
```
ctypedef fused idx_t:
    short
    long

# Cython 0.20.1 instantiates this function 128 times,
# even though only 2 would be needed
def fubar_128(idx_t[:] a,
              idx_t[:] b,
              idx_t[:] c,
              idx_t[:] d,
              idx_t[:] e,
              idx_t[:] f,
              idx_t[:] g):
    print("HALLO")

def fubar_2(idx_t a,
            idx_t b,
            idx_t c,
            idx_t d,
            idx_t e,
            idx_t f,
            idx_t g):
    print("HULLO")
```
$ cython cymod.pyx
$ cython --version
Cython version 0.20.1
$ grep -c 'print("HALLO")' cymod.c
128
$ grep -c 'print("HULLO")' _cymod.c
2

The n**m explosion starts to hurt quite quickly when there are several
array arguments and more than one fused type. I think this issue is
also accompanied by some signature resolution bugs (I'll try to come
up with an example case).


Cheers,

-- 
Pauli Virtanen



More information about the cython-devel mailing list