Skip to content

Commit 10eee46

Browse files
committed
define normalize and normalize!
1 parent 5472a79 commit 10eee46

File tree

2 files changed

+12
-15
lines changed

2 files changed

+12
-15
lines changed

src/fusiontensor/linear_algebra_interface.jl

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -42,25 +42,17 @@ function LinearAlgebra.norm(ft::FusionTensor)
4242
return sqrt(n2)
4343
end
4444

45+
LinearAlgebra.normalize(ft::FusionTensor) = set_data_matrix(ft, data_matrix(ft) / norm(ft))
46+
47+
function LinearAlgebra.normalize!(ft::FusionTensor)
48+
data_matrix(ft) ./= norm(ft)
49+
return ft
50+
end
51+
4552
function LinearAlgebra.tr(ft::FusionTensor)
4653
m = data_matrix(ft)
4754
row_sectors = sectors(codomain_axis(ft))
4855
return sum(eachblockstoredindex(m); init=zero(eltype(ft))) do b
4956
return quantum_dimension(row_sectors[Int(first(Tuple(b)))]) * tr(m[b])
5057
end
5158
end
52-
53-
function LinearAlgebra.qr(ft::FusionTensor)
54-
qmat, rmat = block_qr(data_matrix(ft))
55-
qtens = FusionTensor(qmat, codomain_axes(ft), (axes(qmat, 2),))
56-
rtens = FusionTensor(rmat, (axes(rmat, 1),), domain_axes(ft))
57-
return qtens, rtens
58-
end
59-
60-
function LinearAlgebra.svd(ft::FusionTensor)
61-
umat, s, vmat = block_svd(data_matrix(ft))
62-
utens = FusionTensor(umat, codomain_axes(ft), (axes(umat, 2),))
63-
stens = FusionTensor(s, (axes(umat, 1),), (axes(vmat, 2),))
64-
vtens = FusionTensor(vmat, (axes(vmat, 1),), domain_axes(ft))
65-
return utens, stens, vtens
66-
end

test/test_linear_algebra.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,10 @@ include("setup.jl")
2727
@test isnothing(check_sanity(ft))
2828
@test norm(ft) 3 / 2
2929
@test isapprox(tr(ft), 0; atol=eps(Float64))
30+
31+
@test norm(normalize(ft)) 1.0
32+
@test norm(ft) 3 / 2 # unaffected by normalize
33+
normalize!(ft)
34+
@test norm(ft) 1.0
3035
end
3136
end

0 commit comments

Comments
 (0)