@@ -87,19 +87,48 @@ function contractadd!(
8787 α:: Number , β:: Number ;
8888 kwargs...
8989 )
90- biperm_dest, biperm1, biperm2 = blockedperms (contract, labels_dest, labels1, labels2)
91- return contractadd! (
92- a_dest, blocks (biperm_dest)... ,
93- a1, blocks (biperm1)... ,
94- a2, blocks (biperm2)... ,
95- α, β; kwargs...
90+ return contractopadd! (
91+ a_dest, labels_dest, identity, a1, labels1, identity, a2, labels2, α, β; kwargs...
9692 )
9793end
94+ # contractadd! (bipartitioned permutations)
9895function contractadd! (
9996 a_dest:: AbstractArray , perm_dest_codomain, perm_dest_domain,
10097 a1:: AbstractArray , perm1_codomain, perm1_domain,
10198 a2:: AbstractArray , perm2_codomain, perm2_domain,
10299 α:: Number , β:: Number ;
100+ kwargs...
101+ )
102+ return contractopadd! (
103+ a_dest, perm_dest_codomain, perm_dest_domain,
104+ identity, a1, perm1_codomain, perm1_domain,
105+ identity, a2, perm2_codomain, perm2_domain,
106+ α, β; kwargs...
107+ )
108+ end
109+
110+ # contractopadd! (labels)
111+ function contractopadd! (
112+ a_dest:: AbstractArray , labels_dest,
113+ op1, a1:: AbstractArray , labels1,
114+ op2, a2:: AbstractArray , labels2,
115+ α:: Number , β:: Number ;
116+ kwargs...
117+ )
118+ biperm_dest, biperm1, biperm2 = blockedperms (contract, labels_dest, labels1, labels2)
119+ return contractopadd! (
120+ a_dest, blocks (biperm_dest)... ,
121+ op1, a1, blocks (biperm1)... ,
122+ op2, a2, blocks (biperm2)... ,
123+ α, β; kwargs...
124+ )
125+ end
126+ # contractopadd! (bipartitioned permutations, algorithm selection)
127+ function contractopadd! (
128+ a_dest:: AbstractArray , perm_dest_codomain, perm_dest_domain,
129+ op1, a1:: AbstractArray , perm1_codomain, perm1_domain,
130+ op2, a2:: AbstractArray , perm2_codomain, perm2_domain,
131+ α:: Number , β:: Number ;
103132 alg = DefaultContractAlgorithm (), kwargs...
104133 )
105134 check_input (
@@ -109,38 +138,38 @@ function contractadd!(
109138 a2, perm2_codomain, perm2_domain
110139 )
111140 algorithm = select_contract_algorithm (alg, a1, a2; kwargs... )
112- return contractadd ! (
141+ return contractopadd ! (
113142 algorithm,
114143 a_dest, perm_dest_codomain, perm_dest_domain,
115- a1, perm1_codomain, perm1_domain,
116- a2, perm2_codomain, perm2_domain,
144+ op1, a1, perm1_codomain, perm1_domain,
145+ op2, a2, perm2_codomain, perm2_domain,
117146 α, β
118147 )
119148end
120- # contractadd ! (dispatched on the algorithm, bipartitioned permutations)
149+ # contractopadd ! (dispatched on the algorithm, bipartitioned permutations)
121150# Required interface if not using matricized contraction
122- function contractadd ! (
151+ function contractopadd ! (
123152 algorithm:: ContractAlgorithm ,
124153 a_dest:: AbstractArray , perm_dest_codomain, perm_dest_domain,
125- a1:: AbstractArray , perm1_codomain, perm1_domain,
126- a2:: AbstractArray , perm2_codomain, perm2_domain,
154+ op1, a1:: AbstractArray , perm1_codomain, perm1_domain,
155+ op2, a2:: AbstractArray , perm2_codomain, perm2_domain,
127156 α:: Number , β:: Number
128157 )
129158 return throw (
130159 MethodError (
131- contractadd !,
160+ contractopadd !,
132161 (
133162 algorithm,
134163 a_dest, perm_dest_codomain, perm_dest_domain,
135- a1, perm1_codomain, perm1_domain,
136- a2, perm2_codomain, perm2_domain,
164+ op1, a1, perm1_codomain, perm1_domain,
165+ op2, a2, perm2_codomain, perm2_domain,
137166 α, β,
138167 )
139168 )
140169 )
141170end
142171
143- # BlockPermutation versions of contract[add ][!]
172+ # BlockPermutation versions of contract[opadd ][!]
144173function contract (
145174 a1:: AbstractArray , biperm1:: AbstractBlockPermutation{2} ,
146175 a2:: AbstractArray , biperm2:: AbstractBlockPermutation{2} ;
@@ -187,18 +216,16 @@ function contractadd!(
187216 α, β; kwargs...
188217 )
189218end
190- function contractadd! (
191- algorithm:: ContractAlgorithm ,
219+ function contractopadd! (
192220 a_dest:: AbstractArray , biperm_dest:: AbstractBlockPermutation{2} ,
193- a1:: AbstractArray , biperm1:: AbstractBlockPermutation{2} ,
194- a2:: AbstractArray , biperm2:: AbstractBlockPermutation{2} ,
195- α:: Number , β:: Number
221+ op1, a1:: AbstractArray , biperm1:: AbstractBlockPermutation{2} ,
222+ op2, a2:: AbstractArray , biperm2:: AbstractBlockPermutation{2} ,
223+ α:: Number , β:: Number ; kwargs ...
196224 )
197- return contractadd! (
198- algorithm,
225+ return contractopadd! (
199226 a_dest, blocks (biperm_dest)... ,
200- a1, blocks (biperm1)... ,
201- a2, blocks (biperm2)... ,
202- α, β
227+ op1, a1, blocks (biperm1)... ,
228+ op2, a2, blocks (biperm2)... ,
229+ α, β; kwargs ...
203230 )
204231end
0 commit comments