-
Notifications
You must be signed in to change notification settings - Fork 5.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support Combined indexing for __getitem__ and __setitem__ #55211
Conversation
…); add getitem unittest for static
你的PR提交成功,感谢你对开源项目的贡献! |
76304a5
to
d6f9a2c
Compare
Sorry to inform you that d6f9a2c's CIs have passed for more than 7 days. To prevent PR conflicts, you need to re-run all CIs manually. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
…le#55211) * WIP: start writing combined indexing get * list/tuple/Variable * getitem 80% * add setitem * add some unittest for setitem * lazy import * fix some setitem error * fix advance indexing with decreasing axes; fix strided_slice input name * combine int-tensor getitem is ok (without boolean support & broadcast); add getitem unittest for static * add broadcast & parse bool tensor for __getitem * [change getitem] _getitem_impl_ to _getitem_static, not deleting the former one * refine new getitem; fix ut in variable/var_base * add __getitem__ ut in dygraph * re-dispatch getitem for Py/CPP; fix strided_slice decrease axes error in dygraph * fix ut; support tensor in slice * [change setitem] _setitem_impl_ to _setitem_static, not deleting the former one * remove some UT (for some, temporarily) * add IndexError to solve timeout problem in static-mode * 1.temply forbideen all-False bool-indexput; 2.setitem_static will return new variable * xpu uses old stratege * rename dy2st setitem ut to avoid same-name problem * dy2st for new combined index * ut case for combine-index with dy2st * open ut with all-false-bool setitem * remove useless doc and _getitem_impl_ * change static res * fix static xpu
…le#55211) * WIP: start writing combined indexing get * list/tuple/Variable * getitem 80% * add setitem * add some unittest for setitem * lazy import * fix some setitem error * fix advance indexing with decreasing axes; fix strided_slice input name * combine int-tensor getitem is ok (without boolean support & broadcast); add getitem unittest for static * add broadcast & parse bool tensor for __getitem * [change getitem] _getitem_impl_ to _getitem_static, not deleting the former one * refine new getitem; fix ut in variable/var_base * add __getitem__ ut in dygraph * re-dispatch getitem for Py/CPP; fix strided_slice decrease axes error in dygraph * fix ut; support tensor in slice * [change setitem] _setitem_impl_ to _setitem_static, not deleting the former one * remove some UT (for some, temporarily) * add IndexError to solve timeout problem in static-mode * 1.temply forbideen all-False bool-indexput; 2.setitem_static will return new variable * xpu uses old stratege * rename dy2st setitem ut to avoid same-name problem * dy2st for new combined index * ut case for combine-index with dy2st * open ut with all-false-bool setitem * remove useless doc and _getitem_impl_ * change static res * fix static xpu
PR types
New features
PR changes
APIs
Description
Pcard-66985
Background
At present, the indexing and assignment (i.e.
__getitem__ / __setitem__
) of Paddle are incomplete in combined indexing (basic-indexing and advanced-indexing both appeared). This brings great trouble to build some complex models.__getitem__
, both dynamic and static mode are not supported combined indexing.__setitem__
, combined indexing forward but not backward is supported in dynamic mode; both forward and backward are not supported in static mode.What this PR did
__getitem__
and__setitem__
, with autograd;__getitem__
; e.g.If x.shape=(2,3,4), x[0, ::2, 1].shape will be [2], while currently outputs [1,2,1], incorrectly
__setitem__
, usingindex_put
instead of earliergather_nd -> elementwise_sub -> scatter_nd_add
orreshape-> elementwise_mul / reduce_sum -> stack -> scatter -> reshape
.