[Cython] Fused Types

Dag Sverre Seljebotn d.s.seljebotn at astro.uio.no
Tue May 3 16:06:05 CEST 2011


On 05/03/2011 03:51 PM, Stefan Behnel wrote:
> mark florisson, 03.05.2011 15:17:
>> if you have
>>
>> cdef func(floating x, floating y):
>> ...
>>
>> you get a "float, float" version, and a "double, double" version, but
>> not "float, double" or "double, float".
>
> So, what would you have to do in order to get a "float, double" and
> "double, float" version then? Could you get that with
>
> ctypedef fused_type(double, float) floating_df
> ctypedef fused_type(float, double) floating_fd
>
> cdef func(floating_df x, floating_fd y):
>
> ?

Well, if you do something like

ctypedef fused_type(float, double) speed_t
ctypedef fused_type(float, double) acceleration_t

cdef func(speed_t x, acceleration_t y)

then you get 4 specializations. Each new typedef gives a new polymorphic 
type.

OTOH, with

ctypedef speed_t acceleration_t

I guess only 2 specializations.

Treating the typedefs in this way is slightly fishy of course. It may 
hint that "ctypedef" is the wrong way to declare a fused type *shrug*.

To only get the "cross-versions" you'd need something like what you 
wrote + Pauli's "paired"-suggestion.


Dag Sverre


More information about the cython-devel mailing list