Quando faço uma multiplicação de matrizes com numpy
(Python 3.12.1, numpy 1.26.4, PyCharm 2024.3.1 (Professional Edition)), recebo este aviso que acredito estar errado:
Referência de atributo não resolvida 'all' para a classe 'bool'
Exemplo Mínimo Reproduzível
import numpy as np
a_matrix = np.array([[1, 2], [3, 4]])
b_matrix = np.array([[10], [20]])
a = [5.0]
b = [2.0]
if ((a_matrix @ np.array([[round(a[0], 0)], [round(b[0], 0)]])) == b_matrix).all():
print("Success")
O problema é com o
==
operador. Parece que anumpy
definição de classe nanumpy
biblioteca especifica que ela retorna atyping.Any
com uma dica de tipo, então o pycharm assume que era o tipo de retorno usual debuiltins.bool
.Aqui está a linha da
numpy
biblioteca que o pycharm está usando, copiada para contexto e posteridade e abreviada para os componentes principais por brevidade:Confirmei que a
typing.Any
dica causa esse problema criando uma classe personalizada e vendo o que a dica do tipo de retorno sugeria e ela correspondia exatamente. Este código roda sem erros pelo mesmo motivo que o seu, ele retorna umnumpy.ndarray
que suporta o.all
método.Reorganizar não elimina o problema, mas o torna mais óbvio para a próxima pessoa que vier verificar seu código com um verificador de tipo estático, indicando claramente qual você espera que seja o tipo de retorno dessa operação.
Depende de você considerar isso um erro do PyCharm ao assumir que o tipo de retorno
typing.Any
é abuiltins.bool
ou se é umnumpy
erro ao sugerirtyping.Any
um erro==
entre doisnumpy.ndarray
.Isso já foi discutido na
numpy
comunidade antes. Aqui está o que parece ser a discussão principal sobre o tópico .