@@ -157,14 +157,24 @@ end
157157 return macroexpand (@__MODULE__ , :(return @autoopt @tensor $ env_e := $ proj_expr))
158158end
159159
160- # right linear map action: tensorcontract(env, x)
161- # TODO : if we want multiplication action env * x, we need additional twists
160+ # right linear map action: env * x
162161function full_infinite_environment (
163162 env:: AbstractTensorMap{T, S, N, N} , x:: AbstractTensor{T, S, N}
164163 ) where {T, S, N}
165164 return half_infinite_environment (env, x)
166165end
167166function full_infinite_environment (
167+ C_1, C_2, C_3, C_4,
168+ E_1, E_2, E_3, E_4, E_5, E_6, E_7, E_8,
169+ x:: AbstractTensor{T, S, N} ,
170+ A_1, A_2, A_3, A_4,
171+ ) where {T, S, N}
172+ xt = twistdual (x, 1 : N)
173+ return _full_infinite_environment (
174+ C_1, C_2, C_3, C_4, E_1, E_2, E_3, E_4, E_5, E_6, E_7, E_8, xt, A_1, A_2, A_3, A_4
175+ )
176+ end
177+ function _full_infinite_environment (
168178 C_1, C_2, C_3, C_4,
169179 E_1, E_2, E_3, E_4, E_5, E_6, E_7, E_8,
170180 x:: AbstractTensor{T, S, 3} ,
@@ -181,7 +191,7 @@ function full_infinite_environment(
181191 E_7[χ9 D19 D20; χ10] * C_4[χ10; χ11] * E_8[χ11 D21 D22; χ_x] *
182192 x[χ_x D_xabove D_xbelow]
183193end
184- function full_infinite_environment (
194+ function _full_infinite_environment (
185195 C_1, C_2, C_3, C_4,
186196 E_1, E_2, E_3, E_4, E_5, E_6, E_7, E_8,
187197 x:: AbstractTensor{T, S, 2} ,
@@ -198,7 +208,7 @@ function full_infinite_environment(
198208 E_7[χ9 D19; χ10] * C_4[χ10; χ11] * E_8[χ11 D21; χ_x] *
199209 x[χ_x D_x]
200210end
201- @generated function full_infinite_environment (
211+ @generated function _full_infinite_environment (
202212 C_1, C_2, C_3, C_4,
203213 E_1, E_2, E_3, E_4, E_5, E_6, E_7, E_8,
204214 x:: AbstractTensor{T, S, N} ,
@@ -218,14 +228,24 @@ end
218228 return macroexpand (@__MODULE__ , :(return @autoopt @tensor $ env_x_e := $ proj_expr * $ x_e))
219229end
220230
221- # left linear map action via adjoint: tensorcontract(env', x) (kind of...)
222- # TODO : if we want multiplication action env' * x, we need additional twists
231+ # left linear map action via adjoint: env' * x
223232function full_infinite_environment (
224233 x:: AbstractTensor{T, S, N} , env:: AbstractTensorMap{T, S, N, N} ,
225234 ) where {T, S, N}
226235 return half_infinite_environment (x, env)
227236end
228237function full_infinite_environment (
238+ x:: AbstractTensor{T, S, N} ,
239+ C_1, C_2, C_3, C_4,
240+ E_1, E_2, E_3, E_4, E_5, E_6, E_7, E_8,
241+ A_1, A_2, A_3, A_4,
242+ ) where {T, S, N}
243+ xt = twistdual (x, 1 : N)
244+ return _full_infinite_environment (
245+ xt, C_1, C_2, C_3, C_4, E_1, E_2, E_3, E_4, E_5, E_6, E_7, E_8, A_1, A_2, A_3, A_4
246+ )
247+ end
248+ function _full_infinite_environment (
229249 x:: AbstractTensor{T, S, 3} ,
230250 C_1, C_2, C_3, C_4,
231251 E_1, E_2, E_3, E_4, E_5, E_6, E_7, E_8,
@@ -242,7 +262,7 @@ function full_infinite_environment(
242262 conj (ket (A_4)[d4; D_inabove D17 D19 D21]) * bra (A_4)[d4; D_inbelow D18 D20 D22] *
243263 conj (E_7[χ9 D19 D20; χ10]) * conj (C_4[χ10; χ11]) * conj (E_8[χ11 D21 D22; χ_in])
244264end
245- function full_infinite_environment (
265+ function _full_infinite_environment (
246266 x:: AbstractTensor{T, S, 2} ,
247267 C_1, C_2, C_3, C_4,
248268 E_1, E_2, E_3, E_4, E_5, E_6, E_7, E_8,
@@ -259,7 +279,7 @@ function full_infinite_environment(
259279 conj (A_4[D21 D19; D_in D17]) *
260280 conj (E_7[χ9 D19; χ10]) * conj (C_4[χ10; χ11]) * conj (E_8[χ11 D21; χ_in])
261281end
262- @generated function full_infinite_environment (
282+ @generated function _full_infinite_environment (
263283 x:: AbstractTensor{T, S, N} ,
264284 C_1, C_2, C_3, C_4,
265285 E_1, E_2, E_3, E_4, E_5, E_6, E_7, E_8,
0 commit comments