Here's the code: https://github.com/rmcgibbo/numpy-mypy.

It's not 100% working yet, but it can do simple stuff, like inferring the shape of arrays created from np.zeros(literal_tuple), and fixing out the shape of the result of an indexing operation (i.e. https://github.com/rmcgibbo/numpy-mypy/blob/master/tests/test_indexing.py).

To implement it, I have the beginnings of the stubs that you'd expect, borrowed from https://github.com/machinalis/mypy-data and then revised. Then, on top of that, I wrote some special type-level functions that are implemented inside of a mypy plugin. So, for example,
the stub's signature for np.sum is

def sum(a: ndarray[_S, _D], axis: AxesType=None, dtype: DtypeType=None, out: ndarray=None, keepdims: bool=False) -> ndarray[_InferDtypeWithDefault[_S], _InferNdimsReduction[_D]]: ...

When the stub is applied, the resut's dtype is determined application of the _InferDtypeWithDefault type function, which defaults, as expected, to the dtype of the input array but checks of that was overridden dtype=None kwarg as well. And the _InferNdimsReduction type function has to check the axis and keepdims arguments as well.

It's by no means ready for real users, but I hope this is a useful place to build from. Any feedback or contributions would be appreciated.

-Robert


On Tue, Nov 28, 2017 at 2:04 PM, Stephan Hoyer <shoyer@gmail.com> wrote:
On Tue, Nov 28, 2017 at 5:11 PM Robert T. McGibbon <rmcgibbo@gmail.com> wrote:
I'm strongly in support of this proposal.  Type annotations have really helped me write more correct code.

I started working on numpy type stubs a few months ago. I needed a mypy plugin to support shape-aware functions. Those whole thing is pretty tricky. Still very WIP, but I'll clean them up a little bit and opensource it shortly.

Great to hear -- I'd love to see what this looks like, or hear any lessons you learned from the experience!

Actual experience using and writing such a type checker gives you a valuable perspective to share, as opposed to my speculation.

Cheers,
Stephan

_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@python.org
https://mail.python.org/mailman/listinfo/numpy-discussion




--
-Robert