Spec-Zone.ru › NumPy 2.0

F2PY и системы сборки

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

Изменено в версии NumPy: 1.26.x

По умолчанию система сборки для f2py традиционно реализовывалась с помощью расширенного модуля numpy.distutils. Этот модуль основан на distutils, который был удалён в Python 3.12.0 в октябре 2023 года. Как и остальная часть NumPy и SciPy, f2py теперь использует meson, см. Состояние numpy.distutils и рекомендации по миграции для получения более подробной информации.

Все изменения в f2py тестируются на SciPy, поэтому их настройка CI всегда поддерживается.

Примечание

См. 1 Миграция на meson для информации о миграции.

Основные понятия

Создание модуля расширения, включающего Python и Fortran, состоит из:

  • Исходный(е) файл(ы) Fortran
  • Один или несколько сгенерированных файлов из f2py

    • Файл оболочки C всегда создается
    • Код с модулями требует дополнительной оболочки .f90
    • Код с функциями генерирует дополнительную оболочку .f
  • fortranobject.{c,h}

    • Распространяется с numpy
    • Можно запросить через python -c "import numpy.f2py; print(numpy.f2py.get_include())"
  • Заголовки NumPy

    • Можно запросить через python -c "import numpy; print(numpy.get_include())"
  • Библиотеки Python и заголовки разработки

В общих чертах, при рассмотрении выходных данных f2py возникает три случая:

Программы Fortran 77
  • Входной файл blah.f
  • Генерирует

    • blahmodule.c
    • blah-f2pywrappers.f

Когда блоки COMMON отсутствуют, генерируется только файл оболочки C . Оболочки также генерируются для переписывания массивов с предполагаемой формой как автоматические массивы.

Программы Fortran 90
  • Входной файл blah.f90
  • Генерирует:

    • blahmodule.c
    • blah-f2pywrappers.f
    • blah-f2pywrappers2.f90

Оболочка f90 используется для обработки кода, разделенного на модули. Оболочка f создает subroutines для functions. Она переписывает массивы с предполагаемой формой как автоматические массивы.

Файлы сигнатур
  • Входной файл blah.pyf
  • Генерирует:

    • blahmodule.c
    • blah-f2pywrappers2.f90 (иногда)
    • blah-f2pywrappers.f (иногда)

Файлы сигнатур .pyf не сигнализируют об используемом стандарте языка через расширение файла, они могут генерировать оболочки F90 и F77 в зависимости от их содержимого; это переносит ответственность проверки сгенерированных файлов на систему сборки.

Изменено в версии NumPy: 1.22.4

f2py будет детерминировано генерировать файлы оболочек на основе стандарт Fortran входного файла (F77 или более поздняя версия). --skip-empty-wrappers можно передать в f2py для восстановления предыдущего поведения, генерируя оболочки только при необходимости.

Теоретически, при соблюдении вышеуказанных требований, любая система сборки может быть адаптирована для создания модулей расширения f2py. Здесь мы рассмотрим подмножество наиболее популярных систем.

Примечание

make не имеет места в современной многоязычной настройке и поэтому более подробно не рассматривается.

Системы сборки

  • Использование через numpy.distutils
    • Расширения для distutils
  • Использование через meson
    • Пошаговое руководство по Фибоначчи (F77)
    • Основные моменты
  • Использование через cmake
    • Пошаговое руководство по Фибоначчи (F77)
  • Использование через scikit-build
    • Пошаговое руководство по Фибоначчи (F77)
  • 1 Миграция на meson
    • 1.1 Базовая версия
    • 1.2 Опции компиляции
    • 1.3 Настройка сборки

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

Spec-Zone.ru

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