Spec-Zone.ru › NumPy 1.20

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

    Связать модуль расширения с <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++.

    При построении модуля расширения может потребоваться сочетание следующих макросов для компиляторов Fortran, отличных от gcc:

    -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.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', full_output=False) [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.

full_outputbool, optional

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

Добавлена в версии 1.20.0.

Возвращаемое значение
resultint or 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!

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

Spec-Zone.ru

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