How to use numpy in optional typing

Michelrandahl picture Michelrandahl · Feb 11, 2016 · Viewed 8.9k times · Source

Lets say I want to make a function which takes a lambda function (Callable) as parameter where the lambda function takes a vector as input (defined as numpy array or numpy matrix) and returns a new vector. How do I declare the type signature for the Callable with numpy types?

My initial attempt looks something like this:

def some_func(calc_new_vector: Callable[[np.array], np.array], ...other-params...) -> SomeType:
    ...do stuff...
    ...return...

However, this results in an error when running the interpreter:

TypeError: Callable[[arg, ...], result]: each arg must be a type. Got <built-in function array>.

Answer

shx2 picture shx2 · Feb 11, 2016

Confusingly, np.array is a function useful for creating numpy arrays. It isn't the actual type of the arrays created.

The type is np.ndarray.

So, replace np.array with np.ndarray. That should fix the problem.