issue_comments
21 rows where issue = 807764700 sorted by updated_at descending
This data as json, CSV (advanced)
Suggested facets: reactions, created_at (date), updated_at (date)
issue 1
- add typing to unary and binary arithmetic operators · 21 ✖
id | html_url | issue_url | node_id | user | created_at | updated_at ▲ | author_association | body | reactions | performed_via_github_app | issue |
---|---|---|---|---|---|---|---|---|---|---|---|
819631850 | https://github.com/pydata/xarray/pull/4904#issuecomment-819631850 | https://api.github.com/repos/pydata/xarray/issues/4904 | MDEyOklzc3VlQ29tbWVudDgxOTYzMTg1MA== | max-sixty 5635139 | 2021-04-14T16:01:06Z | 2021-04-14T16:01:06Z | MEMBER | @rhkleijn thanks for the huge effort! We just discussed this on our team call and were universally impressed. |
{ "total_count": 1, "+1": 0, "-1": 0, "laugh": 0, "hooray": 1, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
add typing to unary and binary arithmetic operators 807764700 | |
813277878 | https://github.com/pydata/xarray/pull/4904#issuecomment-813277878 | https://api.github.com/repos/pydata/xarray/issues/4904 | MDEyOklzc3VlQ29tbWVudDgxMzI3Nzg3OA== | rhkleijn 32801740 | 2021-04-05T08:41:24Z | 2021-04-05T08:41:24Z | CONTRIBUTOR | Thanks, there was one more minor merge artifact. Should be fixed now. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
add typing to unary and binary arithmetic operators 807764700 | |
813107460 | https://github.com/pydata/xarray/pull/4904#issuecomment-813107460 | https://api.github.com/repos/pydata/xarray/issues/4904 | MDEyOklzc3VlQ29tbWVudDgxMzEwNzQ2MA== | max-sixty 5635139 | 2021-04-04T22:15:58Z | 2021-04-04T22:20:49Z | MEMBER | FYI I resolved conflicts in GitHub; I may have made a mistake, tests should tell us though |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
add typing to unary and binary arithmetic operators 807764700 | |
813107358 | https://github.com/pydata/xarray/pull/4904#issuecomment-813107358 | https://api.github.com/repos/pydata/xarray/issues/4904 | MDEyOklzc3VlQ29tbWVudDgxMzEwNzM1OA== | pep8speaks 24736507 | 2021-04-04T22:15:04Z | 2021-04-04T22:15:04Z | NONE | Hello @rhkleijn! Thanks for updating this PR. We checked the lines you've touched for PEP 8 issues, and found:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
add typing to unary and binary arithmetic operators 807764700 | |
813106981 | https://github.com/pydata/xarray/pull/4904#issuecomment-813106981 | https://api.github.com/repos/pydata/xarray/issues/4904 | MDEyOklzc3VlQ29tbWVudDgxMzEwNjk4MQ== | max-sixty 5635139 | 2021-04-04T22:12:00Z | 2021-04-04T22:12:00Z | MEMBER | I'll merge this in the next couple of days unless I hear anything! Thanks everyone |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
add typing to unary and binary arithmetic operators 807764700 | |
804260669 | https://github.com/pydata/xarray/pull/4904#issuecomment-804260669 | https://api.github.com/repos/pydata/xarray/issues/4904 | MDEyOklzc3VlQ29tbWVudDgwNDI2MDY2OQ== | max-sixty 5635139 | 2021-03-22T17:39:19Z | 2021-03-22T17:39:19Z | MEMBER | Thanks for having a glance @shoyer . Let us know when it's OK to merge! |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
add typing to unary and binary arithmetic operators 807764700 | |
803034474 | https://github.com/pydata/xarray/pull/4904#issuecomment-803034474 | https://api.github.com/repos/pydata/xarray/issues/4904 | MDEyOklzc3VlQ29tbWVudDgwMzAzNDQ3NA== | shoyer 1217238 | 2021-03-19T18:38:43Z | 2021-03-19T18:38:43Z | MEMBER | I'll have to take a closer look, but overall this looks amazing! Both a nice internal clean-up and a valuable feature for Xarray users. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
add typing to unary and binary arithmetic operators 807764700 | |
802991894 | https://github.com/pydata/xarray/pull/4904#issuecomment-802991894 | https://api.github.com/repos/pydata/xarray/issues/4904 | MDEyOklzc3VlQ29tbWVudDgwMjk5MTg5NA== | max-sixty 5635139 | 2021-03-19T17:24:03Z | 2021-03-19T17:24:03Z | MEMBER | @rhkleijn I missed your last comment, apologies.
That makes sense, and it sounds like you've checked these cases in lots of detail, thank you for all your hard work. If you want, add a comment to the code that references your comments here, so there's some record of the research you've done. (Optional ofc) Let's answer @mathause questions, and then you should feel free to merge unless there are any objections — we may learn more from others using it — and very easy to iterate more from here. |
{ "total_count": 1, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 1, "eyes": 0 } |
add typing to unary and binary arithmetic operators 807764700 | |
799648923 | https://github.com/pydata/xarray/pull/4904#issuecomment-799648923 | https://api.github.com/repos/pydata/xarray/issues/4904 | MDEyOklzc3VlQ29tbWVudDc5OTY0ODkyMw== | rhkleijn 32801740 | 2021-03-15T18:27:18Z | 2021-03-15T19:01:07Z | CONTRIBUTOR |
done
I have tried that but PyCharm would not handle the
If we remove that line, it incorrectly infers the result of
Agreed that this is surprising behaviour. I suspect mypy might have something like an implicit internal rule to fallback to the type of the first operand of a binary operator. That would be consistent with the behaviours of both of the above cases.
I can relate to that. On the other hand, there may also be a pragmatic reason to go the extra mile. If we don't it may result in users thinking xarray's newly added typing is to blame for unexpected type inferences and reporting issues here. When at some point in the future these tools indeed do catch up it is straightforward to adapt the script and regenerate. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
add typing to unary and binary arithmetic operators 807764700 | |
798798781 | https://github.com/pydata/xarray/pull/4904#issuecomment-798798781 | https://api.github.com/repos/pydata/xarray/issues/4904 | MDEyOklzc3VlQ29tbWVudDc5ODc5ODc4MQ== | max-sixty 5635139 | 2021-03-13T23:00:09Z | 2021-03-13T23:00:09Z | MEMBER | Thanks a lot for the full response! I forgot to reply to one question of yours — let's use this PR, if you want to replace the current code with the
Ofc, I see, there's no type information in the
Thanks for the comments — even better to have them in the code. I still have one question — if we remove a line like this, does mypy not recognize it can use the method on a
That's surprising — I wonder where it's getting that information from. I would have expected that it wouldn't be able to find any compatible implementation of a
I would vote not to prioritize a tool if it's not compatible — this code will last for a long time, and I expect PyCharm will catch up to the language specs soon.
Great, thank you |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
add typing to unary and binary arithmetic operators 807764700 | |
798793062 | https://github.com/pydata/xarray/pull/4904#issuecomment-798793062 | https://api.github.com/repos/pydata/xarray/issues/4904 | MDEyOklzc3VlQ29tbWVudDc5ODc5MzA2Mg== | rhkleijn 32801740 | 2021-03-13T22:07:41Z | 2021-03-13T22:07:41Z | CONTRIBUTOR |
thanks!
It takes precedence only during type checking as the source for static type information. The generated
There seem to be quite some open issues here with no indication they currently are actively working on fixing them. I am not using PyCharm myself, but as it is widely used I would also expect quite some xarray users to be using it.
For these unary ops with simple type hints if would probably work but for most other methods with multiple overloads the typing ecosystem is not yet mature enough. In this issue I have commented on it. I hope one day we will be able to refactor this into some generic parent classes (one for unary ops, one for binary (and reflexive) ops and one for inplace ops) from which we can inherit. Using a generic parent class only for the unary ops and not for the others would make the script more complicated. For now, I'd say this somewhat low-tech solution gets the job done.
Unfortunately we have to define them both ways for typing purposes. This comment in Note: in some of the overloads below the return value in reality is NotImplemented,which cannot accurately be expressed with type hints,e.g. Literal[NotImplemented]or type(NotImplemented) are not allowed and NoReturn has a different meaning.In such cases we are lending the type checkers a hand by specifying the return typeof the corresponding reflexive method on
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
add typing to unary and binary arithmetic operators 807764700 | |
798777531 | https://github.com/pydata/xarray/pull/4904#issuecomment-798777531 | https://api.github.com/repos/pydata/xarray/issues/4904 | MDEyOklzc3VlQ29tbWVudDc5ODc3NzUzMQ== | max-sixty 5635139 | 2021-03-13T20:06:26Z | 2021-03-13T20:06:26Z | MEMBER | The I have a few questions, but they don't need to hold back merging — if others agree — in particular on the
And here we have both a Using python to template the methods works pretty well! Better than I would have expected relative to a templating library like jinja. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
add typing to unary and binary arithmetic operators 807764700 | |
798771631 | https://github.com/pydata/xarray/pull/4904#issuecomment-798771631 | https://api.github.com/repos/pydata/xarray/issues/4904 | MDEyOklzc3VlQ29tbWVudDc5ODc3MTYzMQ== | rhkleijn 32801740 | 2021-03-13T19:24:08Z | 2021-03-13T19:25:00Z | CONTRIBUTOR | You can now view the branch I mentioned in my previous message at https://github.com/pydata/xarray/compare/master...rhkleijn:gen-ops . It would get rid of the need for dynamically generating (injecting) unary and binary operators at runtime. Note that its script generates both the module containing the arithmetic methods and its accompanying stub file. This setup turned out to be more robust than both:
In all cases mypy and pylance work nicely. I prefer the Also, I am not sure what to do with the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
add typing to unary and binary arithmetic operators 807764700 | |
790995670 | https://github.com/pydata/xarray/pull/4904#issuecomment-790995670 | https://api.github.com/repos/pydata/xarray/issues/4904 | MDEyOklzc3VlQ29tbWVudDc5MDk5NTY3MA== | rhkleijn 32801740 | 2021-03-04T22:39:14Z | 2021-03-04T22:39:14Z | CONTRIBUTOR |
Done
Locally it seems to work fine. Let's see what happens in CI now.
Not yet. I am working on generating the methods themselves on a local branch. It required changing all |
{ "total_count": 1, "+1": 1, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
add typing to unary and binary arithmetic operators 807764700 | |
790048960 | https://github.com/pydata/xarray/pull/4904#issuecomment-790048960 | https://api.github.com/repos/pydata/xarray/issues/4904 | MDEyOklzc3VlQ29tbWVudDc5MDA0ODk2MA== | max-sixty 5635139 | 2021-03-03T20:56:09Z | 2021-03-03T20:56:09Z | MEMBER | @rhkleijn I'm a bit late to respond here, but that could be really excellent IMO, I'd be really interested to see that working. Let me know if there's anything from my end that would be helpful. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
add typing to unary and binary arithmetic operators 807764700 | |
789898568 | https://github.com/pydata/xarray/pull/4904#issuecomment-789898568 | https://api.github.com/repos/pydata/xarray/issues/4904 | MDEyOklzc3VlQ29tbWVudDc4OTg5ODU2OA== | mathause 10194086 | 2021-03-03T17:13:08Z | 2021-03-03T17:13:08Z | MEMBER | Just FYI #4881 and #4878 are done |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
add typing to unary and binary arithmetic operators 807764700 | |
779710237 | https://github.com/pydata/xarray/pull/4904#issuecomment-779710237 | https://api.github.com/repos/pydata/xarray/issues/4904 | MDEyOklzc3VlQ29tbWVudDc3OTcxMDIzNw== | mathause 10194086 | 2021-02-16T09:37:55Z | 2021-02-16T09:37:55Z | MEMBER | Thanks for your thought-out answer. That all sounds good to me.
So that works now? I remember vaguely that @max-sixty (?) had an issue with this pattern once.
I vote for
Yes, I think that's a problem of the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
add typing to unary and binary arithmetic operators 807764700 | |
779404893 | https://github.com/pydata/xarray/pull/4904#issuecomment-779404893 | https://api.github.com/repos/pydata/xarray/issues/4904 | MDEyOklzc3VlQ29tbWVudDc3OTQwNDg5Mw== | rhkleijn 32801740 | 2021-02-15T19:10:56Z | 2021-02-15T19:10:56Z | CONTRIBUTOR |
I agree. Both PRs you mention would be nice to see merged. I was still using numpy 1.19.
I usually prefer inline type hints. The motivation for stub files was mostly because all other approaches I tried where not sufficient, see my comment in #4054. It turns out we might not even need a stub file, see my reply above to max-sixty's comments.
That is correct. It can currently be considered a mixin class during type checking and a no-op at compile and runtime. If I can get max-sixty's suggestion to work, then we would quite literally be following up on that TODO by using mixin classes instead of the unintuitive "inject" functions.
Those are mypy warning for overlapping overload signatures with incompatible return types. In practice it is not a problem as the first matching overload gets picked. One reason for overlapping is that with numpy <=1.20
Agreed. What name would work in this case? Something like
I think it would be nice to allow some simple kinds of subclassing (some (many?) methods already preserve the subclass in the return value but the type hint mentions the base class as return type). The particular use case I have in mind involves having a custom Accessor registered with ``` import xarray as xr if TYPE_CHECKING: class Dataset(xr.Dataset): myaccessor: MyAccessor else: Dataset = xr.Dataset # note that at runtime we just work with xr.Dataset ds = Dataset(...) ds2 = (ds + 1).sel(x=1) # some operations (ideally preserving subclass!) In the line below I would like my IDE to be able to show me the docstrings,methods signatures and typing information for
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
add typing to unary and binary arithmetic operators 807764700 | |
779295725 | https://github.com/pydata/xarray/pull/4904#issuecomment-779295725 | https://api.github.com/repos/pydata/xarray/issues/4904 | MDEyOklzc3VlQ29tbWVudDc3OTI5NTcyNQ== | rhkleijn 32801740 | 2021-02-15T15:30:51Z | 2021-02-15T15:30:51Z | CONTRIBUTOR |
I did not consider it but that is a very promising idea. It is probably feasible to adapt the script to generate the methods themselves together with their type hints into a regular Python module instead of a stub file. I will give it a try this week. It would have the same disadvantage of needing the script for generating the file. There are several advantages: the stub file approach which may feel a bit odd would not even be necessary, it could replace the current injection logic, implementation and type hints would be in a single place and it could simplify the class hierarchy a bit.
The mypy documentation states that if a directory contains both a .py and a .pyi file for the same module, the .pyi file takes precedence. It is my understanding that stub files work on a file by file basis and you cannot mix them for a single file. There should be no interactions here, as a _typed_ops.py module doesn't even exist in this case, only the _typed_ops.pyi stub file. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
add typing to unary and binary arithmetic operators 807764700 | |
778842603 | https://github.com/pydata/xarray/pull/4904#issuecomment-778842603 | https://api.github.com/repos/pydata/xarray/issues/4904 | MDEyOklzc3VlQ29tbWVudDc3ODg0MjYwMw== | mathause 10194086 | 2021-02-14T21:12:02Z | 2021-02-14T21:12:02Z | MEMBER | Thanks for the PR & your work. I'll need some time to digest that all... One thing I certainly would like to fix before merging this is #4881 (and merge #4878). I'd also be interested in your motivation for the stub files. (It's just that we don't have any of these so far). I am sure you saw this comment: so there would be an argument to create mixin-classes*. Another motivation would be that currently (with the * Well I just realised that your stub files are kind of mixin classes...
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
add typing to unary and binary arithmetic operators 807764700 | |
778706122 | https://github.com/pydata/xarray/pull/4904#issuecomment-778706122 | https://api.github.com/repos/pydata/xarray/issues/4904 | MDEyOklzc3VlQ29tbWVudDc3ODcwNjEyMg== | max-sixty 5635139 | 2021-02-14T01:38:15Z | 2021-02-14T01:38:15Z | MEMBER | Thanks a lot @rhkleijn , this is very impressive! The results look great. The Did you ever consider replacing the injections with this macro-like approach to writing out the python methods, rather than using the macro to generate the stub files? (I don't bring this up with a view that it's better, but the injections have always seemed awkward) Is there anything we should be aware of around the interactions between stub files and inline definitions? Others will have useful thoughts too, so would be interested to hear from them too. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
add typing to unary and binary arithmetic operators 807764700 |
Advanced export
JSON shape: default, array, newline-delimited, object
CREATE TABLE [issue_comments] ( [html_url] TEXT, [issue_url] TEXT, [id] INTEGER PRIMARY KEY, [node_id] TEXT, [user] INTEGER REFERENCES [users]([id]), [created_at] TEXT, [updated_at] TEXT, [author_association] TEXT, [body] TEXT, [reactions] TEXT, [performed_via_github_app] TEXT, [issue] INTEGER REFERENCES [issues]([id]) ); CREATE INDEX [idx_issue_comments_issue] ON [issue_comments] ([issue]); CREATE INDEX [idx_issue_comments_user] ON [issue_comments] ([user]);
user 5