<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Mar 24, 2020 at 11:43 PM Joshua Wilson <<a href="mailto:josh.craig.wilson@gmail.com">josh.craig.wilson@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">> That is, is this an all-or-nothing thing where as soon as we start, numpy-stubs becomes unusable?<br>
<br>
Until NumPy is made PEP 561 compatible by adding a `py.typed` file,<br>
type checkers will ignore the types in the repo, so in theory you can<br>
avoid the all or nothing. In practice it's maybe trickier because<br>
currently people can use the stubs, but they won't be able to use the<br>
types in the repo until the PEP 561 switch is flipped. So e.g.<br>
currently SciPy pulls the stubs from `numpy-stubs` master, allowing<br>
for a short<br>
<br>
find place where NumPy stubs are lacking -> improve stubs -> improve SciPy types<br>
<br>
loop. If all development moves into the main repo then SciPy is<br>
blocked on it becoming PEP 561 compatible before moving forward. But,<br>
you could complain that I put the cart before the horse with<br>
introducing typing in the SciPy repo before the NumPy types were more<br>
resolved, and that's probably a fair complaint.<br></blockquote><div><br></div><div>I think it makes a lot of sense to add types to SciPy, and then improving numpy-stubs the moment you are blocked on something. This allows for finding relevant issues and iterating quickly.</div><div><br></div><div>Moving things into the main NumPy repo could be done right before branching off 1.19.x, which is still a few months away. Until then there's probably only downsides to moving it into the main repo - it's easier to depend on master of numpy-stubs than on master of numpy in CI and dev workflows.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
> Anyone interested in taking the lead on this?<br>
<br>
Not that I am a core developer or anything, but I am interested in<br>
helping to improve typing in NumPy.<br></blockquote><div><br></div><div>Thanks again Josh!</div><div><br></div><div>Cheers,<br></div><div>Ralf</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
On Tue, Mar 24, 2020 at 11:15 AM Eric Wieser<br>
<<a href="mailto:wieser.eric%2Bnumpy@gmail.com" target="_blank">wieser.eric+numpy@gmail.com</a>> wrote:<br>
><br>
> >  Putting<br>
> > aside ndarray, as more challenging, even annotations for numpy functions<br>
> > and method parameters with built-in types would help, as a start.<br>
><br>
> This is a good idea in principle, but one thing concerns me.<br>
><br>
> If we add type annotations to numpy, does it become an error to have numpy-stubs installed?<br>
> That is, is this an all-or-nothing thing where as soon as we start, numpy-stubs becomes unusable?<br>
><br>
> Eric<br>
><br>
> On Tue, 24 Mar 2020 at 17:28, Roman Yurchak <<a href="mailto:rth.yurchak@gmail.com" target="_blank">rth.yurchak@gmail.com</a>> wrote:<br>
>><br>
>> Thanks for re-starting this discussion, Stephan! I think there is<br>
>> definitely significant interest in this topic:<br>
>> <a href="https://github.com/numpy/numpy/issues/7370" rel="noreferrer" target="_blank">https://github.com/numpy/numpy/issues/7370</a> is the issue with the largest<br>
>> number of user likes in the issue tracker (FWIW).<br>
>><br>
>> Having them in numpy, as opposed to a separate numpy-stubs repository<br>
>> would indeed be ideal from a user perspective. When looking into it in<br>
>> the past, I was never sure how well in sync numpy-stubs was. Putting<br>
>> aside ndarray, as more challenging, even annotations for numpy functions<br>
>> and method parameters with built-in types would help, as a start.<br>
>><br>
>> To add to the previously listed projects that would benefit from this,<br>
>> we are currently considering to start using some (minimal) type<br>
>> annotations in scikit-learn.<br>
>><br>
>> --<br>
>> Roman Yurchak<br>
>><br>
>> On 24/03/2020 18:00, Stephan Hoyer wrote:<br>
>> > When we started numpy-stubs [1] a few years ago, putting type<br>
>> > annotations in NumPy itself seemed premature. We still supported Python<br>
>> > 2, which meant that we would need to use awkward comments for type<br>
>> > annotations.<br>
>> ><br>
>> > Over the past few years, using type annotations has become increasingly<br>
>> > popular, even in the scientific Python stack. For example, off-hand I<br>
>> > know that at least SciPy, pandas and xarray have at least part of their<br>
>> > APIs type annotated. Even without annotations for shapes or dtypes, it<br>
>> > would be valuable to have near complete annotations for NumPy, the<br>
>> > project at the bottom of the scientific stack.<br>
>> ><br>
>> > Unfortunately, numpy-stubs never really took off. I can think of a few<br>
>> > reasons for that:<br>
>> > 1. Missing high level guidance on how to write type annotations,<br>
>> > particularly for how (or if) to annotate particularly dynamic parts of<br>
>> > NumPy (e.g., consider __array_function__), and whether we should<br>
>> > prioritize strictness or faithfulness [2].<br>
>> > 2. We didn't have a good experience for new contributors. Due to the<br>
>> > relatively low level of interest in the project, when a contributor<br>
>> > would occasionally drop in, I often didn't even notice their PR for a<br>
>> > few weeks.<br>
>> > 3. Developing type annotations separately from the main codebase makes<br>
>> > them a little harder to keep in sync. This means that type annotations<br>
>> > couldn't serve their typical purpose of self-documenting code. Part of<br>
>> > this may be necessary for NumPy (due to our use of C extensions), but<br>
>> > large parts of NumPy's user facing APIs are written in Python. We no<br>
>> > longer support Python 2, so at least we no longer need to worry about<br>
>> > putting annotations in comments.<br>
>> ><br>
>> > We eventually could probably use a formal NEP (or several) on how we<br>
>> > want to use type annotations in NumPy, but I think a good first step<br>
>> > would be to think about how to start moving the annotations from<br>
>> > numpy-stubs into numpy proper.<br>
>> ><br>
>> > Any thoughts? Anyone interested in taking the lead on this?<br>
>> ><br>
>> > Cheers,<br>
>> > Stephan<br>
>> ><br>
>> > [1] <a href="https://github.com/numpy/numpy-stubs" rel="noreferrer" target="_blank">https://github.com/numpy/numpy-stubs</a><br>
>> > [2] <a href="https://github.com/numpy/numpy-stubs/issues/12" rel="noreferrer" target="_blank">https://github.com/numpy/numpy-stubs/issues/12</a><br>
>> ><br>
>> > _______________________________________________<br>
>> > NumPy-Discussion mailing list<br>
>> > <a href="mailto:NumPy-Discussion@python.org" target="_blank">NumPy-Discussion@python.org</a><br>
>> > <a href="https://mail.python.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/numpy-discussion</a><br>
>> ><br>
>><br>
>> _______________________________________________<br>
>> NumPy-Discussion mailing list<br>
>> <a href="mailto:NumPy-Discussion@python.org" target="_blank">NumPy-Discussion@python.org</a><br>
>> <a href="https://mail.python.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/numpy-discussion</a><br>
><br>
> _______________________________________________<br>
> NumPy-Discussion mailing list<br>
> <a href="mailto:NumPy-Discussion@python.org" target="_blank">NumPy-Discussion@python.org</a><br>
> <a href="https://mail.python.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/numpy-discussion</a><br>
_______________________________________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@python.org" target="_blank">NumPy-Discussion@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/numpy-discussion</a><br>
</blockquote></div></div>