Skip to content

Commit 918b7aa

Browse files
committed
implement chainrules
1 parent 4c6185c commit 918b7aa

1 file changed

Lines changed: 6 additions & 14 deletions

File tree

ext/MatrixAlgebraKitChainRulesCoreExt.jl

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,11 @@ end
3838
function ChainRulesCore.rrule(::typeof(qr_null!), A::AbstractMatrix, N, alg)
3939
Ac = copy_input(qr_full, A)
4040
QR = initialize_output(qr_full!, A, alg)
41-
Q, R = qr_full!(Ac, QR, alg)
42-
N = copy!(N, view(Q, 1:size(A, 1), (size(A, 2) + 1):size(A, 1)))
41+
QR = qr_full!(Ac, QR, alg)
42+
N = copy!(N, view(QR[1], 1:size(A, 1), (size(A, 2) + 1):size(A, 1)))
4343
function qr_null_pullback(ΔN)
4444
ΔA = zero(A)
45-
(m, n) = size(A)
46-
minmn = min(m, n)
47-
ΔQ = zero!(similar(A, (m, m)))
48-
view(ΔQ, 1:m, (minmn + 1):m) .= unthunk.(ΔN)
49-
MatrixAlgebraKit.qr_compact_pullback!(ΔA, A, (Q, R), (ΔQ, ZeroTangent()))
45+
MatrixAlgebraKit.qr_null_pullback!(ΔA, A, QR, unthunk(ΔN))
5046
return NoTangent(), ΔA, ZeroTangent(), NoTangent()
5147
end
5248
function qr_null_pullback(::ZeroTangent) # is this extra definition useful?
@@ -76,15 +72,11 @@ end
7672
function ChainRulesCore.rrule(::typeof(lq_null!), A::AbstractMatrix, Nᴴ, alg)
7773
Ac = copy_input(lq_full, A)
7874
LQ = initialize_output(lq_full!, A, alg)
79-
L, Q = lq_full!(Ac, LQ, alg)
80-
Nᴴ = copy!(Nᴴ, view(Q, (size(A, 1) + 1):size(A, 2), 1:size(A, 2)))
75+
LQ = lq_full!(Ac, LQ, alg)
76+
Nᴴ = copy!(Nᴴ, view(LQ[2], (size(A, 1) + 1):size(A, 2), 1:size(A, 2)))
8177
function lq_null_pullback(ΔNᴴ)
8278
ΔA = zero(A)
83-
(m, n) = size(A)
84-
minmn = min(m, n)
85-
ΔQ = zero!(similar(A, (n, n)))
86-
view(ΔQ, (minmn + 1):n, 1:n) .= unthunk.(ΔNᴴ)
87-
MatrixAlgebraKit.lq_compact_pullback!(ΔA, A, (L, Q), (ZeroTangent(), ΔQ))
79+
MatrixAlgebraKit.lq_null_pullback!(ΔA, A, LQ, unthunk(ΔNᴴ))
8880
return NoTangent(), ΔA, ZeroTangent(), NoTangent()
8981
end
9082
function lq_null_pullback(::ZeroTangent) # is this extra definition useful?

0 commit comments

Comments
 (0)