Примечания к выпуску NumPy 1.26.0#

Выпуск NumPy 1.26.0 является продолжением цикла выпусков 1.25.x с добавлением поддержки Python 3.12.0. Python 3.12 удалил distutils, следовательно, поддержка потребовала поиска замены для системы сборки на основе setup.py/distutils, которую использовал NumPy. Мы выбрали использование системы сборки Meson вместо этого, и это первый выпуск NumPy, поддерживающий ее. Это также первый выпуск, который поддерживает Cython 3.0 в дополнение к сохранению совместимости с 0.29.X. Поддержка этих двух обновлений была крупным проектом, более 100 файлов были затронуты в этом выпуске. Журнал изменений не отражает полный объем работы, особая благодарность Ralf Gommers, Sayed Adel, Stéfan van der Walt и Matti Picus, которые выполнили большую часть работы в основной ветке разработки.

Основные моменты этого выпуска:

  • Поддержка Python 3.12.0.

  • Совместимость с Cython 3.0.0.

  • Использование системы сборки Meson

  • Обновлённая поддержка SIMD

  • исправления f2py, поддержка meson и bind(x)

  • Поддержка обновлённой библиотеки Accelerate BLAS/LAPACK

Поддерживаемые версии Python в этом выпуске: 3.9-3.12.

Новые возможности#

Поддержка Array API v2022.12 в numpy.array_api#

  • numpy.array_api теперь полностью поддерживает версия v2022.12 стандарта API массивов. Обратите внимание, что это еще не включает опциональный fft расширение в стандарте.

(gh-23789)

Поддержка обновлённой библиотеки Accelerate BLAS/LAPACK#

Добавлена поддержка обновленной библиотеки Accelerate BLAS/LAPACK, включая поддержку ILP64 (64-битные целые числа), в macOS 13.3. Это обеспечивает поддержку arm64 и значительное повышение производительности до 10 раз для часто используемых операций линейной алгебры. При выборе Accelerate во время сборки версия 13.3+ будет автоматически использоваться, если доступна.

(gh-24053)

meson бэкенд для f2py#

f2py в режиме компиляции (т.е. f2py -c) теперь принимает --backend meson опция. Это опция по умолчанию для Python 3.12 и далее. Старые версии по-прежнему будут использовать по умолчанию --backend distutils.

Для поддержки этого в реалистичных случаях использования, в режиме компиляции f2py принимает --dep флаг один или несколько раз, который соответствует dependency() вызывает в meson бэкенд, и ничего не делает в distutils бэкенд.

Нет изменений для пользователей f2py только как генератор кода, т.е. без -c.

(gh-24532)

bind(c) поддержка для f2py#

Как функции, так и подпрограммы могут быть аннотированы с помощью bind(c). f2py будет обрабатывать как правильное сопоставление типов, так и сохранять уникальную метку для других C интерфейсы.

Примечание: bind(c, name = 'routine_name_other_than_fortran_routine') не соблюдается f2py привязки по дизайну, поскольку bind(c) с name предназначен для гарантии только того же имени в C и Fortran, не в Python и Fortran.

(gh-24555)

Улучшения#

iso_c_binding поддержка для f2py#

Ранее пользователям приходилось определять свои собственные пользовательские f2cmap файл для использования сопоставлений типов, определенных Fortran2003 iso_c_binding встроенный модуль. Эти карты типов теперь нативно поддерживаются f2py

(gh-24555)

Изменения в системе сборки#

В этом выпуске NumPy перешёл на Meson в качестве системы сборки и meson-python в качестве бэкенда сборки. Установка NumPy или сборка wheel может быть выполнена с помощью стандартных инструментов, таких как pip и pypa/build. Поддерживаются следующие:

  • Обычные установки: pip install numpy или (в клонированном репозитории) pip install .

  • Сборка wheel-пакета: python -m build (предпочтительно), или pip wheel .

  • Редактируемые установки: pip install -e . --no-build-isolation

  • Сборки для разработки через пользовательский CLI, реализованный с помощью spin: spin build.

Все регулярные pip и pypa/build флаги (например, --no-build-isolation) должен работать как ожидается.

Специфичная для NumPy настройка сборки#

Многие специфичные для NumPy способы настройки сборок изменились. NPY_* переменные окружения, управляющие BLAS/LAPACK, SIMD, многопоточностью и другими подобными опциями, больше не поддерживаются, как и site.cfg файл для выбора BLAS и LAPACK. Вместо этого есть флаги командной строки, которые можно передать в сборку через pip/buildинтерфейс config-settings. Все эти флаги перечислены в meson_options.txt файл в корне репозитория. Подробная документация будет доступна перед финальным релизом 1.26.0; пока что см. документация SciPy «сборка из исходного кода» поскольку большинство настроек сборки работает почти идентично в SciPy, как и в NumPy.

Зависимости сборки#

Хотя зависимости времени выполнения NumPy не изменились, зависимости сборки изменились. Поскольку мы временно включаем Meson и meson-python, появилось несколько новых зависимостей - пожалуйста, ознакомьтесь с [build-system] раздел из pyproject.toml подробности.

Устранение неполадок#

Это изменение системы сборки довольно масштабное. В случае непредвиденных проблем все еще можно использовать setup.py-основанной сборки в качестве временного решения (на Python 3.9-3.11, не 3.12), копируя pyproject.toml.setuppy to pyproject.toml. Однако, пожалуйста, откройте issue с подробностями в трекере проблем NumPy. Мы стремимся отказаться от setup.py сборки как можно скорее, и поэтому хотелось бы видеть все потенциальные блокировки на ранних этапах цикла выпуска 1.26.0.

Участники#

Всего 20 человек внесли вклад в этот выпуск. Люди со знаком «+» рядом с их именами впервые предоставили патч.

  • @DWesl

  • Albert Steppi +

  • Bas van Beek

  • Чарльз Харрис

  • hermedomain

  • Filipe Laíns +

  • Jake Vanderplas

  • Liang Yan +

  • Мартен ван Керквейк

  • Matti Picus

  • Melissa Weber Mendonça

  • Нанами Шанкер

  • Nathan Goldbaum

  • Ralf Gommers

  • Rohit Goswami

  • Sayed Adel

  • Себастьян Берг

  • Stefan van der Walt

  • Tyler Reddy

  • Warren Weckesser

Объединенные pull request'ы#

Всего для этого релиза было объединено 59 pull-запросов.

  • #24305: MAINT: Подготовка ветки 1.26.x для разработки

  • #24308: MAINT: Массовое обновление файлов из основной ветки для numpy 1.26

  • #24322: CI: исправить сборку колес в ветке 1.26.x

  • #24326: BLD: обновить openblas до более новой версии

  • #24327: TYP: Сокращение _NestedSequence.__getitem__ сигнатура

  • #24328: BUG: исправление утечки ссылок в choose

  • #24337: TST: исправление запуска набора тестов в сборках без BLAS/LAPACK

  • #24338: BUG: random: Исправлено генерацию nan распределением Дирихле.

  • #24340: MAINT: Обновления Dependabot из main

  • #24342: MAINT: Вернуть NPY_RUN_MYPY_IN_TESTSUITE=1

  • #24353: MAINT: Обновить extbuild.py из основной ветки.

  • #24356: TST: исправлены тесты distutils для устареваний в последних версиях setuptools…

  • #24375: MAINT: Обновление cibuildwheel до версии 2.15.0

  • #24381: MAINT: Исправить скрипт setup.sh для codespaces

  • #24403: ENH: Включение meson для поддержки сборки с несколькими целями

  • #24404: BLD: включить meson-python для сборки Windows с SIMD…

  • #24405: BLD, SIMD: Реализация диспетчера процессора meson

  • #24406: MAINT: Удалить versioneer

  • #24409: REL: Подготовка к выпуску NumPy 1.26.0b1.

  • #24453: MAINT: Зафиксировать верхнюю версию sphinx.

  • #24455: ENH: Добавить префикс к макросу _ALIGN

  • #24456: BUG: очистка предупреждений [skip azp][skip circle][skip travis][skip…

  • #24460: MAINT: Обновление до spin 0.5

  • #24495: BUG: asv dev был удален, используйте asv run.

  • #24496: BUG: Исправление сбоя сборки meson из-за неизмененного автоматически сгенерированного на месте…

  • #24521: BUG: исправление проблемы со скриптом git-version, требуется shebang для запуска

  • #24522: BUG: Использовать присваивание по умолчанию для git_hash [skip ci]

  • #24524: BUG: исправление обработки ошибок NPY_cast_info в choose

  • #24526: BUG: Исправлена обработка общих блоков в f2py

  • #24541: CI,TYP: Обновление mypy до 1.4.1

  • #24542: BUG: Исправление регрессии f2py с предполагаемой длиной

  • #24544: MAINT: Гармонизация fortranobject

  • #24545: TYP: добавлен аргумент kind в спецификацию типа numpy.isin

  • #24561: BUG: исправление сравнений между маскированными и немаскированными структурированными массивами

  • #24590: CI: Исключить библиотеки импорта из списка DLL на Cygwin.

  • #24591: BLD: исправление _umath_linalg зависимости

  • #24594: MAINT: Прекратить тестирование на ppc64le.

  • #24602: BLD: meson-cpu: исправление поддержки SIMD на платформах без функций

  • #24606: BUG: Изменение Cython binding директива в "False".

  • #24613: УЛУЧШЕНИЕ: Принятие новых интерфейсов BLAS/LAPACK для macOS Accelerate, включая…

  • #24614: DOC: Обновление документации по сборке для использования Meson

  • #24615: TYP: Добавьте недостающий casting ключевое слово для np.clip

  • #24616: TST: преобразовать тест cython из setup.py в meson

  • #24617: MAINT: Исправление fromnumeric.pyi

  • #24622: BUG, ENH: Исправление iso_c_binding карты типов и исправление bind(c)

  • #24629: TYP: Разрешить binary_repr для приёма любого объекта, реализующего…

  • #24630: TYP: Явно объявить dtype и generic хэшируемый

  • #24637: ENH: Рефакторинг тестов "reveal" для типизации с использованием typing.assert_type

  • #24638: MAINT: Обновление actions/checkout с 3.6.0 до 4.0.0

  • #24647: ENH: meson бэкенд для f2py

  • #24648: MAINT: Рефакторинг частичной загрузки Обходное решение для Clang

  • #24653: REL: Подготовка к выпуску NumPy 1.26.0rc1.

  • #24659: BLD: разрешить указание формата long double, чтобы избежать времени выполнения…

  • #24665: BLD: исправление ошибки в расширении random.mtrand, не линковать libnpyrandom

  • #24675: BLD: сборка wheels для 32-битного Python на Windows с использованием MSVC

  • #24700: BLD: исправить проблему с выбором компилятора во время кросс-компиляции

  • #24701: BUG: Исправление обработки оператора данных для комплексных значений в f2py

  • #24707: TYP: Добавлены аннотации для протокола буфера py3.12

  • #24718: DOC: исправить несколько проблем сборки документации на 1.26.x и обновить документация spin