[Numpy-discussion] f2py hiding callback function
Marc Poinot
Marc.Poinot at onera.fr
Wed May 30 08:44:09 EDT 2012
Hi all,
I'm trying to hide the actual python callback function on the fortran side
as well as on the python side.
See the example: I want f1 to be the wrapper of my callback, f2 is a
second level where the user has no arg to pass. But if I call f2, for
example in f3, the callback is 'propagated' and I have to declare it
the same way as in f2. Is there a trick to stop this propagation?
subroutine f1(p,t)
cf2py intent(callback) push_back_path
cf2py optional push_back_path
cf2py external push_back_path
character(len=*) p
character(len=*) t
call push_back_path(p,t)
return
end
subroutine f2()
cf2py intent(callback) push_back_path
cf2py optional push_back_path
cf2py external push_back_path
cf2py use f1__user__routines
character(len=96) p
character(len=32) t
p='/usr'
t='local'
call f1(p,t)
t='lib'
call f1(p,t)
return
end
subroutine f3()
call f2()
end
The python test:
# -----------------------------------------------
# f2py -c pathutils.for -m pathutils
# python pathtest.py
import pathutils
import string
def push_back_path(p,t):
p=p.strip()
t=t.strip()
p=string.ljust(p+'/'+t,96)
print 'PUSH_BACK_PATH [%s]'%p
pathutils.push_back_path=push_back_path
print 'F1'
pathutils.f1('/usr','bin')
print 'F2'
# Hiding on python side is ok
pathutils.f2()
# Hiding on fortran side fails
print 'F3'
pathutils.f3()
Which leads to:
$ python pathtest.py
F1
PUSH_BACK_PATH [/usr/bin ]
F2
PUSH_BACK_PATH [/usr/local ]
PUSH_BACK_PATH [/usr/lib ]
F3
capi_return is NULL
Call-back cb_push_back_path_in_f1__user__routines failed.
capi_return is NULL
Call-back cb_push_back_path_in_f1__user__routines failed.
Traceback (most recent call last):
File "pathtest.py", line 20, in <module>
pathutils.f3()
TypeError: push_back_path() takes exactly 2 arguments (0 given)
TIA
-MP-
-----------------------------------------------------------------------
Marc POINOT [ONERA/DSNA] Tel:+33.1.46.73.42.84 Fax:+33.1.46.73.41.66
Avertissement/disclaimer http://www.onera.fr/onera-en/emails-terms
More information about the NumPy-Discussion
mailing list