сгенерированный интерфейс f2py ожидает кортеж вместо обратного вызова fortran

#python #numpy #fortran #f2py

#питон #тупой #фортран #f2py

Вопрос:

Я создал интерфейс python f2py для PITCON7 ( pitcon7.f90 ). Интерфейс предоставляет две функции pitcon и dge_slv from pitcon7.f90 . dge_slv передается как обратный pitcon вызов . Однако при выполнении примера задачи, которая вызывает pitcon, я получаю сообщение об ошибке

 Traceback (most recent call last):
  File "pitcon_problem01.py", line 91, in <module>
    result = run(30)
  File "pitcon_problem01.py", line 58, in run
    ierror, iwork, rwork, xr = pitcon(df, fpar, fx, ierror, ipar, iwork, liw, nvar, rwork, lrw, xr, dge_slv)
TypeError: interface.pitcon() argument 12 must be tuple, not fortran
 

pitcon7.pyf Файл будет отправлен в pastebin

Пример задачи pitcon_propblem01.py также был опубликован в pastebin . Это python-эквивалент Fortran pitcon7_test1.f90 из того же восходящего источника, ссылка на который приведена выше.

Я не понимаю, почему интерфейс f2py ожидает, что обратный вызов будет кортежем, поскольку, похоже, нет никакого несоответствия аргументов.

Комментарии:

1. Не уверен в деталях, но «ierror», похоже, указан как intent (out), поэтому, возможно, не нужно передавать в качестве фактического аргумента? (может быть полезно проверить подпись с помощью «print ( pitcon.__doc__ )» и т. Д.)

2. @roygvib . Это было острое наблюдение, но, похоже, проблема не в этом. На самом деле, если я не передаю ierror , возникает несоответствие аргументов «interface.error: ошибка при обработке списка аргументов для обратного вызова slname «.