Spec-Zone.ru › NumPy 1.19

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

Spec-Zone.ru

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