Skip to content

Rules for cumsum#573

Merged
mcabbott merged 4 commits intoJuliaDiff:mainfrom
mcabbott:cumsum
Jan 19, 2022
Merged

Rules for cumsum#573
mcabbott merged 4 commits intoJuliaDiff:mainfrom
mcabbott:cumsum

Conversation

@mcabbott
Copy link
Member

No description provided.

##### `cumsum`
#####

function frule((_, xdot), ::typeof(cumsum), x::AbstractArray; dims::Integer)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps an frule for cumsum! here as well?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are forward rlues for mutating functions safe? I haven't thought that through.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For reverse mode, #521 has thorny examples.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, I believe so, since the primal and tangent are mutated simultaneously. We already have several frules for mutating functions. See e.g. https://github.com/JuliaDiff/ChainRules.jl/blob/main/src/rulesets/LinearAlgebra/factorization.jl.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, nice.

Then someone should do a big PR adding this to half the Base functions, right? sum! and circshift! et. al.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Must we define methods like cumsum!([0,0,0], ZeroTangent())?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hm, not certain. @oxinabox didn't we decide at some point that it's up to the AD to handle cases where all (co)tangents are zero tangents?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess we can solve this when or if it comes up.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah we expect the AD to handle cases in reverse mode when inputs are all ZeroTangent.
For forwards mode, i would need to think more, but i think even with mutation https://en.wikipedia.org/wiki/Nothing_comes_from_nothing

We can absolutely add fixes as things come up.

Copy link
Member

@oxinabox oxinabox left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I dod not understand by what way this works, but the tests show it does

Co-authored-by: Lyndon White <oxinabox@ucc.asn.au>
@mcabbott mcabbott merged commit 335d025 into JuliaDiff:main Jan 19, 2022
@mcabbott mcabbott deleted the cumsum branch January 19, 2022 15:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants