Este código
import numba
import numpy
@numba.jit
def test(*coeffs):
poly = numpy.polynomial.polynomial.Polynomial(coeffs)
return poly(10)
c = (2,1)
test(*c)
Gera o erro
No implementation of function Function(<class 'numpy.polynomial.polynomial.Polynomial'>) found for signature:
>>> Polynomial(UniTuple(int64 x 2))
There are 2 candidate implementations:
- Of which 2 did not match due to:
Overload of function 'Polynomial': File: numba\core\extending.py: Line 40.
With argument(s): '(UniTuple(int64 x 2))':
No match.
During: resolving callee type: Function(<class 'numpy.polynomial.polynomial.Polynomial'>)
During: typing of call at <ipython-input-22-2355bd6d2aa0> (7)
File "<ipython-input-22-2355bd6d2aa0>", line 7:
def test(*coeffs):
poly = numpy.polynomial.polynomial.Polynomial(coeffs)
^
Isso ocorre apesar de estar na versão 0.60 do numba, que deve suportar a nova API polinomial numpynumpy.polynomial.polynomial.Polynomial
Primeiro, você precisa converter essa tupla em um array, assim:
No entanto, isso ainda não funciona. Dá o seguinte erro:
Lendo o código-fonte do Numba e o teste associado a ele, não acho que eles signifiquem que ele suporta os métodos do Polinômio. Em vez disso, ele apenas suporta a construção e o retorno de um objeto Polinomial. O
__call__
método Polinomial não é suportado.Como alternativa, você poderia avaliar o polinômio usando
polyval()
.Exemplo: