# [Numpy-discussion] Unexpected RuntimeWarning

Bob Dowling rjd4+numpy at cam.ac.uk
Fri Nov 23 06:38:25 EST 2012

```I have a simple function defined in the following snippet:

--- start ---
import numpy

def chebyshev(x, m):
'''Calculates Chebyshev functions of the first kind using the
trigonometric identities.'''

theta = numpy.where(
numpy.abs(x)<=1.0,
numpy.arccos(x),
numpy.arccosh(numpy.abs(x))
)

y = numpy.where(
numpy.abs(x)<=1.0,
numpy.cos(m*theta),
numpy.cosh(m*theta) * numpy.where(
x > 0.0,
1.0,
-1.0
)**m
)

return y

if __name__ == '__main__':
x = numpy.linspace(-2.0, 2.0, 21)
y = chebyshev(x,3)
print(y)

--- end ---

I'm using the numpy.where() call to extract only legal values for the
circular and hyperbolic trigonometric functions.  But I still get
warnings that I'm passing invalid anrguments:

--- start---

\$ python3 demo.py
demo.py:8: RuntimeWarning: invalid value encountered in arccos
numpy.arccos(x),
demo.py:9: RuntimeWarning: invalid value encountered in arccosh
numpy.arccosh(numpy.abs(x))
[ -2.60000000e+01  -1.79280000e+01  -1.15840000e+01  -6.77600000e+00
-3.31200000e+00  -1.00000000e+00   3.52000000e-01   9.36000000e-01
9.44000000e-01   5.68000000e-01  -1.83697020e-16  -5.68000000e-01
-9.44000000e-01  -9.36000000e-01  -3.52000000e-01   1.00000000e+00
3.31200000e+00   6.77600000e+00   1.15840000e+01   1.79280000e+01
2.60000000e+01]

--- end ---

(I get the same with Python 2 so don't get excited about that.)

I'm guessing that numpy.where() is evaluating the complete arccos and
arccosh arrays and therefore getting invalid arguments.

Now, I can turn off the warnings with numpy.seterr(invalid='ignore') but
that's not what I would regard as good practice.

Is there a "numpythonic" way to address the issue?

```