Я обнаружил странное поведение f2py при работе с глобальными константами в модуле Fortran.
Допустим, у меня есть файл test.f90, который выглядит так
module test1
real, parameter :: a = 12345.
end module test1
module test2
real*8, parameter :: a = 6789.
end module test2
Если я оберну это с помощью f2py, используя
f2py -c -m mymod test.f90
и работает
python -c "import mymod as m; print m.test1.a; print m.test2.a"
я получил
12345.0
6789.0
что в значительной степени вы ожидаете. Операторы real и real*8 ведут себя одинаково.
Для моего реального проекта мне нужно скомпилировать мой код Fortran с флагами компилятора, указав явное использование двойной точности. В Фортране это работает нормально. Когда я компилирую приведенный выше код как
f2py --f90flags="-fdefault-double-8 -fdefault-integer-8 -fdefault-real-8" -c -m mymod test.f90
я получаю в результате
python -c "import mymod as m; print m.test1.a; print m.test2.a"
0.0
6789.0
Это на самом деле странно. В первом случае глобальная переменная не инициализируется, ее значение равно нулю. Это ошибка или есть другой способ указать явную обработку двойной точности в f2py?