Spec-Zone.ru › NumPy 2.0

Использование F2PY

На этой странице содержится справочная информация по всем параметрам командной строки для команды f2py, а также справочная информация по внутренним функциям модуля numpy.f2py.

Использование f2py в качестве инструмента командной строки

При использовании в качестве инструмента командной строки f2py имеет три основных режима, различающихся использованием переключателей -c и -h.

1. Генерация файла сигнатур

Для сканирования исходных кодов Fortran и генерации файла сигнатур используйте

f2py -h <filename.pyf> <options> <fortran files>   \
  [[ only: <fortran functions>  : ]                \
    [ skip: <fortran functions>  : ]]...           \
  [<fortran files> ...]

Примечание

Файл исходного кода Fortran может содержать множество процедур, и часто не требуется разрешать использование всех процедур из Python. В таких случаях укажите, какие процедуры должны быть обработаны (в части only: .. : ) или какие процедуры F2PY должен игнорировать (в части skip: .. : ).

F2PY не имеет понятия о списке «по файлу» skip или only, поэтому если функции перечислены в only, никакие другие функции не будут взяты из других файлов.

Если <filename.pyf> указано как stdout, сигнатуры записываются в стандартный вывод вместо файла.

Среди других параметров (см. ниже), в этом режиме можно использовать следующие:

--overwrite-signature

Перезаписывает существующий файл сигнатур.

2. Создание модуля расширения

Для создания модуля расширения используйте

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>

Оператор включения вставляется непосредственно перед функциями обёртки. Эта функция позволяет использовать произвольные C-функции (определённые в <includefile> ) в сгенерированных F2PY обёртках.

Примечание

Этот параметр устарел. Используйте оператор usercode для непосредственного указания фрагментов кода C в файлах сигнатур.

--[no-]wrap-functions

Создаёт обёртки Fortran-подпрограмм для Fortran-функций. --wrap-functions является значением по умолчанию, поскольку оно обеспечивает максимальную переносимость и независимость от компилятора.

--include-paths "<path1>:<path2>..."

Ищет файлы заголовков в заданных каталогах.

Примечание

Пути должны разделяться корректным разделителем операционной системы pathsep, то есть : на Linux/macOS и ; на Windows. В CMake это соответствует использованию $<SEMICOLON>.

--help-link [<list of resources names>]

Список системных ресурсов, найденных numpy_distutils/system_info.py. Например, попробуйте f2py --help-link lapack_opt.

3. Сборка модуля

Для сборки модуля расширения используйте

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 на наличие сигнатур процедур, прежде чем приступить к сборке модуля расширения.

Предупреждение

Начиная с Python 3.12, distutils был удалён. Для взаимодействия с meson используйте переменные окружения или собственные файлы. См. его FAQ для получения дополнительной информации.

Среди других параметров (см. ниже) и параметров, описанных для предыдущих режимов, можно использовать следующие.

Примечание

Изменено в версии 1.26.0: Теперь существуют два отдельных бэкенда для сборки, которые могут быть использованы, distutils и meson. Пользователям крайне рекомендуется перейти на meson, так как это значение по умолчанию выше Python 3.12.

Общие флаги сборки:

--backend <backend_type>

Указывает бэкенд сборки для процесса компиляции. Поддерживаемые бэкенды — meson и distutils. Если не указано, по умолчанию используется distutils. В Python 3.12 или выше значение по умолчанию — meson.

--f77flags=<string>

Указывает флаги компилятора F77

--f90flags=<string>

Указывает флаги компилятора F90

--debug

Компилировать с отладочной информацией

-l<libname>

Использовать библиотеку <libname> при линковке.

-D<macro>[=<defn=1>]

Определить макрос <macro> как <defn>.

-U<macro>

Определить макрос <macro>

-I<dir>

Добавить каталог <dir> в список каталогов, просматриваемых при поиске файлов заголовков.

-L<dir>

Добавить каталог <dir> в список каталогов для поиска -l.

Флаги, специфичные для meson:

--dep <dependency> только meson

Указывает зависимость meson для модуля. Это может быть передано несколько раз для нескольких зависимостей. Зависимости хранятся в списке для дальнейшей обработки. Пример: --dep lapack --dep scalapack Это определит «lapack» и «scalapack» как зависимости и удалит их из argv, оставив в списке зависимостей [«lapack», «scalapack»].

Старые флаги distutils:

--help-fcompiler без meson

Список доступных компиляторов Fortran.

--fcompiler=<Vendor> без meson

Указывает тип компилятора Fortran по поставщику.

--f77exec=<path> без meson

Укажите путь к компилятору F77

--f90exec=<path> без meson

Укажите путь к компилятору F90

--opt=<string> без meson

Укажите флаги оптимизации

--arch=<string> без meson

Укажите архитектурно-зависимые флаги оптимизации

--noopt без meson

Компилировать без флагов оптимизации

--noarch без meson

Компилировать без архитектурно-зависимых флагов оптимизации

link-<resource> без meson

Связать модуль расширения с <ресурс>, как определено numpy_distutils/system_info.py. Например, для связи с оптимизированными библиотеками LAPACK (vecLib на macOS, 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).

Изменено в версии 1.26.3: Будет игнорировать -m если предоставлен файл pyf.

--[no-]lower

Преобразовывать [не преобразовывать] регистр символов в <fortran files>. По умолчанию предполагается --lower с переключателем -h, и --no-lower без переключателя -h.

-include<header>

Записывает дополнительные заголовки в C-обёртку, может передаваться несколько раз, каждый раз генерирует #include <header>. Обратите внимание, что это предназначено для передачи в одинарных кавычках без пробелов, например '-include<stdbool.h>'

--build-dir <dirname>

Все созданные F2PY файлы создаются в <dirname>. По умолчанию tempfile.mkdtemp().

--f2cmap <filename>

Загрузить спецификации Fortran-to-C KIND из указанного файла.

--quiet

Работать тихо.

--verbose

Работать с повышенной подробностью.

--skip-empty-wrappers

Не генерировать файлы обёртки, если это не требуется входными данными. Это флаг обратной совместимости для восстановления поведения до 1.22.4.

-v

Вывести версию F2PY и выйти.

Выполните f2py без каких-либо параметров, чтобы получить актуальный список доступных параметров.

Модуль Python numpy.f2py

Предупреждение

Изменено в версии 2.0.0: Раньше существовала функция f2py.compile, которая была удалена. Пользователи могут вручную обернуть python -m numpy.f2py с помощью subprocess.run и задать переменные окружения для взаимодействия с meson по мере необходимости.

При использовании numpy.f2py в качестве модуля, можно вызвать следующие функции.

Генератор интерфейса Fortran-Python.

Copyright 1999 – 2011 Pearu Peterson все права защищены. Copyright 2011 – настоящее время NumPy Developers. Разрешение на использование, модификацию и распространение этого программного обеспечения предоставляется на условиях лицензии NumPy.

НИКАКИХ ГАРАНТИЙ НЕ ВЫРАЖАЕТСЯ И НЕ ПОДРАЗУМЕВАЕТСЯ. ИСПОЛЬЗУЙТЕ НА СВОЙ СТРАХ И РИСК.

numpy.f2py.get_include()[source]

Возвращает директорию, содержащую файлы fortranobject.c и .h.

Примечание

Эта функция не нужна при построении расширения с помощью numpy.distutils напрямую из файлов .f и/или .pyf за один раз.

Модули Python-расширений, созданные с помощью сгенерированного кода f2py, должны использовать fortranobject.c в качестве исходного файла и включать заголовок fortranobject.h. Эта функция может использоваться для получения директории, содержащей оба этих файла.

Возвращает:
include_pathstr

Полный путь к директории, содержащей fortranobject.c и fortranobject.h.

См. также

numpy.get_include

Функция, возвращающая директорию включения NumPy

Примечания

Введено в версии 1.21.1.

Если система сборки, которую вы используете, не поддерживает f2py, построение Python-расширения с помощью файла подписи .pyf - двухэтапный процесс. Для модуля mymod:

  • Шаг 1: Запустите python -m numpy.f2py mymod.pyf --quiet. Это сгенерирует файлы mymodmodule.c и (при необходимости) mymod-f2pywrappers.f рядом с mymod.pyf.
  • Шаг 2: Соберите свой модуль Python-расширения. Для этого потребуются следующие исходные файлы:

    • mymodmodule.c
    • mymod-f2pywrappers.f (если он был сгенерирован на шаге 1)
    • fortranobject.c
numpy.f2py.run_main(comline_list)[source]

Эквивалентно выполнению:

f2py <args>

где <args>=string.join(<list>,' '), но в Python. Если не используется -h, эта функция возвращает словарь, содержащий информацию о сгенерированных модулях и их зависимостях от исходных файлов.

Вы не можете создавать модули расширений с помощью этой функции, то есть использование -c запрещено. Используйте команду compile.

Примеры

Команда f2py -m scalar scalar.f может быть выполнена из Python следующим образом.

>>> 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']}}

Автоматическое создание модулей расширения

Если вы хотите распространять свой модуль расширения f2py, вам нужно только включить файл .pyf и Fortran-код. Расширения distutils в NumPy позволяют определять модуль расширения полностью в терминах этого файла интерфейса. Действительный файл setup.py, позволяющий распространять модуль add.f (как часть пакета f2py_examples, чтобы он загружался как f2py_examples.add) выглядит так:

def configuration(parent_package='', top_path=None)
    from numpy.distutils.misc_util import Configuration
    config = Configuration('f2py_examples',parent_package, top_path)
    config.add_extension('add', sources=['add.pyf','add.f'])
    return config

if __name__ == '__main__':
    from numpy.distutils.core import setup
    setup(**configuration(top_path='').todict())

Установка нового пакета проста с помощью:

pip install .

предполагая, что у вас есть соответствующие разрешения на запись в каталог site-packages основного каталога для используемой версии Python. Для работы полученного пакета необходимо создать файл с именем __init__.py (в той же директории, что и add.pyf). Обратите внимание, что модуль расширения определен полностью в терминах файлов add.pyf и add.f . Преобразование файла .pyf в файл .c обрабатывается numpy.distutils.

© 2005–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/f2py/usage.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API