@@ -52,26 +52,29 @@ def optimize_psi(psi, functArgs, maxit=2, krydim=4):
5252 M [0 ,0 ] = M [3 ,3 ] = eye
5353 M [0 ,1 ] = M [2 ,3 ] = 2 ** 0.5 * sp .real ()
5454 M [0 ,2 ] = M [1 ,3 ] = 2 ** 0.5 * sm .real ()
55- M = cytnx .UniTensor (M ,0 )
55+ M = cytnx .UniTensor (M ,0 ). set_name ( "MPO" )
5656
57- L0 = cytnx .UniTensor .zeros ([4 ,1 ,1 ]).set_rowrank_ (0 ) #Left boundary
58- R0 = cytnx .UniTensor .zeros ([4 ,1 ,1 ]).set_rowrank_ (0 ) #Right boundary
59- L0 [0 ,0 ,0 ] = 1. ; R0 [3 ,0 ,0 ] = 1.
57+ L0 = cytnx .UniTensor .zeros ([4 ,1 ,1 ]).set_rowrank_ (0 ).set_name ("L0" ) #Left boundary
58+ R0 = cytnx .UniTensor .zeros ([4 ,1 ,1 ]).set_rowrank_ (0 ).set_name ("R0" ) #Right boundary
59+ L0 [0 ,0 ,0 ] = 1.
60+ R0 [3 ,0 ,0 ] = 1.
6061
61- lbls = [] # List for storing the MPS labels
6262 A = [None for i in range (Nsites )]
63- A [0 ] = cytnx .UniTensor .normal ([1 , d , min (chi , d )], 0. , 1. ).set_rowrank_ (2 )
64- A [0 ].relabel_ (["0" ,"1" ,"2" ])
65- lbls .append (["0" ,"1" ,"2" ]) # store the labels for later convinience.
63+ A [0 ] = cytnx .UniTensor .normal ([1 , d , min (chi , d )], 0. , 1. ).set_rowrank_ (2 ) \
64+ .relabel_ (["0" ,"1" ,"2" ]).set_name ("A0" )
65+
66+ lbls = [] # List for storing the MPS labels
67+ lbls .append (["0" ,"1" ,"2" ]) # store the labels for later convenience.
6668
6769 for k in range (1 ,Nsites ):
6870 dim1 = A [k - 1 ].shape ()[2 ]; dim2 = d
6971 dim3 = min (min (chi , A [k - 1 ].shape ()[2 ] * d ), d ** (Nsites - k - 1 ))
70- A [k ] = cytnx .UniTensor .normal ([dim1 , dim2 , dim3 ],0. ,1. ).set_rowrank_ (2 )
72+ A [k ] = cytnx .UniTensor .normal ([dim1 , dim2 , dim3 ],0. ,1. ).set_rowrank_ (2 ) \
73+ .set_name (f"A{ k } " )
7174
7275 lbl = [str (2 * k ),str (2 * k + 1 ),str (2 * k + 2 )]
7376 A [k ].relabel_ (lbl )
74- lbls .append (lbl ) # store the labels for later convinience .
77+ lbls .append (lbl ) # store the labels for later convenience .
7578
7679 LR = [None for i in range (Nsites + 1 )]
7780 LR [0 ] = L0
@@ -84,23 +87,32 @@ def optimize_psi(psi, functArgs, maxit=2, krydim=4):
8487 s , A [p ] ,vt = cytnx .linalg .Gesvd (A [p ])
8588 A [p + 1 ] = cytnx .Contract (cytnx .Contract (s ,vt ),A [p + 1 ])
8689
87- ## Calculate enviroments:
90+ A [p ].set_name (f"A{ p } " )
91+ A [p + 1 ].set_name (f"A{ p + 1 } " )
92+
93+ ## Calculate environments:
8894 anet = cytnx .Network ()
8995 anet .FromString (["L: -2,-1,-3" ,\
9096 "A: -1,-4,1" ,\
9197 "M: -2,0,-4,-5" ,\
9298 "A_Conj: -3,-5,2" ,\
9399 "TOUT: 0,1,2" ])
94100 # or you can do: anet = cytnx.Network("L_AMAH.net")
95- anet .PutUniTensors (["L" ,"A" ,"A_Conj" ,"M" ],[LR [p ],A [p ],A [p ].Conj (),M ])
101+
102+ # Dagger() swaps left/right index order; permute_ restores original label order
103+ anet .PutUniTensors (["L" ,"A" ,"A_Conj" ,"M" ], \
104+ [LR [p ],A [p ],A [p ].Dagger ().permute_ (A [p ].labels ()),M ])
96105 LR [p + 1 ] = anet .Launch ()
106+ LR [p + 1 ].set_name (f"LR{ p + 1 } " )
97107
98108 # Recover the original MPS labels
99109 A [p ].relabel_ (lbls [p ])
100110 A [p + 1 ].relabel_ (lbls [p + 1 ])
101111
102112 _ ,A [- 1 ] = cytnx .linalg .Gesvd (A [- 1 ],is_U = True ,is_vT = False ) ## last one.
103- A [- 1 ].relabel_ (lbls [- 1 ]) # Recover the original MPS labels
113+ A [- 1 ].set_name (f"A{ Nsites - 1 } " ) \
114+ .relabel_ (lbls [- 1 ]) # Recover the original MPS labels
115+
104116
105117 Ekeep = []
106118 for k in range (1 , numsweeps + 1 ):
@@ -123,6 +135,9 @@ def optimize_psi(psi, functArgs, maxit=2, krydim=4):
123135 A [p ] = cytnx .Contract (A [p ],s ) # absorb s into next neighbor
124136 A [p ].relabel_ (lbls [p ]); # set the label back to be consistent
125137
138+ A [p ].set_name (f"A{ p } " )
139+ A [p + 1 ].set_name (f"A{ p + 1 } " )
140+
126141 # update LR from right to left:
127142 anet = cytnx .Network ()
128143 anet .FromString (["R: -2,-1,-3" ,\
@@ -131,14 +146,19 @@ def optimize_psi(psi, functArgs, maxit=2, krydim=4):
131146 "B_Conj: 2,-5,-3" ,\
132147 "TOUT: 0;1,2" ])
133148 # or you can do: anet = cytnx.Network("R_AMAH.net")
134- anet .PutUniTensors (["R" ,"B" ,"M" ,"B_Conj" ],[LR [p + 2 ],A [p + 1 ],M ,A [p + 1 ].Conj ()])
149+
150+ # Dagger() swaps index order; permute_ restores it
151+ anet .PutUniTensors (["R" ,"B" ,"M" ,"B_Conj" ], \
152+ [LR [p + 2 ],A [p + 1 ],M ,A [p + 1 ].Dagger ().permute_ (A [p + 1 ].labels ())])
135153 LR [p + 1 ] = anet .Launch ()
154+ LR [p + 1 ].set_name (f"LR{ p + 1 } " )
136155
137156 print ('Sweep[r->l]: %d/%d, Loc: %d,Energy: %f' % (k , numsweeps , p , Ekeep [- 1 ]))
138157
139158 A [0 ].set_rowrank_ (1 )
140159 _ ,A [0 ] = cytnx .linalg .Gesvd (A [0 ],is_U = False , is_vT = True )
141160 A [0 ].relabel_ (lbls [0 ]); #set the label back to be consistent
161+ A [0 ].set_name ("A0" )
142162
143163 for p in range (Nsites - 1 ):
144164 dim_l = A [p ].shape ()[0 ]
@@ -158,6 +178,9 @@ def optimize_psi(psi, functArgs, maxit=2, krydim=4):
158178 A [p + 1 ] = cytnx .Contract (s ,A [p + 1 ]) ## absorb s into next neighbor.
159179 A [p + 1 ].relabel_ (lbls [p + 1 ]); #set the label back to be consistent
160180
181+ A [p ].set_name (f"A{ p } " )
182+ A [p + 1 ].set_name (f"A{ p + 1 } " )
183+
161184 # update LR from left to right:
162185 anet = cytnx .Network ()
163186 anet .FromString (["L: -2,-1,-3" ,\
@@ -167,14 +190,18 @@ def optimize_psi(psi, functArgs, maxit=2, krydim=4):
167190 "TOUT: 0,1,2" ])
168191 # or you can do: anet = cytnx.Network("L_AMAH.net")
169192
170- anet .PutUniTensors (["L" ,"A" ,"A_Conj" ,"M" ],[LR [p ],A [p ],A [p ].Conj (),M ])
193+ # Dagger() swaps index order; permute_ restores it
194+ anet .PutUniTensors (["L" ,"A" ,"A_Conj" ,"M" ], \
195+ [LR [p ],A [p ],A [p ].Dagger ().permute_ (A [p ].labels ()),M ])
171196 LR [p + 1 ] = anet .Launch ()
197+ LR [p + 1 ].set_name (f"LR{ p + 1 } " )
172198
173199 print ('Sweep[l->r]: %d/%d, Loc: %d,Energy: %f' % (k , numsweeps , p , Ekeep [- 1 ]))
174200
175201 A [- 1 ].set_rowrank_ (2 )
176202 _ ,A [- 1 ] = cytnx .linalg .Gesvd (A [- 1 ],is_U = True ,is_vT = False ) ## last one.
177- A [- 1 ].relabel_ (lbls [- 1 ]); #set the label back to be consistent
203+ A [- 1 ].set_name (f"A{ Nsites - 1 } " ) \
204+ .relabel_ (lbls [- 1 ]); #set the label back to be consistent
178205 return Ekeep
179206
180207if __name__ == '__main__' :
0 commit comments