@@ -218,6 +218,16 @@ function FiniteMPS(As::Vector{<:GenericMPSTensor}; normalize::Bool = false)
218218 return mps
219219end
220220
221+ # construct from dense state
222+ # TODO : make planar?
223+ function FiniteMPS (ψ:: AbstractTensor )
224+ U = ones (scalartype (ψ), oneunit (spacetype (ψ)))
225+ A = _transpose_front (
226+ U * transpose (ψ * U' , ((), reverse (ntuple (identity, numind (ψ) + 1 ))))
227+ )
228+ return FiniteMPS (decompose_localmps (A); normalize = false , overwrite = true )
229+ end
230+
221231for f in (:zeros , :ones )
222232 @eval begin
223233 Base.$ f (manifold:: FiniteMPSManifold ) = $ f (Defaults. eltype, manifold)
@@ -249,71 +259,46 @@ for randf in (:rand, :randn, :randexp, :randisometry)
249259 end
250260end
251261
252- function FiniteMPS (
253- f, elt, Pspaces:: Vector{<:Union{S, CompositeSpace{S}}} , maxVspaces:: Vector{S} ;
254- normalize = true , left:: S = oneunit (S), right:: S = oneunit (S)
255- ) where {S <: ElementarySpace }
256- N = length (Pspaces)
257- length (maxVspaces) == N - 1 ||
258- throw (DimensionMismatch (" length of physical spaces ($N ) and virtual spaces $(length (maxVspaces)) should differ by 1" ))
259-
260- # limit the maximum virtual dimension such that result is full rank
261- fusedPspaces = fuse .(Pspaces) # for working with multiple physical spaces
262- Vspaces = similar (maxVspaces, N + 1 )
263-
264- Vspaces[1 ] = left
265- for k in 2 : N
266- Vspaces[k] = infimum (fuse (Vspaces[k - 1 ], fusedPspaces[k - 1 ]), maxVspaces[k - 1 ])
267- dim (Vspaces[k]) > 0 || @warn " no fusion channels available at site $k "
268- end
269-
270- Vspaces[end ] = right
271- for k in reverse (2 : N)
272- Vspaces[k] = infimum (Vspaces[k], fuse (Vspaces[k + 1 ], dual (fusedPspaces[k])))
273- dim (Vspaces[k]) > 0 || @warn " no fusion channels available at site $k "
274- end
275-
276- # construct MPS
277- tensors = MPSTensor .(f, elt, Pspaces, Vspaces[1 : (end - 1 )], Vspaces[2 : end ])
278- return FiniteMPS (tensors; normalize, overwrite = true )
279- end
280- function FiniteMPS (
281- f, elt, Pspaces:: Vector{<:Union{S, CompositeSpace{S}}} , maxVspace:: S ;
282- kwargs...
283- ) where {S <: ElementarySpace }
284- maxVspaces = fill (maxVspace, length (Pspaces) - 1 )
285- return FiniteMPS (f, elt, Pspaces, maxVspaces; kwargs... )
286- end
287- function FiniteMPS (
288- Pspaces:: Vector{<:Union{S, CompositeSpace{S}}} , maxVspaces:: Union{S, Vector{S}} ;
289- kwargs...
290- ) where {S <: ElementarySpace }
291- return FiniteMPS (rand, Defaults. eltype, Pspaces, maxVspaces; kwargs... )
292- end
293-
294- # Also accept single physical space and length
295- function FiniteMPS (N:: Int , V:: VectorSpace , args... ; kwargs... )
296- return FiniteMPS (fill (V, N), args... ; kwargs... )
297- end
298- function FiniteMPS (f, elt, N:: Int , V:: VectorSpace , args... ; kwargs... )
299- return FiniteMPS (f, elt, fill (V, N), args... ; kwargs... )
300- end
301-
302- # Also accept ProductSpace of physical spaces
303- FiniteMPS (P:: ProductSpace , args... ; kwargs... ) = FiniteMPS (collect (P), args... ; kwargs... )
304- function FiniteMPS (f, elt, P:: ProductSpace , args... ; kwargs... )
305- return FiniteMPS (f, elt, collect (P), args... ; kwargs... )
306- end
307-
308- # construct from dense state
309- # TODO : make planar?
310- function FiniteMPS (ψ:: AbstractTensor )
311- U = ones (scalartype (ψ), oneunit (spacetype (ψ)))
312- A = _transpose_front (
313- U * transpose (ψ * U' , ((), reverse (ntuple (identity, numind (ψ) + 1 ))))
314- )
315- return FiniteMPS (decompose_localmps (A); normalize = false , overwrite = true )
316- end
262+ # Deprecate old constructor syntaxes
263+ # ----------------------------------
264+ Base. @deprecate (
265+ FiniteMPS (
266+ f, elt, Pspaces:: Vector{<:TensorSpace{S}} , maxVspaces:: Vector{S} ; left:: S = oneunit (S), right:: S = oneunit (S)
267+ ) where {S <: ElementarySpace },
268+ f (elt, FiniteMPSManifold (Pspaces, maxVspaces; left_virtualspace = left, right_virtualspace = right))
269+ )
270+ Base. @deprecate (
271+ FiniteMPS (
272+ f, elt, Pspaces:: Vector{<:TensorSpace{S}} , maxVspace:: S ; left:: S = oneunit (S), right:: S = oneunit (S)
273+ ) where {S <: ElementarySpace },
274+ f (elt, FiniteMPSManifold (Pspaces, maxVspaces; left_virtualspace = left, right_virtualspace = right))
275+ )
276+ Base. @deprecate (
277+ FiniteMPS (
278+ Pspaces:: Vector{<:TensorSpace{S}} , maxVspaces:: Union{S, Vector{S}} ; left:: S = oneunit (S), right:: S = oneunit (S)
279+ ) where {S <: ElementarySpace },
280+ rand (FiniteMPSManifold (Pspaces, maxVspaces; left_virtualspace = left, right_virtualspace = right))
281+ )
282+ Base. @deprecate (
283+ FiniteMPS (
284+ f, elt, N:: Int , V:: VectorSpace , args... ; left:: S = oneunit (S), right:: S = oneunit (S)
285+ ) where {S <: ElementarySpace },
286+ f (elt, FiniteMPSManifold (fill (V, N), args... ; left_virtualspace = left, right_virtualspace = right))
287+ )
288+ Base. @deprecate (
289+ FiniteMPS (
290+ N:: Int , V:: VectorSpace , args... ; left:: S = oneunit (S), right:: S = oneunit (S)
291+ ) where {S <: ElementarySpace },
292+ rand (FiniteMPSManifold (fill (V, N), args... ; left_virtualspace = left, right_virtualspace = right))
293+ )
294+ Base. @deprecate (
295+ FiniteMPS (P:: ProductSpace , args... ; kwargs... ),
296+ rand (FiniteMPSManifold (collect (P), args... ; kwargs... ))
297+ )
298+ Base. @deprecate (
299+ FiniteMPS (f, elt, P:: ProductSpace , args... ; kwargs... ),
300+ f (elt, FiniteMPSManifold (collect (P), args... ; kwargs... ))
301+ )
317302
318303#= ==========================================================================================
319304Utility
0 commit comments