Использование F2PY
F2PY можно использовать как утилиту командной строки f2py или как модуль Python numpy.f2py. Хотя мы стараемся установить утилиту командной строки как часть установки NumPy, на некоторых платформах, таких как Windows, сложно надёжно поместить исполняемый файл в PATH. В этом документе мы будем ссылаться на f2py , но вам может потребоваться запустить его как модуль:
python -m numpy.f2py
Если вы запустите f2py без аргументов, и строка numpy Version в конце соответствует версии NumPy, выведенной из python -m numpy.f2py, то вы можете использовать более короткую версию. В противном случае, или если вы не можете запустить f2py, вы должны заменить все вызовы f2py здесь на более длинную версию.
Команда f2py
При использовании в качестве утилиты командной строки, у f2py есть три основных режима, отличающихся использованием ключей -c и -h:
-
Для сканирования исходных Fortran-файлов и генерации файла сигнатур используйте
f2py -h <filename.pyf> <options> <fortran files> \ [[ only: <fortran functions> : ] \ [ skip: <fortran functions> : ]]... \ [<fortran files> ...]
Обратите внимание, что один Fortran-файл может содержать множество процедур, и не обязательно все они нужны для использования из Python. Поэтому вы можете указать, какие процедуры нужно обернуть (в части
only: .. :) или какие процедуры F2PY следует пропустить (в частиskip: .. :).Если
<filename.pyf>задано какstdout, то сигнатуры отправляются в стандартный вывод вместо файла.Среди других опций (см. ниже), в этом режиме можно использовать следующие:
-
--overwrite-signature -
Перезаписать существующий файл сигнатур.
-
-
Для создания модуля расширения используйте
f2py -m <modulename> <options> <fortran files> \ [[ only: <fortran functions> : ] \ [ skip: <fortran functions> : ]]... \ [<fortran files> ...]
Созданный модуль расширения сохраняется как
<modulename>module.cв текущем каталоге.Здесь
<fortran files>может также содержать файлы сигнатур. Среди других опций (см. ниже), в этом режиме можно использовать следующие:-
--debug-capi -
Добавить отладочные крючки в модуль расширения. При использовании этого модуля расширения в стандартный вывод выводится различная информация об обёртке, например, значения переменных, выполняемые шаги и т. д.
-
-include'<includefile>' -
Добавить оператор CPP
#includeв исходный код модуля расширения.<includefile>должен быть задан в одном из следующих форматов:"filename.ext" <filename.ext>
Оператор include вставляется непосредственно перед функциями обёртки. Эта возможность позволяет использовать произвольные C-функции (определённые в
<includefile>) в сгенерированных F2PY обёртках.Примечание
Эта опция устарела. Используйте оператор
usercodeдля указания фрагментов C-кода непосредственно в файлах сигнатур. -
--[no-]wrap-functions -
Создать обёртки Fortran-подпрограмм для Fortran-функций.
--wrap-functionsявляется значением по умолчанию, так как оно гарантирует максимальную переносимость и независимость от компилятора. -
--include-paths <path1>:<path2>:.. -
Искать файлы include в заданных каталогах.
-
--help-link [<list of resources names>] -
Список системных ресурсов, найденных
numpy_distutils/system_info.py. Например, попробуйтеf2py --help-link lapack_opt.
-
-
Для построения модуля расширения используйте
f2py -c <options> <fortran files> \ [[ only: <fortran functions> : ] \ [ skip: <fortran functions> : ]]... \ [ <fortran/c source files> ] [ <.o, .a, .so files> ]
Если
<fortran files>содержит файл сигнатур, то генерируется исходный код для модуля расширения, все Fortran- и C-файлы компилируются, и, наконец, все объектные и библиотечные файлы связываются с модулем расширения<modulename>.so, который сохраняется в текущем каталоге.Если
<fortran files>не содержит файл сигнатур, то модуль расширения создаётся путём сканирования всех Fortran-исходных кодов для определения сигнатур процедур.Среди других опций (см. ниже) и опций, описанных в предыдущем режиме, в этом режиме можно использовать следующие:
-
--help-fcompiler -
Список доступных Fortran-компиляторов.
-
--help-compiler [depreciated] -
Список доступных Fortran-компиляторов.
-
--fcompiler=<Vendor> -
Указать тип Fortran-компилятора по поставщику.
-
--f77exec=<path> -
Указать путь к F77-компилятору
-
--fcompiler-exec=<path> [depreciated] -
Указать путь к F77-компилятору
-
--f90exec=<path> -
Указать путь к F90-компилятору
-
--f90compiler-exec=<path> [depreciated] -
Указать путь к F90-компилятору
-
--f77flags=<string> -
Указать флаги F77-компилятора
-
--f90flags=<string> -
Указать флаги F90-компилятора
-
--opt=<string> -
Указать флаги оптимизации
-
--arch=<string> -
Указать архитектурные флаги оптимизации
-
--noopt -
Компилировать без оптимизации
-
--noarch -
Компилировать без оптимизации, зависящей от архитектуры
-
--debug -
Компилировать с отладочной информацией
-
-l<libname> -
Использовать библиотеку
<libname>при линковке. -
-D<macro>[=<defn=1>] -
Определить макрос
<macro>как<defn>. -
-U<macro> -
Определить макрос
<macro> -
-I<dir> -
Добавить каталог
<dir>в список каталогов, просматриваемых при поиске файлов include. -
-L<dir> -
Добавить каталог
<dir>в список каталогов, просматриваемых при поиске-l. -
link-<resource> -
Связать модуль расширения с <ресурсом> как определено в
numpy_distutils/system_info.py. Например, для связывания с оптимизированными LAPACK-библиотеками (vecLib на MacOSX, ATLAS в других случаях) используйте--link-lapack_opt. См. также ключ--help-link.
Примечание
Опция
f2py -cдолжна быть применена к существующему файлу.pyf(плюс исходные/объектные/библиотечные файлы), или необходимо указать опцию-m <modulename>(плюс исходные/объектные/библиотечные файлы). Используйте одну из следующих опций:f2py -c -m fib1 fib1.f
или
f2py -m fib1 fib1.f -h fib1.pyf f2py -c fib1.pyf fib1.f
Дополнительную информацию см. в документации Python по созданию расширений C и C++.
При построении модуля расширения для не-gcc Fortran-компиляторов может потребоваться комбинация следующих макросов:
-DPREPEND_FORTRAN -DNO_APPEND_FORTRAN -DUPPERCASE_FORTRAN
Для тестирования производительности сгенерированных F2PY интерфейсов используйте
-DF2PY_REPORT_ATEXIT. Затем при выходе из Python выводится отчёт с различными временными показателями. Эта функция может не работать на всех платформах, в настоящее время поддерживается только платформа Linux.Для проверки, копирует ли F2PY сгенерированный интерфейс аргументы массивов, используйте
-DF2PY_REPORT_ON_ARRAY_COPY=<int>. Когда размер аргумента массива больше, чем<int>, сообщение о копировании отправляется вstderr. -
Другие опции:
-
-m <modulename> -
Имя модуля расширения. По умолчанию
untitled. Не используйте эту опцию, если используется файл сигнатур (*.pyf). -
--[no-]lower -
Опускать или нет регистр в
<fortran files>. По умолчанию регистр опускается с ключом-hи не опускается без него--no-lower. -
--build-dir <dirname> -
Все сгенерированные F2PY файлы создаются в
<dirname>. По умолчаниюtempfile.mkdtemp(). -
--quiet -
Запуск в тихом режиме.
-
--verbose -
Запуск с дополнительной детализацией.
-
-v -
Вывод идентификатора версии f2py и выход.
Выполните f2py без каких-либо опций, чтобы получить актуальный список доступных опций.
Модуль Python numpy.f2py
Предупреждение
Текущий интерфейс Python к модулю f2py не является зрелым и может измениться в будущем.
Генератор интерфейса Fortran-Python.
-
numpy.f2py.run_main(comline_list)[source] -
Эквивалентно запуску:
f2py <args>
где
<args>=string.join(<list>,' '), но в Python. Если не использовать-h, эта функция возвращает словарь, содержащий информацию о сгенерированных модулях и их зависимости от исходных файлов. Например, командуf2py -m scalar scalar.fможно выполнить в Python следующим образомНельзя создать модули расширения с помощью этой функции, то есть использование
-cзапрещено. Используйте командуcompileвместо неёПримеры
>>> import numpy.f2py >>> r = numpy.f2py.run_main(['-m','scalar','doc/source/f2py/scalar.f']) Reading fortran codes... Reading file 'doc/source/f2py/scalar.f' (format:fix,strict) Post-processing... Block: scalar Block: FOO Building modules... Building module "scalar"... Wrote C/API module "scalar" to file "./scalarmodule.c" >>> print(r) {'scalar': {'h': ['/home/users/pearu/src_cvs/f2py/src/fortranobject.h'], 'csrc': ['./scalarmodule.c', '/home/users/pearu/src_cvs/f2py/src/fortranobject.c']}}
-
numpy.f2py.compile(source, modulename='untitled', extra_args='', verbose=True, source_fn=None, extension='.f')[source] -
Построение модуля расширения из исходного Fortran 77 кода с помощью f2py.
- Параметры
-
-
sourcestr or bytes -
Исходный код Fortran-модуля / подпрограммы для компиляции
Изменено в версии 1.16.0: Принимает str, а также bytes
-
modulenamestr, optional -
Имя скомпилированного Python-модуля
-
extra_argsstr or list, optional -
Дополнительные параметры, передаваемые f2py
Изменено в версии 1.16.0: В качестве аргументов также может быть передан список.
-
verbosebool, optional -
Выводить вывод f2py на экран
-
source_fnstr, optional -
Имя файла, в который будет записан исходный код Fortran. По умолчанию используется временный файл с расширением, заданным параметром
extension -
extension{‘.f’, ‘.f90’}, optional -
Расширение файла, если
source_fnне указано. Расширение указывает, какой стандарт Fortran используется. По умолчаниюf, что подразумевает стандарт F77.Добавлена в версии 1.11.0.
-
- Возвращает
-
-
resultint -
0 при успешном выполнении
-
Примеры
>>> import numpy.f2py >>> fsource = ''' ... subroutine foo ... print*, "Hello world!" ... end ... ''' >>> numpy.f2py.compile(fsource, modulename='hello', verbose=0) 0 >>> import hello >>> hello.foo() Hello world!
© 2005–2020 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.19/f2py/usage.html