#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 «.