f2py: предоставление параметров из «используемых» модулей

Я предполагаю, что этот вопрос был где-то рассмотрен, но я потратил слишком много времени на поиски ответа, в том числе немного покопавшись в исходном коде. Я попытался поставить проблему в первом абзаце. Остальное показывает базовый пример проблемы.

Я пытаюсь скомпилировать модуль, который содержитUSE утверждение, указывающее на другой, более общий модуль. Я бы предпочел хранить использованный модуль отдельно, чтобы его можно было использовать в несколькихпакеты» как набор общих настроек. Когда я компилирую два модуля, используя f2py, все работает так, как рекламируется со стороны Fortran, но со стороны PythonUSE кажется, игнорируется. Если я позволю f2py генерировать файл подписи, файл содержитUSE оператор как соответствующий, но если я завершу компиляцию и импортирую из результирующей библиотеки параметры из используемого модуля не будут доступны в модуле, который содержит оператор использования. Ниже приведены два модуля, иллюстрирующие ситуацию:

MODULE test
    INTEGER, PARAMETER :: a = 1
END MODULE test

MODULE test2
    USE test
    INTEGER, PARAMETER :: b = 2
END MODULE test2

Чтобы показать промежуточный шаг, я побежалf2py -h test.pyf test.f90 test2.f90, Следующий файл подписи генерируется; обратите внимание, что "test2" Модуль содержитиспользовать тест ":

!    -*- f90 -*-
! Note: the context of this file is case sensitive.

python module test ! in
    interface  ! in :test
        module test ! in :test:test.f90
            integer, parameter,optional :: a=1
        end module test
        module test2 ! in :test:test2.f90
            use test
            integer, parameter,optional :: b=2
        end module test2
    end interface
end python module test

! This file was auto-generated with f2py (version:2).
! See http://cens.ioc.ee/projects/f2py2e/

Если я сейчас скомпилирую сf2py --fcompiler=gfortran -c test.pyf test.f90 test2.f90 Я получаю test.so (так же, как работаетf2py --fcompiler=gfortran -m test -c test.f90 test2.f90 без создания файла подписи в первую очередь). Импортирование из этой библиотеки в python предоставляет test.test.a и test.test2.b, но не предоставляет test.test2.a, как можно увидеть здесь:

In [1]: import test

In [2]: print test.test.a
1

In [3]: print test.test2.b
2

In [4]: print test.test2.a
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
/users/solbrig/svn_checkouts/inversion/satmet/branches/solbrig/rootpath/data/users
/GeoIPS/src/test/ in () 
----> 1 print test.test2.a

AttributeError: a

Просто чтобы проиллюстрировать этоb определяется правильно в test2 с точки зрения fortran, следующий код использует test2 и печатает обаb а также :b

SUBROUTINE run_test()
    USE test2
    IMPLICIT NONE
    print *, "a = ", a
    print *, "b = ", b
END SUBROUTINE run_test

После компиляции с "f2py -m run_test -c test.f90 test2.f90 run_test.f90 " и получив run_test.so, run_test может быть импортирован в python и работает как положено:

In [1]: import run_test

In [2]: run_test.run_test()
 a =            1
 b =            2

Любая помощь с этим вопросом будет принята с благодарностью.

TL; DR : Когда модуль F90, который содержитUSE компилируется с помощью f2py, он не отображает параметры, которые определены виспользуемый" модуль как атрибуты в Python.

Ответы на вопрос(1)

Ваш ответ на вопрос