Skip to content

Commit 5f20623

Browse files
committed
Add trivial bipermutation interface to matricized factorizations and functions
1 parent 097ee39 commit 5f20623

File tree

3 files changed

+23
-7
lines changed

3 files changed

+23
-7
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "TensorAlgebra"
22
uuid = "68bd88dc-f39d-4e12-b2ca-f046b68fcc6a"
33
authors = ["ITensor developers <[email protected]> and contributors"]
4-
version = "0.5.1"
4+
version = "0.5.2"
55

66
[deps]
77
ArrayLayouts = "4c555306-a7a7-4459-81d9-ec55ddd5c99a"

src/factorizations.jl

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,30 @@ for f in (
77
@eval begin
88
function $f(
99
A::AbstractArray,
10-
codomain_perm::Tuple{Vararg{Int}}, domain_perm::Tuple{Vararg{Int}};
10+
codomain_length::Val, domain_length::Val;
1111
kwargs...,
1212
)
1313
# tensor to matrix
14-
A_mat = matricize(A, codomain_perm, domain_perm)
14+
A_mat = matricize(A, codomain_length, domain_length)
1515

1616
# factorization
1717
X, Y = MatrixAlgebra.$f(A_mat; kwargs...)
1818

1919
# matrix to tensor
20-
biperm = permmortar((codomain_perm, domain_perm))
20+
biperm = blockedtrivialperm((codomain_length, domain_length))
2121
axes_codomain, axes_domain = blocks(axes(A)[biperm])
2222
axes_X = tuplemortar((axes_codomain, (axes(X, 2),)))
2323
axes_Y = tuplemortar(((axes(Y, 1),), axes_domain))
2424
return unmatricize(X, axes_X), unmatricize(Y, axes_Y)
2525
end
26+
function $f(
27+
A::AbstractArray,
28+
codomain_perm::Tuple{Vararg{Int}}, domain_perm::Tuple{Vararg{Int}};
29+
kwargs...,
30+
)
31+
A_perm = permuteblockeddims(A, codomain_perm, domain_perm)
32+
return $f(A_perm, Val(length(codomain_perm)), Val(length(domain_perm)); kwargs...)
33+
end
2634
function $f(A::AbstractArray, labels_A, labels_codomain, labels_domain; kwargs...)
2735
biperm = blockedperm_indexin(Tuple.((labels_A, labels_codomain, labels_domain))...)
2836
return $f(A, blocks(biperm)...; kwargs...)

src/matrixfunctions.jl

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,22 @@ for f in MATRIX_FUNCTIONS
3535
@eval begin
3636
function $f(
3737
a::AbstractArray,
38-
codomain_perm::Tuple{Vararg{Int}}, domain_perm::Tuple{Vararg{Int}};
38+
codomain_length::Val, domain_length::Val;
3939
kwargs...,
4040
)
41-
a_mat = matricize(a, codomain_perm, domain_perm)
41+
a_mat = matricize(a, codomain_length, domain_length)
4242
fa_mat = Base.$f(a_mat; kwargs...)
43-
biperm = permmortar((codomain_perm, domain_perm))
43+
biperm = blockedtrivialperm((codomain_length, domain_length))
4444
return unmatricize(fa_mat, axes(a)[biperm])
4545
end
46+
function $f(
47+
a::AbstractArray,
48+
codomain_perm::Tuple{Vararg{Int}}, domain_perm::Tuple{Vararg{Int}};
49+
kwargs...,
50+
)
51+
a_perm = permuteblockeddims(a, codomain_perm, domain_perm)
52+
return $f(a_perm, Val(length(codomain_perm)), Val(length(domain_perm)); kwargs...)
53+
end
4654
function $f(a::AbstractArray, labels_a, labels_codomain, labels_domain; kwargs...)
4755
biperm = blockedperm_indexin(Tuple.((labels_a, labels_codomain, labels_domain))...)
4856
return $f(a, blocks(biperm)...; kwargs...)

0 commit comments

Comments
 (0)