NumPy 1.26.0 發行說明#

NumPy 1.26.0 版本是 1.25.x 版本週期的延續,並加入了 Python 3.12.0 的支援。Python 3.12 捨棄了 distutils,因此,為了支援 Python 3.12,必須為 NumPy 原本使用的 setup.py/distutils 建置系統尋找替代方案。我們選擇改用 Meson 建置系統,而這是第一個支援 Meson 的 NumPy 版本。這也是第一個除了保留 0.29.X 相容性之外,還支援 Cython 3.0 的版本。支援這兩項升級是一項大型專案,此版本中已修改超過 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。

新功能#

numpy.array_api 中支援 Array API v2022.12#

  • numpy.array_api 現在完整支援陣列 API 標準的 v2022.12 版本。請注意,這尚不包含標準中選用的 fft 擴充功能。

(gh-23789)

支援更新的 Accelerate BLAS/LAPACK 函式庫#

已加入對更新的 Accelerate BLAS/LAPACK 函式庫的支援,包括 macOS 13.3 中的 ILP64 (64 位元整數) 支援。這帶來了 arm64 支援,以及常用線性代數運算高達 10 倍的顯著效能提升。如果在建置時選取 Accelerate,則在可用時會自動使用 13.3+ 版本。

(gh-24053)

f2pymeson 後端#

編譯模式中的 f2py (即 f2py -c) 現在接受 --backend meson 選項。這是 Python 3.12 及更新版本的預設選項。舊版本仍預設為 --backend distutils

為了在實際使用案例中支援此功能,在編譯模式中,f2py 接受一次或多次 --dep 旗標,該旗標會對應到 meson 後端中的 dependency() 呼叫,並且在 distutils 後端中不會執行任何動作。

對於僅將 f2py 用作程式碼產生器 (即不含 -c) 的使用者而言,沒有任何變更。

(gh-24532)

f2pybind(c) 支援#

函式和副程式都可以使用 bind(c) 註解。f2py 將處理正確的類型對應,並為其他 C 介面保留唯一標籤。

注意: bind(c, name = 'routine_name_other_than_fortran_routine') 不會被 f2py 綁定接受,這是設計使然,因為帶有 namebind(c) 旨在僅保證 CFortran 中的名稱相同,而不是 PythonFortran 中的名稱相同。

(gh-24555)

改進#

f2pyiso_c_binding 支援#

先前,使用者必須定義自己的自訂 f2cmap 檔案,才能使用 Fortran2003 iso_c_binding 內建模組定義的類型對應。這些類型對應現在已由 f2py 原生支援

(gh-24555)

建置系統變更#

在此版本中,NumPy 已切換至 Meson 作為建置系統,並以 meson-python 作為建置後端。安裝 NumPy 或建置 wheel 可以使用標準工具 (例如 pippypa/build) 完成。以下是支援的項目

  • 常規安裝:pip install numpy 或 (在複製的 repo 中) pip install .

  • 建置 wheel:python -m build (建議) 或 pip wheel .

  • 可編輯安裝:pip install -e . --no-build-isolation

  • 透過使用 spin 實作的自訂 CLI 進行開發建置:spin build

所有常規 pippypa/build 旗標 (例如,--no-build-isolation) 應如預期般運作。

NumPy 特定的建置自訂#

許多 NumPy 特定的建置自訂方式已變更。不再支援控制 BLAS/LAPACK、SIMD、執行緒和其他此類選項的 NPY_* 環境變數,也不再支援用於選取 BLAS 和 LAPACK 的 site.cfg 檔案。取而代之的是,可以使用透過 pip/build 的 config-settings 介面傳遞至建置的命令列旗標。這些旗標都列在 repo 根目錄中的 meson_options.txt 檔案中。詳細文件將在最終 1.26.0 版本發行前提供;目前請參閱 SciPy「從原始碼建置」文件,因為大多數建置自訂在 SciPy 中的運作方式幾乎與 NumPy 相同。

建置依賴性#

雖然 NumPy 的執行階段依賴性沒有變更,但建置依賴性已變更。由於我們暫時供應商 Meson 和 meson-python,因此有幾個新的依賴性 - 請參閱 pyproject.toml[build-system] 區段以取得詳細資訊。

疑難排解#

此建置系統變更相當大。如果發生非預期的問題,仍然可以使用以 setup.py 為基礎的建置作為暫時的解決方法 (在 Python 3.9-3.11 上,而非 3.12 上),方法是將 pyproject.toml.setuppy 複製到 pyproject.toml。但是,請在 NumPy 問題追蹤器中開啟包含詳細資訊的問題。我們的目標是盡快逐步淘汰 setup.py 建置,因此希望在 1.26.0 版本週期初期發現所有潛在的阻礙。

貢獻者#

總共有 20 人為此版本做出貢獻。名稱旁邊有「+」號的人是第一次貢獻修補程式。

  • @DWesl

  • Albert Steppi +

  • Bas van Beek

  • Charles Harris

  • Developer-Ecosystem-Engineering

  • Filipe Laíns +

  • Jake Vanderplas

  • Liang Yan +

  • Marten van Kerkwijk

  • Matti Picus

  • Melissa Weber Mendonça

  • Namami Shanker

  • Nathan Goldbaum

  • Ralf Gommers

  • Rohit Goswami

  • Sayed Adel

  • Sebastian Berg

  • Stefan van der Walt

  • Tyler Reddy

  • Warren Weckesser

合併的提取請求#

此版本總共合併了 59 個提取請求。

  • #24305: MAINT: 為開發準備 1.26.x 分支

  • #24308: MAINT: 從 main 大量更新 numpy 1.26 的檔案

  • #24322: CI: 修復 1.26.x 分支上的 wheel 建置

  • #24326: BLD: 將 openblas 更新至較新版本

  • #24327: TYP: 縮減 _NestedSequence.__getitem__ 簽章

  • #24328: BUG: 修復 choose 參考計數洩漏

  • #24337: TST: 修復在沒有 BLAS/LAPACK 的建置中執行測試套件

  • #24338: BUG: random: 修復 dirichlet 產生 nan 的問題。

  • #24340: MAINT: 來自 main 的 Dependabot 更新

  • #24342: MAINT: 加回 NPY_RUN_MYPY_IN_TESTSUITE=1

  • #24353: MAINT: 從 main 更新 extbuild.py

  • #24356: TST: 修復最近 setuptools 中已棄用的 distutils 測試…

  • #24375: MAINT: 將 cibuildwheel 更新至 2.15.0 版

  • #24381: MAINT: 修復 codespaces setup.sh 腳本

  • #24403: ENH: 供應商 meson 以支援多目標建置

  • #24404: BLD: 供應商 meson-python 以使用 SIMD 進行 Windows 建置…

  • #24405: BLD, SIMD: meson CPU 調度器實作

  • #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: 修復 choose 中的 NPY_cast_info 錯誤處理

  • #24526: BUG: 修復 f2py 中的 common block 處理

  • #24541: CI,TYP: 將 mypy Bump 至 1.4.1

  • #24542: BUG: 修復假定的長度 f2py 迴歸

  • #24544: MAINT: 協調 fortranobject

  • #24545: TYP: 將 kind 引數新增至 numpy.isin 類型規格

  • #24561: BUG: 修復遮罩和未遮罩結構化陣列之間的比較

  • #24590: CI: 從 Cygwin 上的 DLL 清單中排除匯入函式庫。

  • #24591: BLD: 修復 _umath_linalg 依賴性

  • #24594: MAINT: 停止在 ppc64le 上測試。

  • #24602: BLD: meson-cpu: 修復沒有功能的平台上的 SIMD 支援

  • #24606: BUG: 將 Cython binding 指令變更為 “False”。

  • #24613: ENH: 採用新的 macOS Accelerate BLAS/LAPACK 介面,包括…

  • #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: 明確宣告 dtypegeneric 可雜湊

  • #24637: ENH: 使用 typing.assert_type 重構類型「reveal」測試

  • #24638: MAINT: 將 actions/checkout 從 3.6.0 Bump 至 4.0.0

  • #24647: ENH: f2pymeson 後端

  • #24648: MAINT: 重構 Clang 的部分載入因應措施

  • #24653: REL: 準備 NumPy 1.26.0rc1 版本。

  • #24659: BLD: 允許指定 long double 格式以避免執行階段…

  • #24665: BLD: 修復 random.mtrand 擴充功能中的錯誤,請勿連結 libnpyrandom

  • #24675: BLD: 使用 MSVC 建置 Windows 上 32 位元 Python 的 wheel

  • #24700: BLD: 修復交叉編譯期間編譯器選取的問題

  • #24701: BUG: 修復 f2py 中複數值的資料陳述式處理

  • #24707: TYP: 為 py3.12 緩衝區協定新增註解

  • #24718: DOC: 修復 1.26.x 上的一些文件建置問題,並更新 spin 文件