Примечания к выпуску NumPy 2.4.0#
Выпуск NumPy 2.4.0 продолжает работу по улучшению поддержки свободно-поточного Python, реализации пользовательских типов данных и аннотаций. Также есть много устаревших устареваний и исправлений ошибок.
Эта версия поддерживает Python версий 3.11-3.14
Основные моменты#
Помимо аннотаций и same_value kwarg, основные моменты версии 2.4 в основном интересны разработчикам нижестоящих проектов. Они должны помочь в реализации новых пользовательских типов данных.
Многочисленные улучшения аннотаций. В частности, интроспекция сигнатур во время выполнения.
Новый
castingkwarg'same_value'для приведения по значению.Новый
PyUFunc_AddLoopsFromSpecфункция, которую можно использовать для добавления пользовательских циклов сортировки с помощьюArrayMethodAPI.Новый
__numpy_dtype__протокол.
Устаревшие функции#
Установка strides атрибут устарел#
Установка атрибута strides теперь устарела, поскольку изменение массива небезопасно, если массив используется совместно, особенно несколькими потоками. В качестве альтернативы можно создать новое представление (без копирования) через:
np.lib.stride_tricks.strided_window_viewесли применимо,np.lib.stride_tricks.as_stridedдля общего случая,или
np.ndarrayконструктор (bufferявляется исходным массивом) для облегченной версии.
(gh-28925)
Позиционные out аргумент для np.maximum, np.minimum устарел#
Передача выходного массива out позиционно в numpy.maximum и
numpy.minimum устарело. Например, np.maximum(a, b, c) будет выдавать предупреждение об устаревании, поскольку c обрабатывается как выходной буфер, а не как третий вход.
Всегда передавайте вывод в ключевой форме, например. np.maximum(a, b,
out=c). Это делает намерение понятным и упрощает аннотации типов.
(gh-29052)
align= должен передаваться как логическое значение в np.dtype()#
При создании нового dtype a VisibleDeprecationWarning будет предоставлено, если
align= не является булевым. Это в основном для предотвращения случайной передачи
флага выравнивания подмассива там, где он не имеет эффекта, например, np.dtype("f8", 3)
вместо np.dtype(("f8", 3)). Мы настоятельно рекомендуем всегда передавать
align= в качестве аргумента ключевого слова.
(gh-29301)
Утилиты управления утверждениями и предупреждениями устарели#
np.testing.assert_warns и np.testing.suppress_warnings устарели. Используйте warnings.catch_warnings, warnings.filterwarnings,
pytest.warns, или pytest.filterwarnings вместо этого.
(gh-29550)
np.fix ожидает устаревания#
The numpy.fix функция будет устаревать в будущих версиях. Рекомендуется использовать numpy.trunc вместо этого, так как она предоставляет ту же функциональность усечения десятичных значений до их целых частей. Статические проверки типов могут уже выдавать предупреждение об использовании numpy.fix.
(gh-30168)
модификация на месте ndarray.shape ожидает устаревания#
Установка ndarray.shape атрибут напрямую будет устаревшим в будущем
выпуске. Вместо изменения формы на месте рекомендуется использовать
numpy.reshape функция. Статические проверки типов могут уже сообщать
предупреждение для присваиваний ndarray.shape.
(gh-30282)
Устаревание numpy.lib.user_array.container#
The numpy.lib.user_array.container класс устарел и будет удалён в будущей версии.
(gh-30284)
Устаревшие устаревания#
Удалены устаревшие MachAr механизм обнаружения во время выполнения.#
(gh-29836)
Вызвать TypeError при попытке преобразовать массив с ndim > 0 к скаляру#
Преобразование массива с ndim > 0 к скаляру было устаревшим в NumPy
1.25. Теперь попытка сделать это вызывает TypeError. Убедитесь, что вы извлекаете
один элемент из вашего массива перед выполнением этой операции.
(gh-29841)
Удалены numpy.linalg.linalg и numpy.fft.helper#
Следующие были устаревшими в NumPy 2.0 и перемещены в частные модули:
numpy.linalg.linalgИспользуйтеnumpy.linalgвместо этого.numpy.fft.helperИспользуйтеnumpy.fftвместо этого.
(gh-29909)
Удалено interpolation параметр из функций квантиля и процентиля#
The interpolation параметр был устаревшим в NumPy 1.22.0 и был удалён из следующих функций:
numpy.percentilenumpy.nanpercentilenumpy.quantilenumpy.nanquantile
Используйте method параметр вместо.
(gh-29973)
Удалено numpy.in1d#
numpy.in1d был устаревшим с NumPy 2.0 и теперь удалён в пользу numpy.isin.
(gh-29978)
Удалено numpy.ndindex.ndincr()#
The ndindex.ndincr() метод был устаревшим с NumPy 1.20 и теперь
удален; используйте next(ndindex) вместо этого.
(gh-29980)
Удалено fix_imports параметр из numpy.save#
The fix_imports Параметр был устаревшим в NumPy 2.1.0 и теперь удалён.
Этот флаг игнорировался с NumPy 1.17 и был нужен только для поддержки
загрузки файлов в Python 2, которые были записаны в Python 3.
(gh-29984)
Удаление четырёх недокументированных ndarray.ctypes методы#
Четыре недокументированных метода ndarray.ctypes объект были удалены:
_ctypes.get_data()(используйте_ctypes.datacount_nonzero_ctypes.get_shape()(используйте_ctypes.shapecount_nonzero_ctypes.get_strides()(используйте_ctypes.stridescount_nonzero_ctypes.get_as_parameter()(используйте_ctypes._as_parameter_count_nonzero
Эти методы устарели с NumPy 1.21.
(gh-29986)
Удалено newshape параметр из numpy.reshape#
The newshape параметр был устаревшим в NumPy 2.1.0 и был
удалён из numpy.reshape. Передайте его позиционно или используйте shape=
в более новых версиях NumPy.
(gh-29994)
Удаление устаревших функций и аргументов#
Следующие давно устаревшие API были удалены:
numpy.trapz— устарело с NumPy 2.0 (2023-08-18). Используйтеnumpy.trapezoidилиscipy.integrateфункции вместо.dispфункция — устарела с релиза 2.0 и больше не функционирует. Используйте собственную функцию печати вместо неё.biasиddofаргументы вnumpy.corrcoef— они не имели эффекта с NumPy 1.10.
(gh-29997)
Удалено delimitor параметр из numpy.ma.mrecords.fromtextfile()#
The delimitor параметр был устаревшим в NumPy 1.22.0 и был
удалён из numpy.ma.mrecords.fromtextfile(). Используйте delimiter вместо этого.
(gh-30021)
numpy.array2string и numpy.sum устаревшие функции окончательно удалены#
Следующие давно устаревшие API были удалены или преобразованы в ошибки:
The
styleпараметр был удален изnumpy.array2string. Этот аргумент не имел эффекта начиная с NumPy 1.14.0. Любые аргументы после него, такие какformatterтеперь сделаны только ключевыми словами.Вызов
np.sum(generator)непосредственно на объекте генератора теперь вызываетTypeError. Это поведение было объявлено устаревшим в NumPy 1.15.0. Используйтеnp.sum(np.fromiter(generator))или pythonsumвстроенная функция вместо.
(gh-30068)
Примечания по совместимости#
C-расширения NumPy начали использовать многофазную инициализацию, как определено в PEP 489. В рамках этого добавлена новая явная проверка, что каждый такой модуль импортируется только один раз за процесс Python. Это имеет побочный эффект, что удаление
numpyизsys.modulesи повторный импорт теперь завершится ошибкойImportError. Это всегда было небезопасно, с неожиданными побочными эффектами, хотя ранее не вызывало ошибку.(gh-29030)
numpy.roundтеперь всегда возвращает копию. Ранее возвращалось представление для целочисленных входных данных дляdecimals >= 0и копия во всех остальных случаях. Это изменение вноситroundв соответствии сceil,floorиtrunc.(gh-29137)
Проверки типов больше не будут принимать вызовы
numpy.arangeсstartв качестве ключевого аргумента. Это было сделано для совместимости со стандартом Array API. Во время выполнения все еще можно использоватьnumpy.arangeсstartв качестве аргумента ключевого слова.(gh-30147)
Макрос NPY_ALIGNMENT_REQUIRED был удален. Макрос был определен в
npy_cpu.hфайл, поэтому может рассматриваться как полупубличный. Как выяснилось, с современными компиляторами и оборудованием почти всегда требуется выравнивание, поэтому numpy больше не использует макрос. Маловероятно, что кто-то его использует, но вы можете захотеть скомпилировать с-Wundefфлаг или эквивалент, чтобы быть уверенным.(gh-29094)
Изменения в C API#
Перечисление NPY_SORTKIND было расширено новыми переменными#
Это представляет интерес, если вы используете PyArray_Sort или PyArray_ArgSort.
Мы изменили семантику старых имён в NPY_SORTKIND enum и
добавлены новые. Изменения обратно совместимы, и перекомпиляция не
требуется. Новые имена, представляющие интерес:
NPY_SORT_DEFAULT– сортировка по умолчанию (то же значение, что иNPY_QUICKSORT)NPY_SORT_STABLE– сортировка должна быть стабильной (то же значение, что иNPY_MERGESORT)NPY_SORT_DESCENDING– сортировка должна быть по убыванию
Семантическое изменение заключается в том, что NPY_HEAPSORT сопоставляется с NPY_QUICKSORT при использовании.
Обратите внимание, что NPY_SORT_DESCENDING еще не реализовано.
(gh-29642)
Новый NPY_DT_get_constant слот для получения констант DType#
Новый слот NPY_DT_get_constant был добавлен в DType API, позволяя
реализациям dtype предоставлять постоянные значения, такие как машинные пределы и
специальные значения. Функция слота имеет сигнатуру:
int get_constant(PyArray_Descr *descr, int constant_id, void *ptr)
Возвращает 1 при успехе, 0 если константа недоступна, или -1 при ошибке. Функция всегда вызывается с удержанным GIL и может записывать в невыровненную память.
Целочисленные константы (помеченные 1 << 16 бит) возвращает npy_intp значения,
в то время как константы с плавающей точкой возвращают значения родного типа dtype.
Реализация этого может использоваться пользовательскими DType для предоставления numpy.finfo значения.
(gh-29836)
Новый PyUFunc_AddLoopsFromSpecs удобная функция была добавлена в C API.#
Эта функция позволяет добавлять несколько циклов ufunc из их спецификаций одним вызовом
используя NULL-терминированный массив PyUFunc_LoopSlot структур. Позволяет регистрировать циклы сортировки и argsorting с использованием нового API ArrayMethod.
(gh-29900)
Новые возможности#
Пусть
np.sizeпринимает несколько осей.(gh-29240)
Расширить
numpy.padпринимать словарь дляpad_widthаргумент.(gh-29273)
'same_value' для приведения по значению#
The casting kwarg теперь имеет 'same_value' опция, которая проверяет фактические
значения могут быть преобразованы туда и обратно без изменения значения. В настоящее время она реализована только в ndarray.astype. Это вызовет ValueError если любое из значений в массиве изменится в результате приведения, включая округление чисел с плавающей точкой или переполнение целых чисел.
(gh-29129)
StringDType поддержка fill_value в numpy.ma.MaskedArray#
Маскированные массивы теперь принимают и сохраняют Python str как их fill_value
при использовании переменной ширины StringDType (тип 'T'), включая
срезы и представления. По умолчанию 'N/A' и может быть переопределён любой допустимой строкой. Это исправляет проблему gh‑29421
и был реализован в pull request gh‑29423.
(gh-29423)
ndmax опция для numpy.array#
The ndmax опция теперь доступна для numpy.arrayОн явно ограничивает максимальное количество измерений, создаваемых из вложенных последовательностей.
Это особенно полезно при создании массивов из объектов, подобных спискам, с dtype=object. По умолчанию NumPy рекурсивно проходит через все уровни вложенности, чтобы создать массив максимально возможной размерности, но такое поведение может быть нежелательным, когда цель — сохранить вложенные структуры как объекты. ndmax Параметр обеспечивает явный контроль над глубиной рекурсии.
# Default behavior: Creates a 2D array
>>> a = np.array([[1, 2], [3, 4]], dtype=object)
>>> a
array([[1, 2],
[3, 4]], dtype=object)
>>> a.shape
(2, 2)
# With ndmax=1: Creates a 1D array
>>> b = np.array([[1, 2], [3, 4]], dtype=object, ndmax=1)
>>> b
array([list([1, 2]), list([3, 4])], dtype=object)
>>> b.shape
(2,)
(gh-29569)
Предупреждение, выдаваемое при использовании where без out#
Ufunc, вызываемые с where маска и без out позиционный или именованный аргумент теперь будет выдавать предупреждение. Это использование часто сбивает с толку пользователей, которые ожидают некоторое значение в выходных позициях, где маска False (ufunc не будет затрагивать эти позиции). Предупреждение можно отключить с помощью out=None.
(gh-29813)
Сортировка и argsort для DType поддерживают API ArrayMethod#
Пользовательские типы данных теперь могут реализовывать пользовательскую сортировку и argsort с использованием
ArrayMethod API. Этот механизм может использоваться вместо
PyArray_ArrFuncs слоты, которые могут быть устаревшими в будущем.
Методы сортировки и argsorting регистрируются путём передачи спецификаций arraymethod,
которые реализуют операции, в новый PyUFunc_AddLoopsFromSpecs
функции. См. ArrayMethod Документация API для подробностей.
(gh-29900)
Новый __numpy_dtype__ protocol#
NumPy теперь имеет новый __numpy_dtype__ протокол. NumPy будет проверять
этот атрибут при преобразовании в тип данных NumPy через np.dtype(obj)
или любой dtype= аргумент.
Проектам-потребителям рекомендуется реализовать это для всех объектов типа dtype,
которые ранее могли использовать .dtype атрибут, который возвращал тип данных NumPy. Мы ожидаем устаревания .dtype в будущем, чтобы предотвратить интерпретацию объектов, подобных массивам, с .dtype атрибут как dtype.
При желании вы можете реализовать __numpy_dtype__ чтобы обеспечить более раннее
предупреждение или ошибку (.dtype игнорируется, если это обнаружено).
(gh-30179)
Улучшения#
Исправление flatiter крайние случаи индексации#
The flatiter объект теперь использует ту же логику подготовки индекса, что и
ndarray, обеспечивая согласованное поведение и исправляя несколько проблем, где
недопустимые индексы ранее принимались или неправильно интерпретировались.
Ключевые исправления и улучшения:
Более строгая проверка индексов
Булевы не-массивные индексы, такие как
arr.flat[[True, True]]были неправильно обработаны какarr.flat[np.array([1, 1], dtype=int)]. Теперь они вызывают ошибку индекса. Обратите внимание, что индексы, соответствующие форме итератора, ожидается, что не будут вызывать ошибку в будущем и будут обрабатываться как обычные булевы индексы. Используйтеnp.asarray(если вы хотите соответствовать этому поведению.) Не-массивные индексы с плавающей точкой также приводились к целым числам и некорректно обрабатывались как
arr.flat[np.array([1.0, 1.0], dtype=int)]. Это теперь устарело и будет удалено в будущей версии.0-мерные булевы индексы, такие как
arr.flat[True]также устарели и будут удалены в будущей версии.
Согласованные типы ошибок:
Некоторые недопустимые
flatiterиндексы, которые ранее вызывалиValueErrorтеперь правильно вызываютIndexError, в соответствии сndarrayповедение.Улучшенные сообщения об ошибках:
Сообщение об ошибке для неподдерживаемых операций индексирования теперь предоставляет более конкретные детали, включая явное перечисление допустимых типов индексов, вместо общего
IndexError: unsupported index operation.
(gh-28590)
Улучшенная обработка ошибок в np.quantile#
np.quantile теперь вызывает ошибки, если:
Все веса равны нулю
По крайней мере один вес
np.nanПо крайней мере один вес
np.inf
(gh-28595)
Улучшено сообщение об ошибке для assert_array_compare#
Сообщение об ошибке, сгенерированное assert_array_compare который используется функциями, такими как assert_allclose, assert_array_less и т.д. теперь также включает информацию
о индексах, на которых утверждение не выполняется.
(gh-29112)
Показать информацию о единицах измерения в __repr__ для datetime64("NaT")#
Когда datetime64 объект является «Не-временем» (NaT), его __repr__ метод теперь включает единицу времени типа datetime64. Это делает его поведение согласованным с поведением timedelta64 объект.
(gh-29396)
Увеличение производительности для скалярных вычислений#
Скорость вычислений на скалярах была улучшена примерно в 6 раз для уфункций, которые принимают только один вход (например np.sin(scalar)), уменьшая разницу в скорости от их math эквиваленты от коэффициента 19 до 3 (скорость для массивов остается неизменной).
(gh-29819)
numpy.finfo Рефакторинг#
The numpy.finfo Класс был полностью переработан для получения констант с плавающей точкой непосредственно из макросов компилятора C, а не вычисления их во время выполнения. Это обеспечивает лучшую точность, совместимость с платформами и исправляет несколько расчётов атрибутов:
Константы, такие как
eps,min,max,smallest_normal, иsmallest_subnormalтеперь берутся непосредственно из стандартных макросов C (FLT_EPSILON,DBL_MIN, и т.д.), обеспечивая корректные значения для платформы.Устаревший
MachArмеханизм обнаружения во время выполнения был удалён.Производные атрибуты были исправлены в соответствии со стандартными определениями:
machepиnegepтеперь используетint(log2(eps));nexpучитывает все шаблоны экспонент;nmantисключает неявный бит; иminexpследует стандартному определению в C.константы longdouble, в частности
smallest_normalтеперь следует определениям стандарта C в соответствии с соответствующей платформой.Добавлена специальная обработка для формата IBM double-double на PowerPC.
Новый набор тестов добавлен в
test_finfo.pyдля проверки всехfinfoсвойства по сравнению с ожидаемыми значениями машинной арифметики для типов float16, float32 и float64.
(gh-29836)
Несколько осей теперь поддерживаются в numpy.trim_zeros#
The axis аргумент numpy.trim_zeros теперь принимает последовательность; например
np.trim_zeros(x, axis=(0, 1)) обрежет нули из многомерного
массива x по осям 0 и 1. Это исправляет проблему
gh‑29945 и был реализован в pull request gh‑29947.
(gh-29947)
Поддержка интроспекции сигнатур во время выполнения значительно улучшена#
Многие функции, классы и методы NumPy, которые ранее вызывали
ValueError при передаче в inspect.signature() теперь возвращают значимые сигнатуры. Это улучшает поддержку проверки типов во время выполнения, автозаполнения в IDE, генерации документации и возможностей интроспекции во время выполнения по всему API NumPy.
Всего обновлено более трехсот классов и функций, включая, но не ограничиваясь, основные классы, такие как ndarray, generic, dtype,
ufunc, broadcast, nditer, и т.д., большинство методов ndarray и
скалярные типы, функции конструкторов массивов (array, empty, arange,
fromiter, и т.д.), все ufuncs, и многие другие часто используемые функции,
включая dot, concat, where, bincount, can_cast, и многие другие.
(gh-30208)
Улучшения и изменения производительности#
Улучшения производительности для np.unique для строковых типов данных#
Хэш-алгоритм для извлечения уникальных значений обеспечивает ускорение на порядок скорости на больших строковых массивах. Во внутреннем тесте с примерно 1 миллиардом строковых элементов хэш-метод np.unique завершился примерно за 33,5 секунды, по сравнению с 498 секундами при сортировочном методе — примерно в 15 раз быстрее для несортированных уникальных операций со строками. Это улучшение значительно сокращает время поиска уникальных значений в очень больших наборах строковых данных.
(gh-28767)
Переписывание np.ndindex используя itertools.product#
The numpy.ndindex функция теперь использует itertools.product внутренне,
обеспечивая значительное улучшение производительности для больших пространств итераций,
сохраняя исходное поведение и интерфейс. Например, для
массива формы (50, 60, 90) NumPy ndindex Тест производительности улучшает производительность в 5.2 раза.
(gh-29165)
Улучшения производительности для np.unique для комплексных dtype#
Хэш-алгоритм для извлечения уникальных значений теперь также поддерживает комплексные dtypes, предлагая заметный прирост производительности.
В наших тестах на массивах complex128 с 200 000 элементов хэш-подход был примерно в 1,4–1,5 раза быстрее, чем базовый подход на основе сортировки, когда было 20% уникальных значений, и примерно в 5 раз быстрее, когда было 0,2% уникальных значений.
(gh-29537)
Изменения#
Умножение между строкой и целым числом теперь вызывает OverflowError вместо MemoryError, если результат умножения создаст строку, слишком большую для представления. Это соответствует поведению Python.
(gh-29060)
Точность
np.quantileиnp.percentileдля 16- и 32-битных данных с плавающей точкой была улучшена.(gh-29105)
unique_values для строковых типов данных может возвращать несортированные данные#
np.unique теперь поддерживает удаление дубликатов на основе хэша для строковых типов данных. Это улучшение расширяет алгоритм хэш-таблицы на байтовые строки ('S'), строки Unicode ('U') и экспериментальный строковый тип данных ('T', StringDType). В результате вызов np.unique() на массиве строк будет использовать более быстрый метод на основе хэша для получения уникальных значений. Обратите внимание, что этот метод на основе хэша не гарантирует, что возвращённые уникальные значения будут отсортированы. Это также работает для массивов StringDType, содержащих None (пропущенные значения), при использовании equal_nan=True (обрабатывая пропущенные значения как равные).
(gh-28767)
Модулировать диспетчеризованные функции процессора x86#
ВАЖНО: Настройка по умолчанию для cpu-baseline на x86 был повышен до x86-64-v2 микроархитектуре. Это можно изменить на none во время сборки
для поддержки старых процессоров, хотя SIMD-оптимизации для процессоров до 2009 года
больше не поддерживаются.
NumPy реорганизовал функции процессоров x86 в группы на основе микроархитектуры вместо отдельных функций, согласуясь со стандартами дистрибутивов Linux и требованиями Google Highway.
Ключевые изменения:
Заменил отдельные функции x86 на уровни микроархитектуры:
X86_V2,X86_V3, иX86_V4Повысил базовый уровень до
X86_V2Улучшено
-поведение оператора для правильного исключения функций-преемников, которые подразумевают исключенную функциюДобавлены перенаправления meson для удаленных имен функций для сохранения обратной совместимости
Удалены обходные пути совместимости компилятора для частичной поддержки функций (например, AVX512 без операций с масками)
Удалены устаревшие функции AMD (XOP, FMA4) и прекращена поддержка Intel Xeon Phi
Новая иерархия групп функций:
Name |
Подразумевает |
Включает |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Эти группы соответствуют поколениям процессоров:
X86_V2: микроархитектуры x86-64-v2 (ЦП с 2009 года)X86_V3: x86-64-v3 микроархитектуры (процессоры с 2015 года)X86_V4: микропроцессорные архитектуры x86-64-v4 (процессоры с поддержкой AVX-512)AVX512_ICL: Intel Ice Lake и аналогичные процессорыAVX512_SPR: Intel Sapphire Rapids и более новые процессоры
Примечание
На 32-битном x86, cx16 исключён из X86_V2.
Документация обновлена с подробностями об использовании этих новых групп функций с текущей системой сборки meson.
(gh-28896)
Исправлена ошибка в matmul для не-последовательного параметра out kwarg#
В некоторых случаях, если out был несмежным, np.matmul может вызвать повреждение памяти
или утверждение на уровне C. Это было новым в v2.3.0 и исправлено в v2.3.1.
(gh-29179)
__array_interface__ с измененным указателем NULL#
Интерфейс массива теперь принимает NULL-указатели (NumPy выполнит своё собственное фиктивное
выделение памяти, хотя). Ранее они некорректно запускали недокументированный
скалярный путь. В маловероятном случае, если скалярный путь действительно был нужен,
вы можете (пока) достичь предыдущего поведения через правильный скалярный путь,
не предоставляя data поля вообще.
(gh-29338)
unique_values для комплексных типов данных может возвращать несортированные данные#
np.unique теперь поддерживает удаление дубликатов на основе хэша для комплексных dtypes. Это улучшение расширяет алгоритм хэш-таблицы на все комплексные типы ('c') и их варианты с расширенной точностью. Метод на основе хэша обеспечивает более быструю выборку уникальных значений, но не гарантирует, что результат будет отсортирован.
(gh-29537)
Сортировка kind='heapsort' теперь отображается в kind='quicksort'#
Маловероятно, что это изменение будет замечено, но если вы заметите изменение во времени выполнения или нестабильный порядок argsort, вероятно, это является причиной. Пожалуйста, сообщите нам, если есть регрессия производительности. Поздравьте нас, если она улучшилась :)
(gh-29642)
numpy.typing.DTypeLike больше не принимает None#
Псевдоним типа numpy.typing.DTypeLike больше не принимает None. Вместо
dtype: DTypeLike = None
теперь должно быть
dtype: DTypeLike | None = None
вместо этого.
(gh-29739)
The npymath и npyrandom библиотеки теперь имеют .lib а не
.a расширение файла на win-arm64 для совместимости сборки с MSVC и setuptools. Обратите внимание, что использование этих статических библиотек не рекомендуется, и для существующих проектов, использующих их, лучше всего использовать их с соответствующим набором инструментов компилятора, который clang-cl на Windows на Arm.
(gh-29750)