Seth Axen
Seth Axen
> > Or is the rule you have implemented expected to be more numerically stable? > > I have no idea. The two references we are using do not directly...
Thanks, @Kolaru! I'll review #469 first, then this, then I'll recommend how to proceed.
What I like about this approach is that it completely sidesteps much of the complexity of the objects returned by the `qr` methods, as described in https://github.com/JuliaDiff/ChainRules.jl/pull/469#issuecomment-939147971. What I don't...
> pokes @sethaxen > (I can't really review this) Yeah, sorry, I took the deep dive studying the various QR parameterizations a few weeks back in prep for reviewing this...
So this is a _really_ tricky set of rules to define, perhaps trickier than any of the other rules we have in ChainRules currently. Here are just a few complications:...
This would be useful. Zygote uses this approach in a few places (with `Zygote._pullback`), and it can be convenient. For another example, `^(A::Hermitian, p::Integer)` is almost-differentiable by Zygote. It dispatches...
> Doesn't `Zygote._pullback` still require writing a backward pass explicitly? No it doesn't. At some level you need to hit primitives that have defined adjoints/rrules, but you don't need to...
i.e. this would be the entirety of the `frule` and `rrule` for `Symmetric` and `Hermitian`: ```julia function frule((_, ΔA, _), T::Type{
Here's an example of a function whose first operation is `Symmetric` but for which finite differencing does not produce a triangular matrix: ```julia julia> using FiniteDifferences julia> x = collect(reshape(1.0:9.0,...
Yeah, so we have two cases: 1. A rule consumes a `Symmetric`, using it by accessing the underlying `.data` property. This rules' pullbacks will produce a valid `Composite{