Skip to content

Commit 641cd20

Browse files
committed
Add eig cotangent checker function
1 parent 2348b5e commit 641cd20

1 file changed

Lines changed: 13 additions & 8 deletions

File tree

src/pullbacks/eig.jl

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,14 @@
1+
function check_eig_cotangents(D, VᴴΔV;
2+
degeneracy_atol::Real = default_pullback_rank_atol(D),
3+
gauge_atol::Real = default_pullback_gauge_atol(VᴴΔV)
4+
)
5+
mask = abs.(transpose(D) .- D) .< degeneracy_atol
6+
Δgauge = norm(view(VᴴΔV, mask))
7+
Δgauge gauge_atol ||
8+
@warn "`eig` cotangents sensitive to gauge choice: (|Δgauge| = $Δgauge)"
9+
return
10+
end
11+
112
"""
213
eig_pullback!(
314
ΔA::AbstractMatrix, A, DV, ΔDV, [ind];
@@ -41,10 +52,7 @@ function eig_pullback!(
4152
length(indV) == pV || throw(DimensionMismatch())
4253
mul!(view(VᴴΔV, :, indV), V', ΔV)
4354

44-
mask = abs.(transpose(D) .- D) .< degeneracy_atol
45-
Δgauge = norm(view(VᴴΔV, mask), Inf)
46-
Δgauge gauge_atol ||
47-
@warn "`eig` cotangents sensitive to gauge choice: (|Δgauge| = $Δgauge)"
55+
check_eig_cotangents(D, VᴴΔV; degeneracy_atol, gauge_atol)
4856

4957
VᴴΔV .*= conj.(inv_safe.(transpose(D) .- D, degeneracy_atol))
5058

@@ -129,10 +137,7 @@ function eig_trunc_pullback!(
129137
if !iszerotangent(ΔV)
130138
(n, p) == size(ΔV) || throw(DimensionMismatch())
131139
VᴴΔV = V' * ΔV
132-
mask = abs.(transpose(D) .- D) .< degeneracy_atol
133-
Δgauge = norm(view(VᴴΔV, mask), Inf)
134-
Δgauge gauge_atol ||
135-
@warn "`eig` cotangents sensitive to gauge choice: (|Δgauge| = $Δgauge)"
140+
check_eig_cotangents(D, VᴴΔV; degeneracy_atol, gauge_atol)
136141

137142
ΔVperp = ΔV - V * inv(G) * VᴴΔV
138143
VᴴΔV .*= conj.(inv_safe.(transpose(D) .- D, degeneracy_atol))

0 commit comments

Comments
 (0)