Thanks for the update, Daniel. The Py 2.x compatible alternatives, > def hello(r, c=5): > # type: (int, int) -> str …
are neat, and I didn’t know about these. Although, I must say that > def hello(r, c=5): > # type: (int, int) -> str … is a tad more useful, for example, in Jupyter Notebooks/IPython regarding the shift-tab function help. However, I’d say that your suggestion is the best bet for now to maintain Py 2.x compatibility (until 2020 maybe :P). Cheers, Sebastian > On Jul 29, 2016, at 12:55 PM, Daniel Moisset <dmois...@machinalis.com> wrote: > > @Andreas, @Gael: > > This indeed is something that could be included in the CI, and you could > ensure that the annotations have both internal consistency (i.e., what they > say matches what the implementation is doing) and external consistency (the > way callers are using it matches the way they call it). > > To clarify a bit, there are 2 things involved here: > > * PEP-484 provides a standard way to add anotations. Those have some syntax > but it's just metadata that gets stored but have no effect whatsoever on > runtime, kind of like a structured docstring. These have no protection by > themselves against bitrot (in the same way that docstrings may rot) > * mypy is a tool that can be run on a linter, it parses the code and the > annotations, and verify that there's consistency. It's something that you can > use on CI or whle developer (comparable to a linter like flake8, but doing a > deeper analysis). > > The annotations described by PEP484 is "gradual" (you don't have to cover the > whole code, only the parts where static typing makes sense, and "unchecked" > code is not modified). mypy respects that and also provides a way to silence > the checker for situations where the type system is oversensitive but you > know you're right (similar to flake8's "# noqa"). > > @Sebastian > > I had heard the podcast and it makes a very strong argument argument for > using it, thanks for recommending it (people in dropbox are using this on > their production codebase). > > I do believe that end users will start getting benefits from this that are > stronger than docstrings, specially when this tooling starts to get > integrated in code editors (pycharm is already doing this) so they can get > inline checking and detection of errors when they call the scikit-learn API, > and better context-aware completion. That's not counting those users that > want to use mypy in their own codebases and would get a better advantage if > SKL supported it (that's the situation I am in, together with some > colleagues). > > Regarding syntax, if we add inline annotations (which IMO is the best path > forward if they have a chance of getting integrated), the only option is > using the 2.x compatible annotations (which are comments). That one is > different to your 2 examples, that would be: > > def hello(r, c=5): > # type: (int, int) -> str > s = 'hello' > return '(%d + %d) times %s' % (r, c, s) > > (note that your " # type: str" is valid but not required, given that s can > be obviously inferred to be a string) > > Another possible syntax (both are valid, this one makes sense for longer > signatures) is: > > def hello(r, # type: int > c=5): > # type: (...) -> str > s = 'hello' > return '(%d + %d) times %s' % (r, c, s) > > (in this case there's again no need to specify a type for c given that it can > be inferred as an int) > > These 2 variants work well in 2.x and 3.x > > Best, > D. > > P.S.: In my last email I forgot to put this link describing some of the > things that I've found on real code > http://www.machinalis.com/blog/a-day-with-mypy-part-1/ > > > > On Thu, Jul 28, 2016 at 5:49 PM, Andreas Mueller <t3k...@gmail.com> wrote: > > > On 07/28/2016 12:43 PM, Gael Varoquaux wrote: > On Thu, Jul 28, 2016 at 12:04:48PM -0400, Andreas Mueller wrote: > If you find some bugs with the annotations and mypy, that would probably > prove its value to some degree [and if you don't, I might be inclined to > argue it's not working well ;] > Joel, Olivier, Gael, anyone else?: opinions? > The only reserve that I might have is with regards to the maintainability > of these annotation. I am afraid that they coderot. > > Daniel, any comments on that concern? > We can put mypy in the CI, right? Shouldn't that prevent it from rotting? > [I don't actually know. Daniel?] > > _______________________________________________ > scikit-learn mailing list > scikit-learn@python.org > https://mail.python.org/mailman/listinfo/scikit-learn > > > > -- > Daniel F. Moisset - UK Country Manager > www.machinalis.com > Skype: @dmoisset > _______________________________________________ > scikit-learn mailing list > scikit-learn@python.org > https://mail.python.org/mailman/listinfo/scikit-learn _______________________________________________ scikit-learn mailing list scikit-learn@python.org https://mail.python.org/mailman/listinfo/scikit-learn