pythonnumpypython-3.5python-typing

How to use numpy in optional typing


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>.

Solution

  • 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.