where each operator acts on a different site. I am doing this like:

auto c_z = AutoMPO(sites);
c_z += "Sz",1,"Sz",2,"Sz",3,"Sz",4,"Sz",5,"Sz",6;
auto C_z= toMPO(c_z);
auto b=inner(psi0,C_z,psi0);

where \psi_0 is an MPS computed before. I am pretty sure this is not the most efficient way to do it,but I couldnâ€™t figure out another method that wouldnâ€™t cause any error. Any suggestion or help?
Thank you a lot for your help,
Francesco

Then you can use inner to compute the overlap with your original MPS and that will compute the result.

If you have multiple strings of operators then there might be other considerations for efficiency, but this would definitely be a good and efficient approach for a single string.

(The most efficient approach would be to basically write you own version of how the inner algorithm works, but then â€śstick inâ€ť operators on the sites where there are non-trivial operators, roughly like the code in this code formula but adapted to a whole string of operators.)