Hi there,
I am currently using TenPy to try to calculate thermodynamic observables for bigger yet finite systems. For the first test I wanted to do some smaller ones to test all tools. There I noticed that the MPO.variance method does not work for "non standard MPS" I checked the code and saw the exception case.
My question is now , is there a workaround that can handle that , just as for example constructing a H**2 and calculate it with MPO.expectation or similiar without requring to rewrite complete bases of classes?
Already thanks in advance for any help that might come!
Variance of purified MPS state
Re: Variance of purified MPS state
It's not hard to generalize and adjust the source of that variance function to work with purificationMPS - all you need to do is to initially check whether you have the additional q leg (at the top of the function), and if so, in addition contract the additional ['q'] with ['q*'] leg in the tensordot where you "close" one column, i.e. the tensordots of
contr
with th.conj()
and B.conj()
, respectively.Re: Variance of purified MPS state
Ah okay so for example for the 0 site i would add
in addition to the previos p leg contraction and same further on for B ?
Since the contraciton with the W's only happens on the physical legs p and all that gets added new are the virtual legs q and q* on top and bottom of the B - MPS right?
Or is it smarter to do it together with
not sure how much of a different in calculation time it would be
Python: Select all
contr = npc.tensordot(contr, contr, axes=[ 'q', 'q*' ])
Since the contraciton with the W's only happens on the physical legs p and all that gets added new are the virtual legs q and q* on top and bottom of the B - MPS right?
Or is it smarter to do it together with
Python: Select all
contr = npc.tensordot(contr, B.conj(), axes=[['vR*', 'p' , 'q'], ['vL*', 'p*, 'q*']])