Foi lançado o release da biblioteca Python para computação científica NumPy 2.0.0, voltada para o trabalho com arrays e matrizes multidimensionais, além de fornecer uma vasta coleção de funções com implementação de diversos algoritmos relacionados ao uso de matrizes. O NumPy é uma das bibliotecas mais requisitadas aplicadas em cálculos científicos. O código do projeto foi escrito na linguagem Python com otimizações em C e é distribuído sob a licença BSD.
O NumPy 2.0.0 é marcado como o primeiro lançamento significativo desde 2006.
Na nova versão, além de novos recursos e otimizações de desempenho, houve mudanças no ABI, Python API e C-API, que quebram a compatibilidade retroativa. Por exemplo, a biblioteca SciPy compilada com o NumPy 1.x para funcionar com o NumPy 2.0 exigirá recompilação. Em alguns casos, para usar o NumPy 2.0 em aplicações, pode ser necessário fazer alterações no código.
A maior violação está relacionada à preservação da precisão de expressões escalares; por exemplo, "np.float32(3) + 3" agora retornará um valor do tipo float32, e não float64, enquanto em expressões com múltiplos tipos o tipo com maior precisão será utilizado para o resultado, ou seja, "np.array([3], dtype=np.float32) + np.float64(3)" retornará um valor do tipo float64. Os tipos inteiros usados por padrão na plataforma Windows foram alterados — em sistemas de 64 bits, um tipo inteiro de 64 bits é agora utilizado, enquanto que em sistemas de 32 bits, um tipo de 32 bits é empregado (anteriormente, era um tipo semelhante ao long em C, agora é equivalente a np.intp).
Algumas definições no C-API foram substituídas ou removidas, por exemplo, a estrutura PyArray_Descr foi alterada. O número máximo de dimensões e argumentos, definidos através das macros NPY_MAXDIMS e NPY_MAXARGS, foi aumentado para 64. Todos os tipos complexos foram alterados para usar tipos padrão da especificação C99 (cfloat_t, cdouble_t, clongdouble_t). Uma nova API C para criar seu próprio dtype foi adicionada. Novas funções simplificadas PyArray_ImportNumPyAPI e PyUFunc_ImportUFuncAPI foram propostas.
Na Python API, foi assegurada uma separação mais clara entre APIs públicas e privadas, e uma nova estrutura de módulos foi proposta. Cerca de 100 funções, módulos e constantes foram removidos do espaço de nomes principal "np", marcados como obsoletos ou removidos.
Espaço de nomes np.lib limpo. O número de objetos no espaço de nomes principal foi reduzido em 10%, enquanto no espaço de nomes numpy.lib — em 80%. Mudado para o status de privado no espaço de nomes numpy.core. Alguns métodos foram removidos das classes np.ndarray e np.generic. Criado um novo espaço de nomes numpy.stringsf com operações de string.
Entre as novas funcionalidades, destacam-se o suporte a tipos float32 e longdouble em todas as funções numpy.fft, suporte ao API padrão Array no espaço de nomes principal, um novo espaço de nomes e tipos para strings de comprimento variável. A performance foi otimizada utilizando bibliotecas Intel x86-simd-sort e Google Highway para funções de string como sort, argsort, partition e argpartition, e as operações com strings fixas no módulo numpy.char foram aceleradas. Um novo API adicionado
opt_func_info para rastreamento e introspecção.
Fonte: opennet.ru
