Spec-Zone.ru › NumPy 1.21

Использование 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:

  1. Для сканирования исходных файлов 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

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

  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>
    

    Оператор 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.

  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 для поиска сигнатур процедур.

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

    --help-fcompiler

    Показать доступные компиляторы Fortran.

    --help-compiler [устаревшая]

    Показать доступные компиляторы Fortran.

    --fcompiler=<Vendor>

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

    --f77exec=<path>

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

    --fcompiler-exec=<path> [устаревшая]

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

    --f90exec=<path>

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

    --f90compiler-exec=<path> [устаревшая]

    Указать путь к компилятору 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>. По умолчанию предполагается --lower с включенным переключателем -h, и --no-lower без переключателя -h.

--build-dir <dirname>

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

--quiet

Выполнять в беззвучном режиме.

--verbose

Выполнять с повышенной детализацией.

-v

Вывести идентификатор версии f2py и выйти.

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

Модуль Python numpy.f2py

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

Текущий Python-интерфейс к модулю f2py не доработан и может быть изменён в будущем.

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

numpy.f2py.compile(source, modulename='untitled', extra_args='', verbose=True, source_fn=None, extension='.f', full_output=False)[source]

Создать модуль расширения из строки исходного кода Fortran 77 с помощью f2py.

Параметры
sourcestr или bytes

Исходный код Fortran модуля/подпрограммы для компиляции

Изменено в версии 1.16.0: Поддерживается как str, так и bytes

modulenamestr, необязательно

Имя скомпилированного модуля Python

extra_argsstr или список, необязательно

Дополнительные параметры, передаваемые в f2py

Изменено в версии 1.16.0: Можно также передать список аргументов.

verbosebool, необязательно

Печать вывода f2py на экран

source_fnstr, необязательно

Имя файла, в который записывается исходный код Fortran. По умолчанию используется временный файл с расширением, заданным параметром extension

extension{‘.f’, ‘.f90’}, необязательно

Расширение имени файла, если source_fn не задано. Расширение указывает, какой стандарт Fortran используется. По умолчанию f, что подразумевает стандарт F77.

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

full_outputbool, необязательно

Если True, возвращает subprocess.CompletedProcess объект, содержащий stdout и stderr процесса компиляции, вместо просто кода состояния.

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

Возвращаемое значение
resultint или subprocess.CompletedProcess

0 при успехе или subprocess.CompletedProcess объект, если full_output=True

Примеры

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

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

Spec-Zone.ru

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