@@ -10,7 +10,7 @@ default_contract_alg() = Matricize()
1010
1111# Required interface if not using
1212# matricized contraction.
13- function contract ! (
13+ function contractadd ! (
1414 alg:: Algorithm ,
1515 a_dest:: AbstractArray ,
1616 biperm_dest:: AbstractBlockPermutation ,
@@ -28,53 +28,59 @@ function contract(
2828 a1:: AbstractArray ,
2929 labels1,
3030 a2:: AbstractArray ,
31- labels2,
32- α:: Number = one (Bool);
31+ labels2;
3332 alg= default_contract_alg (),
3433 kwargs... ,
3534)
36- return contract (Algorithm (alg), a1, labels1, a2, labels2, α ; kwargs... )
35+ return contract (Algorithm (alg), a1, labels1, a2, labels2; kwargs... )
3736end
3837
3938function contract (
40- alg:: Algorithm ,
39+ alg:: Algorithm , a1:: AbstractArray , labels1, a2:: AbstractArray , labels2; kwargs...
40+ )
41+ labels_dest = output_labels (contract, alg, a1, labels1, a2, labels2; kwargs... )
42+ return contract (alg, labels_dest, a1, labels1, a2, labels2; kwargs... ), labels_dest
43+ end
44+
45+ function contract (
46+ labels_dest,
4147 a1:: AbstractArray ,
4248 labels1,
4349 a2:: AbstractArray ,
44- labels2,
45- α :: Number = one (Bool);
50+ labels2;
51+ alg = default_contract_alg (),
4652 kwargs... ,
4753)
48- labels_dest = output_labels (contract, alg, a1, labels1, a2, labels2, α; kwargs... )
49- return contract (alg, labels_dest, a1, labels1, a2, labels2, α; kwargs... ), labels_dest
54+ return contract (Algorithm (alg), labels_dest, a1, labels1, a2, labels2; kwargs... )
5055end
5156
52- function contract (
57+ function contract! (
58+ a_dest:: AbstractArray ,
5359 labels_dest,
5460 a1:: AbstractArray ,
5561 labels1,
5662 a2:: AbstractArray ,
57- labels2,
58- α:: Number = one (Bool);
59- alg= default_contract_alg (),
63+ labels2;
6064 kwargs... ,
6165)
62- return contract ( Algorithm (alg) , labels_dest, a1, labels1, a2, labels2, α ; kwargs... )
66+ return contractadd! (a_dest , labels_dest, a1, labels1, a2, labels2, true , false ; kwargs... )
6367end
6468
65- function contract ! (
69+ function contractadd ! (
6670 a_dest:: AbstractArray ,
6771 labels_dest,
6872 a1:: AbstractArray ,
6973 labels1,
7074 a2:: AbstractArray ,
7175 labels2,
72- α:: Number = one (Bool) ,
73- β:: Number = zero (Bool) ;
76+ α:: Number ,
77+ β:: Number ;
7478 alg= default_contract_alg (),
7579 kwargs... ,
7680)
77- contract! (Algorithm (alg), a_dest, labels_dest, a1, labels1, a2, labels2, α, β; kwargs... )
81+ contractadd! (
82+ Algorithm (alg), a_dest, labels_dest, a1, labels1, a2, labels2, α, β; kwargs...
83+ )
7884 return a_dest
7985end
8086
@@ -84,16 +90,30 @@ function contract(
8490 a1:: AbstractArray ,
8591 labels1,
8692 a2:: AbstractArray ,
87- labels2,
88- α:: Number = one (Bool);
93+ labels2;
8994 kwargs... ,
9095)
9196 check_input (contract, a1, labels1, a2, labels2)
9297 biperm_dest, biperm1, biperm2 = blockedperms (contract, labels_dest, labels1, labels2)
93- return contract (alg, biperm_dest, a1, biperm1, a2, biperm2, α ; kwargs... )
98+ return contract (alg, biperm_dest, a1, biperm1, a2, biperm2; kwargs... )
9499end
95100
96101function contract! (
102+ alg:: Algorithm ,
103+ a_dest:: AbstractArray ,
104+ labels_dest,
105+ a1:: AbstractArray ,
106+ labels1,
107+ a2:: AbstractArray ,
108+ labels2;
109+ kwargs... ,
110+ )
111+ return contractadd! (
112+ alg, a_dest, labels_dest, a1, labels1, a2, labels2, true , false ; kwargs...
113+ )
114+ end
115+
116+ function contractadd! (
97117 alg:: Algorithm ,
98118 a_dest:: AbstractArray ,
99119 labels_dest,
@@ -107,7 +127,7 @@ function contract!(
107127)
108128 check_input (contract, a_dest, labels_dest, a1, labels1, a2, labels2)
109129 biperm_dest, biperm1, biperm2 = blockedperms (contract, labels_dest, labels1, labels2)
110- return contract ! (alg, a_dest, biperm_dest, a1, biperm1, a2, biperm2, α, β; kwargs... )
130+ return contractadd ! (alg, a_dest, biperm_dest, a1, biperm1, a2, biperm2, α, β; kwargs... )
111131end
112132
113133function contract (
@@ -116,12 +136,11 @@ function contract(
116136 a1:: AbstractArray ,
117137 biperm1:: AbstractBlockPermutation ,
118138 a2:: AbstractArray ,
119- biperm2:: AbstractBlockPermutation ,
120- α:: Number ;
139+ biperm2:: AbstractBlockPermutation ;
121140 kwargs... ,
122141)
123142 check_input (contract, a1, biperm1, a2, biperm2)
124- a_dest = allocate_output (contract, biperm_dest, a1, biperm1, a2, biperm2, α )
125- contract! (alg, a_dest, biperm_dest, a1, biperm1, a2, biperm2, α, zero (Bool) ; kwargs... )
143+ a_dest = allocate_output (contract, biperm_dest, a1, biperm1, a2, biperm2)
144+ contract! (alg, a_dest, biperm_dest, a1, biperm1, a2, biperm2; kwargs... )
126145 return a_dest
127146end
0 commit comments