[SOLVED] Cython: Generic function interfacing functions based on call signature


Basically, want to write two functions, then use a third generic function which purely selects which of the two original functions to call with the given arguments based on the input arguments given. eg

cdef fun1(int a):
    #do something

cdef fun1(float a):
    #do something

#roughly stealing syntax from fortran (this is the part I don't know how to do)
interface generic_function:
    function fun1
    function fun2

#Calling the functions
cdef int a = 2
cdef float b = 1.3
generic_function(a) #runs fun1
generic_function(b) #runs fun2

Obviously I could do this with if statements, but that doesn’t appear efficient to me.
Any and all help is appreciated, cheers.


This can be done with [fused types] (https://cython.readthedocs.io/en/latest/src/userguide/fusedtypes.html)

ctypedef fused int_or_float:

cdef generic_function(int_or_float a):
    if int_or_float is int:

The if statement is evaluated when Cython compiles the functions (you can verify this by looking at the generated c code) so is not a performance issue.

Answered By – DavidW

Answer Checked By – Timothy Miller (BugsFixing Admin)

Leave a Reply

Your email address will not be published. Required fields are marked *