Repository: tenpy/tenpy (language: python)

Issue:
BUG: duplicate names `lanczos_params` and `lanczos_options` in TDVP and VUMPS
The TDVP is now derived from the Sweep class. The Sweep class reads out  `lanczos_params` (as documented, and saved as `self.lanczos_params`, since this is what we had in the original DMRG implementation.

On the other hand, the original TDVP implementation had `lanczos_options`, and those are the ones used in `TwoSiteTDVP.update_local()`.

The best way forward retaining backwards compatibility is probably to define the lanczos_options as deprecated alias in the TDVP config and add a deprecated property access of `TDVPEngine.lanczos_options`
 Given that the lanczos_options haven't been used in any of the examples, I hope this isn't super annoying for users.


Commensurate supersolids and re-entrant transitions in an extended Bose-Hubbard ladder [https://arxiv.org/abs/2407.20107v2]
We have used TeNPy in a recent work:  https://arxiv.org/abs/2407.20107v2

Please include it into the list of [papers using TeNPy](https://tenpy.readthedocs.io/en/latest/papers_using_tenpy.html)



Discussion / hints:

Fix patch:
diff --git a/doc/conf.py b/doc/conf.py
index 465941c40..f4d075a42 100644
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -386,7 +386,10 @@ def linkcode_resolve(domain, info):
 
 # -- sphinxcontrib.bibtex -------------------------------------------------
 
-bibtex_bibfiles = ['literature.bib', 'papers_using_tenpy.bib']
+bibtex_bibfiles = ['literature.bib', 'papers_using_tenpy.bib', 'theses.bib']
+# note: these bib files are exported from the Zotero library
+# https://www.zotero.org/groups/2569413/tenpy/library
+# with the `betterbibtex` add-on, sorting by bibtex key (can be changed in addon settings).
 
 from pybtex.style.formatting.unsrt import Style as UnsrtStyle
 from pybtex.style.labels import BaseLabelStyle
diff --git a/doc/literature.bib b/doc/literature.bib
index be19d4cea..9a72d231a 100644
--- a/doc/literature.bib
+++ b/doc/literature.bib
@@ -21,7 +21,7 @@ @article{barthel2016
   eprint = {1607.01696},
   pages = {115157},
   doi = {10.1103/PhysRevB.94.115157},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{barthel2020,
@@ -34,7 +34,7 @@ @article{barthel2020
   eprint = {1901.04974},
   pages = {168165},
   doi = {10.1016/j.aop.2020.168165},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{calabrese2004,
@@ -48,7 +48,7 @@ @article{calabrese2004
   eprint = {hep-th/0405152},
   pages = {P06002},
   doi = {10.1088/1742-5468/2004/06/P06002},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{cincio2013,
@@ -62,7 +62,7 @@ @article{cincio2013
   eprint = {1208.2623},
   pages = {067208},
   doi = {10.1103/PhysRevLett.110.067208},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{cirac2009,
@@ -76,7 +76,7 @@ @article{cirac2009
   eprint = {0910.1130},
   pages = {504004},
   doi = {10.1088/1751-8113/42/50/504004},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{cirac2020,
@@ -88,7 +88,7 @@ @article{cirac2020
   journal = {arXiv:2011.12127 [cond-mat, physics:hep-th, physics:quant-ph]},
   eprint = {2011.12127},
   primaryclass = {cond-mat, physics:hep-th, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{eisert2013,
@@ -99,11 +99,11 @@ @article{eisert2013
   journal = {arXiv:1308.3318 [cond-mat, physics:quant-ph]},
   eprint = {1308.3318},
   primaryclass = {cond-mat, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{grushin2015,
-  title = {Characterization and Stability of a Fermionic {\textbackslash}nu=1/3 Fractional {{Chern}} Insulator},
+  title = {Characterization and Stability of a Fermionic \textbackslash nu=1/3 Fractional {{Chern}} Insulator},
   author = {Grushin, Adolfo G. and Motruk, Johannes and Zaletel, Michael P. and Pollmann, Frank},
   year = {2015},
   month = jan,
@@ -113,7 +113,7 @@ @article{grushin2015
   eprint = {1407.6985},
   pages = {035136},
   doi = {10.1103/PhysRevB.91.035136},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{haegeman2011,
@@ -127,21 +127,20 @@ @article{haegeman2011
   eprint = {1103.0936},
   pages = {070601},
   doi = {10.1103/PhysRevLett.107.070601},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{haegeman2012,
-  title = {Variational matrix product ansatz for dispersion relations},
+  title = {Variational Matrix Product Ansatz for Dispersion Relations},
   author = {Haegeman, Jutho and Pirvu, Bogdan and Weir, David J. and Cirac, J. Ignacio and Osborne, Tobias J. and Verschelde, Henri and Verstraete, Frank},
   year = {2012},
   month = mar,
   journal = {Physical Review B},
   volume = {85},
   number = {10},
-  eprint = {1103.2286},
   pages = {100408},
-  doi = {10.1103/PhysRevB.85.100408},
-  archiveprefix = {arxiv}
+  publisher = {American Physical Society},
+  doi = {10.1103/PhysRevB.85.100408}
 }
 
 @article{haegeman2016,
@@ -155,7 +154,7 @@ @article{haegeman2016
   eprint = {1408.5056},
   pages = {165116},
   doi = {10.1103/PhysRevB.94.165116},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{hauschild2018,
@@ -169,7 +168,7 @@ @article{hauschild2018
   eprint = {1711.01288},
   pages = {235163},
   doi = {10.1103/PhysRevB.98.235163},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{hauschild2018a,
@@ -182,12 +181,12 @@ @article{hauschild2018a
   eprint = {1805.00055},
   pages = {5},
   doi = {10.21468/SciPostPhysLectNotes.5},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{hubig2015,
   title = {A {{Strictly Single-Site DMRG Algorithm}} with {{Subspace Expansion}}},
-  author = {Hubig, Claudius and McCulloch, Ian P. and Schollw{\"o}ck, Ulrich and Wolf, F. Alexander},
+  author = {Hubig, Claudius and McCulloch, Ian P. and Schollwöck, Ulrich and Wolf, F. Alexander},
   year = {2015},
   month = apr,
   journal = {Physical Review B},
@@ -196,7 +195,7 @@ @article{hubig2015
   eprint = {1501.05504},
   pages = {155115},
   doi = {10.1103/PhysRevB.91.155115},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{karrasch2013,
@@ -210,7 +209,20 @@ @article{karrasch2013
   eprint = {1303.3942},
   pages = {083031},
   doi = {10.1088/1367-2630/15/8/083031},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@article{mcculloch2002,
+  title = {The Non-{{Abelian}} Density Matrix Renormalization Group Algorithm},
+  author = {McCulloch, I. P. and Gulácsi, M.},
+  year = {2002},
+  month = mar,
+  journal = {EPL (Europhysics Letters)},
+  volume = {57},
+  number = {6},
+  pages = {852},
+  publisher = {IOP Publishing},
+  doi = {10.1209/epl/i2002-00393-0}
 }
 
 @article{mcculloch2008,
@@ -221,7 +233,7 @@ @article{mcculloch2008
   journal = {arXiv:0804.2509 [cond-mat]},
   eprint = {0804.2509},
   primaryclass = {cond-mat},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{milsted2013,
@@ -235,7 +247,7 @@ @article{milsted2013
   eprint = {1207.0691},
   pages = {155116},
   doi = {10.1103/PhysRevB.88.155116},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{motruk2016,
@@ -249,7 +261,7 @@ @article{motruk2016
   eprint = {1512.03318},
   pages = {155139},
   doi = {10.1103/PhysRevB.93.155139},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{murg2010,
@@ -263,7 +275,7 @@ @article{murg2010
   eprint = {0804.3976},
   pages = {025012},
   doi = {10.1088/1367-2630/12/2/025012},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{neupert2011,
@@ -277,7 +289,7 @@ @article{neupert2011
   eprint = {1012.4723},
   pages = {236804},
   doi = {10.1103/PhysRevLett.106.236804},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{orus2014,
@@ -291,12 +303,12 @@ @article{orus2014
   eprint = {1306.2164},
   pages = {117--158},
   doi = {10.1016/j.aop.2014.06.013},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{paeckel2019,
   title = {Time-Evolution Methods for Matrix-Product States},
-  author = {Paeckel, Sebastian and K{\"o}hler, Thomas and Swoboda, Andreas and Manmana, Salvatore R. and Schollw{\"o}ck, Ulrich and Hubig, Claudius},
+  author = {Paeckel, Sebastian and Köhler, Thomas and Swoboda, Andreas and Manmana, Salvatore R. and Schollwöck, Ulrich and Hubig, Claudius},
   year = {2019},
   month = dec,
   journal = {Annals of Physics},
@@ -304,7 +316,7 @@ @article{paeckel2019
   eprint = {1901.05824},
   pages = {167998},
   doi = {10.1016/j.aop.2019.167998},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{phien2012,
@@ -318,12 +330,12 @@ @article{phien2012
   eprint = {1207.0652},
   pages = {245107},
   doi = {10.1103/PhysRevB.86.245107},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{phien2013,
   title = {Dynamical Windows for Real-Time Evolution with Matrix Product States},
-  author = {Phien, Ho N. and Vidal, Guifr{\'e} and McCulloch, Ian P.},
+  author = {Phien, Ho N. and Vidal, Guifré and McCulloch, Ian P.},
   year = {2013},
   month = jul,
   journal = {Physical Review B},
@@ -332,7 +344,7 @@ @article{phien2013
   eprint = {1207.0678},
   pages = {035103},
   doi = {10.1103/PhysRevB.88.035103},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{pollmann2009,
@@ -346,7 +358,7 @@ @article{pollmann2009
   eprint = {0812.2903},
   pages = {255701},
   doi = {10.1103/PhysRevLett.102.255701},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{pollmann2012,
@@ -360,7 +372,7 @@ @article{pollmann2012
   eprint = {1204.0704},
   pages = {125441},
   doi = {10.1103/PhysRevB.86.125441},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{resta1998,
@@ -386,7 +398,7 @@ @article{schollwoeck2011
   eprint = {1008.3477},
   pages = {96--192},
   doi = {10.1016/j.aop.2010.09.012},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{schuch2013,
@@ -398,7 +410,7 @@ @article{schuch2013
   journal = {arXiv:1306.5551 [cond-mat, physics:quant-ph]},
   eprint = {1306.5551},
   primaryclass = {cond-mat, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{shapourian2017,
@@ -412,7 +424,7 @@ @article{shapourian2017
   eprint = {1607.03896},
   pages = {216402},
   doi = {10.1103/PhysRevLett.118.216402},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{singh2010,
@@ -426,7 +438,7 @@ @article{singh2010
   eprint = {0907.2994},
   pages = {050301},
   doi = {10.1103/PhysRevA.82.050301},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{singh2011,
@@ -440,7 +452,7 @@ @article{singh2011
   eprint = {1008.4774},
   pages = {115125},
   doi = {10.1103/PhysRevB.83.115125},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{stoudenmire2010,
@@ -454,7 +466,7 @@ @article{stoudenmire2010
   eprint = {1002.1305},
   pages = {055026},
   doi = {10.1088/1367-2630/12/5/055026},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{stoudenmire2012,
@@ -468,11 +480,11 @@ @article{stoudenmire2012
   eprint = {1105.1374},
   pages = {111--128},
   doi = {10.1146/annurev-conmatphys-020911-125018},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{suzuki1991,
-  title = {General Theory of Fractal Path Integrals with Applications to Many-body Theories and Statistical Physics},
+  title = {General Theory of Fractal Path Integrals with Applications to Many‐body Theories and Statistical Physics},
   author = {Suzuki, Masuo},
   year = {1991},
   month = feb,
@@ -492,7 +504,7 @@ @article{vanderstraeten2019
   eprint = {1810.07006},
   pages = {7},
   doi = {10.21468/SciPostPhysLectNotes.7},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{verstraete2008,
@@ -506,7 +518,7 @@ @article{verstraete2008
   eprint = {0907.2796},
   pages = {143--224},
   doi = {10.1080/14789940801912366},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{vidal2004,
@@ -520,7 +532,7 @@ @article{vidal2004
   eprint = {quant-ph/0310089},
   pages = {040502},
   doi = {10.1103/PhysRevLett.93.040502},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{vidal2007,
@@ -570,7 +582,7 @@ @article{white2005
   eprint = {cond-mat/0508709},
   pages = {180403},
   doi = {10.1103/PhysRevB.72.180403},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{white2009,
@@ -583,9 +595,9 @@ @article{white2009
   number = {19},
   eprint = {0902.4475},
   pages = {190601},
-  publisher = {{American Physical Society}},
+  publisher = {American Physical Society},
   doi = {10.1103/PhysRevLett.102.190601},
-  archiveprefix = {arxiv},
+  archiveprefix = {arXiv},
   isbn = {doi:10.1103/PhysRevLett.102.190601},
   pmid = {19518934}
 }
@@ -601,7 +613,7 @@ @article{yang2012
   eprint = {1205.5792},
   pages = {241112},
   doi = {10.1103/PhysRevB.86.241112},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{zaletel2015,
@@ -615,7 +627,7 @@ @article{zaletel2015
   eprint = {1407.1832},
   pages = {165112},
   doi = {10.1103/PhysRevB.91.165112},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{zauner-stauber2018,
@@ -630,7 +642,7 @@ @article{zauner-stauber2018
   primaryclass = {cond-mat, physics:quant-ph},
   pages = {045145},
   doi = {10.1103/PhysRevB.97.045145},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{zauner2015,
@@ -645,5 +657,5 @@ @article{zauner2015
   eprint = {1207.0862},
   pages = {425602},
   doi = {10.1088/0953-8984/27/42/425602},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
diff --git a/doc/literature.rst b/doc/literature.rst
index a10b0bd04..513b2ab90 100644
--- a/doc/literature.rst
+++ b/doc/literature.rst
@@ -110,3 +110,13 @@ References
 .. bibliography:: literature.bib
     :style: custom1
     :all:
+
+
+PhD theses
+----------
+For inspiration, we also (somewhat randomly) list a few PhD theses related to tensor networks (accessible online) - they
+often provide a very good introduction to some specific topic.
+
+.. bibliography:: theses.bib
+    :all:
+    :style: custom2
diff --git a/doc/papers_using_tenpy.bib b/doc/papers_using_tenpy.bib
index f1a8ad736..98ccb94da 100644
--- a/doc/papers_using_tenpy.bib
+++ b/doc/papers_using_tenpy.bib
@@ -1,12 +1,25 @@
+@misc{adler2024,
+  title = {Observation of {{Hilbert-space}} Fragmentation and Fractonic Excitations in Two-Dimensional {{Hubbard}} Systems},
+  author = {Adler, Daniel and Wei, David and Will, Melissa and Srakaew, Kritsana and Agrawal, Suchita and Weckesser, Pascal and Moessner, Roderich and Pollmann, Frank and Bloch, Immanuel and Zeiher, Johannes},
+  year = {2024},
+  month = apr,
+  number = {arXiv:2404.14896},
+  eprint = {2404.14896},
+  primaryclass = {cond-mat, physics:physics, physics:quant-ph},
+  publisher = {arXiv},
+  doi = {10.48550/arXiv.2404.14896},
+  archiveprefix = {arXiv}
+}
+
 @article{alsallom2021,
   title = {Fate of the Non-{{Hermitian}} Skin Effect in Many-Body Fermionic Systems},
-  author = {Alsallom, Faisal and Herviou, Lo{\"i}c and Yazyev, Oleg V. and Brzezi{\'n}ska, Marta},
+  author = {Alsallom, Faisal and Herviou, Loïc and Yazyev, Oleg V. and Brzezińska, Marta},
   year = {2021},
   month = oct,
   journal = {arXiv:2110.13164 [cond-mat]},
   eprint = {2110.13164},
   primaryclass = {cond-mat},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{amin2023,
@@ -17,9 +30,9 @@ @misc{amin2023
   number = {arXiv:2311.01306},
   eprint = {2311.01306},
   primaryclass = {quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2311.01306},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{anand2022,
@@ -30,24 +43,24 @@ @misc{anand2022
   number = {arXiv:2203.00886},
   eprint = {2203.00886},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2203.00886},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{andrews2020,
-  title = {Abelian Topological Order of {\textbackslash}nu=2/5 and 3/7 Fractional Quantum {{Hall}} States in Lattice Models},
+  title = {Abelian Topological Order of \textbackslash nu=2/5 and 3/7 Fractional Quantum {{Hall}} States in Lattice Models},
   author = {Andrews, Bartholomew and Mohan, Madhav and Neupert, Titus},
   year = {2020},
   month = aug,
   journal = {arXiv:2007.08870 [cond-mat]},
   eprint = {2007.08870},
   primaryclass = {cond-mat},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{andrews2020a,
-  title = {Fractional Quantum {{Hall}} States for Moir{\textbackslash}'e Superstructures in the {{Hofstadter}} Regime},
+  title = {Fractional Quantum {{Hall}} States for Moir\textbackslash 'e Superstructures in the {{Hofstadter}} Regime},
   author = {Andrews, Bartholomew and Soluyanov, Alexey},
   year = {2020},
   month = jun,
@@ -57,12 +70,12 @@ @article{andrews2020a
   eprint = {2004.06602},
   pages = {235312},
   doi = {10.1103/PhysRevB.101.235312},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{andrews2021,
   title = {Stability, Phase Transitions, and Numerical Breakdown of Fractional {{Chern}} Insulators in Higher {{Chern}} Bands of the {{Hofstadter}} Model},
-  author = {Andrews, Bartholomew and Neupert, Titus and M{\"o}ller, Gunnar},
+  author = {Andrews, Bartholomew and Neupert, Titus and Möller, Gunnar},
   year = {2021},
   month = sep,
   journal = {Physical Review B},
@@ -71,33 +84,33 @@ @article{andrews2021
   eprint = {2107.06047},
   pages = {125107},
   doi = {10.1103/PhysRevB.104.125107},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{arguello-luengo2022,
   title = {Tuning Long-Range Fermion-Mediated Interactions in Cold-Atom Quantum Simulators},
-  author = {{Arg{\"u}ello-Luengo}, Javier and {Gonz{\'a}lez-Tudela}, Alejandro and {Gonz{\'a}lez-Cuadra}, Daniel},
+  author = {{Argüello-Luengo}, Javier and {González-Tudela}, Alejandro and {González-Cuadra}, Daniel},
   year = {2022},
   month = mar,
   number = {arXiv:2203.17022},
   eprint = {2203.17022},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2203.17022},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{arguello-luengo2023,
   title = {Stabilization of {{Hubbard-Thouless}} Pumps through Nonlocal Fermionic Repulsion},
-  author = {{Arg{\"u}ello-Luengo}, Javier and Mark, Manfred J. and Ferlaino, Francesca and Lewenstein, Maciej and Barbiero, Luca and {Juli{\`a}-Farr{\'e}}, Sergi},
+  author = {{Argüello-Luengo}, Javier and Mark, Manfred J. and Ferlaino, Francesca and Lewenstein, Maciej and Barbiero, Luca and {Julià-Farré}, Sergi},
   year = {2023},
   month = sep,
   number = {arXiv:2308.13375},
   eprint = {2308.13375},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2308.13375},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{banuls2020,
@@ -111,7 +124,20 @@ @article{banuls2020
   eprint = {1912.08836},
   pages = {033301},
   doi = {10.1103/PhysRevResearch.2.033301},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@misc{bao2024,
+  title = {Magnon {{Spectra}} of {{Cuprates}} beyond {{Spin Wave Theory}}},
+  author = {Bao, Jiahui and Gohlke, Matthias and Rau, Jeffrey G. and Shannon, Nic},
+  year = {2024},
+  month = jul,
+  number = {arXiv:2407.20501},
+  eprint = {2407.20501},
+  primaryclass = {cond-mat},
+  publisher = {arXiv},
+  doi = {10.48550/arXiv.2407.20501},
+  archiveprefix = {arXiv}
 }
 
 @misc{bauer2023,
@@ -122,23 +148,23 @@ @misc{bauer2023
   number = {arXiv:2301.04250},
   eprint = {2301.04250},
   primaryclass = {quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2301.04250},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{beck2024,
   title = {Phase Diagram of the \${{J}}\$-\${{J}}\_d\$ {{Heisenberg Model}} on the {{Maple-Leaf Lattice}}: {{Neural}} Networks and Density Matrix Renormalization Group},
   shorttitle = {Phase Diagram of the \${{J}}\$-\${{J}}\_d\$ {{Heisenberg Model}} on the {{Maple-Leaf Lattice}}},
-  author = {Beck, Jonas and Bodky, Jonathan and Motruk, Johannes and M{\"u}ller, Tobias and Thomale, Ronny and Ghosh, Pratyay},
+  author = {Beck, Jonas and Bodky, Jonathan and Motruk, Johannes and Müller, Tobias and Thomale, Ronny and Ghosh, Pratyay},
   year = {2024},
   month = jan,
   number = {arXiv:2401.04995},
   eprint = {2401.04995},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2401.04995},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{beradze2023,
@@ -149,9 +175,9 @@ @misc{beradze2023
   number = {arXiv:2305.06911},
   eprint = {2305.06911},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2305.06911},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{bhakuni2022,
@@ -162,9 +188,9 @@ @misc{bhakuni2022
   number = {arXiv:2202.07436},
   eprint = {2202.07436},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2202.07436},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{birnkammer2020,
@@ -175,7 +201,7 @@ @article{birnkammer2020
   journal = {arXiv:2012.09185 [cond-mat, physics:quant-ph]},
   eprint = {2012.09185},
   primaryclass = {cond-mat, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{birnkammer2022,
@@ -186,9 +212,9 @@ @misc{birnkammer2022
   number = {arXiv:2202.12908},
   eprint = {2202.12908},
   primaryclass = {cond-mat, physics:hep-th, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2202.12908},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{birnkammer2023,
@@ -199,9 +225,9 @@ @misc{birnkammer2023
   number = {arXiv:2310.04500},
   eprint = {2310.04500},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2310.04500},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{block2023,
@@ -212,9 +238,9 @@ @misc{block2023
   number = {arXiv:2301.09636},
   eprint = {2301.09636},
   primaryclass = {cond-mat, physics:physics, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2301.09636},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{boesl2021,
@@ -225,7 +251,7 @@ @article{boesl2021
   journal = {arXiv:2111.11446 [cond-mat, physics:quant-ph]},
   eprint = {2111.11446},
   primaryclass = {cond-mat, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{boesl2023,
@@ -236,9 +262,9 @@ @misc{boesl2023
   number = {arXiv:2311.08455},
   eprint = {2311.08455},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2311.08455},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{bohrdt2019,
@@ -249,18 +275,18 @@ @article{bohrdt2019
   journal = {arXiv:1907.08214 [cond-mat, physics:quant-ph]},
   eprint = {1907.08214},
   primaryclass = {cond-mat, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{bohrdt2020,
   title = {Dominant Fifth-Order Correlations in Doped Quantum Anti-Ferromagnets},
-  author = {Bohrdt, A. and Wang, Y. and Koepsell, J. and {K{\'a}nasz-Nagy}, M. and Demler, E. and Grusdt, F.},
+  author = {Bohrdt, A. and Wang, Y. and Koepsell, J. and {Kánasz-Nagy}, M. and Demler, E. and Grusdt, F.},
   year = {2020},
   month = jul,
   journal = {arXiv:2007.07249 [cond-mat, physics:quant-ph]},
   eprint = {2007.07249},
   primaryclass = {cond-mat, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{bohrdt2021,
@@ -271,7 +297,7 @@ @article{bohrdt2021
   journal = {arXiv:2101.09280 [cond-mat, physics:hep-th, physics:quant-ph]},
   eprint = {2101.09280},
   primaryclass = {cond-mat, physics:hep-th, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{bohrdt2021a,
@@ -282,7 +308,7 @@ @article{bohrdt2021a
   journal = {arXiv:2108.04118 [cond-mat]},
   eprint = {2108.04118},
   primaryclass = {cond-mat},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{borla2020,
@@ -296,7 +322,7 @@ @article{borla2020
   eprint = {1909.07399},
   pages = {120503},
   doi = {10.1103/PhysRevLett.124.120503},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{borla2020a,
@@ -307,7 +333,7 @@ @article{borla2020a
   journal = {arXiv:2010.00607 [cond-mat, physics:hep-lat, physics:hep-th, physics:quant-ph]},
   eprint = {2010.00607},
   primaryclass = {cond-mat, physics:hep-lat, physics:hep-th, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{borla2021,
@@ -318,7 +344,7 @@ @article{borla2021
   journal = {arXiv:2012.08543 [cond-mat, physics:hep-lat, physics:hep-th]},
   eprint = {2012.08543},
   primaryclass = {cond-mat, physics:hep-lat, physics:hep-th},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{borla2024,
@@ -329,9 +355,9 @@ @misc{borla2024
   number = {arXiv:2402.00933},
   eprint = {2402.00933},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2402.00933},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{bornet2023,
@@ -342,9 +368,9 @@ @misc{bornet2023
   number = {arXiv:2303.08053},
   eprint = {2303.08053},
   primaryclass = {cond-mat, physics:physics, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2303.08053},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{brenig2022,
@@ -359,7 +385,7 @@ @article{brenig2022
   primaryclass = {cond-mat, physics:hep-lat},
   pages = {245105},
   doi = {10.1103/PhysRevB.105.245105},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{buessen2022,
@@ -370,22 +396,22 @@ @misc{buessen2022
   number = {arXiv:2202.05285},
   eprint = {2202.05285},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2202.05285},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{cardarelli2022,
   title = {Accessing the Topological {{Mott}} Insulator in Cold Atom Quantum Simulators with Realistic {{Rydberg}} Dressing},
-  author = {Cardarelli, Lorenzo and {Juli{\`a}-Farr{\'e}}, Sergi and Lewenstein, Maciej and Dauphin, Alexandre and M{\"u}ller, Markus},
+  author = {Cardarelli, Lorenzo and {Julià-Farré}, Sergi and Lewenstein, Maciej and Dauphin, Alexandre and Müller, Markus},
   year = {2022},
   month = mar,
   number = {arXiv:2203.14818},
   eprint = {2203.14818},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2203.14818},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{cataldi2021,
@@ -399,7 +425,7 @@ @article{cataldi2021
   eprint = {2105.02239},
   pages = {556},
   doi = {10.22331/q-2021-09-29-556},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{cervia2022,
@@ -414,7 +440,7 @@ @article{cervia2022
   primaryclass = {hep-ph, physics:nucl-th, physics:quant-ph},
   pages = {123025},
   doi = {10.1103/PhysRevD.105.123025},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{chan2022,
@@ -425,9 +451,9 @@ @misc{chan2022
   number = {arXiv:2212.04863},
   eprint = {2212.04863},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2212.04863},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{chen2022,
@@ -438,9 +464,9 @@ @misc{chen2022
   number = {arXiv:2207.12930},
   eprint = {2207.12930},
   primaryclass = {cond-mat, physics:physics, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2207.12930},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{chen2022a,
@@ -451,22 +477,22 @@ @misc{chen2022a
   number = {arXiv:2211.02754},
   eprint = {2211.02754},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2211.02754},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{chen2023,
-  title = {Chiral {{Fibonacci}} Spin Liquid in a \${\textbackslash}mathbb\{\vphantom\}{{Z}}\vphantom\{\}\_3\$ {{Kitaev}} Model},
+  title = {Chiral {{Fibonacci}} Spin Liquid in a \$\textbackslash mathbb\{\vphantom\}{{Z}}\vphantom\{\}\_3\$ {{Kitaev}} Model},
   author = {Chen, Li-Mei and Ellison, Tyler D. and Cheng, Meng and Ye, Peng and Chen, Ji-Yao},
   year = {2023},
   month = feb,
   number = {arXiv:2302.05060},
   eprint = {2302.05060},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2302.05060},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{claeys2021,
@@ -477,7 +503,7 @@ @article{claeys2021
   journal = {arXiv:2110.06951 [cond-mat, physics:quant-ph]},
   eprint = {2110.06951},
   primaryclass = {cond-mat, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{claeys2022,
@@ -491,18 +517,18 @@ @article{claeys2022
   primaryclass = {cond-mat, physics:nlin, physics:quant-ph},
   pages = {738},
   doi = {10.22331/q-2022-06-15-738},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{coissard2021,
   title = {Imaging Tunable Quantum {{Hall}} Broken-Symmetry Orders in Charge-Neutral Graphene},
-  author = {Coissard, A. and Wander, D. and Vignaud, H. and Grushin, A. G. and Repellin, C. and Watanabe, K. and Taniguchi, T. and Gay, F. and Winkelmann, C. and Courtois, H. and Sellier, H. and Sac{\'e}p{\'e}, B.},
+  author = {Coissard, A. and Wander, D. and Vignaud, H. and Grushin, A. G. and Repellin, C. and Watanabe, K. and Taniguchi, T. and Gay, F. and Winkelmann, C. and Courtois, H. and Sellier, H. and Sacépé, B.},
   year = {2021},
   month = oct,
   journal = {arXiv:2110.02811 [cond-mat]},
   eprint = {2110.02811},
   primaryclass = {cond-mat},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{cookmeyer2021,
@@ -516,7 +542,7 @@ @article{cookmeyer2021
   eprint = {2103.07438},
   pages = {087201},
   doi = {10.1103/PhysRevLett.127.087201},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{cookmeyer2022,
@@ -528,9 +554,9 @@ @misc{cookmeyer2022
   number = {arXiv:2206.04788},
   eprint = {2206.04788},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2206.04788},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{cookmeyer2023,
@@ -541,15 +567,15 @@ @misc{cookmeyer2023
   number = {arXiv:2310.18393},
   eprint = {2310.18393},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2310.18393},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{cubela2023,
   title = {Particle Zoo in a Doped Spin Chain: {{Correlated}} States of Mesons and Magnons},
   shorttitle = {Particle Zoo in a Doped Spin Chain},
-  author = {{\v C}ubela, Petar and Bohrdt, Annabelle and Greiner, Markus and Grusdt, Fabian},
+  author = {Čubela, Petar and Bohrdt, Annabelle and Greiner, Markus and Grusdt, Fabian},
   year = {2023},
   month = jan,
   journal = {Physical Review B},
@@ -559,7 +585,27 @@ @article{cubela2023
   primaryclass = {cond-mat, physics:quant-ph},
   pages = {035105},
   doi = {10.1103/PhysRevB.107.035105},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@misc{cuzzuol2024,
+  title = {Fundamental Role of Nonlocal Orders in {{1D Extended Bose-Hubbard Model}}},
+  author = {Cuzzuol, Nitya and Montorsi, Arianna},
+  year = {2024},
+  month = may
+}
+
+@misc{cuzzuol2024a,
+  title = {Nonlocal Order Parameter of Pair Superfluids},
+  author = {Cuzzuol, Nitya and Montorsi, Arianna and Barbiero, Luca},
+  year = {2024},
+  month = aug,
+  number = {arXiv:2404.15972},
+  eprint = {2404.15972},
+  primaryclass = {cond-mat, physics:quant-ph},
+  publisher = {arXiv},
+  doi = {10.48550/arXiv.2404.15972},
+  archiveprefix = {arXiv}
 }
 
 @misc{dai2022,
@@ -570,20 +616,20 @@ @misc{dai2022
   number = {arXiv:2211.00043},
   eprint = {2211.00043},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2211.00043},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{demidio2021,
   title = {Diagnosing Weakly First-Order Phase Transitions by Coupling to Order Parameters},
-  author = {D'Emidio, Jonathan and Eberharter, Alexander A. and L{\"a}uchli, Andreas M.},
+  author = {D'Emidio, Jonathan and Eberharter, Alexander A. and Läuchli, Andreas M.},
   year = {2021},
   month = jun,
   journal = {arXiv:2106.15462 [cond-mat]},
   eprint = {2106.15462},
   primaryclass = {cond-mat},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{denner2020,
@@ -597,20 +643,20 @@ @article{denner2020
   eprint = {2005.03014},
   pages = {033388},
   doi = {10.1103/PhysRevResearch.2.033388},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{desaules2023,
   title = {Ergodicity {{Breaking Under Confinement}} in {{Cold-Atom Quantum Simulators}}},
-  author = {Desaules, Jean-Yves and Su, Guo-Xian and McCulloch, Ian P. and Yang, Bing and Papi{\'c}, Zlatko and Halimeh, Jad C.},
+  author = {Desaules, Jean-Yves and Su, Guo-Xian and McCulloch, Ian P. and Yang, Bing and Papić, Zlatko and Halimeh, Jad C.},
   year = {2023},
   month = jan,
   number = {arXiv:2301.07717},
   eprint = {2301.07717},
   primaryclass = {cond-mat, physics:hep-lat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2301.07717},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{devakul2021,
@@ -622,7 +668,20 @@ @article{devakul2021
   journal = {arXiv:2109.13909 [cond-mat]},
   eprint = {2109.13909},
   primaryclass = {cond-mat},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@misc{divic2024,
+  title = {Chiral {{Spin Liquid}} and {{Quantum Phase Transition}} in the {{Triangular Lattice Hofstadter-Hubbard Model}}},
+  author = {Divic, Stefan and Soejima, Tomohiro and Crépel, Valentin and Zaletel, Michael P. and Millis, Andrew},
+  year = {2024},
+  month = jun,
+  number = {arXiv:2406.15348},
+  eprint = {2406.15348},
+  primaryclass = {cond-mat},
+  publisher = {arXiv},
+  doi = {10.48550/arXiv.2406.15348},
+  archiveprefix = {arXiv}
 }
 
 @article{doggen2020,
@@ -633,7 +692,7 @@ @article{doggen2020
   journal = {arXiv:2002.07635 [cond-mat]},
   eprint = {2002.07635},
   primaryclass = {cond-mat},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{doggen2021,
@@ -648,7 +707,7 @@ @article{doggen2021
   eprint = {2012.13722},
   pages = {L100202},
   doi = {10.1103/PhysRevB.103.L100202},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{doggen2021a,
@@ -660,7 +719,7 @@ @article{doggen2021a
   journal = {arXiv:2104.10451 [cond-mat, physics:quant-ph]},
   eprint = {2104.10451},
   primaryclass = {cond-mat, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{doggen2022,
@@ -675,7 +734,7 @@ @article{doggen2022
   primaryclass = {cond-mat},
   pages = {134204},
   doi = {10.1103/PhysRevB.105.134204},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{doggen2023,
@@ -686,9 +745,9 @@ @misc{doggen2023
   number = {arXiv:2303.07081},
   eprint = {2303.07081},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2303.07081},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{dong2020,
@@ -702,7 +761,7 @@ @article{dong2020
   eprint = {1911.12854},
   pages = {121102},
   doi = {10.1103/PhysRevB.102.121102},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{dong2023,
@@ -714,9 +773,9 @@ @misc{dong2023
   number = {arXiv:2311.05568},
   eprint = {2311.05568},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2311.05568},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{dong2023a,
@@ -731,20 +790,20 @@ @article{dong2023a
   primaryclass = {cond-mat},
   pages = {136502},
   doi = {10.1103/PhysRevLett.131.136502},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{dong2023b,
   title = {Disorder-Tunable Entanglement at Infinite Temperature},
-  author = {Dong, Hang and Desaules, Jean-Yves and Gao, Yu and Wang, Ning and Guo, Zexian and Chen, Jiachen and Zou, Yiren and Jin, Feitong and Zhu, Xuhao and Zhang, Pengfei and Li, Hekang and Wang, Zhen and Guo, Qiujiang and Zhang, Junxiang and Ying, Lei and Papi{\'c}, Zlatko},
+  author = {Dong, Hang and Desaules, Jean-Yves and Gao, Yu and Wang, Ning and Guo, Zexian and Chen, Jiachen and Zou, Yiren and Jin, Feitong and Zhu, Xuhao and Zhang, Pengfei and Li, Hekang and Wang, Zhen and Guo, Qiujiang and Zhang, Junxiang and Ying, Lei and Papić, Zlatko},
   year = {2023},
   month = dec,
   number = {arXiv:2312.10216},
   eprint = {2312.10216},
   primaryclass = {quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2312.10216},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{dornellas2023,
@@ -755,9 +814,22 @@ @misc{dornellas2023
   number = {arXiv:2312.01967},
   eprint = {2312.01967},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2312.01967},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@misc{dowarah2024,
+  title = {Phases and Phase Transition in {{Grover}}'s Algorithm with Systematic Noise},
+  author = {Dowarah, Sasanka and Zhang, Chuanwei and Khemani, Vedika and Kolodrubetz, Michael H.},
+  year = {2024},
+  month = jun,
+  number = {arXiv:2406.10344},
+  eprint = {2406.10344},
+  primaryclass = {quant-ph},
+  publisher = {arXiv},
+  doi = {10.48550/arXiv.2406.10344},
+  archiveprefix = {arXiv}
 }
 
 @misc{drescher2022,
@@ -768,22 +840,55 @@ @misc{drescher2022
   number = {arXiv:2209.03344},
   eprint = {2209.03344},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2209.03344},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{eberharter2023,
   title = {Extracting the {{Speed}} of {{Light}} from {{Matrix Product States}}},
-  author = {Eberharter, Alexander A. and Vanderstraeten, Laurens and Verstraete, Frank and L{\"a}uchli, Andreas M.},
+  author = {Eberharter, Alexander A. and Vanderstraeten, Laurens and Verstraete, Frank and Läuchli, Andreas M.},
   year = {2023},
   month = mar,
   number = {arXiv:2303.00663},
   eprint = {2303.00663},
   primaryclass = {cond-mat, physics:hep-th},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2303.00663},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@misc{eck2024,
+  title = {Generalizations of {{Kitaev}}'s Honeycomb Model from Braided Fusion Categories},
+  author = {Eck, Luisa and Fendley, Paul},
+  year = {2024},
+  month = aug,
+  number = {arXiv:2408.04006},
+  eprint = {2408.04006},
+  primaryclass = {cond-mat, physics:hep-th, physics:math-ph},
+  publisher = {arXiv},
+  doi = {10.48550/arXiv.2408.04006},
+  archiveprefix = {arXiv}
+}
+
+@misc{emonts2024,
+  title = {Effects of {{Topological Boundary Conditions}} on {{Bell Nonlocality}}},
+  author = {Emonts, Patrick and Hu, Mengyao and Aloy, Albert and Tura, Jordi},
+  year = {2024},
+  month = may
+}
+
+@misc{engineer2024,
+  title = {Equilibration of Objective Observables in a Dynamical Model of Quantum Measurements},
+  author = {Engineer, Sophie and Rivlin, Tom and Wollmann, Sabine and Malik, Mehul and Lock, Maximilian P. E.},
+  year = {2024},
+  month = mar,
+  number = {arXiv:2403.18016},
+  eprint = {2403.18016},
+  primaryclass = {quant-ph},
+  publisher = {arXiv},
+  doi = {10.48550/arXiv.2403.18016},
+  archiveprefix = {arXiv}
 }
 
 @misc{evrard2024,
@@ -794,9 +899,9 @@ @misc{evrard2024
   number = {arXiv:2401.06848},
   eprint = {2401.06848},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2401.06848},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{fang2024,
@@ -807,22 +912,22 @@ @misc{fang2024
   number = {arXiv:2402.15376},
   eprint = {2402.15376},
   primaryclass = {cond-mat, physics:physics, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2402.15376},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{fraxanet2023,
   title = {Higher-Order Topological {{Peierls}} Insulator in a Two-Dimensional Atom-Cavity System},
-  author = {Fraxanet, Joana and Dauphin, Alexandre and Lewenstein, Maciej and Barbiero, Luca and {Gonz{\'a}lez-Cuadra}, Daniel},
+  author = {Fraxanet, Joana and Dauphin, Alexandre and Lewenstein, Maciej and Barbiero, Luca and {González-Cuadra}, Daniel},
   year = {2023},
   month = may,
   number = {arXiv:2305.03409},
   eprint = {2305.03409},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2305.03409},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{fromholz2022,
@@ -833,9 +938,9 @@ @misc{fromholz2022
   number = {arXiv:2207.00385},
   eprint = {2207.00385},
   primaryclass = {cond-mat, physics:hep-th, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2207.00385},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{gagge2020,
@@ -846,7 +951,20 @@ @article{gagge2020
   journal = {arXiv:2006.13588 [cond-mat, physics:quant-ph]},
   eprint = {2006.13588},
   primaryclass = {cond-mat, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@misc{gallego-lizarribar2024,
+  title = {Probing Spontaneously Symmetry-Broken Phases with Spin-Charge Separation through Noise Correlation Measurements},
+  author = {{Gallego-Lizarribar}, Kerman and {Julià-Farré}, Sergi and Lewenstein, Maciej and Weitenberg, Christof and Barbiero, Luca and {Argüello-Luengo}, Javier},
+  year = {2024},
+  month = jul,
+  number = {arXiv:2404.08374},
+  eprint = {2404.08374},
+  primaryclass = {cond-mat, physics:quant-ph},
+  publisher = {arXiv},
+  doi = {10.48550/arXiv.2404.08374},
+  archiveprefix = {arXiv}
 }
 
 @misc{garrahan2022,
@@ -857,9 +975,9 @@ @misc{garrahan2022
   number = {arXiv:2203.08200},
   eprint = {2203.08200},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2203.08200},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{garratt2022,
@@ -870,9 +988,9 @@ @misc{garratt2022
   number = {arXiv:2207.09476},
   eprint = {2207.09476},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2207.09476},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{ge2020,
@@ -884,7 +1002,20 @@ @article{ge2020
   journal = {arXiv:2009.13350 [cond-mat, physics:quant-ph]},
   eprint = {2009.13350},
   primaryclass = {cond-mat, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@misc{glittum2024,
+  title = {Spin-Charge Separation and Resonant Valence Bond Spin Liquid in a Frustrated Doped {{Mott}} Insulator},
+  author = {Glittum, Cecilie and Štrkalj, Antonio and Prabhakaran, Dharmalingam and Goddard, Paul A. and Batista, Cristian D. and Castelnovo, Claudio},
+  year = {2024},
+  month = aug,
+  number = {arXiv:2408.03372},
+  eprint = {2408.03372},
+  primaryclass = {cond-mat},
+  publisher = {arXiv},
+  doi = {10.48550/arXiv.2408.03372},
+  archiveprefix = {arXiv}
 }
 
 @article{gohlke2023,
@@ -900,20 +1031,20 @@ @article{gohlke2023
   primaryclass = {cond-mat, physics:physics},
   pages = {206},
   doi = {10.21468/SciPostPhys.15.5.206},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{gomez-lozada2023,
   title = {Insulator Phases of {{Bose-Fermi}} Mixtures Induced by next-Neighbor Interactions between Fermions},
-  author = {{G{\'o}mez-Lozada}, F. and Franco, R. and {Silva-Valencia}, J.},
+  author = {{Gómez-Lozada}, F. and Franco, R. and {Silva-Valencia}, J.},
   year = {2023},
   month = sep,
   number = {arXiv:2309.05594},
   eprint = {2309.05594},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2309.05594},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{grusdt2019,
@@ -927,7 +1058,7 @@ @article{grusdt2019
   eprint = {1901.01113},
   pages = {224422},
   doi = {10.1103/PhysRevB.99.224422},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{hakani2023,
@@ -938,9 +1069,9 @@ @misc{hakani2023
   number = {arXiv:2311.00698},
   eprint = {2311.00698},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2311.00698},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{han2023,
@@ -951,9 +1082,9 @@ @misc{han2023
   number = {arXiv:2309.10036},
   eprint = {2309.10036},
   primaryclass = {cond-mat, physics:hep-th, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2309.10036},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{hartmann2021,
@@ -967,7 +1098,7 @@ @article{hartmann2021
   eprint = {2103.04809},
   pages = {064436},
   doi = {10.1103/PhysRevB.104.064436},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{hatsugai2022,
@@ -978,9 +1109,9 @@ @misc{hatsugai2022
   number = {arXiv:2210.11646},
   eprint = {2210.11646},
   primaryclass = {cond-mat, physics:hep-th},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2210.11646},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{hauschild2018_dup,
@@ -994,7 +1125,7 @@ @article{hauschild2018_dup
   eprint = {1711.01288},
   pages = {235163},
   doi = {10.1103/PhysRevB.98.235163},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{hauschild2018a_dup,
@@ -1007,15 +1138,15 @@ @article{hauschild2018a_dup
   eprint = {1805.00055},
   pages = {5},
   doi = {10.21468/SciPostPhysLectNotes.5},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @phdthesis{hauschild2019,
-  title = {Quantum {{Many-Body Systems Far Out}} of {{Equilibrium}} {\textemdash} {{Simulations}} with {{Tensor Networks}}},
+  title = {Quantum {{Many-Body Systems Far Out}} of {{Equilibrium}} — {{Simulations}} with {{Tensor Networks}}},
   author = {Hauschild, Johannes Michael},
   year = {2019},
-  address = {{M{\"u}nchen}},
-  school = {Technische Universit{\"a}t M{\"u}nchen}
+  address = {München},
+  school = {Technische Universität München}
 }
 
 @article{he2021,
@@ -1026,7 +1157,7 @@ @article{he2021
   journal = {arXiv:2111.01120 [cond-mat]},
   eprint = {2111.01120},
   primaryclass = {cond-mat},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{he2022,
@@ -1037,9 +1168,9 @@ @misc{he2022
   number = {arXiv:2208.02830},
   eprint = {2208.02830},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2208.02830},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{heinsdorf2023,
@@ -1050,22 +1181,22 @@ @misc{heinsdorf2023
   number = {arXiv:2309.15113},
   eprint = {2309.15113},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2309.15113},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{hemery2023,
   title = {Measuring the {{Loschmidt}} Amplitude for Finite-Energy Properties of the {{Fermi-Hubbard}} Model on an Ion-Trap Quantum Computer},
-  author = {H{\'e}mery, K{\'e}vin and Ghanem, Khaldoon and Crane, Eleanor and Campbell, Sara L. and Dreiling, Joan M. and Figgatt, Caroline and Foltz, Cameron and Gaebler, John P. and Johansen, Jacob and Mills, Michael and Moses, Steven A. and Pino, Juan M. and Ransford, Anthony and Rowe, Mary and Siegfried, Peter and Stutz, Russell P. and Dreyer, Henrik and Schuckert, Alexander and Nigmatullin, Ramil},
+  author = {Hémery, Kévin and Ghanem, Khaldoon and Crane, Eleanor and Campbell, Sara L. and Dreiling, Joan M. and Figgatt, Caroline and Foltz, Cameron and Gaebler, John P. and Johansen, Jacob and Mills, Michael and Moses, Steven A. and Pino, Juan M. and Ransford, Anthony and Rowe, Mary and Siegfried, Peter and Stutz, Russell P. and Dreyer, Henrik and Schuckert, Alexander and Nigmatullin, Ramil},
   year = {2023},
   month = sep,
   number = {arXiv:2309.10552},
   eprint = {2309.10552},
   primaryclass = {quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2309.10552},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{henry2023,
@@ -1076,9 +1207,9 @@ @misc{henry2023
   number = {arXiv:2301.11031},
   eprint = {2301.11031},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2301.11031},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{hidaka2022,
@@ -1089,22 +1220,22 @@ @misc{hidaka2022
   number = {arXiv:2205.15525},
   eprint = {2205.15525},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2205.15525},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{hirthe2022,
   title = {Magnetically Mediated Hole Pairing in Fermionic Ladders of Ultracold Atoms},
-  author = {Hirthe, Sarah and Chalopin, Thomas and Bourgund, Dominik and Bojovi{\'c}, Petar and Bohrdt, Annabelle and Demler, Eugene and Grusdt, Fabian and Bloch, Immanuel and Hilker, Timon A.},
+  author = {Hirthe, Sarah and Chalopin, Thomas and Bourgund, Dominik and Bojović, Petar and Bohrdt, Annabelle and Demler, Eugene and Grusdt, Fabian and Bloch, Immanuel and Hilker, Timon A.},
   year = {2022},
   month = mar,
   number = {arXiv:2203.10027},
   eprint = {2203.10027},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2203.10027},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{homeier2022,
@@ -1115,20 +1246,27 @@ @misc{homeier2022
   number = {arXiv:2205.08541},
   eprint = {2205.08541},
   primaryclass = {cond-mat, physics:hep-lat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2205.08541},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@misc{hu2024,
+  title = {Characterizing {{Translation-Invariant Bell Inequalities}} Using {{Tropical Algebra}} and {{Graph Polytopes}}},
+  author = {Hu, Mengyao and Vallée, Eloïc and Seynnaeve, Tim and Emonts, Patrick and Tura, Jordi},
+  year = {2024},
+  month = jul
 }
 
 @article{huang2020,
-  title = {Quantum Phase Diagram and Chiral Spin Liquid in the Extended Spin-\${\textbackslash}frac\{1\}\{2\}\$ Honeycomb {{XY}} Model},
+  title = {Quantum Phase Diagram and Chiral Spin Liquid in the Extended Spin-\$\textbackslash frac\{1\}\{2\}\$ Honeycomb {{XY}} Model},
   author = {Huang, Yixuan and Dong, Xiao-Yu and Sheng, D. N. and Ting, C. S.},
   year = {2020},
   month = aug,
   journal = {arXiv:1912.11156 [cond-mat]},
   eprint = {1912.11156},
   primaryclass = {cond-mat},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{huang2020a,
@@ -1139,7 +1277,7 @@ @article{huang2020a
   journal = {arXiv:2009.13089 [cond-mat]},
   eprint = {2009.13089},
   primaryclass = {cond-mat},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{huang2021,
@@ -1150,20 +1288,20 @@ @article{huang2021
   journal = {arXiv:2108.06676 [cond-mat]},
   eprint = {2108.06676},
   primaryclass = {cond-mat},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{huang2023,
-  title = {Magnetic Field-Induced Partially Polarized Chiral Spin Liquid in a Transition-Metal Dichalcogenide {{Moir}}{\textbackslash}'e System},
+  title = {Magnetic Field-Induced Partially Polarized Chiral Spin Liquid in a Transition-Metal Dichalcogenide {{Moir}}\textbackslash 'e System},
   author = {Huang, Yixuan and Sheng, D. N. and Zhu, Jian-Xin},
   year = {2023},
   month = jun,
   number = {arXiv:2306.03056},
   eprint = {2306.03056},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2306.03056},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{hubig2020,
@@ -1178,19 +1316,19 @@ @article{hubig2020
   eprint = {1911.01159},
   pages = {021},
   doi = {10.21468/SciPostPhys.8.2.021},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{iraola2021,
   title = {Towards a {{Topological Quantum Chemistry}} Description of Correlated Systems: The Case of the {{Hubbard}} Diamond Chain},
   shorttitle = {Towards a {{Topological Quantum Chemistry}} Description of Correlated Systems},
-  author = {Iraola, Mikel and Heinsdorf, Niclas and Tiwari, Apoorv and Lessnich, Dominik and Mertz, Thomas and Ferrari, Francesco and Fischer, Mark H. and Winter, Stephen M. and Pollmann, Frank and Neupert, Titus and Valent{\'i}, Roser and Vergniory, Maia G.},
+  author = {Iraola, Mikel and Heinsdorf, Niclas and Tiwari, Apoorv and Lessnich, Dominik and Mertz, Thomas and Ferrari, Francesco and Fischer, Mark H. and Winter, Stephen M. and Pollmann, Frank and Neupert, Titus and Valentí, Roser and Vergniory, Maia G.},
   year = {2021},
   month = jan,
   journal = {arXiv:2101.04135 [cond-mat]},
   eprint = {2101.04135},
   primaryclass = {cond-mat},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{jepsen2021,
@@ -1201,18 +1339,18 @@ @article{jepsen2021
   journal = {arXiv:2103.07866 [cond-mat, physics:physics, physics:quant-ph]},
   eprint = {2103.07866},
   primaryclass = {cond-mat, physics:physics, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{ji2020,
   title = {Dynamical Interplay between a Single Hole and a {{Hubbard}} Antiferromagnet},
-  author = {Ji, Geoffrey and Xu, Muqing and Kendrick, Lev Haldar and Chiu, Christie S. and Br{\"u}ggenj{\"u}rgen, Justus C. and Greif, Daniel and Bohrdt, Annabelle and Grusdt, Fabian and Demler, Eugene and Lebrat, Martin and Greiner, Markus},
+  author = {Ji, Geoffrey and Xu, Muqing and Kendrick, Lev Haldar and Chiu, Christie S. and Brüggenjürgen, Justus C. and Greif, Daniel and Bohrdt, Annabelle and Grusdt, Fabian and Demler, Eugene and Lebrat, Martin and Greiner, Markus},
   year = {2020},
   month = jun,
   journal = {arXiv:2006.06672 [cond-mat, physics:quant-ph]},
   eprint = {2006.06672},
   primaryclass = {cond-mat, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{jin2021,
@@ -1223,7 +1361,7 @@ @article{jin2021
   journal = {arXiv:2111.09101 [cond-mat, physics:nucl-th, physics:physics, physics:quant-ph]},
   eprint = {2111.09101},
   primaryclass = {cond-mat, physics:nucl-th, physics:physics, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{jin2023,
@@ -1234,9 +1372,9 @@ @misc{jin2023
   number = {arXiv:2301.00472},
   eprint = {2301.00472},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2301.00472},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{jin2023a,
@@ -1251,7 +1389,7 @@ @article{jin2023a
   primaryclass = {cond-mat},
   pages = {L201111},
   doi = {10.1103/PhysRevB.107.L201111},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{jin2023b,
@@ -1262,9 +1400,9 @@ @misc{jin2023b
   number = {arXiv:2309.15153},
   eprint = {2309.15153},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2309.15153},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{jobst2022,
@@ -1275,9 +1413,9 @@ @misc{jobst2022
   number = {arXiv:2203.11975},
   eprint = {2203.11975},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2203.11975},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{jones2021,
@@ -1291,44 +1429,44 @@ @article{jones2021
   eprint = {2105.12143},
   pages = {033265},
   doi = {10.1103/PhysRevResearch.3.033265},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{julia-farre2021,
   title = {Revealing the Topological Nature of the Bond Order Wave in a Strongly Correlated Quantum System},
-  author = {{Juli{\`a}-Farr{\'e}}, Sergi and {Gonz{\'a}lez-Cuadra}, Daniel and Patscheider, Alexander and Mark, Manfred J. and Ferlaino, Francesca and Lewenstein, Maciej and Barbiero, Luca and Dauphin, Alexandre},
+  author = {{Julià-Farré}, Sergi and {González-Cuadra}, Daniel and Patscheider, Alexander and Mark, Manfred J. and Ferlaino, Francesca and Lewenstein, Maciej and Barbiero, Luca and Dauphin, Alexandre},
   year = {2021},
   month = dec,
   journal = {arXiv:2112.08785 [cond-mat]},
   eprint = {2112.08785},
   primaryclass = {cond-mat},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{julia-farre2023,
   title = {Topological Stripe State in an Extended {{Fermi-Hubbard}} Model},
-  author = {{Juli{\`a}-Farr{\'e}}, Sergi and Cardarelli, Lorenzo and Lewenstein, Maciej and M{\"u}ller, Markus and Dauphin, Alexandre},
+  author = {{Julià-Farré}, Sergi and Cardarelli, Lorenzo and Lewenstein, Maciej and Müller, Markus and Dauphin, Alexandre},
   year = {2023},
   month = jan,
   number = {arXiv:2301.03312},
   eprint = {2301.03312},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2301.03312},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{julia-farre2024,
   title = {Quantized {{Thouless}} Pumps Protected by Interactions in Dimerized {{Rydberg}} Tweezer Arrays},
-  author = {{Juli{\`a}-Farr{\'e}}, Sergi and {Arg{\"u}ello-Luengo}, Javier and Henriet, Lo{\"i}c and Dauphin, Alexandre},
+  author = {{Julià-Farré}, Sergi and {Argüello-Luengo}, Javier and Henriet, Loïc and Dauphin, Alexandre},
   year = {2024},
   month = feb,
   number = {arXiv:2402.09311},
   eprint = {2402.09311},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2402.09311},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{kadow2022,
@@ -1339,9 +1477,9 @@ @misc{kadow2022
   number = {arXiv:2202.03458},
   eprint = {2202.03458},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2202.03458},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{kadow2023,
@@ -1353,9 +1491,9 @@ @misc{kadow2023
   number = {arXiv:2309.15157},
   eprint = {2309.15157},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2309.15157},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{kamal2024,
@@ -1366,22 +1504,22 @@ @misc{kamal2024
   number = {arXiv:2401.08754},
   eprint = {2401.08754},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2401.08754},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{kebric2022,
   title = {Confinement {{Induced Frustration}} in a {{One-Dimensional Z}}\_2 {{Lattice Gauge Theory}}},
-  author = {Kebri{\v c}, Matja{\v z} and Borla, Umberto and Schollw{\"o}ck, Ulrich and Moroz, Sergej and Barbiero, Luca and Grusdt, Fabian},
+  author = {Kebrič, Matjaž and Borla, Umberto and Schollwöck, Ulrich and Moroz, Sergej and Barbiero, Luca and Grusdt, Fabian},
   year = {2022},
   month = jun,
   number = {arXiv:2206.13487},
   eprint = {2206.13487},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2206.13487},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{kharkov2021,
@@ -1392,7 +1530,7 @@ @article{kharkov2021
   journal = {arXiv:2111.02385 [cond-mat, physics:nlin, physics:quant-ph]},
   eprint = {2111.02385},
   primaryclass = {cond-mat, physics:nlin, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{kidd2024,
@@ -1403,21 +1541,38 @@ @misc{kidd2024
   number = {arXiv:2402.04218},
   eprint = {2402.04218},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2402.04218},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{kiese2021,
   title = {{{TMDs}} as a Platform for Spin Liquid Physics: {{A}} Strong Coupling Study of Twisted Bilayer {{WSe}}\$\_2\$},
   shorttitle = {{{TMDs}} as a Platform for Spin Liquid Physics},
-  author = {Kiese, Dominik and He, Yuchi and Hickey, Ciar{\'a}n and Rubio, Angel and Kennes, Dante M.},
+  author = {Kiese, Dominik and He, Yuchi and Hickey, Ciarán and Rubio, Angel and Kennes, Dante M.},
   year = {2021},
   month = oct,
   journal = {arXiv:2110.10179 [cond-mat]},
   eprint = {2110.10179},
   primaryclass = {cond-mat},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@article{kirchner2024,
+  title = {Characterizing the {{Entanglement}} of {{Anyonic Systems}} Using the {{Anyonic Partial Transpose}}},
+  author = {Kirchner, Nico and Choi, Wonjune and Pollmann, Frank},
+  year = {2024},
+  month = mar,
+  journal = {arXiv.org},
+  doi = {10.1103/PhysRevB.110.085143}
+}
+
+@misc{kiss2024,
+  title = {Early {{Fault-Tolerant Quantum Algorithms}} in {{Practice}}: {{Application}} to {{Ground-State Energy Estimation}}},
+  shorttitle = {Early {{Fault-Tolerant Quantum Algorithms}} in {{Practice}}},
+  author = {Kiss, Oriel and Azad, Utkarsh and Requena, Borja and Roggero, Alessandro and Wakeham, David and Arrazola, Juan Miguel},
+  year = {2024},
+  month = may
 }
 
 @article{klein2020,
@@ -1428,7 +1583,7 @@ @article{klein2020
   journal = {arXiv:2002.01742 [cond-mat, physics:hep-th, physics:math-ph, physics:quant-ph]},
   eprint = {2002.01742},
   primaryclass = {cond-mat, physics:hep-th, physics:math-ph, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{kloss2020,
@@ -1443,7 +1598,7 @@ @article{kloss2020
   eprint = {1911.07857},
   pages = {060201},
   doi = {10.1103/PhysRevB.102.060201},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{koepsell2020,
@@ -1454,7 +1609,7 @@ @article{koepsell2020
   journal = {arXiv:2009.04440 [cond-mat, physics:quant-ph]},
   eprint = {2009.04440},
   primaryclass = {cond-mat, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{kohlert2021,
@@ -1465,7 +1620,20 @@ @article{kohlert2021
   journal = {arXiv:2106.15586 [cond-mat, physics:quant-ph]},
   eprint = {2106.15586},
   primaryclass = {cond-mat, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@misc{korbmacher2024,
+  title = {Topological Floating Phase of Dipolar Bosons in an Optical Ladder},
+  author = {Korbmacher, Henning and {Domínguez-Castro}, Gustavo A. and Łącki, Mateusz and Zakrzewski, Jakub and Santos, Luis},
+  year = {2024},
+  month = jul,
+  number = {arXiv:2407.15710},
+  eprint = {2407.15710},
+  primaryclass = {cond-mat},
+  publisher = {arXiv},
+  doi = {10.48550/arXiv.2407.15710},
+  archiveprefix = {arXiv}
 }
 
 @article{kottmann2020,
@@ -1476,18 +1644,18 @@ @article{kottmann2020
   journal = {arXiv:2003.09905 [cond-mat, physics:quant-ph]},
   eprint = {2003.09905},
   primaryclass = {cond-mat, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{kottmann2021,
   title = {Supersolid-{{Superfluid}} Phase Separation in the Extended {{Bose-Hubbard}} Model},
-  author = {Kottmann, Korbinian and Haller, Andreas and Ac{\'i}n, Antonio and Astrakharchik, Grigory E. and Lewenstein, Maciej},
+  author = {Kottmann, Korbinian and Haller, Andreas and Acín, Antonio and Astrakharchik, Grigory E. and Lewenstein, Maciej},
   year = {2021},
   month = jun,
   journal = {arXiv:2106.05893 [cond-mat, physics:quant-ph]},
   eprint = {2106.05893},
   primaryclass = {cond-mat, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{kottmann2022,
@@ -1498,9 +1666,22 @@ @misc{kottmann2022
   number = {arXiv:2210.11130},
   eprint = {2210.11130},
   primaryclass = {quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2210.11130},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@misc{koyluoglu2024,
+  title = {Floquet Engineering of Interactions and Entanglement in Periodically Driven {{Rydberg}} Chains},
+  author = {Köylüoğlu, Nazlı Uğur and Maskara, Nishad and Feldmeier, Johannes and Lukin, Mikhail D.},
+  year = {2024},
+  month = aug,
+  number = {arXiv:2408.02741},
+  eprint = {2408.02741},
+  primaryclass = {cond-mat, physics:physics, physics:quant-ph},
+  publisher = {arXiv},
+  doi = {10.48550/arXiv.2408.02741},
+  archiveprefix = {arXiv}
 }
 
 @article{kraus2021,
@@ -1511,7 +1692,7 @@ @article{kraus2021
   journal = {arXiv:2112.10386 [cond-mat, physics:quant-ph]},
   eprint = {2112.10386},
   primaryclass = {cond-mat, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{kuhlenkamp2022,
@@ -1522,9 +1703,9 @@ @misc{kuhlenkamp2022
   number = {arXiv:2209.05506},
   eprint = {2209.05506},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2209.05506},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{kumar2022,
@@ -1535,9 +1716,9 @@ @misc{kumar2022
   number = {arXiv:2208.13708},
   eprint = {2208.13708},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2208.13708},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{kumar2023,
@@ -1548,9 +1729,9 @@ @misc{kumar2023
   number = {arXiv:2307.00062},
   eprint = {2307.00062},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2307.00062},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{kuno2020,
@@ -1561,7 +1742,7 @@ @article{kuno2020
   journal = {arXiv:2007.11215 [cond-mat]},
   eprint = {2007.11215},
   primaryclass = {cond-mat},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{kuno2021,
@@ -1575,7 +1756,7 @@ @article{kuno2021
   eprint = {2102.09325},
   pages = {045113},
   doi = {10.1103/PhysRevB.104.045113},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{kuno2021a,
@@ -1589,20 +1770,33 @@ @article{kuno2021a
   eprint = {2107.09498},
   pages = {125146},
   doi = {10.1103/PhysRevB.104.125146},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{kuno2023,
-  title = {\${{Z}}\_2{\textbackslash}times {{Z}}\_2\$ Symmetry and \${{Z}}\_4\$ {{Berry}} Phase of Bosonic Ladder},
+  title = {\${{Z}}\_2\textbackslash times {{Z}}\_2\$ Symmetry and \${{Z}}\_4\$ {{Berry}} Phase of Bosonic Ladder},
   author = {Kuno, Yoshihito and Hatsugai, Yasuhiro},
   year = {2023},
   month = apr,
   number = {arXiv:2304.09533},
   eprint = {2304.09533},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2304.09533},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@misc{kupczynski2024,
+  title = {{{DMRG Analysis}} of {{Magnetic Order}} in the {{Zigzag Edges}} of {{Hexagonal CrN Nanoribbons}}},
+  author = {Kupczyński, Michał and Pawłowski, Jarosław and Mogulkoc, Aybey and Modarresi, Mohsen},
+  year = {2024},
+  month = aug,
+  number = {arXiv:2408.06754},
+  eprint = {2408.06754},
+  primaryclass = {cond-mat},
+  publisher = {arXiv},
+  doi = {10.48550/arXiv.2408.06754},
+  archiveprefix = {arXiv}
 }
 
 @misc{lane2023,
@@ -1613,9 +1807,16 @@ @misc{lane2023
   number = {arXiv:2305.03867},
   eprint = {2305.03867},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2305.03867},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@misc{lastres2024a,
+  title = {Entanglement Asymmetry in the Critical {{XXZ}} Spin Chain},
+  author = {Lastres, Marco and Murciano, Sara and Ares, Filiberto and Calabrese, Pasquale},
+  year = {2024},
+  month = jul
 }
 
 @misc{lebrat2023,
@@ -1626,9 +1827,9 @@ @misc{lebrat2023
   number = {arXiv:2308.12269},
   eprint = {2308.12269},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2308.12269},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{ledinauskas2023,
@@ -1639,9 +1840,22 @@ @misc{ledinauskas2023
   number = {arXiv:2307.15521},
   eprint = {2307.15521},
   primaryclass = {quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2307.15521},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@misc{ledinauskas2024,
+  title = {Universal {{Performance Gap}} of {{Neural Quantum States Applied}} to the {{Hofstadter-Bose-Hubbard Model}}},
+  author = {Ledinauskas, Eimantas and Anisimovas, Egidijus},
+  year = {2024},
+  month = jul,
+  number = {arXiv:2405.01981},
+  eprint = {2405.01981},
+  primaryclass = {cond-mat, physics:quant-ph},
+  publisher = {arXiv},
+  doi = {10.48550/arXiv.2405.01981},
+  archiveprefix = {arXiv}
 }
 
 @article{lee2020,
@@ -1652,7 +1866,7 @@ @article{lee2020
   journal = {arXiv:2010.09999 [quant-ph]},
   eprint = {2010.09999},
   primaryclass = {quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{lee2021,
@@ -1663,7 +1877,7 @@ @article{lee2021
   journal = {arXiv:2105.12391 [quant-ph]},
   eprint = {2105.12391},
   primaryclass = {quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{lerose2020,
@@ -1674,7 +1888,7 @@ @article{lerose2020
   journal = {arXiv:2009.10105 [cond-mat, physics:quant-ph]},
   eprint = {2009.10105},
   primaryclass = {cond-mat, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{lerose2021,
@@ -1688,7 +1902,7 @@ @article{lerose2021
   eprint = {2104.07607},
   pages = {035137},
   doi = {10.1103/PhysRevB.104.035137},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{li2021,
@@ -1702,7 +1916,7 @@ @article{li2021
   eprint = {2012.02663},
   pages = {043331},
   doi = {10.1103/PhysRevA.103.043331},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{li2023,
@@ -1713,9 +1927,22 @@ @misc{li2023
   number = {arXiv:2305.06918},
   eprint = {2305.06918},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2305.06918},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@misc{li2024,
+  title = {Quantum Metrological Capability as a Probe for Quantum Phase Transition},
+  author = {Li, Xiangbei and Chu, Yaoming and Zhang, Shaoliang and Cai, Jianming},
+  year = {2024},
+  month = aug,
+  number = {arXiv:2408.09783},
+  eprint = {2408.09783},
+  primaryclass = {quant-ph},
+  publisher = {arXiv},
+  doi = {10.48550/arXiv.2408.09783},
+  archiveprefix = {arXiv}
 }
 
 @misc{liu2022,
@@ -1726,9 +1953,22 @@ @misc{liu2022
   number = {arXiv:2211.11786},
   eprint = {2211.11786},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2211.11786},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@misc{liu2024,
+  title = {Supersolidity and {{Simplex Phases}} in {{Spin-1 Rydberg Atom Arrays}}},
+  author = {Liu, Vincent S. and Bintz, Marcus and Block, Maxwell and Samajdar, Rhine and Kemp, Jack and Yao, Norman Y.},
+  year = {2024},
+  month = jul,
+  number = {arXiv:2407.17554},
+  eprint = {2407.17554},
+  primaryclass = {cond-mat, physics:quant-ph},
+  publisher = {arXiv},
+  doi = {10.48550/arXiv.2407.17554},
+  archiveprefix = {arXiv}
 }
 
 @misc{lloyd2023,
@@ -1739,9 +1979,9 @@ @misc{lloyd2023
   number = {arXiv:2310.16043},
   eprint = {2310.16043},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2310.16043},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{luo2022,
@@ -1752,9 +1992,9 @@ @misc{luo2022
   number = {arXiv:2212.14223},
   eprint = {2212.14223},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2212.14223},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{ma2022,
@@ -1765,9 +2005,22 @@ @misc{ma2022
   number = {arXiv:2209.02723},
   eprint = {2209.02723},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2209.02723},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@misc{madhusudan2024,
+  title = {Commensurate Supersolids and Re-Entrant Transitions in an Extended {{Bose-Hubbard}} Ladder},
+  author = {Madhusudan, Ashwath N. and Santra, Gopal Chandra and Kaur, Inderpreet and Li, Weibin and Nath, Rejish},
+  year = {2024},
+  month = aug,
+  number = {arXiv:2407.20107},
+  eprint = {2407.20107},
+  primaryclass = {cond-mat, physics:quant-ph},
+  publisher = {arXiv},
+  doi = {10.48550/arXiv.2407.20107},
+  archiveprefix = {arXiv}
 }
 
 @article{mahyaeh2020,
@@ -1778,21 +2031,47 @@ @article{mahyaeh2020
   journal = {arXiv:2003.07812 [cond-mat]},
   eprint = {2003.07812},
   primaryclass = {cond-mat},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@misc{manovitz2024,
+  title = {Quantum Coarsening and Collective Dynamics on a Programmable Quantum Simulator},
+  author = {Manovitz, Tom and Li, Sophie H. and Ebadi, Sepehr and Samajdar, Rhine and Geim, Alexandra A. and Evered, Simon J. and Bluvstein, Dolev and Zhou, Hengyun and Köylüoğlu, Nazli Uğur and Feldmeier, Johannes and Dolgirev, Pavel E. and Maskara, Nishad and Kalinowski, Marcin and Sachdev, Subir and Huse, David A. and Greiner, Markus and Vuletić, Vladan and Lukin, Mikhail D.},
+  year = {2024},
+  month = jul,
+  number = {arXiv:2407.03249},
+  eprint = {2407.03249},
+  primaryclass = {cond-mat, physics:physics, physics:quant-ph},
+  publisher = {arXiv},
+  doi = {10.48550/arXiv.2407.03249},
+  archiveprefix = {arXiv}
+}
+
+@misc{mariella2024,
+  title = {Order {{Parameter Discovery}} for {{Quantum Many-Body Systems}}},
+  author = {Mariella, Nicola and Murphy, Tara and Di Marcantonio, Francesco and Najafi, Khadijeh and Vallecorsa, Sofia and Zhuk, Sergiy and Rico, Enrique},
+  year = {2024},
+  month = aug,
+  number = {arXiv:2408.01400},
+  eprint = {2408.01400},
+  primaryclass = {quant-ph},
+  publisher = {arXiv},
+  doi = {10.48550/arXiv.2408.01400},
+  archiveprefix = {arXiv}
 }
 
 @misc{mendez-cordoba2022,
   title = {From Edge to Bulk: {{Cavity}} Induced Displacement of Topological Non-Local Qubits},
   shorttitle = {From Edge to Bulk},
-  author = {{M{\'e}ndez-C{\'o}rdoba}, F. P. M. and Rodr{\'i}guez, F. J. and Tejedor, C. and Quiroga, L.},
+  author = {{Méndez-Córdoba}, F. P. M. and Rodríguez, F. J. and Tejedor, C. and Quiroga, L.},
   year = {2022},
   month = dec,
   number = {arXiv:2211.14145},
   eprint = {2211.14145},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2211.14145},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{metz2022,
@@ -1803,14 +2082,27 @@ @misc{metz2022
   number = {arXiv:2201.11790},
   eprint = {2201.11790},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2201.11790},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@misc{mitra2024,
+  title = {Quantum {{Spin Liquids}} in {{Weak Mott Insulators}} with a {{Spin-Orbit Coupling}}},
+  author = {Mitra, Asimpunya and Schultz, Daniel J. and Kim, Yong Baek},
+  year = {2024},
+  month = apr,
+  number = {arXiv:2404.05806},
+  eprint = {2404.05806},
+  primaryclass = {cond-mat},
+  publisher = {arXiv},
+  doi = {10.48550/arXiv.2404.05806},
+  archiveprefix = {arXiv}
 }
 
 @article{morera2020,
   title = {Entanglement Entropy in Low-Energy Field Theories at Finite Chemical Potential},
-  author = {Morera, Ivan and Fr{\'e}rot, Ir{\'e}n{\'e}e and Polls, Artur and {Juli{\'a}-D{\'i}az}, Bruno},
+  author = {Morera, Ivan and Frérot, Irénée and Polls, Artur and {Juliá-Díaz}, Bruno},
   year = {2020},
   month = jul,
   journal = {Physical Review Research},
@@ -1819,18 +2111,18 @@ @article{morera2020
   eprint = {1907.01204},
   pages = {033016},
   doi = {10.1103/PhysRevResearch.2.033016},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{morera2020a,
   title = {Universal Dimerized Quantum Droplets in a One-Dimensional Lattice},
-  author = {Morera, Ivan and Astrakharchik, Grigori E. and Polls, Artur and {Juli{\'a}-D{\'i}az}, Bruno},
+  author = {Morera, Ivan and Astrakharchik, Grigori E. and Polls, Artur and {Juliá-Díaz}, Bruno},
   year = {2020},
   month = jul,
   journal = {arXiv:2007.01786 [cond-mat, physics:quant-ph]},
   eprint = {2007.01786},
   primaryclass = {cond-mat, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{morera2021,
@@ -1841,20 +2133,20 @@ @article{morera2021
   journal = {arXiv:2106.09600 [cond-mat]},
   eprint = {2106.09600},
   primaryclass = {cond-mat},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{morera2022,
   title = {High-Temperature Kinetic Magnetism in Triangular Lattices},
-  author = {Morera, Ivan and {Kan{\'a}sz-Nagy}, M{\'a}rton and Smolenski, Tomasz and Ciorciaro, Livio and Imamo{\u g}lu, Ata{\c c} and Demler, Eugene},
+  author = {Morera, Ivan and {Kanász-Nagy}, Márton and Smolenski, Tomasz and Ciorciaro, Livio and Imamoğlu, Ataç and Demler, Eugene},
   year = {2022},
   month = sep,
   number = {arXiv:2209.05398},
   eprint = {2209.05398},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2209.05398},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{morera2023,
@@ -1866,9 +2158,9 @@ @misc{morera2023
   number = {arXiv:2312.00768},
   eprint = {2312.00768},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2312.00768},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{morera2024,
@@ -1879,9 +2171,9 @@ @misc{morera2024
   number = {arXiv:2402.14074},
   eprint = {2402.14074},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2402.14074},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{motruk2020,
@@ -1892,20 +2184,20 @@ @article{motruk2020
   journal = {arXiv:2005.09860 [cond-mat, physics:quant-ph]},
   eprint = {2005.09860},
   primaryclass = {cond-mat, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{motruk2022,
-  title = {Kagome {{Chiral Spin Liquid}} in {{Transition Metal Dichalcogenide Moir}}{\textbackslash}'\{e\} {{Bilayers}}},
+  title = {Kagome {{Chiral Spin Liquid}} in {{Transition Metal Dichalcogenide Moir}}\textbackslash '\{e\} {{Bilayers}}},
   author = {Motruk, Johannes and Rossi, Dario and Abanin, Dmitry A. and Rademaker, Louk},
   year = {2022},
   month = nov,
   number = {arXiv:2211.15696},
   eprint = {2211.15696},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2211.15696},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{murciano2023,
@@ -1916,9 +2208,9 @@ @misc{murciano2023
   number = {arXiv:2302.04325},
   eprint = {2302.04325},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2302.04325},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{nakamura2024,
@@ -1929,9 +2221,9 @@ @misc{nakamura2024
   number = {arXiv:2401.17552},
   eprint = {2401.17552},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2401.17552},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{nietner2022,
@@ -1942,9 +2234,9 @@ @misc{nietner2022
   number = {arXiv:2207.10696},
   eprint = {2207.10696},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2207.10696},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{nikolaenko2023,
@@ -1955,9 +2247,9 @@ @misc{nikolaenko2023
   number = {arXiv:2306.09402},
   eprint = {2306.09402},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2306.09402},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{ogino2022,
@@ -1968,20 +2260,20 @@ @misc{ogino2022
   number = {arXiv:2206.13048},
   eprint = {2206.13048},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2206.13048},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{oppong2020,
   title = {Probing Transport and Slow Relaxation in the Mass-Imbalanced {{Fermi-Hubbard}} Model},
-  author = {Oppong, Nelson Darkwah and Pasqualetti, Giulio and Bettermann, Oscar and Zechmann, Philip and Knap, Michael and Bloch, Immanuel and F{\"o}lling, Simon},
+  author = {Oppong, Nelson Darkwah and Pasqualetti, Giulio and Bettermann, Oscar and Zechmann, Philip and Knap, Michael and Bloch, Immanuel and Fölling, Simon},
   year = {2020},
   month = nov,
   journal = {arXiv:2011.12411 [cond-mat, physics:quant-ph]},
   eprint = {2011.12411},
   primaryclass = {cond-mat, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{orito2021,
@@ -1995,20 +2287,27 @@ @article{orito2021
   eprint = {2012.13659},
   pages = {L060301},
   doi = {10.1103/PhysRevB.103.L060301},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@misc{orozco-ruiz2024,
+  title = {A Way around the Exponential Scaling in Optimal Quantum Control},
+  author = {{Orozco-Ruiz}, Modesto and Le, Nguyen H. and Mintert, Florian},
+  year = {2024},
+  month = may
 }
 
 @misc{parella-dilme2023,
   title = {Reducing {{Entanglement With Physically-Inspired Fermion-To-Qubit Mappings}}},
-  author = {{Parella-Dilm{\'e}}, Teodor and Kottmann, Korbinian and Zambrano, Leonardo and Mortimer, Luke and Kottmann, Jakob S. and Ac{\'i}n, Antonio},
+  author = {{Parella-Dilmé}, Teodor and Kottmann, Korbinian and Zambrano, Leonardo and Mortimer, Luke and Kottmann, Jakob S. and Acín, Antonio},
   year = {2023},
   month = nov,
   number = {arXiv:2311.07409},
   eprint = {2311.07409},
   primaryclass = {quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2311.07409},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{parker2021,
@@ -2022,7 +2321,7 @@ @article{parker2021
   eprint = {2012.09885},
   pages = {027601},
   doi = {10.1103/PhysRevLett.127.027601},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{parker2021a,
@@ -2033,20 +2332,20 @@ @article{parker2021a
   journal = {arXiv:2112.13837 [cond-mat]},
   eprint = {2112.13837},
   primaryclass = {cond-mat},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{pasnoori2023,
-  title = {Spin Fractionalization and Zero Modes in the Spin-\${\textbackslash}frac\{1\}\{2\}\$ {{XXZ}} Chain with Boundary Fields},
+  title = {Spin Fractionalization and Zero Modes in the Spin-\$\textbackslash frac\{1\}\{2\}\$ {{XXZ}} Chain with Boundary Fields},
   author = {Pasnoori, Parameshwar R. and Tang, Yicheng and Lee, Junhyun and Pixley, J. H. and Andrei, Natan and Azaria, Patrick},
   year = {2023},
   month = dec,
   number = {arXiv:2312.05970},
   eprint = {2312.05970},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2312.05970},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{passetti2022,
@@ -2057,25 +2356,25 @@ @misc{passetti2022
   number = {arXiv:2212.03011},
   eprint = {2212.03011},
   primaryclass = {cond-mat, physics:physics, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2212.03011},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{pena2021,
   title = {Fractional Resonances and Prethermal States in {{Floquet}} Systems},
-  author = {Pe{\~n}a, R. and Bastidas, V. M. and Torres, F. and Munro, W. J. and Romero, G.},
+  author = {Peña, R. and Bastidas, V. M. and Torres, F. and Munro, W. J. and Romero, G.},
   year = {2021},
   month = nov,
   journal = {arXiv:2111.06949 [cond-mat, physics:quant-ph]},
   eprint = {2111.06949},
   primaryclass = {cond-mat, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{pena2022,
   title = {Stable Many-Body Resonances in Open Quantum Systems},
-  author = {Pe{\~n}a, Ruben and Kyaw, Thi Ha and Romero, Guillermo},
+  author = {Peña, Ruben and Kyaw, Thi Ha and Romero, Guillermo},
   year = {2022},
   month = dec,
   journal = {Symmetry},
@@ -2085,7 +2384,7 @@ @article{pena2022
   primaryclass = {cond-mat, physics:quant-ph},
   pages = {2562},
   doi = {10.3390/sym14122562},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{pokart2023,
@@ -2096,9 +2395,9 @@ @misc{pokart2023
   number = {arXiv:2309.07961},
   eprint = {2309.07961},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2309.07961},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{prembabu2022,
@@ -2109,9 +2408,9 @@ @misc{prembabu2022
   number = {arXiv:2208.12258},
   eprint = {2208.12258},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2208.12258},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{quella2020,
@@ -2123,29 +2422,36 @@ @article{quella2020
   journal = {arXiv:2011.12679 [cond-mat, physics:math-ph]},
   eprint = {2011.12679},
   primaryclass = {cond-mat, physics:math-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{rader2019,
   title = {Floating {{Phases}} in {{One-Dimensional Rydberg Ising Chains}}},
-  author = {Rader, Michael and L{\"a}uchli, Andreas M.},
+  author = {Rader, Michael and Läuchli, Andreas M.},
   year = {2019},
   month = aug,
   journal = {arXiv:1908.02068 [cond-mat, physics:quant-ph]},
   eprint = {1908.02068},
   primaryclass = {cond-mat, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@misc{rakov2024,
+  title = {Gapless Deconfined Phase in a \$\textbackslash mathbb\{\vphantom\}{{Z}}\vphantom\{\}\_{{N}}\$ Symmetric {{Hamiltonian}} Created in a Cold-Atom Setup},
+  author = {Rakov, Mykhailo V. and Tagliacozzo, Luca and Lewenstein, Maciej and Zakrzewski, Jakub and Chanda, Titas},
+  year = {2024},
+  month = jul
 }
 
 @article{repellin2020,
   title = {Hall Drift of Fractional {{Chern}} Insulators in Few-Boson Systems},
-  author = {Repellin, C. and L{\'e}onard, J. and Goldman, N.},
+  author = {Repellin, C. and Léonard, J. and Goldman, N.},
   year = {2020},
   month = jul,
   journal = {arXiv:2005.09689 [cond-mat, physics:quant-ph]},
   eprint = {2005.09689},
   primaryclass = {cond-mat, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{rigobello2023,
@@ -2156,9 +2462,9 @@ @misc{rigobello2023
   number = {arXiv:2308.04488},
   eprint = {2308.04488},
   primaryclass = {cond-mat, physics:hep-lat, physics:hep-ph, physics:physics, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2308.04488},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{robertson2021,
@@ -2169,7 +2475,7 @@ @article{robertson2021
   journal = {arXiv:2110.07078 [cond-mat, physics:hep-th, physics:quant-ph]},
   eprint = {2110.07078},
   primaryclass = {cond-mat, physics:hep-th, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{robertson2023,
@@ -2181,9 +2487,9 @@ @misc{robertson2023
   number = {arXiv:2301.08609},
   eprint = {2301.08609},
   primaryclass = {quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2301.08609},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{rodriguez-nieva2020,
@@ -2194,7 +2500,7 @@ @article{rodriguez-nieva2020
   journal = {arXiv:2011.07058 [cond-mat]},
   eprint = {2011.07058},
   primaryclass = {cond-mat},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{romen2023,
@@ -2205,9 +2511,9 @@ @misc{romen2023
   number = {arXiv:2311.06350},
   eprint = {2311.06350},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2311.06350},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{roy2020,
@@ -2221,7 +2527,7 @@ @article{roy2020
   eprint = {2004.14370},
   pages = {083104},
   doi = {10.1088/1742-5468/aba498},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{roy2020a,
@@ -2232,7 +2538,7 @@ @article{roy2020a
   journal = {arXiv:2007.06874 [cond-mat, physics:hep-lat, physics:nlin, physics:quant-ph]},
   eprint = {2007.06874},
   primaryclass = {cond-mat, physics:hep-lat, physics:nlin, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{roy2020b,
@@ -2246,7 +2552,7 @@ @article{roy2020b
   eprint = {1911.08120},
   pages = {075419},
   doi = {10.1103/PhysRevB.101.075419},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{roy2023,
@@ -2257,9 +2563,9 @@ @misc{roy2023
   number = {arXiv:2306.04346},
   eprint = {2306.04346},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2306.04346},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{roy2023a,
@@ -2270,9 +2576,9 @@ @misc{roy2023a
   number = {arXiv:2302.06289},
   eprint = {2302.06289},
   primaryclass = {cond-mat, physics:hep-th, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2302.06289},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{roy2023b,
@@ -2283,9 +2589,9 @@ @misc{roy2023b
   number = {arXiv:2310.10538},
   eprint = {2310.10538},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2310.10538},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{roy2023c,
@@ -2296,20 +2602,33 @@ @misc{roy2023c
   number = {arXiv:2312.05566},
   eprint = {2312.05566},
   primaryclass = {cond-mat, physics:hep-lat, physics:hep-th, physics:math-ph, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2312.05566},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{rzepkowski2022,
   title = {{{DMRG}} and {{Monte Carlo}} Studies of {{CrI}}\_3 Magnetic Phases and the Phase Transition},
-  author = {Rzepkowski, Bartosz and Kupczy{\'n}ski, Micha{\l} and Potasz, Pawe{\l} and W{\'o}js, Arkadiusz},
+  author = {Rzepkowski, Bartosz and Kupczyński, Michał and Potasz, Paweł and Wójs, Arkadiusz},
   year = {2022},
   month = jan,
   journal = {arXiv:2201.02586 [cond-mat]},
   eprint = {2201.02586},
   primaryclass = {cond-mat},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@misc{safari2024,
+  title = {Quantum {{Fluctuations Suppress}} the {{Critical Fields}} in {{BaCo}}\$\_2\$({{AsO}}\$\_4\$)\$\_2\$},
+  author = {Safari, Shiva and {Bateman-Hemphill}, William and Mitra, Asimpunya and Desrochers, Félix and Zhang, Emily Z. and Shafeek, Lubuna and Ferrenti, Austin and McQueen, Tyrel M. and Shekhter, Arkady and Köllö, Zoltán and Kim, Yong Baek and Ramshaw, B. J. and Modic, K. A.},
+  year = {2024},
+  month = mar,
+  number = {arXiv:2403.15315},
+  eprint = {2403.15315},
+  primaryclass = {cond-mat, physics:quant-ph},
+  publisher = {arXiv},
+  doi = {10.48550/arXiv.2403.15315},
+  archiveprefix = {arXiv}
 }
 
 @misc{sahay2023,
@@ -2320,9 +2639,9 @@ @misc{sahay2023
   number = {arXiv:2308.10935},
   eprint = {2308.10935},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2308.10935},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{sahu2023,
@@ -2333,9 +2652,16 @@ @misc{sahu2023
   number = {arXiv:2307.04267},
   eprint = {2307.04267},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2307.04267},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@misc{saiphet2024,
+  title = {Simulation of the {{Dissipative Dynamics}} of {{Strongly Interacting NV Centers}} with {{Tensor Networks}}},
+  author = {Saiphet, Jirawat and Braun, Daniel},
+  year = {2024},
+  month = jun
 }
 
 @misc{sala2023,
@@ -2346,9 +2672,9 @@ @misc{sala2023
   number = {arXiv:2307.08761},
   eprint = {2307.08761},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2307.08761},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{sala2024,
@@ -2359,9 +2685,9 @@ @misc{sala2024
   number = {arXiv:2403.04843},
   eprint = {2403.04843},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2403.04843},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{sander2023,
@@ -2372,14 +2698,27 @@ @misc{sander2023
   number = {arXiv:2305.02337},
   eprint = {2305.02337},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2305.02337},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@misc{sander2024,
+  title = {Quantum {{Convolutional Neural Network}} for {{Phase Recognition}} in {{Two Dimensions}}},
+  author = {Sander, Leon C. and McMahon, Nathan A. and Zapletal, Petr and Hartmann, Michael J.},
+  year = {2024},
+  month = jul,
+  number = {arXiv:2407.04114},
+  eprint = {2407.04114},
+  primaryclass = {cond-mat, physics:quant-ph},
+  publisher = {arXiv},
+  doi = {10.48550/arXiv.2407.04114},
+  archiveprefix = {arXiv}
 }
 
 @article{scholl2021,
   title = {Programmable Quantum Simulation of {{2D}} Antiferromagnets with Hundreds of {{Rydberg}} Atoms},
-  author = {Scholl, Pascal and Schuler, Michael and Williams, Hannah J. and Eberharter, Alexander A. and Barredo, Daniel and Schymik, Kai-Niklas and Lienhard, Vincent and Henry, Louis-Paul and Lang, Thomas C. and Lahaye, Thierry and L{\"a}uchli, Andreas M. and Browaeys, Antoine},
+  author = {Scholl, Pascal and Schuler, Michael and Williams, Hannah J. and Eberharter, Alexander A. and Barredo, Daniel and Schymik, Kai-Niklas and Lienhard, Vincent and Henry, Louis-Paul and Lang, Thomas C. and Lahaye, Thierry and Läuchli, Andreas M. and Browaeys, Antoine},
   year = {2021},
   month = jul,
   journal = {Nature},
@@ -2388,18 +2727,18 @@ @article{scholl2021
   eprint = {2012.12268},
   pages = {233--238},
   doi = {10.1038/s41586-021-03585-1},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{schoonderwoerd2019,
   title = {Interaction-Driven Plateau Transition between Integer and Fractional {{Chern Insulators}}},
-  author = {Schoonderwoerd, Leon and Pollmann, Frank and M{\"o}ller, Gunnar},
+  author = {Schoonderwoerd, Leon and Pollmann, Frank and Möller, Gunnar},
   year = {2019},
   month = aug,
   journal = {arXiv:1908.00988 [cond-mat]},
   eprint = {1908.00988},
   primaryclass = {cond-mat},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{schuckert2022,
@@ -2410,9 +2749,9 @@ @misc{schuckert2022
   number = {arXiv:2206.01756},
   eprint = {2206.01756},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2206.01756},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{schuckert2023,
@@ -2423,22 +2762,22 @@ @misc{schuckert2023
   number = {arXiv:2310.19869},
   eprint = {2310.19869},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2310.19869},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{schultz2023,
   title = {Electric Field Control of a Quantum Spin Liquid in Weak {{Mott}} Insulators},
-  author = {Schultz, Daniel J. and Khoury, Alexandre and Desrochers, F{\'e}lix and Tavakol, Omid and Zhang, Emily Z. and Kim, Yong Baek},
+  author = {Schultz, Daniel J. and Khoury, Alexandre and Desrochers, Félix and Tavakol, Omid and Zhang, Emily Z. and Kim, Yong Baek},
   year = {2023},
   month = aug,
   number = {arXiv:2309.00037},
   eprint = {2309.00037},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2309.00037},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{schulz2018,
@@ -2453,7 +2792,7 @@ @article{schulz2018
   eprint = {1805.01036},
   pages = {180201},
   doi = {10.1103/PhysRevB.98.180201},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{secular2024,
@@ -2465,9 +2804,9 @@ @misc{secular2024
   number = {arXiv:2401.05301},
   eprint = {2401.05301},
   primaryclass = {cond-mat, physics:physics, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2401.05301},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{semeghini2021,
@@ -2478,7 +2817,7 @@ @article{semeghini2021
   journal = {arXiv:2104.04119 [cond-mat, physics:physics, physics:quant-ph]},
   eprint = {2104.04119},
   primaryclass = {cond-mat, physics:physics, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{shaffer2023,
@@ -2489,9 +2828,9 @@ @misc{shaffer2023
   number = {arXiv:2308.08588},
   eprint = {2308.08588},
   primaryclass = {cond-mat, physics:physics, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2308.08588},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{shiozaki2023,
@@ -2502,9 +2841,16 @@ @misc{shiozaki2023
   number = {arXiv:2305.08109},
   eprint = {2305.08109},
   primaryclass = {cond-mat, physics:hep-th, physics:math-ph, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2305.08109},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@misc{silva-valencia2024,
+  title = {Ground State of a Mixture of {{SU}}(\$3\$) Fermions and Scalar Bosons},
+  author = {{Silva-Valencia}, J. and {Mendoza-Arenas}, J. J.},
+  year = {2024},
+  month = jul
 }
 
 @misc{sim2022,
@@ -2515,9 +2861,9 @@ @misc{sim2022
   number = {arXiv:2211.16094},
   eprint = {2211.16094},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2211.16094},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{sim2022a,
@@ -2528,9 +2874,9 @@ @misc{sim2022a
   number = {arXiv:2209.00720},
   eprint = {2209.00720},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2209.00720},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{sim2023,
@@ -2542,9 +2888,9 @@ @misc{sim2023
   number = {arXiv:2305.04920},
   eprint = {2305.04920},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2305.04920},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{sinha2023,
@@ -2555,22 +2901,22 @@ @misc{sinha2023
   number = {arXiv:2310.19703},
   eprint = {2310.19703},
   primaryclass = {cond-mat, physics:hep-th, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2310.19703},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{smid2024,
   title = {Efficient {{Learning}} of {{Long-Range}} and {{Equivariant Quantum Systems}}},
-  author = {{\v S}m{\'i}d, {\v S}t{\v e}p{\'a}n and Bondesan, Roberto},
+  author = {Šmíd, Štěpán and Bondesan, Roberto},
   year = {2024},
   month = jan,
   number = {arXiv:2312.17019},
   eprint = {2312.17019},
   primaryclass = {quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2312.17019},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{soejima2020,
@@ -2581,7 +2927,7 @@ @article{soejima2020
   journal = {arXiv:2009.02354 [cond-mat]},
   eprint = {2009.02354},
   primaryclass = {cond-mat},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{soldini2023,
@@ -2592,20 +2938,20 @@ @misc{soldini2023
   number = {arXiv:2312.13348},
   eprint = {2312.13348},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2312.13348},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{sompet2021,
   title = {Realising the {{Symmetry-Protected Haldane Phase}} in {{Fermi-Hubbard Ladders}}},
-  author = {Sompet, Pimonpan and Hirthe, Sarah and Bourgund, Dominik and Chalopin, Thomas and Bibo, Julian and Koepsell, Joannis and Bojovi{\'c}, Petar and Verresen, Ruben and Pollmann, Frank and Salomon, Guillaume and Gross, Christian and Hilker, Timon A. and Bloch, Immanuel},
+  author = {Sompet, Pimonpan and Hirthe, Sarah and Bourgund, Dominik and Chalopin, Thomas and Bibo, Julian and Koepsell, Joannis and Bojović, Petar and Verresen, Ruben and Pollmann, Frank and Salomon, Guillaume and Gross, Christian and Hilker, Timon A. and Bloch, Immanuel},
   year = {2021},
   month = sep,
   journal = {arXiv:2103.10421 [cond-mat, physics:quant-ph]},
   eprint = {2103.10421},
   primaryclass = {cond-mat, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{sonner2021,
@@ -2616,7 +2962,7 @@ @article{sonner2021
   journal = {arXiv:2012.00777 [cond-mat, physics:quant-ph]},
   eprint = {2012.00777},
   primaryclass = {cond-mat, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{sonner2021a,
@@ -2630,7 +2976,7 @@ @article{sonner2021a
   eprint = {2103.13741},
   pages = {168552},
   doi = {10.1016/j.aop.2021.168552},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{sous2020,
@@ -2641,12 +2987,12 @@ @article{sous2020
   journal = {arXiv:2009.00619 [cond-mat]},
   eprint = {2009.00619},
   primaryclass = {cond-mat},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{strkalj2021,
-  title = {Many-Body Localization in the Interpolating {{Aubry-Andr}}{\textbackslash}'e-{{Fibonacci}} Model},
-  author = {{\v S}trkalj, Antonio and Doggen, Elmer V. H. and Gornyi, Igor V. and Zilberberg, Oded},
+  title = {Many-Body Localization in the Interpolating {{Aubry-Andr}}\textbackslash 'e-{{Fibonacci}} Model},
+  author = {Štrkalj, Antonio and Doggen, Elmer V. H. and Gornyi, Igor V. and Zilberberg, Oded},
   year = {2021},
   month = sep,
   journal = {Physical Review Research},
@@ -2655,31 +3001,31 @@ @article{strkalj2021
   eprint = {2106.13841},
   pages = {033257},
   doi = {10.1103/PhysRevResearch.3.033257},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{strkalj2022,
-  title = {Coexistence of Localization and Transport in Many-Body Two-Dimensional {{Aubry-Andr}}{\textbackslash}'e Models},
-  author = {{\v S}trkalj, Antonio and Doggen, Elmer V. H. and Castelnovo, Claudio},
+  title = {Coexistence of Localization and Transport in Many-Body Two-Dimensional {{Aubry-Andr}}\textbackslash 'e Models},
+  author = {Štrkalj, Antonio and Doggen, Elmer V. H. and Castelnovo, Claudio},
   year = {2022},
   month = apr,
   number = {arXiv:2204.05198},
   eprint = {2204.05198},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2204.05198},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{su2022,
   title = {Observation of Unconventional Many-Body Scarring in a Quantum Simulator},
-  author = {Su, Guo-Xian and Sun, Hui and Hudomal, Ana and Desaules, Jean-Yves and Zhou, Zhao-Yu and Yang, Bing and Halimeh, Jad C. and Yuan, Zhen-Sheng and Papi{\'c}, Zlatko and Pan, Jian-Wei},
+  author = {Su, Guo-Xian and Sun, Hui and Hudomal, Ana and Desaules, Jean-Yves and Zhou, Zhao-Yu and Yang, Bing and Halimeh, Jad C. and Yuan, Zhen-Sheng and Papić, Zlatko and Pan, Jian-Wei},
   year = {2022},
   month = jan,
   journal = {arXiv:2201.00821 [cond-mat, physics:quant-ph]},
   eprint = {2201.00821},
   primaryclass = {cond-mat, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{su2024,
@@ -2690,9 +3036,9 @@ @misc{su2024
   number = {arXiv:2401.05489},
   eprint = {2401.05489},
   primaryclass = {cond-mat, physics:hep-ex, physics:hep-lat, physics:hep-ph, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2401.05489},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{sun2022,
@@ -2703,9 +3049,9 @@ @misc{sun2022
   number = {arXiv:2202.07892},
   eprint = {2202.07892},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2202.07892},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{sun2023,
@@ -2716,9 +3062,16 @@ @misc{sun2023
   number = {arXiv:2301.11337},
   eprint = {2301.11337},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2301.11337},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@misc{symons2024,
+  title = {Boosted {{Imaginary Time Evolution}} of {{Matrix Product States}}},
+  author = {Symons, Benjamin C. B. and Manawadu, Dilhan and Galvin, David and Mensa, Stefano},
+  year = {2024},
+  month = may
 }
 
 @article{szasz2020,
@@ -2733,7 +3086,7 @@ @article{szasz2020
   eprint = {1808.00463},
   pages = {021042},
   doi = {10.1103/PhysRevX.10.021042},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{szasz2022,
@@ -2744,9 +3097,9 @@ @misc{szasz2022
   number = {arXiv:2206.04087},
   eprint = {2206.04087},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2206.04087},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{tada2018,
@@ -2760,7 +3113,7 @@ @article{tada2018
   eprint = {1805.11226},
   pages = {214523},
   doi = {10.1103/PhysRevB.97.214523},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{tada2020,
@@ -2774,7 +3127,7 @@ @article{tada2020
   eprint = {2005.01990},
   pages = {033363},
   doi = {10.1103/PhysRevResearch.2.033363},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{tada2021,
@@ -2785,7 +3138,14 @@ @article{tada2021
   journal = {arXiv:2106.04071 [cond-mat, physics:hep-ph]},
   eprint = {2106.04071},
   primaryclass = {cond-mat, physics:hep-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@misc{tan2024,
+  title = {Entanglement Parity Effects in the {{Kane-Fisher}} Problem},
+  author = {Tan, Chunyu and Hang, Yuxiao and Haas, Stephan and Saleur, Hubert},
+  year = {2024},
+  month = may
 }
 
 @article{tang2020,
@@ -2800,7 +3160,7 @@ @article{tang2020
   eprint = {1908.11253},
   pages = {013022},
   doi = {10.1103/PhysRevResearch.2.013022},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{tantivasadakarn2021,
@@ -2811,7 +3171,7 @@ @article{tantivasadakarn2021
   journal = {arXiv:2112.01519 [cond-mat, physics:quant-ph]},
   eprint = {2112.01519},
   primaryclass = {cond-mat, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{tarabunga2023,
@@ -2822,9 +3182,9 @@ @misc{tarabunga2023
   number = {arXiv:2303.12829},
   eprint = {2303.12829},
   primaryclass = {cond-mat, physics:physics, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2303.12829},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{tsitsishvili2021,
@@ -2836,20 +3196,20 @@ @article{tsitsishvili2021
   journal = {arXiv:2112.10421 [cond-mat, physics:hep-th, physics:quant-ph]},
   eprint = {2112.10421},
   primaryclass = {cond-mat, physics:hep-th, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{valles-muns2023,
   title = {Quantum Droplets with Particle Imbalance in One-Dimensional Optical Lattices},
-  author = {{Vall{\`e}s-Muns}, Jofre and Morera, Ivan and Astrakharchik, Grigori E. and {Juli{\'a}-D{\'i}az}, Bruno},
+  author = {{Vallès-Muns}, Jofre and Morera, Ivan and Astrakharchik, Grigori E. and {Juliá-Díaz}, Bruno},
   year = {2023},
   month = jun,
   number = {arXiv:2306.12283},
   eprint = {2306.12283},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2306.12283},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{vecsei2022,
@@ -2864,7 +3224,7 @@ @article{vecsei2022
   primaryclass = {cond-mat, physics:quant-ph},
   pages = {054402},
   doi = {10.1103/PhysRevB.106.054402},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{verresen2020,
@@ -2875,7 +3235,7 @@ @article{verresen2020
   journal = {arXiv:2011.12310 [cond-mat, physics:physics, physics:quant-ph]},
   eprint = {2011.12310},
   primaryclass = {cond-mat, physics:physics, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{verresen2021,
@@ -2886,18 +3246,18 @@ @article{verresen2021
   journal = {arXiv:2102.08967 [cond-mat, physics:quant-ph]},
   eprint = {2102.08967},
   primaryclass = {cond-mat, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{verresen2022,
-  title = {Efficiently Preparing {{Schr}}{\textbackslash}"odinger's Cat, Fractons and Non-{{Abelian}} Topological Order in Quantum Devices},
+  title = {Efficiently Preparing {{Schr}}\textbackslash "odinger's Cat, Fractons and Non-{{Abelian}} Topological Order in Quantum Devices},
   author = {Verresen, Ruben and Tantivasadakarn, Nathanan and Vishwanath, Ashvin},
   year = {2022},
   month = jan,
   journal = {arXiv:2112.03061 [cond-mat, physics:physics, physics:quant-ph]},
   eprint = {2112.03061},
   primaryclass = {cond-mat, physics:physics, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{verresen2022a,
@@ -2908,9 +3268,9 @@ @misc{verresen2022a
   number = {arXiv:2205.15302},
   eprint = {2205.15302},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2205.15302},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{verresen2023,
@@ -2921,9 +3281,9 @@ @misc{verresen2023
   number = {arXiv:2301.11917},
   eprint = {2301.11917},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2301.11917},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{villa2020,
@@ -2934,7 +3294,7 @@ @article{villa2020
   journal = {arXiv:2007.08381 [cond-mat]},
   eprint = {2007.08381},
   primaryclass = {cond-mat},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{villa2021,
@@ -2948,7 +3308,7 @@ @article{villa2021
   eprint = {2105.05774},
   pages = {L021301},
   doi = {10.1103/PhysRevA.104.L021301},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{villa2021a,
@@ -2962,7 +3322,7 @@ @article{villa2021a
   eprint = {2105.06396},
   pages = {023323},
   doi = {10.1103/PhysRevA.104.023323},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{vovrosh2021,
@@ -2973,20 +3333,27 @@ @article{vovrosh2021
   journal = {arXiv:2108.03976 [cond-mat]},
   eprint = {2108.03976},
   primaryclass = {cond-mat},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@misc{wahl2024,
+  title = {Exact Projected Entangled Pair Ground States with Topological {{Euler}} Invariant},
+  author = {Wahl, Thorsten B. and Jankowski, Wojciech J. and Bouhon, Adrien and Chaudhary, Gaurav and Slager, Robert-Jan},
+  year = {2024},
+  month = jul
 }
 
 @misc{walter2022,
   title = {Breakdown of Quantisation in a {{Hubbard-Thouless}} Pump},
-  author = {Walter, Anne-Sophie and Zhu, Zijie and G{\"a}chter, Marius and Minguzzi, Joaqu{\'i}n and Roschinski, Stephan and Sandholzer, Kilian and Viebahn, Konrad and Esslinger, Tilman},
+  author = {Walter, Anne-Sophie and Zhu, Zijie and Gächter, Marius and Minguzzi, Joaquín and Roschinski, Stephan and Sandholzer, Kilian and Viebahn, Konrad and Esslinger, Tilman},
   year = {2022},
   month = apr,
   number = {arXiv:2204.06561},
   eprint = {2204.06561},
   primaryclass = {cond-mat, physics:physics},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2204.06561},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{wang2020,
@@ -2997,42 +3364,68 @@ @article{wang2020
   journal = {arXiv:2003.01358 [cond-mat, physics:quant-ph]},
   eprint = {2003.01358},
   primaryclass = {cond-mat, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{wang2020a,
   title = {Robust and {{Ultrafast State Preparation}} by {{Ramping Artificial Gauge Potentials}}},
-  author = {Wang, Botao and Dong, Xiao-Yu and {\"U}nal, F. Nur and Eckardt, Andr{\'e}},
+  author = {Wang, Botao and Dong, Xiao-Yu and Ünal, F. Nur and Eckardt, André},
   year = {2020},
   month = sep,
   journal = {arXiv:2009.00560 [cond-mat, physics:quant-ph]},
   eprint = {2009.00560},
   primaryclass = {cond-mat, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{wang2021,
   title = {Measurable Signatures of Bosonic Fractional {{Chern}} Insulator States and Their Fractional Excitations in a Quantum-Gas Microscope},
-  author = {Wang, Botao and Dong, Xiao-Yu and Eckardt, Andr{\'e}},
+  author = {Wang, Botao and Dong, Xiao-Yu and Eckardt, André},
   year = {2021},
   month = nov,
   journal = {arXiv:2111.01110 [cond-mat]},
   eprint = {2111.01110},
   primaryclass = {cond-mat},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@misc{wang2024,
+  title = {Floquet {{Schrieffer-Wolff}} Transform Based on {{Sylvester}} Equations},
+  author = {Wang, Xiao and {Méndez-Córdoba}, Fabio Pablo Miguel and Jaksch, Dieter and Schlawin, Frank},
+  year = {2024},
+  month = jul,
+  number = {arXiv:2407.08405},
+  eprint = {2407.08405},
+  primaryclass = {cond-mat, physics:quant-ph},
+  publisher = {arXiv},
+  doi = {10.48550/arXiv.2407.08405},
+  archiveprefix = {arXiv}
 }
 
 @misc{weber2022,
   title = {Experimentally Accessible Scheme for a Fractional {{Chern}} Insulator in {{Rydberg}} Atoms},
-  author = {Weber, Sebastian and Bai, Rukmani and Makki, Nastasia and M{\"o}gerle, Johannes and Lahaye, Thierry and Browaeys, Antoine and Daghofer, Maria and Lang, Nicolai and B{\"u}chler, Hans Peter},
+  author = {Weber, Sebastian and Bai, Rukmani and Makki, Nastasia and Mögerle, Johannes and Lahaye, Thierry and Browaeys, Antoine and Daghofer, Maria and Lang, Nicolai and Büchler, Hans Peter},
   year = {2022},
   month = feb,
   number = {arXiv:2202.00699},
   eprint = {2202.00699},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2202.00699},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@misc{weber2024,
+  title = {Intertwined {{Superconductivity}} and {{Magnetism}} from {{Repulsive Interactions}} in {{Kondo Bilayers}}},
+  author = {Weber, Clara S. and Kiese, Dominik and Kennes, Dante M. and Claassen, Martin},
+  year = {2024},
+  month = aug,
+  number = {arXiv:2408.02847},
+  eprint = {2408.02847},
+  primaryclass = {cond-mat},
+  publisher = {arXiv},
+  doi = {10.48550/arXiv.2408.02847},
+  archiveprefix = {arXiv}
 }
 
 @misc{wei2024,
@@ -3044,9 +3437,9 @@ @misc{wei2024
   number = {arXiv:2312.16660},
   eprint = {2312.16660},
   primaryclass = {cond-mat, physics:nlin},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2312.16660},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{wienand2023,
@@ -3057,9 +3450,9 @@ @misc{wienand2023
   number = {arXiv:2306.11457},
   eprint = {2306.11457},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2306.11457},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{wouters2020,
@@ -3070,7 +3463,7 @@ @article{wouters2020
   journal = {arXiv:2005.12825 [cond-mat, physics:math-ph]},
   eprint = {2005.12825},
   primaryclass = {cond-mat, physics:math-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{wouters2021,
@@ -3081,7 +3474,7 @@ @article{wouters2021
   journal = {arXiv:2106.15823 [cond-mat]},
   eprint = {2106.15823},
   primaryclass = {cond-mat},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{wybo2020,
@@ -3095,7 +3488,7 @@ @article{wybo2020
   eprint = {2004.13072},
   pages = {064304},
   doi = {10.1103/PhysRevB.102.064304},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{wybo2020a,
@@ -3106,7 +3499,7 @@ @article{wybo2020a
   journal = {arXiv:2010.15137 [cond-mat, physics:hep-th, physics:quant-ph]},
   eprint = {2010.15137},
   primaryclass = {cond-mat, physics:hep-th, physics:quant-ph},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{wybo2021,
@@ -3118,7 +3511,7 @@ @article{wybo2021
   eprint = {2110.07384},
   pages = {pssb.202100161},
   doi = {10.1002/pssb.202100161},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{wybo2022,
@@ -3129,9 +3522,9 @@ @misc{wybo2022
   number = {arXiv:2203.09530},
   eprint = {2203.09530},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2203.09530},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{wybo2023,
@@ -3142,9 +3535,9 @@ @misc{wybo2023
   number = {arXiv:2303.16221},
   eprint = {2303.16221},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2303.16221},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{xie2022,
@@ -3155,22 +3548,22 @@ @misc{xie2022
   number = {arXiv:2210.04928},
   eprint = {2210.04928},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2210.04928},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{yang2023,
-  title = {Exciton and Light Induced Ferromagnetism from Doping a Moir{\textbackslash}'e {{Mott}} Insulator},
+  title = {Exciton and Light Induced Ferromagnetism from Doping a Moir\textbackslash 'e {{Mott}} Insulator},
   author = {Yang, Hui and Zhang, Ya-Hui},
   year = {2023},
   month = may,
   number = {arXiv:2305.01702},
   eprint = {2305.01702},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2305.01702},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{yang2023a,
@@ -3181,9 +3574,48 @@ @misc{yang2023a
   number = {arXiv:2301.08255},
   eprint = {2301.08255},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2301.08255},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@misc{yang2024,
+  title = {Chiral Spin Liquid in a Generalized {{Kitaev}} Honeycomb Model with \$\textbackslash mathbb\{\vphantom\}{{Z}}\vphantom\{\}\_4\$ 1-Form Symmetry},
+  author = {Yang, Yu-Xin and Cheng, Meng and Chen, Ji-Yao},
+  year = {2024},
+  month = aug,
+  number = {arXiv:2408.02046},
+  eprint = {2408.02046},
+  primaryclass = {cond-mat, physics:quant-ph},
+  publisher = {arXiv},
+  doi = {10.48550/arXiv.2408.02046},
+  archiveprefix = {arXiv}
+}
+
+@misc{yang2024a,
+  title = {Emergent {{Anomalous Hydrodynamics}} at {{Infinite Temperature}} in a {{Long-Range XXZ Model}}},
+  author = {Yang, Ang and Ma, Jinlou and Ying, Lei},
+  year = {2024},
+  month = mar,
+  number = {arXiv:2403.17912},
+  eprint = {2403.17912},
+  primaryclass = {cond-mat, physics:quant-ph},
+  publisher = {arXiv},
+  doi = {10.48550/arXiv.2403.17912},
+  archiveprefix = {arXiv}
+}
+
+@misc{yin2024,
+  title = {Theory of Metastable States in Many-Body Quantum Systems},
+  author = {Yin, Chao and Surace, Federica M. and Lucas, Andrew},
+  year = {2024},
+  month = aug,
+  number = {arXiv:2408.05261},
+  eprint = {2408.05261},
+  primaryclass = {cond-mat, physics:hep-th, physics:math-ph},
+  publisher = {arXiv},
+  doi = {10.48550/arXiv.2408.05261},
+  archiveprefix = {arXiv}
 }
 
 @article{you2021,
@@ -3195,7 +3627,20 @@ @article{you2021
   journal = {arXiv:2101.01724 [cond-mat, physics:hep-th]},
   eprint = {2101.01724},
   primaryclass = {cond-mat, physics:hep-th},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@misc{yousefjani2024,
+  title = {Discrete {{Time Crystal Phase}} as a {{Resource}} for {{Quantum Enhanced Sensing}}},
+  author = {Yousefjani, Rozhin and Sacha, Krzysztof and Bayat, Abolfazl},
+  year = {2024},
+  month = may,
+  number = {arXiv:2405.00328},
+  eprint = {2405.00328},
+  primaryclass = {cond-mat, physics:quant-ph},
+  publisher = {arXiv},
+  doi = {10.48550/arXiv.2405.00328},
+  archiveprefix = {arXiv}
 }
 
 @misc{yu2023,
@@ -3206,9 +3651,23 @@ @misc{yu2023
   number = {arXiv:2304.00555},
   eprint = {2304.00555},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2304.00555},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
+}
+
+@misc{zakharov2024,
+  title = {Luttinger Liquid Tensor Network: Sine versus Tangent Dispersion of Massless {{Dirac}} Fermions},
+  shorttitle = {Luttinger Liquid Tensor Network},
+  author = {Zakharov, V. A. and Polla, S. and Vela, A. Donís and Emonts, P. and Pacholski, M. J. and Tworzydło, J. and Beenakker, C. W. J.},
+  year = {2024},
+  month = jul,
+  number = {arXiv:2407.06713},
+  eprint = {2407.06713},
+  primaryclass = {cond-mat, physics:quant-ph},
+  publisher = {arXiv},
+  doi = {10.48550/arXiv.2407.06713},
+  archiveprefix = {arXiv}
 }
 
 @misc{zapletal2023,
@@ -3219,9 +3678,9 @@ @misc{zapletal2023
   number = {arXiv:2307.03711},
   eprint = {2307.03711},
   primaryclass = {quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2307.03711},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{zechmann2022,
@@ -3232,9 +3691,9 @@ @misc{zechmann2022
   number = {arXiv:2205.12970},
   eprint = {2205.12970},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2205.12970},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{zechmann2022a,
@@ -3245,9 +3704,9 @@ @misc{zechmann2022a
   number = {arXiv:2210.11072},
   eprint = {2210.11072},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2210.11072},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{zechmann2023,
@@ -3258,9 +3717,9 @@ @misc{zechmann2023
   number = {arXiv:2310.16084},
   eprint = {2310.16084},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2310.16084},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{zeybek2023,
@@ -3271,9 +3730,9 @@ @misc{zeybek2023
   number = {arXiv:2303.17470},
   eprint = {2303.17470},
   primaryclass = {cond-mat, physics:physics, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2303.17470},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{zeybek2024,
@@ -3284,22 +3743,9 @@ @misc{zeybek2024
   number = {arXiv:2403.06649},
   eprint = {2403.06649},
   primaryclass = {cond-mat, physics:physics, physics:quant-ph},
-  publisher = {{arXiv}},
-  doi = {10.48550/arXiv.2403.06649},
-  archiveprefix = {arxiv}
-}
-
-@misc{zeybek2024a,
-  title = {Bond-{{Order Density Wave Phases}} in {{Dimerized Extended Bose-Hubbard Models}}},
-  author = {Zeybek, Zeki and Schmelcher, Peter and Mukherjee, Rick},
-  year = {2024},
-  month = mar,
-  number = {arXiv:2403.06649},
-  eprint = {2403.06649},
-  primaryclass = {cond-mat, physics:physics, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2403.06649},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{zhang2020,
@@ -3310,32 +3756,32 @@ @article{zhang2020
   journal = {arXiv:2008.11204 [cond-mat]},
   eprint = {2008.11204},
   primaryclass = {cond-mat},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @article{zhang2021,
-  title = {{{SU}}(4) Chiral Spin Liquid, Exciton Supersolid and Electric Detection in Moir{\textbackslash}'e Bilayers},
+  title = {{{SU}}(4) Chiral Spin Liquid, Exciton Supersolid and Electric Detection in Moir\textbackslash 'e Bilayers},
   author = {Zhang, Ya-Hui and Sheng, D. N. and Vishwanath, Ashvin},
   year = {2021},
   month = oct,
   journal = {arXiv:2103.09825 [cond-mat]},
   eprint = {2103.09825},
   primaryclass = {cond-mat},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{zhang2022,
-  title = {Doping a {{Mott}} Insulator with Excitons in Moir{\textbackslash}'e Bilayer: Fractional Superfluid, Neutral {{Fermi}} Surface and {{Mott}} Transition},
-  shorttitle = {Doping a {{Mott}} Insulator with Excitons in Moir{\textbackslash}'e Bilayer},
+  title = {Doping a {{Mott}} Insulator with Excitons in Moir\textbackslash 'e Bilayer: Fractional Superfluid, Neutral {{Fermi}} Surface and {{Mott}} Transition},
+  shorttitle = {Doping a {{Mott}} Insulator with Excitons in Moir\textbackslash 'e Bilayer},
   author = {Zhang, Ya-Hui},
   year = {2022},
   month = may,
   number = {arXiv:2204.10937},
   eprint = {2204.10937},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2204.10937},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{zhang2022a,
@@ -3347,9 +3793,9 @@ @misc{zhang2022a
   number = {arXiv:2208.01758},
   eprint = {2208.01758},
   primaryclass = {cond-mat, physics:physics, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2208.01758},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{zhang2024,
@@ -3361,22 +3807,22 @@ @misc{zhang2024
   number = {arXiv:2402.01247},
   eprint = {2402.01247},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2402.01247},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{zhang2024a,
-  title = {Chiral Spin Liquid and Quantum Phase Diagram of Spin-\$1/2\$ \${{J}}\_1\$-\${{J}}\_2\$-\${{J}}\_\{{\textbackslash}chi\}\$ Model on the Square Lattice},
+  title = {Chiral Spin Liquid and Quantum Phase Diagram of Spin-\$1/2\$ \${{J}}\_1\$-\${{J}}\_2\$-\${{J}}\_\{\textbackslash chi\}\$ Model on the Square Lattice},
   author = {Zhang, Xiao-Tian and Huang, Yixuan and Wu, Han-Qing and Sheng, D. N. and Gong, Shou-Shu},
   year = {2024},
   month = jan,
   number = {arXiv:2401.07461},
   eprint = {2401.07461},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2401.07461},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{zhao2022,
@@ -3387,9 +3833,9 @@ @misc{zhao2022
   number = {arXiv:2206.04213},
   eprint = {2206.04213},
   primaryclass = {cond-mat},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2206.04213},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{zheng2022,
@@ -3400,9 +3846,9 @@ @misc{zheng2022
   number = {arXiv:2210.08556},
   eprint = {2210.08556},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2210.08556},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{zheng2024,
@@ -3413,9 +3859,9 @@ @misc{zheng2024
   number = {arXiv:2403.03479},
   eprint = {2403.03479},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2403.03479},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{zhou2022,
@@ -3426,9 +3872,9 @@ @misc{zhou2022
   number = {arXiv:2205.13567},
   eprint = {2205.13567},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2205.13567},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
 
 @misc{zhou2023,
@@ -3439,7 +3885,7 @@ @misc{zhou2023
   number = {arXiv:2307.16038},
   eprint = {2307.16038},
   primaryclass = {cond-mat, physics:quant-ph},
-  publisher = {{arXiv}},
+  publisher = {arXiv},
   doi = {10.48550/arXiv.2307.16038},
-  archiveprefix = {arxiv}
+  archiveprefix = {arXiv}
 }
diff --git a/doc/theses.bib b/doc/theses.bib
new file mode 100644
index 000000000..348dc861b
--- /dev/null
+++ b/doc/theses.bib
@@ -0,0 +1,80 @@
+@phdthesis{Bauer2011,
+  title = {Tensor Network States},
+  author = {Bauer, Roman Bela},
+  year = {2011},
+  number = {19916},
+  url = {https://doi.org/10.3929/ethz-a-006698826},
+  school = {ETH Zürich}
+}
+
+@phdthesis{eberharter2023a,
+  title = {Investigation of {{Quantum Dynamics}} and {{Phase Transitions}} Using {{Tensor Network Algorithms}}},
+  author = {Eberharter, Alexander A},
+  year = {2023},
+  month = sep,
+  url = {https://ulb-dok.uibk.ac.at/ulbtirolhs/content/titleinfo/9000350},
+  school = {Universität Innsbruck}
+}
+
+@phdthesis{Eisert2006,
+  title = {Entanglement in Quantum Information Theory},
+  author = {Eisert, J.},
+  year = {2006},
+  month = oct,
+  url = {https://arxiv.org/abs/quant-ph/0610253},
+  school = {University of Potsdam}
+}
+
+@phdthesis{Hubig2017,
+  title = {Symmetry-{{Protected Tensor Networks}}},
+  author = {Hubig, Claudius},
+  year = {2017},
+  number = {August},
+  url = {https://edoc.ub.uni-muenchen.de/21348/},
+  school = {Ludwig-Maximilians-Universität München}
+}
+
+@phdthesis{kollath2005,
+  title = {The Adaptive Time-Dependent Density Matrix Renormalization Group Method : Development and Applications},
+  shorttitle = {The Adaptive Time-Dependent Density Matrix Renormalization Group Method},
+  author = {Kollath, Corinna},
+  year = {2005},
+  number = {RWTH-CONV-123719},
+  url = {https://publications.rwth-aachen.de/record/62126},
+  school = {RWTH Aachen University}
+}
+
+@phdthesis{RubenPHD,
+  title = {Topology and Excitations in Low-Dimensional Quantum Matter},
+  author = {Verresen, Ruben},
+  year = {2019},
+  address = {Dresden},
+  url = {https://nbn-resolving.org/urn:nbn:de:bsz:14-qucosa2-356075},
+  school = {Technische Universität Dresden}
+}
+
+@phdthesis{schuch2007,
+  title = {Quantum {{Entanglement}}: {{Theory}} and {{Applications}}},
+  shorttitle = {Quantum {{Entanglement}}},
+  author = {Schuch, Norbert},
+  year = {2007},
+  url = {https://mediatum.ub.tum.de/?id=620846},
+  school = {Technische Universität München}
+}
+
+@phdthesis{secular2024a,
+  title = {Parallel {{Tensor Network Methods}} for {{Quantum Lattice Systems}}},
+  author = {Secular, Paul},
+  year = {2024},
+  url = {https://researchportal.bath.ac.uk/en/studentTheses/parallel-tensor-network-methods-for-quantum-lattice-systems},
+  school = {Bath}
+}
+
+@phdthesis{singh2012a,
+  title = {Tensor {{Network States}} and {{Algorithms}} in the Presence of {{Abelian}} and Non-{{Abelian Symmetries}}},
+  author = {Singh, Sukhwinder},
+  year = {2012},
+  month = mar,
+  url = {https://arxiv.org/abs/1203.2222},
+  school = {University of Queensland}
+}
diff --git a/examples/b_mps.py b/examples/b_mps.py
index 9b0de1643..dad771bf7 100644
--- a/examples/b_mps.py
+++ b/examples/b_mps.py
@@ -22,7 +22,7 @@
 from tenpy.models.lattice import Chain
 from tenpy.networks.mps import MPS
 from tenpy.networks.mpo import MPO, MPOEnvironment
-from tenpy.algorithms.truncation import svd_theta
+from tenpy.linalg.truncation import svd_theta
 
 # model parameters
 Jxx, Jz = 1., 1.
diff --git a/tenpy/__init__.py b/tenpy/__init__.py
index 1d06be556..674ff7f89 100644
--- a/tenpy/__init__.py
+++ b/tenpy/__init__.py
@@ -19,9 +19,9 @@
 # note that the order matters!
 from . import tools
 from . import linalg
-from . import algorithms
 from . import networks
 from . import models
+from . import algorithms
 from . import simulations
 from . import version  # needs to be after linalg!
 
@@ -37,7 +37,7 @@
                               TimeDependentTwoSiteTDVP)
 from .algorithms.vumps import SingleSiteVUMPSEngine, TwoSiteVUMPSEngine
 from .algorithms.tebd import TEBDEngine, QRBasedTEBDEngine, RandomUnitaryEvolution, TimeDependentTEBD
-from .algorithms.truncation import TruncationError, truncate, svd_theta, decompose_theta_qr_based
+from .linalg.truncation import TruncationError, truncate, svd_theta, decompose_theta_qr_based
 from .linalg.charges import ChargeInfo, LegCharge, LegPipe
 from .linalg.krylov_based import Arnoldi, LanczosGroundState, LanczosEvolution, lanczos_arpack
 from .linalg.np_conserved import (Array, zeros, ones, eye_like, diag,
diff --git a/tenpy/__main__.py b/tenpy/__main__.py
index ed3b56d1a..cf51defe0 100644
--- a/tenpy/__main__.py
+++ b/tenpy/__main__.py
@@ -5,4 +5,5 @@
 
 if __name__ == "__main__":
     import sys  # noqa 401
-    raise SystemExit(tenpy.console_main())
+    tenpy.console_main()
+    sys.exit(0)
diff --git a/tenpy/algorithms/__init__.py b/tenpy/algorithms/__init__.py
index cb717298d..a153ff892 100644
--- a/tenpy/algorithms/__init__.py
+++ b/tenpy/algorithms/__init__.py
@@ -6,7 +6,6 @@
     :toctree: .
 
     algorithm
-    truncation
     tebd
     mps_common
     dmrg
@@ -22,7 +21,7 @@
 """
 # Copyright (C) TeNPy Developers, GNU GPLv3
 
-from . import algorithm, truncation, dmrg, dmrg_parallel, disentangler, mps_common, tebd, tdvp, \
+from . import algorithm, dmrg, dmrg_parallel, disentangler, mps_common, tebd, tdvp, \
     exact_diag, purification, network_contractor, mpo_evolution, vumps, plane_wave_excitation
 from .algorithm import *
 from .disentangler import *
@@ -35,14 +34,12 @@
 from .purification import *
 from .tdvp import *
 from .tebd import *
-from .truncation import *
 from .vumps import *
 from .plane_wave_excitation import *
 
 
 __all__ = [
     "algorithm",
-    "truncation",
     "dmrg",
     "dmrg_parallel",
     "mps_common",
@@ -56,7 +53,6 @@
     "vumps",
     "plane_wave_excitation",
     *algorithm.__all__,
-    *truncation.__all__,
     *[n for n in dmrg.__all__ if n not in ['Mixer', 'SubspaceExpansion', 'DensityMatrixMixer']],
     *dmrg_parallel.__all__,
     *disentangler.__all__,
diff --git a/tenpy/algorithms/algorithm.py b/tenpy/algorithms/algorithm.py
index 178350e58..16f9e77d8 100644
--- a/tenpy/algorithms/algorithm.py
+++ b/tenpy/algorithms/algorithm.py
@@ -6,7 +6,7 @@
 import logging
 logger = logging.getLogger(__name__)
 
-from .truncation import TruncationError
+from ..linalg.truncation import TruncationError
 from ..tools.misc import consistency_check
 from ..tools.events import EventHandler
 from ..tools.params import asConfig
@@ -347,13 +347,18 @@ class TimeEvolutionAlgorithm(Algorithm):
         preserve_norm : bool
             Whether the state will be normalized to its initial norm after each time step.
             Per default, this is ``False`` for real time evolution and ``True`` for imaginary time.
+        start_trunc_err : :class:`~tenpy.algorithms.truncation.TruncationError`
+            Initial truncation error for :attr:`trunc_err`.
 
     Attributes
     ----------
     evolved_time : float | complex
         Indicating how long `psi` has been evolved, ``psi = exp(-i * evolved_time * H) psi(t=0)``.
-        Not that the real-part of `t` is increasing for a real-time evolution,
+        Note that the real-part of `t` is increasing for a real-time evolution,
         while the imaginary-part of `t` is *decreasing* for a imaginary time evolution.
+    trunc_err : :class:`~tenpy.algorithms.truncation.TruncationError`
+        Upper bound for the accumulated error of the represented state,
+        which is introduced due to the truncation during the sequence of update steps.
     """
     time_dependent_H = False  #: whether the algorithm supports time-dependent H
 
diff --git a/tenpy/algorithms/disentangler.py b/tenpy/algorithms/disentangler.py
index fb3427b55..955022df3 100644
--- a/tenpy/algorithms/disentangler.py
+++ b/tenpy/algorithms/disentangler.py
@@ -14,7 +14,7 @@
 logger = logging.getLogger(__name__)
 
 from ..linalg import np_conserved as npc
-from .truncation import svd_theta
+from ..linalg.truncation import svd_theta
 from ..tools.math import entropy
 from ..linalg import random_matrix as rand_mat
 
diff --git a/tenpy/algorithms/dmrg.py b/tenpy/algorithms/dmrg.py
index 27ca54389..692ce36b8 100644
--- a/tenpy/algorithms/dmrg.py
+++ b/tenpy/algorithms/dmrg.py
@@ -40,7 +40,7 @@
 
 from ..linalg import np_conserved as npc
 from ..linalg.krylov_based import lanczos_arpack, LanczosGroundState
-from .truncation import svd_theta
+from ..linalg.truncation import svd_theta
 from ..tools.params import asConfig
 from ..tools.math import entropy
 from ..tools.process import memory_usage
@@ -67,7 +67,7 @@ def run(psi, model, options, **kwargs):
     model : :class:`~tenpy.models.MPOModel`
         The model representing the Hamiltonian for which we want to find the ground state.
     options : dict
-        Further optional parameters as described in :cfg:config:`DMRGEngine`.
+        Further optional parameters as described in :cfg:config:`DMRG`.
     **kwargs :
         Further keyword arguments for the algorithm classes :class:`TwoSiteDMRGEngine` or
         :class:`SingleSiteDMRGEngine`.
@@ -124,22 +124,6 @@ class DMRGEngine(IterativeSweeps):
 
     Attributes
     ----------
-    EffectiveH : class type
-        Class for the effective Hamiltonian, i.e., a subclass of
-        :class:`~tenpy.algorithms.mps_common.EffectiveH`. Has a `length` class attribute which
-        specifies the number of sites updated at once (e.g., whether we do single-site vs. two-site
-        DMRG).
-    chi_list : dict | ``None``
-        See :cfg:option:`DMRGEngine.chi_list`
-    eff_H : :class:`~tenpy.algorithms.mps_common.EffectiveH`
-        Effective two-site Hamiltonian.
-    shelve : bool
-        If a simulation runs out of time (`time.time() - start_time > max_seconds`), the run will
-        terminate with `shelve = True`.
-    sweeps : int
-        The number of sweeps already performed. (Useful for re-start).
-    time0 : float
-        Time marker for the start of the run.
     update_stats : dict
         A dictionary with detailed statistics of the convergence at local update-level.
         For each key in the following table, the dictionary contains a list where one value is
@@ -213,14 +197,14 @@ def __init__(self, psi, model, options, **kwargs):
         if self.chi_list is not None:
             default_min_sweeps = max(max(self.chi_list.keys()), default_min_sweeps)
         self.options.setdefault('min_sweeps', default_min_sweeps)
-        mixer_options = self.options.subconfig('mixer_params')
-        mixer_options.setdefault('amplitude', 1.e-5)
+        mixer_params = self.options.subconfig('mixer_params')
+        mixer_params.setdefault('amplitude', 1.e-5)
         disable_finite = 15
         disable_infinite = 50
         decay_finite = 2.
         decay_infinite = decay_finite ** (disable_finite / disable_infinite)
-        mixer_options.setdefault('decay', decay_finite if self.finite else decay_infinite)
-        mixer_options.setdefault('disable_after', disable_finite if self.finite else disable_infinite)
+        mixer_params.setdefault('decay', decay_finite if self.finite else decay_infinite)
+        mixer_params.setdefault('disable_after', disable_finite if self.finite else disable_infinite)
 
     def pre_run_initialize(self):
         super().pre_run_initialize()
@@ -233,7 +217,7 @@ def run_iteration(self):
         Options
         -------
         .. cfg:configoptions :: DMRGEngine
-        
+
             E_tol_to_trunc : float
                 It's reasonable to choose the Lanczos convergence criteria
                 ``'E_tol'`` not many magnitudes lower than the current
@@ -300,7 +284,7 @@ def run_iteration(self):
         else:
             E_old = self.sweep_stats['E'][-1]
             S_old = self.sweep_stats['S'][-1]
-        
+
         # perform sweeps
         logger.info('Running sweep with optimization')
         for i in range(self.N_sweeps_check - 1):
@@ -390,7 +374,7 @@ def is_converged(self):
         Options
         -------
         .. cfg:configoptions :: DMRGEngine
-        
+
             max_E_err : float
                 Convergence if the change of the energy in each step
                 satisfies ``|Delta E / max(E, 1)| < max_E_err``. Note that
@@ -406,14 +390,14 @@ def is_converged(self):
         Delta_E = self.sweep_stats['Delta_E'][-1]
         Delta_S = self.sweep_stats['Delta_S'][-1]
         return abs(Delta_E / max(E, 1.)) < max_E_err and abs(Delta_S) < max_S_err
-    
+
     def post_run_cleanup(self):
         """Perform any final steps or clean up after the main loop has terminated.
 
         Options
         -------
         .. cfg:configoptions :: DMRGEngine
-        
+
             norm_tol : float
                 After the DMRG run, update the environment with at most
                 `norm_tol_iter` sweeps until
@@ -427,7 +411,7 @@ def post_run_cleanup(self):
                 :meth:`~tenpy.networks.mps.canonical_form` to canonicalize
                 instead. This tolerance should be stricter than `norm_tol`
                 to ensure canonical form even if DMRG cannot fully converge.
-        
+
         """
         super().post_run_cleanup()
         self._canonicalize(True)
@@ -457,7 +441,7 @@ def run(self):
             i.e. just a reference to :attr:`psi`.
         """
         return super().run()
-    
+
     def _canonicalize(self, warn=False):
         #Update environment until norm_tol is reached. If norm_tol_final
         #is not reached, call canonical_form.
@@ -494,20 +478,7 @@ def _canonicalize(self, warn=False):
             self.psi.canonical_form()
 
     def reset_stats(self, resume_data=None):
-        """Reset the statistics, useful if you want to start a new sweep run.
-
-        .. cfg:configoptions :: DMRGEngine
-
-            chi_list : dict | None
-                A dictionary to gradually increase the `chi_max` parameter of
-                `trunc_params`. The key defines starting from which sweep
-                `chi_max` is set to the value, e.g. ``{0: 50, 20: 100}`` uses
-                ``chi_max=50`` for the first 20 sweeps and ``chi_max=100``
-                afterwards. Overwrites `trunc_params['chi_list']``.
-                By default (``None``) this feature is disabled.
-            sweep_0 : int
-                The number of sweeps already performed. (Useful for re-start).
-        """
+        """Reset the statistics, useful if you want to start a new sweep run."""
         super().reset_stats(resume_data)
         self.update_stats = {
             'i0': [],
@@ -874,66 +845,6 @@ class TwoSiteDMRGEngine(DMRGEngine):
     .. cfg:config :: TwoSiteDMRGEngine
         :include: DMRGEngine
 
-    Attributes
-    ----------
-    eff_H : :class:`~tenpy.algorithms.mps_common.EffectiveH`
-        Effective two-site Hamiltonian.
-    mixer : :class:`~tenpy.algorithms.mps_common.Mixer` | ``None``
-        If ``None``, no mixer is used (anymore), otherwise the mixer instance.
-    shelve : bool
-        If a simulation runs out of time (`time.time() - start_time > max_seconds`), the run will
-        terminate with ``shelve = True``.
-    sweeps : int
-        The number of sweeps already performed. (Useful for re-start).
-    time0 : float
-        Time marker for the start of the run.
-    update_stats : dict
-        A dictionary with detailed statistics of the convergence.
-        For each key in the following table, the dictionary contains a list where one value is
-        added each time :meth:`DMRGEngine.update_bond` is called.
-
-        =========== ===================================================================
-        key         description
-        =========== ===================================================================
-        i0          An update was performed on sites ``i0, i0+1``.
-        ----------- -------------------------------------------------------------------
-        age         The number of physical sites involved in the simulation.
-        ----------- -------------------------------------------------------------------
-        E_total     The total energy before truncation.
-        ----------- -------------------------------------------------------------------
-        N_lanczos   Dimension of the Krylov space used in the lanczos diagonalization.
-        ----------- -------------------------------------------------------------------
-        time        Wallclock time evolved since :attr:`time0` (in seconds).
-        =========== ===================================================================
-
-    sweep_stats : dict
-        A dictionary with detailed statistics of the convergence.
-        For each key in the following table, the dictionary contains a list where one value is
-        added each time :meth:`DMRGEngine.sweep` is called (with ``optimize=True``).
-
-        ============= ===================================================================
-        key           description
-        ============= ===================================================================
-        sweep         Number of sweeps performed so far.
-        ------------- -------------------------------------------------------------------
-        E             The energy *before* truncation (as calculated by Lanczos).
-        ------------- -------------------------------------------------------------------
-        Delta_E       The change in `E` (above) since the last iteration.
-        ------------- -------------------------------------------------------------------
-        S             Maximum entanglement entropy.
-        ------------- -------------------------------------------------------------------
-        Delta_S       The change in `S` (above) since the last iteration.
-        ------------- -------------------------------------------------------------------
-        time          Wallclock time evolved since :attr:`time0` (in seconds).
-        ------------- -------------------------------------------------------------------
-        max_trunc_err The maximum truncation error in the last sweep
-        ------------- -------------------------------------------------------------------
-        max_E_trunc   Maximum change or Energy due to truncation in the last sweep.
-        ------------- -------------------------------------------------------------------
-        max_chi       Maximum bond dimension used.
-        ------------- -------------------------------------------------------------------
-        norm_err      Error of canonical form ``np.linalg.norm(psi.norm_test())``.
-        ============= ===================================================================
     """
     EffectiveH = TwoSiteH
     DefaultMixer = mps_common.DensityMatrixMixer
@@ -1040,71 +951,6 @@ class SingleSiteDMRGEngine(DMRGEngine):
     .. cfg:config :: SingleSiteDMRGEngine
         :include: DMRGEngine
 
-    Attributes
-    ----------
-    chi_list : dict | ``None``
-        A dictionary to gradually increase the `chi_max` parameter of `trunc_params`. The key
-        defines starting from which sweep `chi_max` is set to the value, e.g. ``{0: 50, 20: 100}``
-        uses ``chi_max=50`` for the first 20 sweeps and ``chi_max=100`` afterwards. Overwrites
-        `trunc_params['chi_list']``. By default (``None``) this feature is disabled.
-    eff_H : :class:`~tenpy.algorithms.mps_common.EffectiveH`
-        Effective two-site Hamiltonian.
-    mixer : :class:`~tenpy.algorithms.mps_common.Mixer` | ``None``
-        If ``None``, no mixer is used (anymore), otherwise the mixer instance.
-    shelve : bool
-        If a simulation runs out of time (`time.time() - start_time > max_seconds`), the run will
-        terminate with ``shelve = True``.
-    sweeps : int
-        The number of sweeps already performed. (Useful for re-start).
-    time0 : float
-        Time marker for the start of the run.
-    update_stats : dict
-        A dictionary with detailed statistics of the convergence.
-        For each key in the following table, the dictionary contains a list where one value is
-        added each time :meth:`DMRGEngine.update_bond` is called.
-
-        =========== ===================================================================
-        key         description
-        =========== ===================================================================
-        i0          An update was performed on sites ``i0, i0+1``.
-        ----------- -------------------------------------------------------------------
-        age         The number of physical sites involved in the simulation.
-        ----------- -------------------------------------------------------------------
-        E_total     The total energy before truncation.
-        ----------- -------------------------------------------------------------------
-        N_lanczos   Dimension of the Krylov space used in the lanczos diagonalization.
-        ----------- -------------------------------------------------------------------
-        time        Wallclock time evolved since :attr:`time0` (in seconds).
-        =========== ===================================================================
-
-    sweep_stats : dict
-        A dictionary with detailed statistics of the convergence.
-        For each key in the following table, the dictionary contains a list where one value is
-        added each time :meth:`DMRGEngine.sweep` is called (with ``optimize=True``).
-
-        ============= ===================================================================
-        key           description
-        ============= ===================================================================
-        sweep         Number of sweeps performed so far.
-        ------------- -------------------------------------------------------------------
-        E             The energy *before* truncation (as calculated by Lanczos).
-        ------------- -------------------------------------------------------------------
-        Delta_E       The change in `E` (above) since the last iteration.
-        ------------- -------------------------------------------------------------------
-        S             Maximum entanglement entropy.
-        ------------- -------------------------------------------------------------------
-        Delta_S       The change in `S` (above) since the last iteration.
-        ------------- -------------------------------------------------------------------
-        time          Wallclock time evolved since :attr:`time0` (in seconds).
-        ------------- -------------------------------------------------------------------
-        max_trunc_err The maximum truncation error in the last sweep
-        ------------- -------------------------------------------------------------------
-        max_E_trunc   Maximum change or Energy due to truncation in the last sweep.
-        ------------- -------------------------------------------------------------------
-        max_chi       Maximum bond dimension used.
-        ------------- -------------------------------------------------------------------
-        norm_err      Error of canonical form ``np.linalg.norm(psi.norm_test())``.
-        ============= ===================================================================
     """
     EffectiveH = OneSiteH
     DefaultMixer = mps_common.SubspaceExpansion
diff --git a/tenpy/algorithms/mpo_evolution.py b/tenpy/algorithms/mpo_evolution.py
index 744da80c6..36fcb63d7 100644
--- a/tenpy/algorithms/mpo_evolution.py
+++ b/tenpy/algorithms/mpo_evolution.py
@@ -7,7 +7,7 @@
 logger = logging.getLogger(__name__)
 
 from .algorithm import TimeEvolutionAlgorithm, TimeDependentHAlgorithm
-from .truncation import TruncationError
+from ..linalg.truncation import TruncationError
 from ..tools.misc import consistency_check
 
 __all__ = ['ExpMPOEvolution', 'TimeDependentExpMPOEvolution']
@@ -28,8 +28,6 @@ class ExpMPOEvolution(TimeEvolutionAlgorithm):
     .. cfg:config :: ExpMPOEvolution
         :include: ApplyMPO, TimeEvolutionAlgorithm
 
-        start_trunc_err : :class:`~tenpy.algorithms.truncation.TruncationError`
-            Initial truncation error for :attr:`trunc_err`
         approximation : 'I' | 'II'
             Specifies which approximation is applied. The default 'II' is more precise.
             See :cite:`zaletel2015` and :meth:`~tenpy.networks.mpo.MPO.make_U`
@@ -46,17 +44,6 @@ class ExpMPOEvolution(TimeEvolutionAlgorithm):
 
     Attributes
     ----------
-    options : :class:`~tenpy.tools.params.Config`
-        Optional parameters, see :meth:`run` for more details
-    evolved_time : float
-        Indicating how long `psi` has been evolved, ``psi = exp(-i * evolved_time * H) psi(t=0)``.
-    trunc_err : :class:`~tenpy.algorithms.truncation.TruncationError`
-        The error of the represented state which is introduced due to the truncation during
-        the sequence of update steps
-    psi : :class:`~tenpy.networks.mps.MPS`
-        The MPS, time evolved in-place.
-    model : :class:`~tenpy.models.model.MPOModel`
-        The model defining the Hamiltonian.
     _U : list of :class:`~tenpy.networks.mps.MPO`
         Exponentiated `H_MPO`;
     _U_param : dict
@@ -66,7 +53,6 @@ class ExpMPOEvolution(TimeEvolutionAlgorithm):
     def __init__(self, psi, model, options, **kwargs):
         super().__init__(psi, model, options, **kwargs)
         options = self.options
-        self.trunc_err = options.get('start_trunc_err', TruncationError(), TruncationError)
         self._U_MPO = None
         self._U_param = {}
 
diff --git a/tenpy/algorithms/mps_common.py b/tenpy/algorithms/mps_common.py
index 169f498c8..7b697426a 100644
--- a/tenpy/algorithms/mps_common.py
+++ b/tenpy/algorithms/mps_common.py
@@ -25,7 +25,7 @@
 from ..linalg.sparse import NpcLinearOperator, SumNpcLinearOperator, OrthogonalNpcLinearOperator
 from ..networks.mpo import MPOEnvironment
 from ..networks.mps import MPSEnvironment
-from .truncation import truncate, svd_theta, decompose_theta_qr_based, TruncationError
+from ..linalg.truncation import truncate, svd_theta, decompose_theta_qr_based, TruncationError
 from ..linalg import np_conserved as npc
 from ..tools.params import asConfig
 from ..tools.misc import find_subclass, consistency_check
@@ -119,6 +119,8 @@ class Sweep(Algorithm):
         Cutoff for singular values when taking inverses of them is required.
     time0 : float
         Time marker for the start of the run.
+    eff_H : :class:`~tenpy.algorithms.mps_common.EffectiveH`
+        Effective single-site or two-site Hamiltonian.
     trunc_err_list : list
         List of truncation errors from the last sweep.
     chi_list : dict | ``None``
@@ -129,7 +131,7 @@ class Sweep(Algorithm):
     """
     DefaultMixer = None
     use_mixer_by_default = False  # The default for the "mixer" config option
-    
+
     def __init__(self, psi, model, options, *, orthogonal_to=None, **kwargs):
         if not hasattr(self, "EffectiveH"):
             raise NotImplementedError("Subclass needs to set EffectiveH")
@@ -217,7 +219,7 @@ def init_env(self, model=None, resume_data=None, orthogonal_to=None):
         -------
 
         .. cfg:configoptions :: Sweep
-                
+
             start_env : int
                 Number of sweeps to be performed without optimization to update the environment.
 
@@ -302,6 +304,8 @@ def reset_stats(self, resume_data=None):
                 the value `chi` is to be used for ``trunc_params['chi_max']``.
                 For example ``chi_list={0: 50, 20: 100}`` uses ``chi_max=50`` for the first
                 20 sweeps and ``chi_max=100`` afterwards.
+                A value of `None` is initialized to the current value of
+                ``trunc_params['chi_max']`` at algorithm initialization.
         """
         self.sweeps = 0
         if resume_data is not None and 'sweeps' in resume_data:
@@ -309,6 +313,10 @@ def reset_stats(self, resume_data=None):
         self.shelve = False
         self.chi_list = self.options.get('chi_list', None)
         if self.chi_list is not None:
+            for k, v in self.chi_list.items():
+                if v is None:
+                    self.chi_list[k] = chi_max = self.trunc_params['chi_max']
+                    logger.info("Setting chi_list[%d]=%d", k, chi_max)
             done = [k for k in self.chi_list.keys() if k < self.sweeps]
             if len(done) > 0:
                 chi_max = self.chi_list[max(done)]
@@ -391,7 +399,7 @@ def sweep(self, optimize=True):
                     self.mixer_deactivate()
                 else:
                     self.mixer = mixer
-            
+
         return np.max(self.trunc_err_list)
 
     def get_sweep_schedule(self):
@@ -684,14 +692,14 @@ def mixer_cleanup(self):
         #   new_B[i] = V[i] * B[i] * hc(V[i + 1])
         # LP environments transform like A tensors on the vR(*) leg(s)
         # RP environments transform like B tensors on the vL(*) leg(s)
-        
+
         if self.psi.finite:
             assert self.psi.get_SL(0).ndim == 1
             assert self.psi.get_SR(self.psi.L - 1).ndim == 1
             first = 1
         else:
             first = 0
-        
+
         for i in range(first, self.psi.L):  # converting S to the left of site i
             S = self.psi.get_SL(i)
             if S.ndim == 1:
@@ -724,7 +732,7 @@ def mixer_cleanup(self):
             self.psi.set_B(i - 1, B_L, form=self.psi.form[i - 1])
             self.psi.set_SL(i, S)
             self.psi.set_B(i, B_R, form=self.psi.form[i])
-            
+
             # Update environment LP and RP
             assert self.env.bra is self.psi
             update_env_ket_leg = (self.env.ket is self.psi)
@@ -764,7 +772,7 @@ class IterativeSweeps(Sweep):
             If the any truncation error :attr:`~tenpy.algorithms.truncation.TruncationError.eps`
             on the final sweep exceeds this value, we raise.
             Can be downgraded to a warning by setting this option to ``None``.
-    
+
     """
 
     def run(self):
@@ -807,7 +815,7 @@ def run_iteration(self):
             iteration
         """
         raise NotImplementedError("Subclasses should implement this.")
-    
+
     def status_update(self, iteration_start_time: float):
         """Emits a status message to the logging system after an iteration.
 
@@ -830,7 +838,7 @@ def status_update(self, iteration_start_time: float):
                 'sep': "=" * 80,
             }
         )
-        
+
     def stopping_criterion(self, iteration_start_time: float) -> bool:
         """Determines if the main loop should be terminated.
 
@@ -842,7 +850,7 @@ def stopping_criterion(self, iteration_start_time: float) -> bool:
         Options
         -------
         .. cfg:configoptions :: IterativeSweeps
-        
+
             min_sweeps : int
                 Minimum number of sweeps to perform.
             max_sweeps : int
@@ -860,7 +868,7 @@ def stopping_criterion(self, iteration_start_time: float) -> bool:
         min_sweeps = self.options.get('min_sweeps', 1, int)
         max_sweeps = self.options.get('max_sweeps', 1000, int)
         max_seconds = 3600 * self.options.get('max_hours', 24 * 365, 'real')
-        
+
         if self.sweeps > max_sweeps:
             if self.is_converged():
                 logger.info(f'{self.__class__.__name__}: Converged.')
@@ -886,14 +894,14 @@ def is_converged(self) -> bool:
         """Determines if the algorithm is converged.
 
         Does not cover any other reasons to abort, such as reaching a time limit.
-        Such checks are covered by :meth:`stopping_condition`.
+        Such checks are covered by :meth:`stopping_criterion`.
         """
         raise NotImplementedError("Subclasses should implement this.")
-    
+
     def post_run_cleanup(self):
         """Perform any final steps or clean up after the main loop has terminated."""
         self.mixer_cleanup()
-        
+
 
 class EffectiveH(NpcLinearOperator):
     """Prototype class for local effective Hamiltonians used in sweep algorithms.
@@ -2297,7 +2305,7 @@ class VariationalApplyMPO(VariationalCompression):
 
     The goal is to find a new MPS `phi` (with `N` tensors) which is optimally close
     to ``U_MPO|psi>``, i.e. it is normalized and maximizes ``| <phi|U_MPO|psi> |^2``.
-    The network for this (with `M` tensors for `psi`) is given by
+    The network for this (with `M` tensors for `psi`) is given by::
 
 
         |     .-------M[0]----M[1]----M[2]---- ...  ----.
@@ -2463,13 +2471,13 @@ def update_new_psi(self, theta: npc.Array):
             # for old_T_R `'A'` form fine as well, but i0+1 in `'Th'` form if ``use_eig_based_svd=True``
         expand = self._expansion_rate(i0)
         use_eig_based_svd = self.options.get('use_eig_based_svd', False, bool)
-        
+
         T_Lc, S, T_Rc, form, err, renormalize = decompose_theta_qr_based(
-            old_qtotal_L=old_T_L.qtotal, old_qtotal_R=old_T_R.qtotal, old_bond_leg=old_bond_leg, 
+            old_qtotal_L=old_T_L.qtotal, old_qtotal_R=old_T_R.qtotal, old_bond_leg=old_bond_leg,
             theta=theta, move_right=self.move_right,
             expand=expand, min_block_increase = self.options.get('cbe_min_block_increase', 1, int),
             use_eig_based_svd=use_eig_based_svd,
-            trunc_params=self.trunc_params, 
+            trunc_params=self.trunc_params,
             compute_err=self.options.get('compute_err', True, bool),
             return_both_T=True
         )
@@ -2480,11 +2488,11 @@ def update_new_psi(self, theta: npc.Array):
         else:
             assert form[1] == 'B'
             VH = T_Rc
-        
+
         T_L = T_Lc.split_legs(['(vL.p)'])
         T_R = T_Rc.split_legs(['(p.vR)'])
         U, VH = None, None
-        
+
         self.renormalize.append(renormalize)
 
         # compare to old best guess to check convergence of the sweeps
@@ -2498,9 +2506,9 @@ def update_new_psi(self, theta: npc.Array):
             ov = npc.inner(theta_new_trunc, theta_old, do_conj=True, axes='labels')
             theta_diff = 1. - abs(ov)
             self._theta_diff.append(theta_diff)
-        
+
         # set the new tensors to the MPS
         new_psi.set_B(i0, T_L, form=form[0])
         new_psi.set_B(i0+1, T_R, form=form[1])
         new_psi.set_SR(i0, S)
-        return {'U': U, 'VH': VH, 'err': err}
\ No newline at end of file
+        return {'U': U, 'VH': VH, 'err': err}
diff --git a/tenpy/algorithms/purification.py b/tenpy/algorithms/purification.py
index 442d7250d..fa5beb005 100644
--- a/tenpy/algorithms/purification.py
+++ b/tenpy/algorithms/purification.py
@@ -9,7 +9,7 @@
 from ..linalg import np_conserved as npc
 from . import tebd
 from .mps_common import VariationalApplyMPO, TwoSiteH
-from .truncation import svd_theta, TruncationError
+from ..linalg.truncation import svd_theta, TruncationError
 from .disentangler import get_disentangler
 
 __all__ = ['PurificationTwoSiteU', 'PurificationApplyMPO', 'PurificationTEBD', 'PurificationTEBD2']
diff --git a/tenpy/algorithms/tdvp.py b/tenpy/algorithms/tdvp.py
index 0edca7f06..d92c2f506 100644
--- a/tenpy/algorithms/tdvp.py
+++ b/tenpy/algorithms/tdvp.py
@@ -18,10 +18,11 @@
 Much of the code is very similar to DMRG, and also based on the
 :class:`~tenpy.algorithms.mps_common.Sweep` class.
 
-.. warning ::
-    The interface changed compared to version 0.9.0: Using :class:`TDVPEngine` will result
-    in a error. Use :class:`SingleSiteTDVPEngine` or :class:`TwoSiteTDVPEngine` instead.
-    The old code is still around as :class:`OldTDVPEngine`.
+.. versionchanged :: 0.10.0
+    The interface changed compared to version 0.9.0:
+    Just :class:`TDVPEngine` will result in a error.
+    Use :class:`SingleSiteTDVPEngine` or :class:`TwoSiteTDVPEngine` instead.
+
 
 .. todo ::
     extend code to infinite MPS
@@ -32,12 +33,14 @@
 # Copyright (C) TeNPy Developers, GNU GPLv3
 
 from ..linalg.krylov_based import LanczosEvolution
-from .truncation import svd_theta, TruncationError
+from ..linalg.truncation import svd_theta, TruncationError
 from .mps_common import Sweep, ZeroSiteH, OneSiteH, TwoSiteH
 from .algorithm import TimeEvolutionAlgorithm, TimeDependentHAlgorithm
 from ..linalg import np_conserved as npc
 from ..tools.misc import consistency_check
+from ..tools.params import asConfig
 import logging
+import warnings
 
 logger = logging.getLogger(__name__)
 
@@ -52,6 +55,10 @@ class TDVPEngine(TimeEvolutionAlgorithm, Sweep):
     :class:`SingleSiteTDVPEngine` and :class:`TwoSiteTDVPEngine`.
     Use the latter two classes for actual TDVP runs.
 
+    .. versionchanged :: 1.1
+        Previously had separate `lanczos_options`, which have been renamed to `lanczos_params`
+        for consistency with the Sweep class.
+
     Parameters
     ----------
     psi, model, options, **kwargs:
@@ -59,13 +66,9 @@ class TDVPEngine(TimeEvolutionAlgorithm, Sweep):
 
     Options
     -------
-    .. cfg:config :: TDVP
-        :include: TimeEvolutionAlgorithm
+    .. cfg:config :: TDVPEngine
+        :include: TimeEvolutionAlgorithm, Sweep
 
-        trunc_params : dict
-            Truncation parameters as described in :func:`~tenpy.algorithms.truncation.truncate`
-        lanczos_options : dict
-            Lanczos options as described in :cfg:config:`Lanczos`.
         max_dt : float | None
             Threshold for raising errors on too large time steps. Default ``1.0``.
             See :meth:`~tenpy.tools.misc.consistency_check`.
@@ -73,18 +76,6 @@ class TDVPEngine(TimeEvolutionAlgorithm, Sweep):
             of TDVP, can not be a good approximation anymore. We raise in that case.
             Can be downgraded to a warning by setting this option to ``None``.
 
-    Attributes
-    ----------
-    options: dict
-        Optional parameters.
-    evolved_time : float | complex
-        Indicating how long `psi` has been evolved, ``psi = exp(-i * evolved_time * H) psi(t=0)``.
-    psi : :class:`~tenpy.networks.mps.MPS`
-        The MPS, time evolved in-place.
-    env : :class:`~tenpy.networks.mpo.MPOEnvironment`
-        The environment, storing the `LP` and `RP` to avoid recalculations.
-    lanczos_options : :class:`~tenpy.tools.params.Config`
-        Options passed on to :class:`~tenpy.linalg.lanczos.LanczosEvolution`.
     """
     EffectiveH = None
 
@@ -93,17 +84,25 @@ def __init__(self, psi, model, options, **kwargs):
             msg = ("TDVP interface changed. \n"
                    "The new TDVPEngine has subclasses SingleSiteTDVPEngine"
                    " and TwoSiteTDVPEngine that you can use.\n"
-                   "For now, the previous version is still available as OldTDVPEngine."
                    )
             raise NameError(msg)
         if psi.bc != 'finite':
             raise NotImplementedError("Only finite TDVP is implemented")
         assert psi.bc == model.lat.bc_MPS
+        options = asConfig(options, self.__class__.__name__)
+        options.deprecated_alias("lanczos_options", "lanczos_params",
+                                 "See also https://github.com/tenpy/tenpy/issues/459")
         super().__init__(psi, model, options, **kwargs)
-        self.lanczos_options = self.options.subconfig('lanczos_options')
 
     # run() from TimeEvolutionAlgorithm
 
+    @property
+    def lanczos_options(self):
+        """Deprecated alias of :attr:`lanczos_params`."""
+        warnings.warn("Accessing deprecated alias TDVPEngine.lanczos_options instead of lanczos_params",
+                      FutureWarning, stacklevel=2)
+        return self.lanczos_params
+
     def prepare_evolve(self, dt):
         "Do nothing."
         pass
@@ -138,32 +137,14 @@ class TwoSiteTDVPEngine(TDVPEngine):
 
     Options
     -------
-    .. cfg:config :: TDVP
-        :include: TimeEvolutionAlgorithm
-
-        trunc_params : dict
-            Truncation parameters as described in :func:`~tenpy.algorithms.truncation.truncate`
-        lanczos_options : dict
-            Lanczos options as described in :cfg:config:`Lanczos`.
+    .. cfg:config :: TwoSiteTDVPEngine
+        :include: TDVPEngine
 
-    Attributes
-    ----------
-    options: dict
-        Optional parameters.
-    evolved_time : float | complex
-        Indicating how long `psi` has been evolved, ``psi = exp(-i * evolved_time * H) psi(t=0)``.
-    psi : :class:`~tenpy.networks.mps.MPS`
-        The MPS, time evolved in-place.
-    env : :class:`~tenpy.networks.mpo.MPOEnvironment`
-        The environment, storing the `LP` and `RP` to avoid recalculations.
-    lanczos_options : :class:`~tenpy.tools.params.Config`
-        Options passed on to :class:`~tenpy.linalg.lanczos.LanczosEvolution`.
     """
     EffectiveH = TwoSiteH
 
     def __init__(self, psi, model, options, **kwargs):
         super().__init__(psi, model, options, **kwargs)
-        self.trunc_err = TruncationError()
 
     def get_sweep_schedule(self):
         """Slightly different sweep schedule than DMRG"""
@@ -180,11 +161,11 @@ def update_local(self, theta, **kwargs):
         i0 = self.i0
         L = self.psi.L
 
-        dt = self.dt
+        dt = -0.5j * self.dt
         if i0 == L - 2:
             dt = 2. * dt  # instead of updating the last pair of sites twice, we double the time
         # update two-site wavefunction
-        theta, N = LanczosEvolution(self.eff_H, theta, self.lanczos_options).run(-0.5j * dt)
+        theta, N = LanczosEvolution(self.eff_H, theta, self.lanczos_params).run(dt)
         if self.combine:
             theta.itranspose(['(vL.p0)', '(p1.vR)'])  # shouldn't do anything
         else:
@@ -211,7 +192,7 @@ def update_local(self, theta, **kwargs):
         elif (self.move_right is False):
             self.one_site_update(i0, 0.5j * self.dt)
         # for the last update of the sweep, where move_right is None, there is no one_site_update
-        
+
         return update_data
 
     def update_env(self, **update_data):
@@ -222,7 +203,7 @@ def one_site_update(self, i, dt):
         H1 = OneSiteH(self.env, i, combine=False)
         theta = self.psi.get_theta(i, n=1, cutoff=self.S_inv_cutoff)
         theta = H1.combine_theta(theta)
-        theta, _ = LanczosEvolution(H1, theta, self.lanczos_options).run(dt)
+        theta, _ = LanczosEvolution(H1, theta, self.lanczos_params).run(dt)
         self.psi.set_B(i, theta.replace_label('p0', 'p'), form='Th')
 
 
@@ -236,26 +217,9 @@ class SingleSiteTDVPEngine(TDVPEngine):
 
     Options
     -------
-    .. cfg:config :: TDVP
-        :include: TimeEvolutionAlgorithm
+    .. cfg:config :: SingleSiteTDVPEngine
+        :include: TDVPEngine
 
-        trunc_params : dict
-            Truncation parameters as described in :func:`~tenpy.algorithms.truncation.truncate`
-        lanczos_options : dict
-            Lanczos options as described in :cfg:config:`Lanczos`.
-
-    Attributes
-    ----------
-    options: dict
-        Optional parameters.
-    evolved_time : float | complex
-        Indicating how long `psi` has been evolved, ``psi = exp(-i * evolved_time * H) psi(t=0)``.
-    psi : :class:`~tenpy.networks.mps.MPS`
-        The MPS, time evolved in-place.
-    env : :class:`~tenpy.networks.mpo.MPOEnvironment`
-        The environment, storing the `LP` and `RP` to avoid recalculations.
-    lanczos_options : :class:`~tenpy.tools.params.Config`
-        Options passed on to :class:`~tenpy.linalg.lanczos.LanczosEvolution`.
     """
     EffectiveH = OneSiteH
 
@@ -274,12 +238,12 @@ def update_local(self, theta, **kwargs):
         i0 = self.i0
         L = self.psi.L
 
-        dt = self.dt
+        dt = -0.5j * self.dt
         if i0 == L - 1:
             dt = 2. * dt  # instead of updating the last site twice, we double the time
 
         # update one-site wavefunction
-        theta, N = LanczosEvolution(self.eff_H, theta, self.lanczos_options).run(-0.5j * dt)
+        theta, N = LanczosEvolution(self.eff_H, theta, self.lanczos_params).run(dt)
         if self.move_right:
             self.right_moving_update(i0, theta)
         else:
@@ -339,7 +303,7 @@ def update_env(self, **update_data):
     def zero_site_update(self, i, theta, dt):
         """Zero-site update on the left of site `i`."""
         H0 = ZeroSiteH(self.env, i)
-        theta, _ = LanczosEvolution(H0, theta, self.lanczos_options).run(dt)
+        theta, _ = LanczosEvolution(H0, theta, self.lanczos_params).run(dt)
         return theta, H0
 
     def post_update_local(self, **update_data):
diff --git a/tenpy/algorithms/tebd.py b/tenpy/algorithms/tebd.py
index cd2d20b82..46cb0aa00 100644
--- a/tenpy/algorithms/tebd.py
+++ b/tenpy/algorithms/tebd.py
@@ -48,7 +48,7 @@
 
 from .algorithm import TimeEvolutionAlgorithm, TimeDependentHAlgorithm
 from ..linalg import np_conserved as npc
-from .truncation import svd_theta, decompose_theta_qr_based, TruncationError
+from ..linalg.truncation import svd_theta, decompose_theta_qr_based, TruncationError
 from ..linalg import random_matrix
 from ..tools.misc import consistency_check
 
@@ -65,8 +65,6 @@ class TEBDEngine(TimeEvolutionAlgorithm):
     .. cfg:config :: TEBDEngine
         :include: TimeEvolutionAlgorithm
 
-        start_trunc_err : :class:`~tenpy.algorithms.truncation.TruncationError`
-            Initial truncation error for :attr:`trunc_err`.
         order : int
             Order of the algorithm. The total error for evolution up to a fixed time `t`
             scales as ``O(t*dt^order)``.
@@ -81,13 +79,6 @@ class TEBDEngine(TimeEvolutionAlgorithm):
 
     Attributes
     ----------
-    trunc_err : :class:`~tenpy.algorithms.truncation.TruncationError`
-        The error of the represented state which is introduced due to the truncation during
-        the sequence of update steps.
-    psi : :class:`~tenpy.networks.mps.MPS`
-        The MPS, time evolved in-place.
-    model : :class:`~tenpy.models.model.NearestNeighborModel`
-        The model defining the Hamiltonian.
     _U : list of list of :class:`~tenpy.linalg.np_conserved.Array`
         Exponentiated `H_bond` (bond Hamiltonians), i.e. roughly ``exp(-i H_bond dt_i)``.
         First list for different `dt_i` as necessary for the chosen `order`,
@@ -707,7 +698,7 @@ def update_bond_imag(self, i, U_bond):
             expand = expand, min_block_increase=self.options.get('cbe_min_block_increase', 1, int),
             use_eig_based_svd=self.options.get('use_eig_based_svd', False, bool),
             trunc_params=self.trunc_params,
-            compute_err=self.options.get('compute_err', True, bool), 
+            compute_err=self.options.get('compute_err', True, bool),
             return_both_T=True,
         )
         assert form == ['A','B']
diff --git a/tenpy/algorithms/truncation.py b/tenpy/algorithms/truncation.py
index 9124428be..063beffbf 100644
--- a/tenpy/algorithms/truncation.py
+++ b/tenpy/algorithms/truncation.py
@@ -1,652 +1,14 @@
-r"""Truncation of Schmidt values.
+"""Dummy module for backwards compatibility.
 
-Often, it is necessary to truncate the number of states on a virtual bond of an MPS,
-keeping only the state with the largest Schmidt values.
-The function :func:`truncate` picks exactly those from a given Schmidt spectrum
-:math:`\lambda_a`, depending on some parameters explained in the doc-string of the function.
-
-Further, we provide :class:`TruncationError` for a simple way to keep track of the
-total truncation error.
-
-The SVD on a virtual bond of an MPS actually gives a Schmidt decomposition
-:math:`|\psi\rangle = \sum_{a} \lambda_a |L_a\rangle |R_a\rangle`
-where :math:`|L_a\rangle` and :math:`|R_a\rangle` form orthonormal bases of the parts
-left and right of the virtual bond.
-Let us assume that the state is properly normalized,
-:math:`\langle\psi | \psi\rangle = \sum_{a} \lambda^2_a = 1`.
-Assume that the singular values are ordered descending, and that we keep the first :math:`\chi_c`
-of the initially :math:`\chi` Schmidt values.
-
-Then we decompose the untruncated state as
-:math:`|\psi\rangle = \sqrt{1-\epsilon}|\psi_{tr}\rangle + \sqrt{\epsilon}|\psi_{tr}^\perp\rangle`
-where
-:math:`|\psi_{tr}\rangle =
-\frac{1}{\sqrt{1-\epsilon}} \sum_{a < \chi_c} \lambda_a|L_a\rangle|R_a\rangle`
-is the truncated state kept (normalized to 1),
-:math:`|\psi_{tr}^\perp\rangle =
-\frac{1}{\sqrt{\epsilon}} \sum_{a >= \chi_c} \lambda_a |L_a\rangle|R_a\rangle`
-is the discarded part (orthogonal to the kept part) and the
-*truncation error of a single truncation* is defined as
-:math:`\epsilon = 1 - |\langle \psi | \psi_{tr}\rangle |^2 = \sum_{a >= \chi_c} \lambda_a^2`.
-
-.. warning ::
-    For imaginary time evolution (e.g. with TEBD), you try to project out the ground state.
-    Then, looking at the truncation error defined in this module does *not* give you any
-    information how good the found state coincides with the actual ground state!
-    (Instead, the returned truncation error depends on the overlap with the initial state,
-    which is arbitrary > 0)
-
-.. warning ::
-    This module takes only track of the errors coming from the truncation of Schmidt values.
-    There might be other sources of error as well, for example TEBD has also an discretization
-    error depending on the chosen time step.
+The `tenpy.algorithms.truncation` module was moved to :mod:`tenpy.linalg.truncation`.
+Here we just import all the names again for backwards compatibility,
+to support loading pickle and HDF5 data files with `TruncationError` instances in them.
 """
 # Copyright (C) TeNPy Developers, GNU GPLv3
 
-import numpy as np
-from ..linalg import np_conserved as npc
-from ..tools.hdf5_io import Hdf5Exportable
-import warnings
-from ..tools.params import asConfig
-
-__all__ = ['TruncationError', 'truncate', 'svd_theta', 'decompose_theta_qr_based']
-
-
-
-class TruncationError(Hdf5Exportable):
-    r"""Class representing a truncation error.
-
-    The default initialization represents "no truncation".
-
-    .. warning ::
-        For imaginary time evolution, this is *not* the error you are interested in!
-
-    Parameters
-    ----------
-    eps, ov : float
-        See below.
-
-
-    Attributes
-    ----------
-    eps : float
-        The total sum of all discarded Schmidt values squared.
-        Note that if you keep singular values up to 1.e-14 (= a bit more than machine precision
-        for 64bit floats), `eps` is on the order of 1.e-28 (due to the square)!
-    ov : float
-        A lower bound for the overlap :math:`|\langle \psi_{trunc} | \psi_{correct} \rangle|^2`
-        (assuming normalization of both states).
-        This is probably the quantity you are actually interested in.
-        Takes into account the factor 2 explained in the section on Errors in the
-        `TEBD Wikipedia article <https://en.wikipedia.org/wiki/Time-evolving_block_decimation>`.
-    """
-    def __init__(self, eps=0., ov=1.):
-        self.eps = eps
-        self.ov = ov
-
-    def copy(self):
-        """Return a copy of self."""
-        return TruncationError(self.eps, self.ov)
-
-    @classmethod
-    def from_norm(cls, norm_new, norm_old=1.):
-        r"""Construct TruncationError from norm after and before the truncation.
-
-        Parameters
-        ----------
-        norm_new : float
-            Norm of Schmidt values kept, :math:`\sqrt{\sum_{a kept} \lambda_a^2}`
-            (before re-normalization).
-        norm_old : float
-            Norm of all Schmidt values before truncation, :math:`\sqrt{\sum_{a} \lambda_a^2}`.
-        """
-        eps = 1. - norm_new**2 / norm_old**2  # = (norm_old**2 - norm_new**2)/norm_old**2
-        return cls(eps, 1. - 2. * eps)
-
-    @classmethod
-    def from_S(cls, S_discarded, norm_old=None):
-        r"""Construct TruncationError from discarded singular values.
-
-        Parameters
-        ----------
-        S_discarded : 1D numpy array
-            The singular values discarded.
-        norm_old : float
-            Norm of all Schmidt values before truncation, :math:`\sqrt{\sum_{a} \lambda_a^2}`.
-            Default (``None``) is 1.
-        """
-        eps = np.sum(np.square(S_discarded))
-        if norm_old:
-            eps /= norm_old * norm_old
-        return cls(eps, 1. - 2. * eps)
-
-    def __add__(self, other):
-        res = TruncationError()
-        res.eps = self.eps + other.eps  # whatever that actually means...
-        res.ov = self.ov * other.ov
-        return res
-
-    @property
-    def ov_err(self):
-        """Error ``1.-ov`` of the overlap with the correct state."""
-        return 1. - self.ov
-
-    def __repr__(self):
-        if self.eps != 0 or self.ov != 1.:
-            return "TruncationError(eps={eps:.4e}, ov={ov:.10f})".format(eps=self.eps, ov=self.ov)
-        else:
-            return "TruncationError()"
-
-
-def truncate(S, options):
-    """Given a Schmidt spectrum `S`, determine which values to keep.
-
-    Options
-    -------
-    .. cfg:config:: truncation
-
-        chi_max : int
-            Keep at most `chi_max` Schmidt values.
-        chi_min : int
-            Keep at least `chi_min` Schmidt values.
-        degeneracy_tol: float
-            Don't cut between neighboring Schmidt values with
-            ``|log(S[i]/S[j])| < degeneracy_tol``, or equivalently
-            ``|S[i] - S[j]|/S[j] < exp(degeneracy_tol) - 1 ~= degeneracy_tol``
-            for small `degeneracy_tol`.
-            In other words, keep either both `i` and `j` or none, if the
-            Schmidt values are degenerate with a relative error smaller
-            than `degeneracy_tol`, which we expect to happen in the case
-            of symmetries.
-        svd_min : float
-            Discard all small Schmidt values ``S[i] < svd_min``.
-        trunc_cut : float
-            Discard all small Schmidt values as long as
-            ``sum_{i discarded} S[i]**2 <= trunc_cut**2``.
-
-    Parameters
-    ----------
-    S : 1D array
-        Schmidt values (as returned by an SVD), not necessarily sorted.
-        Should be normalized to ``np.sum(S*S) == 1.``.
-    options: dict-like
-        Config with constraints for the truncation, see :cfg:config:`truncation`.
-        If a constraint can not be fulfilled (without violating a previous one), it is ignored.
-        A value ``None`` indicates that the constraint should be ignored.
-
-    Returns
-    -------
-    mask : 1D bool array
-        Index mask, True for indices which should be kept.
-    norm_new : float
-        The norm of the truncated Schmidt values, ``np.linalg.norm(S[mask])``.
-        Useful for re-normalization.
-    err : :class:`TruncationError`
-        The error of the represented state which is introduced due to the truncation.
-    """
-    options = asConfig(options, "truncation")
-    # by default, only truncate values which are much closer to zero than machine precision.
-    # This is only to avoid problems with taking the inverse of `S`.
-    chi_max = options.get('chi_max', 100, int)
-    chi_min = options.get('chi_min', None, int)
-    deg_tol = options.get('degeneracy_tol', None, 'real')
-    svd_min = options.get('svd_min', 1.e-14, 'real')
-    trunc_cut = options.get('trunc_cut', 1.e-14, 'real')
-
-    if trunc_cut is not None and trunc_cut >= 1.:
-        raise ValueError("trunc_cut >=1.")
-    if not np.any(S > 1.e-10):
-        warnings.warn("no Schmidt value above 1.e-10", stacklevel=2)
-    if np.any(S < -1.e-10):
-        warnings.warn("negative Schmidt values!", stacklevel=2)
-
-    # use 1.e-100 as replacement for <=0 values for a well-defined logarithm.
-    logS = np.log(np.choose(S <= 0., [S, 1.e-100 * np.ones(len(S))]))
-    piv = np.argsort(logS)  # sort *ascending*.
-    logS = logS[piv]
-    # goal: find an index 'cut' such that we keep piv[cut:], i.e. cut between `cut-1` and `cut`.
-    good = np.ones(len(piv), dtype=np.bool_)  # good[cut] = (is `cut` a good choice?)
-    # we choose the smallest 'good' cut.
-
-    if chi_max is not None:
-        # keep at most chi_max values
-        good2 = np.zeros(len(piv), dtype=np.bool_)
-        good2[-chi_max:] = True
-        good = _combine_constraints(good, good2, "chi_max")
-
-    if chi_min is not None and chi_min > 1:
-        # keep at most chi_max values
-        good2 = np.ones(len(piv), dtype=np.bool_)
-        good2[-chi_min + 1:] = False
-        good = _combine_constraints(good, good2, "chi_min")
-
-    if deg_tol:
-        # don't cut between values (cut-1, cut) with ``log(S[cut]/S[cut-1]) < deg_tol``
-        # this is equivalent to
-        # ``(S[cut] - S[cut-1])/S[cut-1] < exp(deg_tol) - 1 = deg_tol + O(deg_tol^2)``
-        good2 = np.empty(len(piv), np.bool_)
-        good2[0] = True
-        good2[1:] = np.greater_equal(logS[1:] - logS[:-1], deg_tol)
-        good = _combine_constraints(good, good2, "degeneracy_tol")
-
-    if svd_min is not None:
-        # keep only values S[i] >= svd_min
-        good2 = np.greater_equal(logS, np.log(svd_min))
-        good = _combine_constraints(good, good2, "svd_min")
-
-    if trunc_cut is not None:
-        good2 = (np.cumsum(S[piv]**2) > trunc_cut * trunc_cut)
-        good = _combine_constraints(good, good2, "trunc_cut")
-
-    cut = np.nonzero(good)[0][0]  # smallest possible cut: keep as many S as allowed
-    mask = np.zeros(len(S), dtype=np.bool_)
-    np.put(mask, piv[cut:], True)
-    norm_new = np.linalg.norm(S[mask])
-    return mask, norm_new, TruncationError.from_S(S[np.logical_not(mask)]),
-
-
-def svd_theta(theta, trunc_par, qtotal_LR=[None, None], inner_labels=['vR', 'vL']):
-    """Performs SVD of a matrix `theta` (= the wavefunction) and truncates it.
-
-    Perform a singular value decomposition (SVD) with :func:`~tenpy.linalg.np_conserved.svd`
-    and truncates with :func:`truncate`.
-    The result is an approximation
-    ``theta ~= tensordot(U.scale_axis(S*renormalization, 1), VH, axes=1)``
-
-    Parameters
-    ----------
-    theta : :class:`~tenpy.linalg.np_conserved.Array`, shape ``(M, N)``
-        The matrix, on which the singular value decomposition (SVD) is performed.
-        Usually, `theta` represents the wavefunction, such that the SVD is a Schmidt decomposition.
-    trunc_par : dict
-        truncation parameters as described in :func:`truncate`.
-    qtotalLR : (charges, charges)
-        The total charges for the returned `U` and `VH`.
-    inner_labels : (string, string)
-        Labels for the `U` and `VH` on the newly-created bond.
-
-    Returns
-    -------
-    U : :class:`~tenpy.linalg.np_conserved.Array`
-        Matrix with left singular vectors as columns.
-        Shape ``(M, M)`` or ``(M, K)`` depending on `full_matrices`.
-    S : 1D ndarray
-        The singular values of the array.
-        If no `cutoff` is given, it has length ``min(M, N)``.
-        Normalized to ``np.linalg.norm(S)==1``.
-    VH : :class:`~tenpy.linalg.np_conserved.Array`
-        Matrix with right singular vectors as rows.
-        Shape ``(N, N)`` or ``(K, N)`` depending on `full_matrices`.
-    err : :class:`TruncationError`
-        The truncation error introduced.
-    renormalization : float
-        Factor, by which S was renormalized.
-    """
-    U, S, VH = npc.svd(theta,
-                       full_matrices=False,
-                       compute_uv=True,
-                       qtotal_LR=qtotal_LR,
-                       inner_labels=inner_labels)
-    renormalization = np.linalg.norm(S)
-    S = S / renormalization
-    piv, new_norm, err = truncate(S, trunc_par)
-    new_len_S = np.sum(piv, dtype=np.int_)
-    if new_len_S * 100 < len(S) and (trunc_par['chi_max'] is None
-                                     or new_len_S != trunc_par['chi_max']):
-        msg = "Catastrophic reduction in chi: {0:d} -> {1:d}".format(len(S), new_len_S)
-        # NANs are excluded in npc.svd
-        UHU = npc.tensordot(U.conj(), U, axes=[[0], [0]])
-        msg += " |U^d U - 1| = {0:f}".format(npc.norm(UHU - npc.eye_like(UHU)))
-        VHV = npc.tensordot(VH, VH.conj(), axes=[[1], [1]])
-        msg += " |V V - 1| = {0:f}".format(npc.norm(VHV - npc.eye_like(VHV)))
-        warnings.warn(msg, stacklevel=2)
-    S = S[piv] / new_norm
-    renormalization *= new_norm
-    U.iproject(piv, axes=1)  # U = U[:, piv]
-    VH.iproject(piv, axes=0)  # VH = VH[piv, :]
-    return U, S, VH, err, renormalization
-
-
-def _qr_theta_Y0(old_qtotal_L, old_qtotal_R, old_bond_leg, theta: npc.Array, move_right: bool, expand: float, min_block_increase: int):
-    """Generate the initial guess `Y0` for the (left) right isometry for the QR based theta decomposition `decompose_theta_qr_based()`.
-
-    Parameters
-    ----------
-    old_qtotal_L : 1D array
-        The total charge of the old left tensor.
-        e.g. ``old_qtotal_L = T_L.qtotal``
-    old_qtotal_R : 1D array
-        The total charge of the old right tensor.
-        e.g. ``old_qtotal_R = T_R.qtotal``
-    old_bond_leg : :class:`~tenpy.linalg.charges.LegCharge`
-        The leg between the old left tensor and the old right tensor.
-        e.g. ``old_bond_leg = T_L.get_leg('vR')`` or ``old_bond_leg = T_R.get_leg('vL')``
-    theta : Array with legs [(vL.p0), (p1.vR)]
-    move_right : bool 
-    expand : float
-    min_block_increase : int
-
-    Returns
-    -------
-    Y0 : Array with legs [vL, (p1.vR)] or [(vL.p0), vR]
-        If ``move_right=True``, the legs of Y0 are [vL, (p1.vR)].
-        If ``move_right=False``, the legs of Y0 are [(vL.p0), vR].
-    """
-
-    assert min_block_increase >= 0
-    assert expand is not None and expand != 0
-    
-    if move_right:
-        Y0 = theta.copy(deep=False)
-        Y0.legs[1] = Y0.legs[1].to_LegCharge()
-        Y0.ireplace_label('(p1.vR)', 'vR')
-        if any(old_qtotal_R != 0):
-            Y0.gauge_total_charge('vR', new_qtotal=old_qtotal_L)
-        vR_old = old_bond_leg
-        if not vR_old.is_blocked():
-            vR_old = vR_old.sort()[1]
-        vR_new = Y0.get_leg('vR')  # is blocked, since created from pipe
-        v_old, v_new = vR_old, vR_new
-        q_axis, norm_axis = 1, 0
-    else:
-        Y0 = theta.copy(deep=False)
-        Y0.legs[0] = Y0.legs[0].to_LegCharge()
-        Y0.ireplace_label('(vL.p0)', 'vL')
-        if any(old_qtotal_L != 0):
-            Y0.gauge_total_charge('vL', new_qtotal=old_qtotal_R)
-        vL_old = old_bond_leg
-        if not vL_old.is_blocked():
-            vL_old = vL_old.sort()[1]
-        vL_new = Y0.get_leg('vL')  # is blocked, since created from pipe
-        v_old, v_new = vL_old, vL_new
-        q_axis, norm_axis = 0, 1
-
-    # vL(R)_old is guaranteed to be a slice of vL(R)_new by charge rule in T_L(R)_old
-    piv = np.zeros(v_new.ind_len, dtype=bool)  # indices to keep in v_new
-    increase_per_block = max(min_block_increase, int(v_old.ind_len * expand // v_new.block_number))
-    sizes_old = v_old.get_block_sizes()
-    sizes_new = v_new.get_block_sizes()
-
-    # iterate over charge blocks in vL(R)_new and vL(R)_old at the same time
-    j_old = 0
-    q_old = v_old.charges[j_old, :]
-    qdata_order = np.argsort(Y0._qdata[:, q_axis])
-    qdata_idx = 0
-    for j_new, q_new in enumerate(v_new.charges):
-        if all(q_new == q_old):  # have charge block in both v_new and v_old
-            s_new = sizes_old[j_old] + increase_per_block
-            # move to next charge block in next loop iteration
-            j_old += 1
-            if j_old < len(v_old.charges):
-                q_old = v_old.charges[j_old, :]
-        else:  # charge block only in v_new
-            s_new = increase_per_block
-        s_new = min(s_new, sizes_new[j_new])  # don't go beyond block
-
-        if Y0._qdata[qdata_order[qdata_idx], q_axis] != j_new:
-            # block does not exist
-            # while we could set corresponding piv entries to True, it would not help, since
-            # the corresponding "entries" of Y0 are zero anyway
-            continue
-
-        # block has axis [(vL.p0),vR]. want to keep the s_new slices of the vR axis
-        #  that have the largest norm
-        norms = np.linalg.norm(Y0._data[qdata_order[qdata_idx]], axis=norm_axis)
-        kept_slices = np.argsort(-norms)[:s_new]  # negative sign so we sort large to small
-        start = v_new.slices[j_new]
-        piv[start + kept_slices] = True
-
-        qdata_idx += 1
-        if qdata_idx >= Y0._qdata.shape[0]:
-            break
-    
-    if move_right:
-        Y0.iproject(piv, 'vR')
-    else:
-        Y0.iproject(piv, 'vL')
-
-    return Y0
-
-
-def _eig_based_svd(A, need_U: bool = True, need_Vd: bool = True, inner_labels=[None, None],
-                   trunc_params=None):
-    """Computes the singular value decomposition of a matrix A via eigh
-
-    Singular values and vectors are obtained by diagonalizing the "square" A.hc @ A and/or A @ A.hc,
-    i.e. with two eigh calls instead of an svd call.
-
-    Truncation if performed if and only if trunc_params are given.
-    This performs better on GPU, but is not really useful on CPU.
-    If isometries U or Vd are not needed, their computation can be omitted for performance.
-
-    Does not (yet) support computing both U and Vd
-    """
-    warnings.warn('_eig_based_svd is nonsensical on CPU!!')
-    assert A.rank == 2
-
-    if need_U and need_Vd:
-        # TODO (JU) just doing separate eighs for U, S and for S, Vd is not sufficient
-        #  the phases of U / Vd are arbitrary.
-        #  Need to put in more work in that case...
-        raise NotImplementedError
-
-    if need_U:
-        Vd = None
-        A_Ahc = npc.tensordot(A, A.conj(), [1, 1])
-        L, U = npc.eigh(A_Ahc, sort='>')
-        S = np.sqrt(np.abs(L))  # abs to avoid `nan` due to accidentally negative values close to zero
-        U = U.ireplace_label('eig', inner_labels[0])
-    elif need_Vd:
-        U = None
-        Ahc_A = npc.tensordot(A.conj(), A, [0, 0])
-        L, V = npc.eigh(Ahc_A, sort='>')
-        S = np.sqrt(np.abs(L))  # abs to avoid `nan` due to accidentally negative values close to zero
-        Vd = V.iconj().itranspose().ireplace_label('eig*', inner_labels[1])
-    else:
-        U = None
-        Vd = None
-        # use the smaller of the two square matrices -- they have the same eigenvalues
-        if A.shape[1] >= A.shape[0]:
-            A2 = npc.tensordot(A, A.conj(), [1, 0])
-        else:
-            A2 = npc.tensordot(A.conj(), A, [1, 0])
-        L = npc.eigvalsh(A2)
-        S = np.sqrt(np.abs(L))  # abs to avoid `nan` due to accidentally negative values close to zero
-
-    if trunc_params is not None:
-        piv, renormalize, trunc_err = truncate(S, trunc_params)
-        S = S[piv]
-        S /= renormalize
-        if need_U:
-            U.iproject(piv, 1)
-        if need_Vd:
-            Vd.iproject(piv, 0)
-    else:
-        renormalize = np.linalg.norm(S)
-        S /= renormalize
-        trunc_err = TruncationError()
-
-    return U, S, Vd, trunc_err, renormalize
-
-
-def decompose_theta_qr_based(old_qtotal_L, old_qtotal_R, old_bond_leg, theta: npc.Array, 
-                             move_right: bool, expand: float, min_block_increase: int, 
-                             use_eig_based_svd: bool, trunc_params: dict, compute_err: bool, 
-                             return_both_T: bool):
-    r"""Performs a QR based decomposition of a matrix `theta` (= the wavefunction) and truncates it.
-    The result is an approximation.
-
-    The decomposition for ``use_eig_based_svd=False`` is::
-
-        |   -- theta --   ~=   renormalization * -- T_Lc --- S --- T_Rc --
-        |      |   |                                 |              |
-
-    Where `T_Lc` is in `'A'` form and `T_Rc` in `'B'` form.
-
-    The decomposition for ``use_eig_based_svd=True`` is::
-
-        |   -- theta --   ~=   renormalization * -- T_Lc --- T_Rc --
-        |      |   |                                 |        |
-
-    Where `T_Lc` is in `'A'` (`'Th'`) form and `T_Rc` in `'Th'` (`'B'`) form, if ``move_right=True`` 
-    (``move_right=False``).
-    
-    Parameters
-    ----------
-    old_qtotal_L : 1D array
-        The total charge of the old left tensor.
-        e.g. ``old_qtotal_L = T_L.qtotal``
-    old_qtotal_R : 1D array
-        The total charge of the old right tensor.
-        e.g. ``old_qtotal_R = T_R.qtotal``
-    old_bond_leg : :class:`~tenpy.linalg.charges.LegCharge`
-        The leg between the old left tensor and the old right tensor.
-        e.g. ``old_bond_leg = T_L.get_leg('vR')`` or ``old_bond_leg = T_R.get_leg('vL')``
-    theta : npc.Array
-        Array with legs [(vL.p0), (p1.vR)]
-    expand : float | None
-        Expansion rate. The QR-based decomposition is carried out at an expanded bond dimension.
-    min_block_increase : int
-        Minimum bond dimension increase for each block.
-    move_right : bool 
-        If `True`, the left tensor `T_Lc` is returned in `'A'` form and the right tensor `T_Rc` is set to `None`.
-        If `False`, the right tensor `T_Rc` is returned in `'B'` form and the left tensor `T_Lc` is set to `None`.
-    use_eig_based_svd : bool
-        Whether the SVD of the bond matrix :math:`\Xi` should be carried out numerically via
-        the eigensystem. This is faster on GPUs, but less accurate.
-        It makes no sense to do this on CPU.
-    trunc_par : dict
-        truncation parameters as described in :func:`truncate`.
-    compute_err : bool
-        Whether the truncation error should be computed exactly.
-        Computing the truncation error is significantly more expensive.
-        If `True`, the full error is computed and ``return_both_T=True``.
-        Otherwise, the truncation error is set to NaN.
-    return_both_T : bool
-        Whether the other tensor (associated with ``not move_right``) should be returned as well.
-        If `True` and ``move_right=True``, the right tensor `T_Rc` is returned in `'Th'` (`'B'`) form, 
-        if ``use_eig_based_svd=True`` (``use_eig_based_svd=False``).
-        If `True` and ``move_right=False``, the left tensor `T_Lc` is returned in `'Th'` (`'A'`) form, 
-        if ``use_eig_based_svd=True`` (``use_eig_based_svd=False``).
-
-    Returns
-    -------
-    T_Lc : array with legs [(vL.p), vR] or None
-    S : 1D numpy array
-        The singular values of the array.
-        Normalized to ``np.linalg.norm(S)==1``.
-    T_Rc : array with legs [vL, (p.vR)] or None
-    form : list
-        List containing two entries providing the form of the two arrays `T_Lc` and `T_Rc` in string form.
-        e.g. ``['A','Th']``
-    trunc_err : TruncationError
-    renormalization : float
-        Factor, by which S was renormalized.
-    """
-
-    if compute_err:
-        return_both_T = True
-    
-    if move_right:
-        # Get initial guess for the left isometry
-        Y0 = _qr_theta_Y0(old_qtotal_L, old_qtotal_R, old_bond_leg, theta, move_right, expand, min_block_increase) # Y0: [(vL.p0), vR]
-
-        # QR based updates
-        theta_i1 = npc.tensordot(Y0.conj(), theta, ['(vL*.p0*)', '(vL.p0)']).ireplace_label('vR*', 'vL') # theta_i1: [vL,(p1.vR)]
-        theta_i1.itranspose(['(p1.vR)', 'vL']) # theta_i1: [(p1.vR),vL]
-        B_R, _ = npc.qr(theta_i1, inner_labels=['vL', 'vR'], inner_qconj=-1) # B_R: [(p1.vR),vL] 
-        B_R.itranspose(['vL', '(p1.vR)']) # B_R: [vL,(p1.vR)] 
-
-        theta_i0 = npc.tensordot(theta, B_R.conj(), ['(p1.vR)', '(p1*.vR*)']).ireplace_label('vL*', 'vR') # theta_i0: [(vL.p0),vR]
-        A_L, Xi = npc.qr(theta_i0, inner_labels=['vR', 'vL']) # A_L: [(vL.p0), vR]
-        
-    else:
-        # Get initial guess for the right isometry
-        Y0 = _qr_theta_Y0(old_qtotal_L, old_qtotal_R, old_bond_leg, theta, move_right, expand, min_block_increase) # Y0: [vL, (p1.vR)]
-
-        # QR based updates
-        theta_i0 = npc.tensordot(theta, Y0.conj(), ['(p1.vR)', '(p1*.vR*)']).ireplace_label('vL*', 'vR') # theta_i0: [(vL.p0),vR]
-        A_L, _ = npc.qr(theta_i0, inner_labels=['vR', 'vL']) # A_L: [(vL.p0), vR]
-
-        theta_i1 = npc.tensordot(A_L.conj(), theta, ['(vL*.p0*)', '(vL.p0)']).ireplace_label('vR*', 'vL') # theta_i1: [vL,(p1.vR)]
-        theta_i1.itranspose(['(p1.vR)', 'vL']) # theta_i1: [(p1.vR),vL]
-        B_R, Xi = npc.qr(theta_i1, inner_labels=['vL', 'vR'], inner_qconj=-1)
-        B_R.itranspose(['vL', '(p1.vR)'])
-        Xi.itranspose(['vL', 'vR'])
-
-    # SVD of bond matrix Xi
-    if use_eig_based_svd:
-        U, S, Vd, _, renormalization = _eig_based_svd(
-            Xi, need_U=move_right, need_Vd=(not move_right), inner_labels=['vR', 'vL'], trunc_params=trunc_params
-        )
-    else:
-        U, S, Vd, _, renormalization = svd_theta(Xi, trunc_params)
-
-    # Assign return matrices
-    T_Lc, T_Rc = None, None
-    form = ['A','B']
-    if move_right:
-        T_Lc = npc.tensordot(A_L, U, ['vR', 'vL'])
-        if return_both_T:
-            if use_eig_based_svd:
-                T_Rc = npc.tensordot(Xi, B_R, ['vR', 'vL'])
-                T_Rc = npc.tensordot(U.iconj(), T_Rc, ['vL*', 'vL']).ireplace_label('vR*', 'vL')
-                T_Rc /= npc.norm(T_Rc)
-                form[1] = 'Th'
-            else:
-                T_Rc = npc.tensordot(Vd, B_R, ['vR', 'vL'])
-    else:
-        T_Rc = npc.tensordot(Vd, B_R, ['vR', 'vL'])
-        if return_both_T:
-            if use_eig_based_svd:
-                T_Lc = npc.tensordot(A_L, Xi, ['vR', 'vL'])
-                T_Lc = npc.tensordot(T_Lc, Vd.iconj(), ['vR', 'vR*']).ireplace_label('vL*', 'vR')
-                T_Lc /= npc.norm(T_Lc)
-                form[0] = 'Th'
-            else:
-                T_Lc = npc.tensordot(A_L, U, ['vR', 'vL'])
-    
-    # Compute error
-    if compute_err:
-        if use_eig_based_svd:
-            theta_approx = npc.tensordot(T_Lc, T_Rc, ['vR', 'vL'])
-        else:
-            theta_approx = npc.tensordot(T_Lc.scale_axis(S, axis='vR'), T_Rc, ['vR', 'vL'])
-        N_theta = npc.norm(theta)
-        eps = npc.norm(theta / N_theta - theta_approx * renormalization / N_theta) ** 2
-        trunc_err = TruncationError(eps, 1. - 2. * eps)
-    else:
-        trunc_err = TruncationError(np.nan, np.nan)
-
-    # Replace labels
-    if move_right:
-        T_Lc.ireplace_label('(vL.p0)', '(vL.p)')
-        if return_both_T:
-            T_Rc.ireplace_label('(p1.vR)', '(p.vR)')
-    else:
-        T_Rc.ireplace_label('(p1.vR)', '(p.vR)')
-        if return_both_T:
-            T_Lc.ireplace_label('(vL.p0)', '(vL.p)')
-        
-    return T_Lc, S, T_Rc, form, trunc_err, renormalization
-
-
-def _combine_constraints(good1, good2, warn):
-    """return logical_and(good1, good2) if there remains at least one `True` entry.
-
-    Otherwise print a warning and return just `good1`.
-    """
-    res = np.logical_and(good1, good2)
-    if np.any(res):
-        return res
-    warnings.warn("truncation: can't satisfy constraint for " + warn, stacklevel=3)
-    return good1
+# just provide namespace from ..linalg.truncation
 
+from ..linalg import truncation
+from ..linalg.truncation import TruncationError, truncate, svd_theta, decompose_theta_qr_based  # noqa: F401
 
-# truncation parameter for truncating svd values at machine precision
-# excluding 0. and negative S values only
-_machine_prec_trunc_par = asConfig({'svd_min': np.finfo(np.float64).eps,
-                                    'trunc_cut': None,
-                                    'chi_max': None},
-                                   'machine_prec_trunc_params')
-_machine_prec_trunc_par.unused.clear()
+__all__ = truncation.__all__
diff --git a/tenpy/algorithms/vumps.py b/tenpy/algorithms/vumps.py
index 323601e5b..df560108e 100644
--- a/tenpy/algorithms/vumps.py
+++ b/tenpy/algorithms/vumps.py
@@ -36,6 +36,7 @@
 import numpy as np
 import time
 import logging
+import warnings
 
 logger = logging.getLogger(__name__)
 
@@ -44,12 +45,13 @@
 from ..networks.mps import MPS
 from ..networks.uniform_mps import UniformMPS
 from ..linalg.sparse import SumNpcLinearOperator
-from ..algorithms.mps_common import DensityMatrixMixer, SubspaceExpansion
+from .mps_common import DensityMatrixMixer, SubspaceExpansion
 from ..linalg.krylov_based import LanczosGroundState
 from ..tools.math import entropy
 from ..tools.process import memory_usage
+from ..tools.params import asConfig
 from .mps_common import IterativeSweeps, ZeroSiteH, OneSiteH, TwoSiteH
-from .truncation import svd_theta
+from ..linalg.truncation import svd_theta
 from .plane_wave_excitation import append_right_env, append_left_env, construct_orthogonal
 
 __all__ = ['VUMPSEngine', 'SingleSiteVUMPSEngine', 'TwoSiteVUMPSEngine']
@@ -63,6 +65,10 @@ class VUMPSEngine(IterativeSweeps):
     :class:`TwoSiteVUMPSEngine`.
     Use the latter two classes for actual VUMPS runs.
 
+    .. versionchanged :: 1.1
+        Previously had separate `lanczos_options`, which have been renamed to `lanczos_params`
+        for consistency with the Sweep class.
+
     Options
     -------
     .. cfg:config :: VUMPSEngine
@@ -70,22 +76,6 @@ class VUMPSEngine(IterativeSweeps):
 
     Attributes
     ----------
-    EffectiveH : class type
-        Class for the effective Hamiltonian, i.e., a subclass of
-        :class:`~tenpy.algorithms.mps_common.EffectiveH`. Has a `length` class attribute which
-        specifies the number of sites updated at once (e.g., whether we do single-site vs. two-site
-        VUMPS).
-    chi_list : dict | ``None``
-        See :cfg:option:`DMRGEngine.chi_list`
-    eff_H : :class:`~tenpy.algorithms.mps_common.EffectiveH`
-        Effective single-site or two-site Hamiltonian.
-    shelve : bool
-        If a simulation runs out of time (`time.time() - start_time > max_seconds`), the run will
-        terminate with `shelve = True`.
-    sweeps : int
-        The number of sweeps already performed. (Useful for re-start).
-    time0 : float
-        Time marker for the start of the run.
     update_stats : dict
         A dictionary with detailed statistics of the convergence at local update-level.
         For each key in the following table, the dictionary contains a list where one value is
@@ -157,10 +147,12 @@ class VUMPSEngine(IterativeSweeps):
     EffectiveH = None
 
     def __init__(self, psi, model, options, **kwargs):
-        #options = asConfig(options, self.__class__.__name__)
         if not isinstance(psi, UniformMPS):
             assert isinstance(psi, MPS)
             psi = UniformMPS.from_MPS(psi)  # psi is an MPS, so convert it to a uMPS
+        options = asConfig(options, self.__class__.__name__)
+        options.deprecated_alias("lanczos_options", "lanczos_params",
+                                 "See also https://github.com/tenpy/tenpy/issues/459")
         super().__init__(psi, model, options, **kwargs)
         self.guess_init_env_data = self.env.get_initialization_data()
         self.env.clear()
@@ -175,10 +167,17 @@ def __init__(self, psi, model, options, **kwargs):
         if self.chi_list is not None:
             default_min_sweeps = max(max(self.chi_list.keys()), default_min_sweeps)
         self.options.setdefault('min_sweeps', default_min_sweeps)
-        mixer_options = self.options.subconfig('mixer_params')
-        mixer_options.setdefault('amplitude', 1.e-5)
-        mixer_options.setdefault('decay', 2)
-        mixer_options.setdefault('disable_after', 5)
+        mixer_params = self.options.subconfig('mixer_params')
+        mixer_params.setdefault('amplitude', 1.e-5)
+        mixer_params.setdefault('decay', 2)
+        mixer_params.setdefault('disable_after', 5)
+
+    @property
+    def lanczos_options(self):
+        """Deprecated alias of :attr:`lanczos_params`."""
+        warnings.warn("Accessing deprecated alias TDVPEngine.lanczos_options instead of lanczos_params",
+                      FutureWarning, stacklevel=2)
+        return self.lanczos_params
 
     @property
     def S_inv_cutoff(self):
@@ -192,7 +191,7 @@ def run_iteration(self):
         Options
         -------
         .. cfg:configoptions :: VUMPSEngine
-        
+
             diagonal_gauge_frequency : int
                 Number of sweeps how often we restore the UniformMPS to the diagonal gauge
             cutoff : float
@@ -298,7 +297,7 @@ def is_converged(self):
         Options
         -------
         .. cfg:configoptions :: VUMPSEngine
-        
+
             max_E_err : float
                 Convergence if the change of the energy in each step
                 satisfies ``|Delta E / max(E, 1)| < max_E_err``. Note that
@@ -330,13 +329,13 @@ def post_run_cleanup(self):
         Options
         -------
         .. cfg:configoptions :: VUMPSEngine
-        
+
             check_overlap : bool
                 Since AL C = C AR is not identically true, the MPS defined by AL and AR are not exactly the same.
                 We can compute the overlap of the two to check.
             norm_tol : float
                 Check if final state is in canonical form.
-        
+
         """
         super().post_run_cleanup()
         check_overlap = self.options.get('check_overlap', True, bool)
@@ -400,20 +399,7 @@ def environment_sweeps(self, N_sweeps):
         pass
 
     def reset_stats(self, resume_data=None):
-        """Reset the statistics, useful if you want to start a new sweep run.
-
-        .. cfg:configoptions :: VUMPSEngine
-
-            chi_list : dict | None
-                A dictionary to gradually increase the `chi_max` parameter of
-                `trunc_params`. The key defines starting from which sweep
-                `chi_max` is set to the value, e.g. ``{0: 50, 20: 100}`` uses
-                ``chi_max=50`` for the first 20 sweeps and ``chi_max=100``
-                afterwards. Overwrites `trunc_params['chi_list']``.
-                By default (``None``) this feature is disabled.
-            sweep_0 : int
-                The number of sweeps already performed. (Useful for re-start).
-        """
+        """Reset the statistics, useful if you want to start a new sweep run."""
 
         super().reset_stats(resume_data)
         self.update_stats = {
@@ -625,13 +611,13 @@ def update_local(self, theta, **kwargs):
         i0 = self.i0
         H0_1, H0_2, H1 = self.eff_H0_1, self.eff_H0_2, self.eff_H
         AC, C1, C2 = theta
-        lanczos_options = self.options.subconfig('lanczos_options')
+        lanczos_params = self.options.subconfig('lanczos_params')
 
-        E0_1, theta0_1, N0_1 = LanczosGroundState(H0_1, C1, lanczos_options).run()
+        E0_1, theta0_1, N0_1 = LanczosGroundState(H0_1, C1, lanczos_params).run()
 
         if self.psi.L > 1:
-            E0_2, theta0_2, N0_2 = LanczosGroundState(H0_2, C2, lanczos_options).run()
-        E1, theta1, N1 = LanczosGroundState(H1, AC, lanczos_options).run()
+            E0_2, theta0_2, N0_2 = LanczosGroundState(H0_2, C2, lanczos_params).run()
+        E1, theta1, N1 = LanczosGroundState(H1, AC, lanczos_params).run()
 
         if self.psi.L == 1:
             E0_2, theta0_2, N0_2 = E0_1, theta0_1, N0_1
@@ -675,7 +661,7 @@ def polar_max(self, AC, C1, C2):
             Center matrix left of site ``i0``
         C2: :class:`~tenpy.linalg.np_conserved.Array`
             Center matrix right of site ``i0``
-        
+
         Returns
         -------
         AL : :class:`~tenpy.linalg.np_conserved.Array`
@@ -762,10 +748,10 @@ def update_local(self, theta, **kwargs):
         H0_1, H0_2, H2 = self.eff_H0_1, self.eff_H0_2, self.eff_H
         AC, C1, C2 = theta
 
-        lanczos_options = self.options.subconfig('lanczos_options')
-        E0_1, theta0_1, N0_1 = LanczosGroundState(H0_1, C1, lanczos_options).run()
-        E0_2, theta0_2, N0_2 = LanczosGroundState(H0_2, C2, lanczos_options).run()
-        E2, theta2, N2 = LanczosGroundState(H2, AC, lanczos_options).run()
+        lanczos_params = self.options.subconfig('lanczos_params')
+        E0_1, theta0_1, N0_1 = LanczosGroundState(H0_1, C1, lanczos_params).run()
+        E0_2, theta0_2, N0_2 = LanczosGroundState(H0_2, C2, lanczos_params).run()
+        E2, theta2, N2 = LanczosGroundState(H2, AC, lanczos_params).run()
 
         U, S, VH, err, S_approx = self.mixed_svd(
             theta2.combine_legs([['vL', 'p0'], ['p1', 'vR']], qconj=[+1, -1]))
@@ -823,7 +809,7 @@ def polar_max(self, AC1, AC2, C1, C3):
             Center matrix left of site ``i0``
         C3: :class:`~tenpy.linalg.np_conserved.Array`
             Center matrix right of site ``i0+1``
-        
+
         Returns
         -------
         AL2 : :class:`~tenpy.linalg.np_conserved.Array`
diff --git a/tenpy/linalg/__init__.py b/tenpy/linalg/__init__.py
index 54e374dd8..91a2ec4f6 100644
--- a/tenpy/linalg/__init__.py
+++ b/tenpy/linalg/__init__.py
@@ -19,23 +19,27 @@
     random_matrix
     sparse
     krylov_based
+    truncation
 
 """
 # Copyright (C) TeNPy Developers, GNU GPLv3
 
-from . import charges, np_conserved, krylov_based, random_matrix, sparse, svd_robust
+from . import charges, np_conserved, krylov_based, random_matrix, sparse, svd_robust, truncation
 from .charges import *
 from .np_conserved import *
 from .krylov_based import *
 from .random_matrix import *
 from .sparse import *
+from .truncation import *
 
 __all__ = ['charges', 'np_conserved', 'krylov_based', 'random_matrix', 'sparse', 'svd_robust',
+           'truncation',
            *charges.__all__,
            *[n for n in np_conserved.__all__ if n not in ['ChargeInfo', 'LegCharge', 'LegPipe']],
            *krylov_based.__all__,
            *random_matrix.__all__,
            *sparse.__all__,
+           *truncation.__all__,
            ]
 
 from ..tools import optimization
diff --git a/tenpy/linalg/truncation.py b/tenpy/linalg/truncation.py
new file mode 100644
index 000000000..9124428be
--- /dev/null
+++ b/tenpy/linalg/truncation.py
@@ -0,0 +1,652 @@
+r"""Truncation of Schmidt values.
+
+Often, it is necessary to truncate the number of states on a virtual bond of an MPS,
+keeping only the state with the largest Schmidt values.
+The function :func:`truncate` picks exactly those from a given Schmidt spectrum
+:math:`\lambda_a`, depending on some parameters explained in the doc-string of the function.
+
+Further, we provide :class:`TruncationError` for a simple way to keep track of the
+total truncation error.
+
+The SVD on a virtual bond of an MPS actually gives a Schmidt decomposition
+:math:`|\psi\rangle = \sum_{a} \lambda_a |L_a\rangle |R_a\rangle`
+where :math:`|L_a\rangle` and :math:`|R_a\rangle` form orthonormal bases of the parts
+left and right of the virtual bond.
+Let us assume that the state is properly normalized,
+:math:`\langle\psi | \psi\rangle = \sum_{a} \lambda^2_a = 1`.
+Assume that the singular values are ordered descending, and that we keep the first :math:`\chi_c`
+of the initially :math:`\chi` Schmidt values.
+
+Then we decompose the untruncated state as
+:math:`|\psi\rangle = \sqrt{1-\epsilon}|\psi_{tr}\rangle + \sqrt{\epsilon}|\psi_{tr}^\perp\rangle`
+where
+:math:`|\psi_{tr}\rangle =
+\frac{1}{\sqrt{1-\epsilon}} \sum_{a < \chi_c} \lambda_a|L_a\rangle|R_a\rangle`
+is the truncated state kept (normalized to 1),
+:math:`|\psi_{tr}^\perp\rangle =
+\frac{1}{\sqrt{\epsilon}} \sum_{a >= \chi_c} \lambda_a |L_a\rangle|R_a\rangle`
+is the discarded part (orthogonal to the kept part) and the
+*truncation error of a single truncation* is defined as
+:math:`\epsilon = 1 - |\langle \psi | \psi_{tr}\rangle |^2 = \sum_{a >= \chi_c} \lambda_a^2`.
+
+.. warning ::
+    For imaginary time evolution (e.g. with TEBD), you try to project out the ground state.
+    Then, looking at the truncation error defined in this module does *not* give you any
+    information how good the found state coincides with the actual ground state!
+    (Instead, the returned truncation error depends on the overlap with the initial state,
+    which is arbitrary > 0)
+
+.. warning ::
+    This module takes only track of the errors coming from the truncation of Schmidt values.
+    There might be other sources of error as well, for example TEBD has also an discretization
+    error depending on the chosen time step.
+"""
+# Copyright (C) TeNPy Developers, GNU GPLv3
+
+import numpy as np
+from ..linalg import np_conserved as npc
+from ..tools.hdf5_io import Hdf5Exportable
+import warnings
+from ..tools.params import asConfig
+
+__all__ = ['TruncationError', 'truncate', 'svd_theta', 'decompose_theta_qr_based']
+
+
+
+class TruncationError(Hdf5Exportable):
+    r"""Class representing a truncation error.
+
+    The default initialization represents "no truncation".
+
+    .. warning ::
+        For imaginary time evolution, this is *not* the error you are interested in!
+
+    Parameters
+    ----------
+    eps, ov : float
+        See below.
+
+
+    Attributes
+    ----------
+    eps : float
+        The total sum of all discarded Schmidt values squared.
+        Note that if you keep singular values up to 1.e-14 (= a bit more than machine precision
+        for 64bit floats), `eps` is on the order of 1.e-28 (due to the square)!
+    ov : float
+        A lower bound for the overlap :math:`|\langle \psi_{trunc} | \psi_{correct} \rangle|^2`
+        (assuming normalization of both states).
+        This is probably the quantity you are actually interested in.
+        Takes into account the factor 2 explained in the section on Errors in the
+        `TEBD Wikipedia article <https://en.wikipedia.org/wiki/Time-evolving_block_decimation>`.
+    """
+    def __init__(self, eps=0., ov=1.):
+        self.eps = eps
+        self.ov = ov
+
+    def copy(self):
+        """Return a copy of self."""
+        return TruncationError(self.eps, self.ov)
+
+    @classmethod
+    def from_norm(cls, norm_new, norm_old=1.):
+        r"""Construct TruncationError from norm after and before the truncation.
+
+        Parameters
+        ----------
+        norm_new : float
+            Norm of Schmidt values kept, :math:`\sqrt{\sum_{a kept} \lambda_a^2}`
+            (before re-normalization).
+        norm_old : float
+            Norm of all Schmidt values before truncation, :math:`\sqrt{\sum_{a} \lambda_a^2}`.
+        """
+        eps = 1. - norm_new**2 / norm_old**2  # = (norm_old**2 - norm_new**2)/norm_old**2
+        return cls(eps, 1. - 2. * eps)
+
+    @classmethod
+    def from_S(cls, S_discarded, norm_old=None):
+        r"""Construct TruncationError from discarded singular values.
+
+        Parameters
+        ----------
+        S_discarded : 1D numpy array
+            The singular values discarded.
+        norm_old : float
+            Norm of all Schmidt values before truncation, :math:`\sqrt{\sum_{a} \lambda_a^2}`.
+            Default (``None``) is 1.
+        """
+        eps = np.sum(np.square(S_discarded))
+        if norm_old:
+            eps /= norm_old * norm_old
+        return cls(eps, 1. - 2. * eps)
+
+    def __add__(self, other):
+        res = TruncationError()
+        res.eps = self.eps + other.eps  # whatever that actually means...
+        res.ov = self.ov * other.ov
+        return res
+
+    @property
+    def ov_err(self):
+        """Error ``1.-ov`` of the overlap with the correct state."""
+        return 1. - self.ov
+
+    def __repr__(self):
+        if self.eps != 0 or self.ov != 1.:
+            return "TruncationError(eps={eps:.4e}, ov={ov:.10f})".format(eps=self.eps, ov=self.ov)
+        else:
+            return "TruncationError()"
+
+
+def truncate(S, options):
+    """Given a Schmidt spectrum `S`, determine which values to keep.
+
+    Options
+    -------
+    .. cfg:config:: truncation
+
+        chi_max : int
+            Keep at most `chi_max` Schmidt values.
+        chi_min : int
+            Keep at least `chi_min` Schmidt values.
+        degeneracy_tol: float
+            Don't cut between neighboring Schmidt values with
+            ``|log(S[i]/S[j])| < degeneracy_tol``, or equivalently
+            ``|S[i] - S[j]|/S[j] < exp(degeneracy_tol) - 1 ~= degeneracy_tol``
+            for small `degeneracy_tol`.
+            In other words, keep either both `i` and `j` or none, if the
+            Schmidt values are degenerate with a relative error smaller
+            than `degeneracy_tol`, which we expect to happen in the case
+            of symmetries.
+        svd_min : float
+            Discard all small Schmidt values ``S[i] < svd_min``.
+        trunc_cut : float
+            Discard all small Schmidt values as long as
+            ``sum_{i discarded} S[i]**2 <= trunc_cut**2``.
+
+    Parameters
+    ----------
+    S : 1D array
+        Schmidt values (as returned by an SVD), not necessarily sorted.
+        Should be normalized to ``np.sum(S*S) == 1.``.
+    options: dict-like
+        Config with constraints for the truncation, see :cfg:config:`truncation`.
+        If a constraint can not be fulfilled (without violating a previous one), it is ignored.
+        A value ``None`` indicates that the constraint should be ignored.
+
+    Returns
+    -------
+    mask : 1D bool array
+        Index mask, True for indices which should be kept.
+    norm_new : float
+        The norm of the truncated Schmidt values, ``np.linalg.norm(S[mask])``.
+        Useful for re-normalization.
+    err : :class:`TruncationError`
+        The error of the represented state which is introduced due to the truncation.
+    """
+    options = asConfig(options, "truncation")
+    # by default, only truncate values which are much closer to zero than machine precision.
+    # This is only to avoid problems with taking the inverse of `S`.
+    chi_max = options.get('chi_max', 100, int)
+    chi_min = options.get('chi_min', None, int)
+    deg_tol = options.get('degeneracy_tol', None, 'real')
+    svd_min = options.get('svd_min', 1.e-14, 'real')
+    trunc_cut = options.get('trunc_cut', 1.e-14, 'real')
+
+    if trunc_cut is not None and trunc_cut >= 1.:
+        raise ValueError("trunc_cut >=1.")
+    if not np.any(S > 1.e-10):
+        warnings.warn("no Schmidt value above 1.e-10", stacklevel=2)
+    if np.any(S < -1.e-10):
+        warnings.warn("negative Schmidt values!", stacklevel=2)
+
+    # use 1.e-100 as replacement for <=0 values for a well-defined logarithm.
+    logS = np.log(np.choose(S <= 0., [S, 1.e-100 * np.ones(len(S))]))
+    piv = np.argsort(logS)  # sort *ascending*.
+    logS = logS[piv]
+    # goal: find an index 'cut' such that we keep piv[cut:], i.e. cut between `cut-1` and `cut`.
+    good = np.ones(len(piv), dtype=np.bool_)  # good[cut] = (is `cut` a good choice?)
+    # we choose the smallest 'good' cut.
+
+    if chi_max is not None:
+        # keep at most chi_max values
+        good2 = np.zeros(len(piv), dtype=np.bool_)
+        good2[-chi_max:] = True
+        good = _combine_constraints(good, good2, "chi_max")
+
+    if chi_min is not None and chi_min > 1:
+        # keep at most chi_max values
+        good2 = np.ones(len(piv), dtype=np.bool_)
+        good2[-chi_min + 1:] = False
+        good = _combine_constraints(good, good2, "chi_min")
+
+    if deg_tol:
+        # don't cut between values (cut-1, cut) with ``log(S[cut]/S[cut-1]) < deg_tol``
+        # this is equivalent to
+        # ``(S[cut] - S[cut-1])/S[cut-1] < exp(deg_tol) - 1 = deg_tol + O(deg_tol^2)``
+        good2 = np.empty(len(piv), np.bool_)
+        good2[0] = True
+        good2[1:] = np.greater_equal(logS[1:] - logS[:-1], deg_tol)
+        good = _combine_constraints(good, good2, "degeneracy_tol")
+
+    if svd_min is not None:
+        # keep only values S[i] >= svd_min
+        good2 = np.greater_equal(logS, np.log(svd_min))
+        good = _combine_constraints(good, good2, "svd_min")
+
+    if trunc_cut is not None:
+        good2 = (np.cumsum(S[piv]**2) > trunc_cut * trunc_cut)
+        good = _combine_constraints(good, good2, "trunc_cut")
+
+    cut = np.nonzero(good)[0][0]  # smallest possible cut: keep as many S as allowed
+    mask = np.zeros(len(S), dtype=np.bool_)
+    np.put(mask, piv[cut:], True)
+    norm_new = np.linalg.norm(S[mask])
+    return mask, norm_new, TruncationError.from_S(S[np.logical_not(mask)]),
+
+
+def svd_theta(theta, trunc_par, qtotal_LR=[None, None], inner_labels=['vR', 'vL']):
+    """Performs SVD of a matrix `theta` (= the wavefunction) and truncates it.
+
+    Perform a singular value decomposition (SVD) with :func:`~tenpy.linalg.np_conserved.svd`
+    and truncates with :func:`truncate`.
+    The result is an approximation
+    ``theta ~= tensordot(U.scale_axis(S*renormalization, 1), VH, axes=1)``
+
+    Parameters
+    ----------
+    theta : :class:`~tenpy.linalg.np_conserved.Array`, shape ``(M, N)``
+        The matrix, on which the singular value decomposition (SVD) is performed.
+        Usually, `theta` represents the wavefunction, such that the SVD is a Schmidt decomposition.
+    trunc_par : dict
+        truncation parameters as described in :func:`truncate`.
+    qtotalLR : (charges, charges)
+        The total charges for the returned `U` and `VH`.
+    inner_labels : (string, string)
+        Labels for the `U` and `VH` on the newly-created bond.
+
+    Returns
+    -------
+    U : :class:`~tenpy.linalg.np_conserved.Array`
+        Matrix with left singular vectors as columns.
+        Shape ``(M, M)`` or ``(M, K)`` depending on `full_matrices`.
+    S : 1D ndarray
+        The singular values of the array.
+        If no `cutoff` is given, it has length ``min(M, N)``.
+        Normalized to ``np.linalg.norm(S)==1``.
+    VH : :class:`~tenpy.linalg.np_conserved.Array`
+        Matrix with right singular vectors as rows.
+        Shape ``(N, N)`` or ``(K, N)`` depending on `full_matrices`.
+    err : :class:`TruncationError`
+        The truncation error introduced.
+    renormalization : float
+        Factor, by which S was renormalized.
+    """
+    U, S, VH = npc.svd(theta,
+                       full_matrices=False,
+                       compute_uv=True,
+                       qtotal_LR=qtotal_LR,
+                       inner_labels=inner_labels)
+    renormalization = np.linalg.norm(S)
+    S = S / renormalization
+    piv, new_norm, err = truncate(S, trunc_par)
+    new_len_S = np.sum(piv, dtype=np.int_)
+    if new_len_S * 100 < len(S) and (trunc_par['chi_max'] is None
+                                     or new_len_S != trunc_par['chi_max']):
+        msg = "Catastrophic reduction in chi: {0:d} -> {1:d}".format(len(S), new_len_S)
+        # NANs are excluded in npc.svd
+        UHU = npc.tensordot(U.conj(), U, axes=[[0], [0]])
+        msg += " |U^d U - 1| = {0:f}".format(npc.norm(UHU - npc.eye_like(UHU)))
+        VHV = npc.tensordot(VH, VH.conj(), axes=[[1], [1]])
+        msg += " |V V - 1| = {0:f}".format(npc.norm(VHV - npc.eye_like(VHV)))
+        warnings.warn(msg, stacklevel=2)
+    S = S[piv] / new_norm
+    renormalization *= new_norm
+    U.iproject(piv, axes=1)  # U = U[:, piv]
+    VH.iproject(piv, axes=0)  # VH = VH[piv, :]
+    return U, S, VH, err, renormalization
+
+
+def _qr_theta_Y0(old_qtotal_L, old_qtotal_R, old_bond_leg, theta: npc.Array, move_right: bool, expand: float, min_block_increase: int):
+    """Generate the initial guess `Y0` for the (left) right isometry for the QR based theta decomposition `decompose_theta_qr_based()`.
+
+    Parameters
+    ----------
+    old_qtotal_L : 1D array
+        The total charge of the old left tensor.
+        e.g. ``old_qtotal_L = T_L.qtotal``
+    old_qtotal_R : 1D array
+        The total charge of the old right tensor.
+        e.g. ``old_qtotal_R = T_R.qtotal``
+    old_bond_leg : :class:`~tenpy.linalg.charges.LegCharge`
+        The leg between the old left tensor and the old right tensor.
+        e.g. ``old_bond_leg = T_L.get_leg('vR')`` or ``old_bond_leg = T_R.get_leg('vL')``
+    theta : Array with legs [(vL.p0), (p1.vR)]
+    move_right : bool 
+    expand : float
+    min_block_increase : int
+
+    Returns
+    -------
+    Y0 : Array with legs [vL, (p1.vR)] or [(vL.p0), vR]
+        If ``move_right=True``, the legs of Y0 are [vL, (p1.vR)].
+        If ``move_right=False``, the legs of Y0 are [(vL.p0), vR].
+    """
+
+    assert min_block_increase >= 0
+    assert expand is not None and expand != 0
+    
+    if move_right:
+        Y0 = theta.copy(deep=False)
+        Y0.legs[1] = Y0.legs[1].to_LegCharge()
+        Y0.ireplace_label('(p1.vR)', 'vR')
+        if any(old_qtotal_R != 0):
+            Y0.gauge_total_charge('vR', new_qtotal=old_qtotal_L)
+        vR_old = old_bond_leg
+        if not vR_old.is_blocked():
+            vR_old = vR_old.sort()[1]
+        vR_new = Y0.get_leg('vR')  # is blocked, since created from pipe
+        v_old, v_new = vR_old, vR_new
+        q_axis, norm_axis = 1, 0
+    else:
+        Y0 = theta.copy(deep=False)
+        Y0.legs[0] = Y0.legs[0].to_LegCharge()
+        Y0.ireplace_label('(vL.p0)', 'vL')
+        if any(old_qtotal_L != 0):
+            Y0.gauge_total_charge('vL', new_qtotal=old_qtotal_R)
+        vL_old = old_bond_leg
+        if not vL_old.is_blocked():
+            vL_old = vL_old.sort()[1]
+        vL_new = Y0.get_leg('vL')  # is blocked, since created from pipe
+        v_old, v_new = vL_old, vL_new
+        q_axis, norm_axis = 0, 1
+
+    # vL(R)_old is guaranteed to be a slice of vL(R)_new by charge rule in T_L(R)_old
+    piv = np.zeros(v_new.ind_len, dtype=bool)  # indices to keep in v_new
+    increase_per_block = max(min_block_increase, int(v_old.ind_len * expand // v_new.block_number))
+    sizes_old = v_old.get_block_sizes()
+    sizes_new = v_new.get_block_sizes()
+
+    # iterate over charge blocks in vL(R)_new and vL(R)_old at the same time
+    j_old = 0
+    q_old = v_old.charges[j_old, :]
+    qdata_order = np.argsort(Y0._qdata[:, q_axis])
+    qdata_idx = 0
+    for j_new, q_new in enumerate(v_new.charges):
+        if all(q_new == q_old):  # have charge block in both v_new and v_old
+            s_new = sizes_old[j_old] + increase_per_block
+            # move to next charge block in next loop iteration
+            j_old += 1
+            if j_old < len(v_old.charges):
+                q_old = v_old.charges[j_old, :]
+        else:  # charge block only in v_new
+            s_new = increase_per_block
+        s_new = min(s_new, sizes_new[j_new])  # don't go beyond block
+
+        if Y0._qdata[qdata_order[qdata_idx], q_axis] != j_new:
+            # block does not exist
+            # while we could set corresponding piv entries to True, it would not help, since
+            # the corresponding "entries" of Y0 are zero anyway
+            continue
+
+        # block has axis [(vL.p0),vR]. want to keep the s_new slices of the vR axis
+        #  that have the largest norm
+        norms = np.linalg.norm(Y0._data[qdata_order[qdata_idx]], axis=norm_axis)
+        kept_slices = np.argsort(-norms)[:s_new]  # negative sign so we sort large to small
+        start = v_new.slices[j_new]
+        piv[start + kept_slices] = True
+
+        qdata_idx += 1
+        if qdata_idx >= Y0._qdata.shape[0]:
+            break
+    
+    if move_right:
+        Y0.iproject(piv, 'vR')
+    else:
+        Y0.iproject(piv, 'vL')
+
+    return Y0
+
+
+def _eig_based_svd(A, need_U: bool = True, need_Vd: bool = True, inner_labels=[None, None],
+                   trunc_params=None):
+    """Computes the singular value decomposition of a matrix A via eigh
+
+    Singular values and vectors are obtained by diagonalizing the "square" A.hc @ A and/or A @ A.hc,
+    i.e. with two eigh calls instead of an svd call.
+
+    Truncation if performed if and only if trunc_params are given.
+    This performs better on GPU, but is not really useful on CPU.
+    If isometries U or Vd are not needed, their computation can be omitted for performance.
+
+    Does not (yet) support computing both U and Vd
+    """
+    warnings.warn('_eig_based_svd is nonsensical on CPU!!')
+    assert A.rank == 2
+
+    if need_U and need_Vd:
+        # TODO (JU) just doing separate eighs for U, S and for S, Vd is not sufficient
+        #  the phases of U / Vd are arbitrary.
+        #  Need to put in more work in that case...
+        raise NotImplementedError
+
+    if need_U:
+        Vd = None
+        A_Ahc = npc.tensordot(A, A.conj(), [1, 1])
+        L, U = npc.eigh(A_Ahc, sort='>')
+        S = np.sqrt(np.abs(L))  # abs to avoid `nan` due to accidentally negative values close to zero
+        U = U.ireplace_label('eig', inner_labels[0])
+    elif need_Vd:
+        U = None
+        Ahc_A = npc.tensordot(A.conj(), A, [0, 0])
+        L, V = npc.eigh(Ahc_A, sort='>')
+        S = np.sqrt(np.abs(L))  # abs to avoid `nan` due to accidentally negative values close to zero
+        Vd = V.iconj().itranspose().ireplace_label('eig*', inner_labels[1])
+    else:
+        U = None
+        Vd = None
+        # use the smaller of the two square matrices -- they have the same eigenvalues
+        if A.shape[1] >= A.shape[0]:
+            A2 = npc.tensordot(A, A.conj(), [1, 0])
+        else:
+            A2 = npc.tensordot(A.conj(), A, [1, 0])
+        L = npc.eigvalsh(A2)
+        S = np.sqrt(np.abs(L))  # abs to avoid `nan` due to accidentally negative values close to zero
+
+    if trunc_params is not None:
+        piv, renormalize, trunc_err = truncate(S, trunc_params)
+        S = S[piv]
+        S /= renormalize
+        if need_U:
+            U.iproject(piv, 1)
+        if need_Vd:
+            Vd.iproject(piv, 0)
+    else:
+        renormalize = np.linalg.norm(S)
+        S /= renormalize
+        trunc_err = TruncationError()
+
+    return U, S, Vd, trunc_err, renormalize
+
+
+def decompose_theta_qr_based(old_qtotal_L, old_qtotal_R, old_bond_leg, theta: npc.Array, 
+                             move_right: bool, expand: float, min_block_increase: int, 
+                             use_eig_based_svd: bool, trunc_params: dict, compute_err: bool, 
+                             return_both_T: bool):
+    r"""Performs a QR based decomposition of a matrix `theta` (= the wavefunction) and truncates it.
+    The result is an approximation.
+
+    The decomposition for ``use_eig_based_svd=False`` is::
+
+        |   -- theta --   ~=   renormalization * -- T_Lc --- S --- T_Rc --
+        |      |   |                                 |              |
+
+    Where `T_Lc` is in `'A'` form and `T_Rc` in `'B'` form.
+
+    The decomposition for ``use_eig_based_svd=True`` is::
+
+        |   -- theta --   ~=   renormalization * -- T_Lc --- T_Rc --
+        |      |   |                                 |        |
+
+    Where `T_Lc` is in `'A'` (`'Th'`) form and `T_Rc` in `'Th'` (`'B'`) form, if ``move_right=True`` 
+    (``move_right=False``).
+    
+    Parameters
+    ----------
+    old_qtotal_L : 1D array
+        The total charge of the old left tensor.
+        e.g. ``old_qtotal_L = T_L.qtotal``
+    old_qtotal_R : 1D array
+        The total charge of the old right tensor.
+        e.g. ``old_qtotal_R = T_R.qtotal``
+    old_bond_leg : :class:`~tenpy.linalg.charges.LegCharge`
+        The leg between the old left tensor and the old right tensor.
+        e.g. ``old_bond_leg = T_L.get_leg('vR')`` or ``old_bond_leg = T_R.get_leg('vL')``
+    theta : npc.Array
+        Array with legs [(vL.p0), (p1.vR)]
+    expand : float | None
+        Expansion rate. The QR-based decomposition is carried out at an expanded bond dimension.
+    min_block_increase : int
+        Minimum bond dimension increase for each block.
+    move_right : bool 
+        If `True`, the left tensor `T_Lc` is returned in `'A'` form and the right tensor `T_Rc` is set to `None`.
+        If `False`, the right tensor `T_Rc` is returned in `'B'` form and the left tensor `T_Lc` is set to `None`.
+    use_eig_based_svd : bool
+        Whether the SVD of the bond matrix :math:`\Xi` should be carried out numerically via
+        the eigensystem. This is faster on GPUs, but less accurate.
+        It makes no sense to do this on CPU.
+    trunc_par : dict
+        truncation parameters as described in :func:`truncate`.
+    compute_err : bool
+        Whether the truncation error should be computed exactly.
+        Computing the truncation error is significantly more expensive.
+        If `True`, the full error is computed and ``return_both_T=True``.
+        Otherwise, the truncation error is set to NaN.
+    return_both_T : bool
+        Whether the other tensor (associated with ``not move_right``) should be returned as well.
+        If `True` and ``move_right=True``, the right tensor `T_Rc` is returned in `'Th'` (`'B'`) form, 
+        if ``use_eig_based_svd=True`` (``use_eig_based_svd=False``).
+        If `True` and ``move_right=False``, the left tensor `T_Lc` is returned in `'Th'` (`'A'`) form, 
+        if ``use_eig_based_svd=True`` (``use_eig_based_svd=False``).
+
+    Returns
+    -------
+    T_Lc : array with legs [(vL.p), vR] or None
+    S : 1D numpy array
+        The singular values of the array.
+        Normalized to ``np.linalg.norm(S)==1``.
+    T_Rc : array with legs [vL, (p.vR)] or None
+    form : list
+        List containing two entries providing the form of the two arrays `T_Lc` and `T_Rc` in string form.
+        e.g. ``['A','Th']``
+    trunc_err : TruncationError
+    renormalization : float
+        Factor, by which S was renormalized.
+    """
+
+    if compute_err:
+        return_both_T = True
+    
+    if move_right:
+        # Get initial guess for the left isometry
+        Y0 = _qr_theta_Y0(old_qtotal_L, old_qtotal_R, old_bond_leg, theta, move_right, expand, min_block_increase) # Y0: [(vL.p0), vR]
+
+        # QR based updates
+        theta_i1 = npc.tensordot(Y0.conj(), theta, ['(vL*.p0*)', '(vL.p0)']).ireplace_label('vR*', 'vL') # theta_i1: [vL,(p1.vR)]
+        theta_i1.itranspose(['(p1.vR)', 'vL']) # theta_i1: [(p1.vR),vL]
+        B_R, _ = npc.qr(theta_i1, inner_labels=['vL', 'vR'], inner_qconj=-1) # B_R: [(p1.vR),vL] 
+        B_R.itranspose(['vL', '(p1.vR)']) # B_R: [vL,(p1.vR)] 
+
+        theta_i0 = npc.tensordot(theta, B_R.conj(), ['(p1.vR)', '(p1*.vR*)']).ireplace_label('vL*', 'vR') # theta_i0: [(vL.p0),vR]
+        A_L, Xi = npc.qr(theta_i0, inner_labels=['vR', 'vL']) # A_L: [(vL.p0), vR]
+        
+    else:
+        # Get initial guess for the right isometry
+        Y0 = _qr_theta_Y0(old_qtotal_L, old_qtotal_R, old_bond_leg, theta, move_right, expand, min_block_increase) # Y0: [vL, (p1.vR)]
+
+        # QR based updates
+        theta_i0 = npc.tensordot(theta, Y0.conj(), ['(p1.vR)', '(p1*.vR*)']).ireplace_label('vL*', 'vR') # theta_i0: [(vL.p0),vR]
+        A_L, _ = npc.qr(theta_i0, inner_labels=['vR', 'vL']) # A_L: [(vL.p0), vR]
+
+        theta_i1 = npc.tensordot(A_L.conj(), theta, ['(vL*.p0*)', '(vL.p0)']).ireplace_label('vR*', 'vL') # theta_i1: [vL,(p1.vR)]
+        theta_i1.itranspose(['(p1.vR)', 'vL']) # theta_i1: [(p1.vR),vL]
+        B_R, Xi = npc.qr(theta_i1, inner_labels=['vL', 'vR'], inner_qconj=-1)
+        B_R.itranspose(['vL', '(p1.vR)'])
+        Xi.itranspose(['vL', 'vR'])
+
+    # SVD of bond matrix Xi
+    if use_eig_based_svd:
+        U, S, Vd, _, renormalization = _eig_based_svd(
+            Xi, need_U=move_right, need_Vd=(not move_right), inner_labels=['vR', 'vL'], trunc_params=trunc_params
+        )
+    else:
+        U, S, Vd, _, renormalization = svd_theta(Xi, trunc_params)
+
+    # Assign return matrices
+    T_Lc, T_Rc = None, None
+    form = ['A','B']
+    if move_right:
+        T_Lc = npc.tensordot(A_L, U, ['vR', 'vL'])
+        if return_both_T:
+            if use_eig_based_svd:
+                T_Rc = npc.tensordot(Xi, B_R, ['vR', 'vL'])
+                T_Rc = npc.tensordot(U.iconj(), T_Rc, ['vL*', 'vL']).ireplace_label('vR*', 'vL')
+                T_Rc /= npc.norm(T_Rc)
+                form[1] = 'Th'
+            else:
+                T_Rc = npc.tensordot(Vd, B_R, ['vR', 'vL'])
+    else:
+        T_Rc = npc.tensordot(Vd, B_R, ['vR', 'vL'])
+        if return_both_T:
+            if use_eig_based_svd:
+                T_Lc = npc.tensordot(A_L, Xi, ['vR', 'vL'])
+                T_Lc = npc.tensordot(T_Lc, Vd.iconj(), ['vR', 'vR*']).ireplace_label('vL*', 'vR')
+                T_Lc /= npc.norm(T_Lc)
+                form[0] = 'Th'
+            else:
+                T_Lc = npc.tensordot(A_L, U, ['vR', 'vL'])
+    
+    # Compute error
+    if compute_err:
+        if use_eig_based_svd:
+            theta_approx = npc.tensordot(T_Lc, T_Rc, ['vR', 'vL'])
+        else:
+            theta_approx = npc.tensordot(T_Lc.scale_axis(S, axis='vR'), T_Rc, ['vR', 'vL'])
+        N_theta = npc.norm(theta)
+        eps = npc.norm(theta / N_theta - theta_approx * renormalization / N_theta) ** 2
+        trunc_err = TruncationError(eps, 1. - 2. * eps)
+    else:
+        trunc_err = TruncationError(np.nan, np.nan)
+
+    # Replace labels
+    if move_right:
+        T_Lc.ireplace_label('(vL.p0)', '(vL.p)')
+        if return_both_T:
+            T_Rc.ireplace_label('(p1.vR)', '(p.vR)')
+    else:
+        T_Rc.ireplace_label('(p1.vR)', '(p.vR)')
+        if return_both_T:
+            T_Lc.ireplace_label('(vL.p0)', '(vL.p)')
+        
+    return T_Lc, S, T_Rc, form, trunc_err, renormalization
+
+
+def _combine_constraints(good1, good2, warn):
+    """return logical_and(good1, good2) if there remains at least one `True` entry.
+
+    Otherwise print a warning and return just `good1`.
+    """
+    res = np.logical_and(good1, good2)
+    if np.any(res):
+        return res
+    warnings.warn("truncation: can't satisfy constraint for " + warn, stacklevel=3)
+    return good1
+
+
+# truncation parameter for truncating svd values at machine precision
+# excluding 0. and negative S values only
+_machine_prec_trunc_par = asConfig({'svd_min': np.finfo(np.float64).eps,
+                                    'trunc_cut': None,
+                                    'chi_max': None},
+                                   'machine_prec_trunc_params')
+_machine_prec_trunc_par.unused.clear()
diff --git a/tenpy/models/__init__.py b/tenpy/models/__init__.py
index 20ce807c5..5fefe6497 100644
--- a/tenpy/models/__init__.py
+++ b/tenpy/models/__init__.py
@@ -57,7 +57,7 @@
 
 __all__ = [
     'lattice', 'model', 'tf_ising', 'xxz_chain', 'spins', 'spins_nnn', 'fermions_spinless',
-    'hubbard', 'tj_model', 'hofstadter', 'haldane', 'toric_code', 'aklt', 'mixed_xk',
+    'hubbard', 'tj_model', 'hofstadter', 'haldane', 'toric_code', 'aklt', 'mixed_xk', 'clock',
     *lattice.__all__,
     *model.__all__,
     *tf_ising.__all__,
diff --git a/tenpy/models/clock.py b/tenpy/models/clock.py
index 5aadc63d8..a3600c9e1 100644
--- a/tenpy/models/clock.py
+++ b/tenpy/models/clock.py
@@ -47,6 +47,7 @@ class ClockModel(CouplingMPOModel):
             The number of states per site.
         J, g : float | array
             Couplings as defined for the Hamiltonian above.
+            Defaults to ``J=g=1``.
 
     """
 
diff --git a/tenpy/models/fermions_spinless.py b/tenpy/models/fermions_spinless.py
index 539c43f1e..89dea3e14 100644
--- a/tenpy/models/fermions_spinless.py
+++ b/tenpy/models/fermions_spinless.py
@@ -46,6 +46,7 @@ class FermionModel(CouplingMPOModel):
             For ``'best'``, we check the parameters what can be preserved.
         J, V, mu : float | array
             Hopping, interaction and chemical potential as defined for the Hamiltonian above.
+            Defaults to ``J=V=1`` and ``mu=0``.
         phi_ext : float
             For 2D lattices and periodic y boundary conditions only.
             External magnetic flux 'threaded' through the cylinder.
diff --git a/tenpy/models/hubbard.py b/tenpy/models/hubbard.py
index 6daa48be1..d64c08dcb 100644
--- a/tenpy/models/hubbard.py
+++ b/tenpy/models/hubbard.py
@@ -44,6 +44,7 @@ class BoseHubbardModel(CouplingMPOModel):
             What should be conserved. See :class:`~tenpy.networks.Site.BosonSite`.
         t, U, V, mu: float | array
             Couplings as defined in the Hamiltonian above. Note the signs!
+            Defaults to `t=1.` without interaction ``V=U=0`` and ``mu=0``.
         phi_ext : float
             For 2D lattices and periodic y boundary conditions only.
             External magnetic flux 'threaded' through the cylinder. Hopping amplitudes for bonds
@@ -158,6 +159,7 @@ class FermiHubbardModel(CouplingMPOModel):
             see :class:`~tenpy.networks.site.SpinHalfFermionSite` for details.
         t, U, mu : float | array
             Couplings as defined for the Hamiltonian above. Note the signs!
+            Defaults to ``t=1`` without interaction ``U=0`` and ``mu=0``.
         phi_ext : float
             For 2D lattices and periodic y boundary conditions only.
             External magnetic flux 'threaded' through the cylinder. Hopping amplitudes for bonds
diff --git a/tenpy/models/spins.py b/tenpy/models/spins.py
index ad9117acf..6869772ff 100644
--- a/tenpy/models/spins.py
+++ b/tenpy/models/spins.py
@@ -46,7 +46,7 @@ class SpinModel(CouplingMPOModel):
             Whether to sort by charges of physical legs. `True` by default.
         Jx, Jy, Jz, hx, hy, hz, muJ, D, E  : float | array
             Coupling as defined for the Hamiltonian above.
-
+            Defaults to Heisenberg ``Jx=Jy=Jz=1.`` with other couplings 0.
     """
     def init_sites(self, model_params):
         S = model_params.get('S', 0.5, 'real')
diff --git a/tenpy/models/spins_nnn.py b/tenpy/models/spins_nnn.py
index c2d30b870..ef53f1e72 100644
--- a/tenpy/models/spins_nnn.py
+++ b/tenpy/models/spins_nnn.py
@@ -60,6 +60,7 @@ class SpinChainNNN(CouplingMPOModel, NearestNeighborModel):
             What should be conserved. See :class:`~tenpy.networks.Site.SpinSite`.
         Jx, Jy, Jz, Jxp, Jyp, Jzp, hx, hy, hz : float | array
             Coupling as defined for the Hamiltonian above.
+            Defaults to all ``Jx=Jy=Jz=Jxp=Jyp=Jzp=1`` and zero fields ``h*=0``.
         bc_MPS : {'finite' | 'infinite'}
             MPS boundary conditions. Coupling boundary conditions are chosen appropriately.
 
diff --git a/tenpy/models/tf_ising.py b/tenpy/models/tf_ising.py
index cdff1a476..b7680f8ad 100644
--- a/tenpy/models/tf_ising.py
+++ b/tenpy/models/tf_ising.py
@@ -47,6 +47,7 @@ class TFIModel(CouplingMPOModel):
             Whether to sort by charges of physical legs. `True` by default.
         J, g : float | array
             Coupling as defined for the Hamiltonian above.
+            Defaults to ``J=g=1``
 
     """
     def init_sites(self, model_params):
diff --git a/tenpy/models/tj_model.py b/tenpy/models/tj_model.py
index 8a6b4bb28..aa0e5e2cf 100644
--- a/tenpy/models/tj_model.py
+++ b/tenpy/models/tj_model.py
@@ -46,6 +46,7 @@ class tJModel(CouplingMPOModel):
             see :class:`~tenpy.networks.site.SpinHalfHoleSite` for details.
         t, J: float | array
             Couplings as defined for the Hamiltonian above. Note the signs!
+            Defaults to ``t=J=1``
     """
 
     def init_sites(self, model_params):
diff --git a/tenpy/models/xxz_chain.py b/tenpy/models/xxz_chain.py
index ee0390ab3..d68deedb8 100644
--- a/tenpy/models/xxz_chain.py
+++ b/tenpy/models/xxz_chain.py
@@ -41,6 +41,7 @@ class XXZChain(CouplingModel, NearestNeighborModel, MPOModel):
             Length of the chain.
         Jxx, Jz, hz : float | array
             Coupling as defined for the Hamiltonian above.
+            Defaults to ``Jxx=Jz=1`` without field ``hz=0``.
         bc_MPS : {'finite' | 'infinite'}
             MPS boundary conditions. Coupling boundary conditions are chosen appropriately.
         sort_charge : bool
diff --git a/tenpy/networks/mpo.py b/tenpy/networks/mpo.py
index 024b94f25..20e518b7c 100644
--- a/tenpy/networks/mpo.py
+++ b/tenpy/networks/mpo.py
@@ -46,6 +46,7 @@
 
 from ..linalg import np_conserved as npc
 from ..linalg.sparse import NpcLinearOperator, FlatLinearOperator
+from ..linalg.truncation import TruncationError, svd_theta
 from .site import group_sites
 from ..tools.string import vert_join
 from .mps import MPS as _MPS  # only for MPS._valid_bc
@@ -54,7 +55,6 @@
 from ..tools.misc import to_iterable, add_with_None_0
 from ..tools.math import lcm
 from ..tools.params import asConfig
-from ..algorithms.truncation import TruncationError, svd_theta
 
 __all__ = [
     'MPO', 'make_W_II', 'MPOGraph', 'MPOEnvironment', 'MPOTransferMatrix', 'grid_insert_ops'
@@ -335,7 +335,7 @@ def from_wavepacket(cls, sites, coeff, op, eps=1.e-15):
             import numpy as np
 
         .. doctest :: from_wavepacket
-        
+
             >>> L, k0, x0, sigma, = 50, np.pi/8., 10., 5.
             >>> x = np.arange(L)
             >>> coeff = np.exp(-1.j * k0 * x) * np.exp(- 0.5 * (x - x0)**2 / sigma**2)
@@ -348,7 +348,7 @@ def from_wavepacket(cls, sites, coeff, op, eps=1.e-15):
         Indeed, we can apply this to a (vacuum) MPS and get the correct state:
 
         .. doctest :: from_wavepacket
-        
+
             >>> psi = MPS.from_product_state([site] * L, ['empty'] * L)
             >>> wp.apply(psi, dict(compression_method='SVD'))
             TruncationError()
@@ -1408,7 +1408,7 @@ def __add__(self, other):
         """
         if self.explicit_plus_hc != other.explicit_plus_hc:
             raise ValueError('Can not add MPOs with different explicit_plus_hc flags')
-        
+
         L = self.L
         assert self.bc == other.bc
         assert other.L == L
diff --git a/tenpy/networks/mps.py b/tenpy/networks/mps.py
index 4eeaa6f58..6552416a6 100644
--- a/tenpy/networks/mps.py
+++ b/tenpy/networks/mps.py
@@ -158,14 +158,13 @@
 from ..linalg import np_conserved as npc
 from ..linalg import sparse
 from ..linalg.krylov_based import Arnoldi
+from ..linalg.truncation import TruncationError, svd_theta, _machine_prec_trunc_par
 from .site import group_sites
 from ..tools.misc import argsort, to_iterable, to_array, get_recursive, inverse_permutation
 from ..tools.math import lcm, entropy
 from ..tools.params import asConfig
 from ..tools.cache import DictCache
 from ..tools import hdf5_io
-from ..algorithms.truncation import TruncationError, svd_theta, _machine_prec_trunc_par
-from ..algorithms.tebd import RandomUnitaryEvolution
 
 __all__ = ['BaseMPSExpectationValue', 'MPS', 'BaseEnvironment', 'MPSEnvironment', 'TransferMatrix',
            'InitialStateBuilder', 'build_initial_state']
@@ -1802,12 +1801,14 @@ def from_random_unitary_evolution(cls,
         chargeL : charges
             Leg charges at bond 0, which are purely conventional.
         """
+        from ..algorithms.tebd import RandomUnitaryEvolution  # local import: avoid circular import
+
         if bc == 'segment':
             msg = "MPS.from_random_unitary_evolution not implemented for segment BC."
             raise NotImplementedError(msg)
         psi = MPS.from_product_state(sites, p_state, bc, dtype, permute, form, chargeL)
-        tebd_options = dict(N_steps = 10, trunc_params={'chi_max': chi})
-        eng = RandomUnitaryEvolution(psi, tebd_options)
+        tebd_params = dict(N_steps = 10, trunc_params={'chi_max': chi})
+        eng = RandomUnitaryEvolution(psi, tebd_params)
         _max_iter = 1000
         for _ in range(_max_iter):
             if psi.finite and (max(psi.chi) >= chi):
@@ -4765,7 +4766,7 @@ def perturb(self, randomize_params=None, close_1=True, canonicalize=None):
         canonicalize : bool
             Wether to call `psi.canonical_from in the end. Defaults to ``not close_1``.
         """
-        from ..algorithms.tebd import RandomUnitaryEvolution
+        from ..algorithms.tebd import RandomUnitaryEvolution  # local import: avoid circular import
         if randomize_params is None:
             randomize_params = {}
         if close_1:
diff --git a/tenpy/simulations/post_processing.py b/tenpy/simulations/post_processing.py
index bd329fbc7..a11c32f0e 100644
--- a/tenpy/simulations/post_processing.py
+++ b/tenpy/simulations/post_processing.py
@@ -31,7 +31,7 @@
     h5py_version = (0, 0)
 
 __all__ = [
-    'DataLoader', 'pp_spectral_function', 'pp_plot_correlations_on_lattice'
+    'DataLoader', 'DataFiles', 'pp_spectral_function', 'pp_plot_correlations_on_lattice'
 ]
 
 
@@ -68,7 +68,7 @@ def __init__(self, filename=None, simulation=None, data=None):
 
         if filename is not None:
             self.filename = Path(filename)
-            self.logger.info(f"Loading data from {self.filename.name}")
+            self.logger.info(f"Loading data from {self.filename!s}")
             if self.filename.suffix == '.h5' or self.filename.suffix == '.hdf5':
                 # create a h5group (which is open)
                 self.logger.info(
@@ -80,7 +80,7 @@ def __init__(self, filename=None, simulation=None, data=None):
             else:
                 self.logger.info(f"Not using hdf5 data-format.\nLoading data can be slow")
                 # all data is loaded as other filenames
-                self._all_data = hdf5_io.load(self.filename.name)
+                self._all_data = hdf5_io.load(self.filename)
 
             self.sim_params = self._load('simulation_parameters')
 
@@ -111,6 +111,13 @@ def close(self):
             self._Hdf5Loader.h5group.close()
             self.logger.info(f"Closed {self.filename}")
 
+    def __repr__(self):
+        if self.filename is not None:
+            return f"DataLoader(filename={self.filename!r})"
+        if hasattr(self, 'sim'):
+            return f"DataLoader(simulation={self.sim!r})"
+        return "Dataloader(data=...)"
+
     @property
     def measurements(self):
         if self._measurements is None:
@@ -169,8 +176,8 @@ def _load(self, path, prefix='', convert_to_numpy=False):
                 raise ValueError("Can't find any results.")
             if isinstance(value, Config):
                 value = value.as_dict()
-            if convert_to_numpy is True:
-                value = self.convert_list_to_ndarray(value)
+            if convert_to_numpy:
+                value = self.convert_list_to_ndarray(value, key=key)
             return value
         except KeyError:
             warnings.warn(f"{key} does not exist!")
@@ -181,24 +188,29 @@ def get_data_m(self, key, prefix='measurements/', convert_to_numpy=True):
     def get_data(self, key, prefix='', convert_to_numpy=False):
         return self._load(key, prefix=prefix, convert_to_numpy=convert_to_numpy)
 
-    @staticmethod
-    def convert_list_to_ndarray(value):
-        try:
-            if isinstance(value, list):
-                value = np.array(value)
-                if value.dtype == np.dtype(object):
-                    raise Exception("Can't convert results to numpy array")
-        except Exception as e:
-            logging.exception(f"{e}, proceeding without converting")
+    def convert_list_to_ndarray(self, value, key):
+        if isinstance(value, list):
+            converted_value = np.array(value)
+            if converted_value.dtype == np.dtype(object):
+                self.logger.info("Can't convert %s to numpy array, proceed without conversion",
+                                 key)
+            else:
+                value = converted_value
         return value
 
     @property
     def model(self):
         if not hasattr(self, '_model'):
-            self._model = self.get_model()
+            self._model = self._get_model()
         return self._model
 
     def get_model(self):
+        """Deprecated in favor of the simpler property access via :attr:`DataLoader.model`."""
+        warnings.warn("Use ``DataLoader.model`` instead of ``DataLoader.get_model()``",
+                      FutureWarning, 2)
+        return self.model
+
+    def _get_model(self):
         model_class_name = self.sim_params['model_class']
         model_params = self.sim_params['model_params']
         model_class = find_subclass(Model, model_class_name)
@@ -227,6 +239,125 @@ def get_all_keys_as_dict(self):
             raise ValueError("Can't find any results.")
 
 
+class DataFiles:
+    """Hold multiple DataLoader instances open, indexed by the filename.
+
+    Acts like a dictionary mapping filenames to :class:`DataLoader`.
+    Item access implicitly opens files that are not yet loaded.
+
+    Parameters
+    ----------
+    files : list of str
+        Filenames of output files to be opened.
+
+    Examples
+    --------
+    .. doctest ::
+        :skipif: True
+
+        >>> data_files = DataFiles(['results/output_1.h5',
+        ...                         'results_other/output_3.h5'])
+        >>> data_files['results/output_1.h5']
+        DataLoader(filename='results/output_1.h5')
+        >>> data_files['results/output_2.h5']
+        loading results/output_2.h5 ... successful
+    """
+    def __init__(self, files=None, folder=None):
+        self._open_files = {} # filename -> DataLoader
+        self._resolve_filenames = {}
+        self._keys = []
+        if files:
+            for file in files:
+                _ = self[file]
+        if folder:
+            self.load_from_folder(folder)
+
+    def __enter__(self):
+        return self
+
+    def __exit__(self, exc_type, exc_value, traceback):
+        self.close()
+
+    def close(self):
+        """Close all files held open by self."""
+        for dl in self._open_files.values():
+            dl.close()
+
+    def __getitem__(self, filename):
+        normalized = self._normalize_filename(filename)
+        data = self._open_files.get(normalized, None)
+        if data is None:
+            filename = str(filename)
+            try:
+                data = DataLoader(filename)
+            except OSError as e:
+                print(f"Erorr: failed to open {filename}")
+                raise e from None
+            self._keys.append(filename)
+            self._open_files[normalized] = data
+        return data
+
+    def __setitem__(self, filename, data_loader):
+        if filename is None:
+            filename = data_loader.filename
+        normalized = self._normalize_filename(filename)
+        self._open_files[normalized] = data_loader
+        return data_loader  # TODO: do we need to return this?
+
+    def _normalize_filename(self, filename):
+        filename = str(filename)
+        resolved = self._resolve_filenames.get(filename, None)
+        if resolved is None:
+            resolved = str(Path(filename).resolve())
+            self._resolve_filenames[filename] = resolved
+        return resolved
+
+    def keys(self):
+        """Return paths of the files opened."""
+        return self._keys
+
+    def values(self):
+        """Return iterator over the :class:`DataLoader` instances."""
+        return self._open_files.values()
+
+    def items(self):
+        return zip(self._keys, self.values())
+
+    def __delitem__(self, filename):
+        normalized = self._normalize_filename(filename)
+        self._open_files[normalized].close()
+        del self._open_files[normalized]
+        for key in self._keys:
+            if self._resolve_filenames[key] == normalized:
+                self._keys.remove(key)
+                break
+        for key, val in list(self._resolve_filenames.items()):
+            if val == normalized:
+                del self._resolve_filenames[key]
+
+    def __repr__(self):
+        if self._open_files:
+            return "<DataFiles() with files\n    " + '\n    '.join(self.keys()) + ">"
+
+    def load_from_folder(self, folder, glob="*.h5"):
+        """Load all data files from a given folder."""
+        files = Path(folder).glob(glob)
+        for file in files:
+            print(f"loading {file!s}", end=' ')
+            try:
+                _ = self[file]
+            except OSError as e:
+                print("... FAILED! Ignoring.")
+            else:
+                print("... successful")
+        # done
+
+    # TODO: tests for this
+
+    # TODO: semi-automatically analyze sim_params and find differences?
+    # TODO get pandas.DataFrame from changing keys
+
+
 def pp_spectral_function(DL: DataLoader,
                          *,
                          correlation_key,
diff --git a/tenpy/simulations/simulation.py b/tenpy/simulations/simulation.py
index ce4edbfd1..9d4e9aa6d 100644
--- a/tenpy/simulations/simulation.py
+++ b/tenpy/simulations/simulation.py
@@ -14,6 +14,7 @@
 from pathlib import Path
 import time
 import importlib
+import signal
 import warnings
 import traceback
 import numpy as np
@@ -22,6 +23,7 @@
 
 from ..models.model import Model
 from ..algorithms.algorithm import Algorithm
+from ..linalg.truncation import TruncationError
 from ..networks.mps import InitialStateBuilder
 from ..models.model import NearestNeighborModel
 from ..tools import hdf5_io
@@ -101,7 +103,7 @@ class Simulation:
             We safeguard measurements with a try-except block to avoid loosing results after an expensive
             simulation. This is the maximum number of errors happening during measurements
             before we abort the whole simulation.
-            Setting this to None disables raising the error due to failed measurements 
+            Setting this to None disables raising the error due to failed measurements
             (also at the end of the simulation).
 
     Attributes
@@ -168,8 +170,11 @@ class Simulation:
         Only set if `grouped` > 1. In that case, :attr:`model` is the modified/grouped model,
         and `model_ungrouped` is the original ungrouped model.
     final_processing : bool
-        Flag that indicates that we're in the final processing and want to avoid raising errors 
+        Flag that indicates that we're in the final processing and want to avoid raising errors
         before saving results.
+    received_signal_sigint : bool
+        Flag to indicate that the user pressed ctrl-c and want's the process to terminate.
+        See :meth:`handle_ctrl_c_sigint` for details.
     """
     #: name of the default algorithm `engine` class
     default_algorithm = 'TwoSiteDMRGEngine'
@@ -197,6 +202,7 @@ def __init__(self, options, *, setup_logging=True, resume_data=None):
         if cwd is not None:
             if not os.path.exists(cwd):
                 os.mkdir(cwd)
+            self._orig_dir = os.getcwd()  # save current dir to return to it in __exit__()
             os.chdir(cwd)
         self.fix_output_filenames()
         if setup_logging:
@@ -239,10 +245,12 @@ def __init__(self, options, *, setup_logging=True, resume_data=None):
         self.grouped = 1
         self.final_processing = False
         self.max_errors_before_abort = self.options.get('max_errors_before_abort', 10, int)
+        self.received_signal_sigint = False
 
     def __enter__(self):
         self.init_cache()
         self.cache = self.cache.__enter__()  # start cache context
+        self._orig_sigint_handler = signal.signal(signal.SIGINT, self.handle_abort_signal)
         return self
 
     def __exit__(self, exc_type, exc_value, traceback):
@@ -251,6 +259,39 @@ def __exit__(self, exc_type, exc_value, traceback):
             self.logger.exception("simulation abort with the following exception",
                                   exc_info=(exc_type, exc_value, traceback))
         self.options.warn_unused(True)
+        signal.signal(signal.SIGINT, self._orig_sigint_handler)
+        orig_dir = getattr(self, '_orig_dir', None)
+        if orig_dir is not None:
+            os.chdir(orig_dir)
+
+    def handle_abort_signal(self, signum, frame):
+        """Handle a SIGINT signal, usually caused by a CTRL-C press.
+
+        When the user presses Ctrl-C the first time, we just print a message to stderr that we
+        received the signal and set the flag :attr:`received_signal_sigint`.
+        This allows the simulation to "exit gracefully": it will continue until the next
+        algorithm checkpoint, where :meth:`save_at_checkpoint` checks for this flag,
+        and if set, saves the results obtained so far and only then raises KeyboardInterrupt.
+
+        When Ctrl-C is presssed a second time, we immediately raise a KeyboardInterrupt.
+
+        This feature is especially handy to gracefully interrupt long-running simulations.
+        When running in an HPC cluster linux environment, you can usually still send the SIGINT
+        signal, e.g. with SLURM you can call ``scancel --signal=INT 1234`` for the job ide `1234`.
+        """
+        if signum != signal.SIGINT:
+            raise ValueError(f"unexpected signal to handle: {signum=}")
+        if self.received_signal_sigint:
+            raise KeyboardInterrupt("Got second SIGINT signal; abort the simulation immediately")
+        self.received_signal_sigint = True
+        msg = ("Got SIGINT signal (likely from Ctrl-C in the terminal) the first time. \n"
+               "TeNPy simulation will continue until the next checkpoint, then save and abort.")
+        self.logger.error(msg)
+        print(msg, "\nTo exit immediately, press Ctrl-C again.",
+              file=sys.stderr,
+              flush=True)
+        # the received_signal_sigint flag should be handled in the next save_at_checkpoint call
+        # which is always added to the algorithm checkpoints.
 
     def estimate_RAM(self):
         """Estimates the RAM usage for the simulation, without running it.
@@ -543,7 +584,9 @@ def init_algorithm(self, **kwargs):
         kwargs.setdefault('cache', self.cache)
         params = self.options.subconfig('algorithm_params')
         self.engine = AlgorithmClass(self.psi, self.model, params, **kwargs)
-        self.engine.checkpoint.connect(self.save_at_checkpoint)
+        self.engine.checkpoint.connect(self.save_at_checkpoint, priority=-100)
+        # with low prio to make sure we save after another set of potential measurements
+        # enabled by the `measure_at_algorithm_checkpoints` option
         con_checkpoint = list(self.options.get('connect_algorithm_checkpoint', []))
         for entry in con_checkpoint:
             self.engine.checkpoint.connect_by_name(*entry)
@@ -715,8 +758,8 @@ def perform_measurements(self):
                                                    psi=psi,
                                                    model=model,
                                                    simulation=self)
-            # we safe-guard the measurements with try-except 
-            # to avoid that mistakes in the measurement cause us to loose all our data, 
+            # we safe-guard the measurements with try-except
+            # to avoid that mistakes in the measurement cause us to loose all our data,
             # e.g. if we were running DMRG for days, and just have a stupid typo in a measurement function
         except Exception:
             err_traceback = traceback.format_exc()
@@ -1063,16 +1106,30 @@ def prepare_results_for_save(self):
         if len(self.errors_during_run) > 0:
             results['errors_during_run'] = self.errors_during_run
         results['simulation_parameters'] = self.options.as_dict()
-        if 'measurements' in results:
-            # try to convert measurements into numpy arrays to store more compactly
-            results['measurements'] = measurements = results['measurements'].copy()
-            for k, v in measurements.items():
-                try:
-                    v = np.array(v)
-                except:
-                    continue
-                if v.dtype != np.dtype(object):
-                    measurements[k] = v
+        for key in ['measurements', 'sweep_stats', 'update_stats']:
+            if key in results:
+                # try to convert lists into numpy arrays to store more compactly
+                data = results[key].copy()
+                for k, v in results[key].items():
+                    if isinstance(v, list):
+                        if len(v) > 0 and isinstance(v[0], TruncationError):
+                            # special handling for TruncationError: convert to _eps and _ov lists
+                            try:
+                                v_err = [err.eps for err in v]
+                                v_ov = [err.ov for err in v]
+                                del data[k]
+                                data[k + "_eps"] = np.array(v_err)
+                                data[k + "_ov"] = np.array(v_ov)
+                            except:
+                                pass
+                            continue
+                        try:
+                            v = np.array(v)
+                        except:
+                            continue
+                        if v.dtype != np.dtype(object):
+                            data[k] = v
+                results[key] = data
         if self.options.get('save_resume_data', self.options['save_psi'], bool):
             results['resume_data'] = self.get_resume_data()
         return results
@@ -1111,8 +1168,12 @@ def save_at_checkpoint(self, alg_engine):
         """
         save_every = self.options.get('save_every_x_seconds', None, 'real')
         now = time.time()
-        if save_every is not None and now - self._last_save > save_every:
+        if save_every is not None and now - self._last_save > save_every or \
+                self.received_signal_sigint:
             self.save_results()
+            if self.received_signal_sigint:
+                raise KeyboardInterrupt("Got SIGINT interrupt signal during TeNPy simulation, "
+                    "but continued until the next checkpoint and saved checkpoint results")
             time_to_save = time.time() - now
             if time_to_save > 0.1 * save_every > 0.:
                 save_every = 20 * time_to_save
@@ -1654,4 +1715,4 @@ def output_filename_from_dict(options,
         vals = [get_recursive(options, r_key, separator) for r_key in recursive_key]
         part = format_str.format(*vals)
         formatted_parts.append(part)
-    return joint.join(formatted_parts) + suffix
\ No newline at end of file
+    return joint.join(formatted_parts) + suffix


Test patch:
diff --git a/doc/changelog/latest/cleanups.txt b/doc/changelog/latest/cleanups.txt
new file mode 100644
index 000000000..c3d6b252a
--- /dev/null
+++ b/doc/changelog/latest/cleanups.txt
@@ -0,0 +1,15 @@
+- :issue:`443` document default model coupling parameters explicitly in docstrings
+- Allow `None` value in :cfg:option:`Sweep.chi_list` which is to be replaced by ``trunc_params['chi_max']`` at class initialization.
+- Handle SIGINT signal during simulation runs to continue until next algorithm checkpoint, save and then exit "gracefully" by raising KeyboardInterrupt.
+  See :meth:`~tenpy.simulations.Simulation.handle_abort_signal`.
+
+- go back to original dir after finishing a simulation (end of context manager) such that relative 'directory' options work as expected when repeatedly running simulations
+
+- move `tenpy.algorithms.truncation` module to `tenpy.linalg.truncation`.
+  
+
+- Fix: When saving simulation results, convert list from `update_stats` and `sweep_stats` into numpy arrays.
+  This can significantly reduce saving time and the size of the resulting hdf5 file - we have seen the size go down from 30MB to 700kB, when no psi and environment were saved!
+- Fix: :class:`~tenpy.algorithms.tdvp.TwoSiteTDVP` wasn't using the `start_trunc_err` option.
+- Fix :issue:`459` that TDVP and VUMPS shouldn't have both `lanczos_params` and `lanczos_options`. 
+  Deprecated the name `lanczos_options` (which was the one actually used) for more consistency with other algorithm engines.
diff --git a/tests/linting.py b/tests/linting.py
index 89711c23f..001aabb4e 100644
--- a/tests/linting.py
+++ b/tests/linting.py
@@ -46,10 +46,6 @@ def check_all_attribute(check_module=tenpy):
             # got a class or function defined in the module
             raise AssertionError("object {0!r} defined in {1} but not in __all__".format(
                 obj, _name_))
-        if _name_ == "tenpy.models":
-            # HACK: submodules of models (like xxz_chain.py) are not imported by default,
-            # but by the other tests. They can be ignored here.
-            continue
         if hasattr(obj, "__package__") and obj.__name__.startswith(_name_):
             # imported submodule
             raise AssertionError("Module {0!r} imported in {1} but not listed in __all__".format(
diff --git a/tests/test_simulation.py b/tests/test_simulation.py
index 03655db50..f4ec98aad 100644
--- a/tests/test_simulation.py
+++ b/tests/test_simulation.py
@@ -4,6 +4,7 @@
 import copy
 import numpy as np
 import sys
+import os
 
 import tenpy
 from tenpy.algorithms.algorithm import Algorithm
@@ -107,18 +108,30 @@ def bad_dummy_measurement(results, psi, model, simulation):
 
 
 def test_Simulation(tmp_path):
+    os.chdir(tmp_path)
     sim_params = copy.deepcopy(simulation_params)
-    sim_params['directory'] = tmp_path
+    sim_params['directory'] = 'results'
     sim_params['output_filename'] = 'data.pkl'
     sim = Simulation(sim_params)
-    results = sim.run()  # should do exactly two measurements: one before and one after eng.run()
+    with sim:
+        results = sim.run()
+        # should do exactly two measurements: one before and one after eng.run()
     assert sim.model.lat.bc_MPS == 'infinite'  # check whether model parameters were used
     assert 'psi' in results  # should be by default
     meas = results['measurements']
     # expect two measurements: once in `init_measurements` and in `final_measurement`.
     assert np.all(meas['measurement_index'] == np.arange(2))
     assert np.all(meas['dummy_value'] == [-1, expected_dummy_value])
-    assert (tmp_path / sim_params['output_filename']).exists()
+    assert (tmp_path / 'results' / sim_params['output_filename']).exists()
+
+    sim_params['overwrite_output'] = False
+    with pytest.warns(UserWarning, match='changed output filename to data_1.pkl'):
+        sim = Simulation(sim_params)
+
+    with sim:
+        results = sim.run()
+
+    assert (tmp_path / 'results' / 'data_1.pkl').exists()
 
 
 def test_bad_measurements():
@@ -145,7 +158,9 @@ def test_measure_at_algorithm_checkpoint():
     sim_params['connect_measurements'].append(('tenpy.simulations.measurement', 'm_evolved_time'))
     sim_params['measure_at_algorithm_checkpoints'] = True
     sim = Simulation(sim_params)
-    results = sim.run()  # should do exactly two measurements: one before and one after eng.run()
+    with sim:
+        results = sim.run()
+        # should do exactly two measurements: one before and one after eng.run()
     assert sim.model.lat.bc_MPS == 'infinite'  # check whether model parameters were used
     assert 'psi' in results  # should be by default
     meas = results['measurements']
@@ -185,8 +200,9 @@ def test_Simulation_resume(tmp_path):
 
 
 def test_sequential_simulation(tmp_path):
+    os.chdir(tmp_path)
     sim_params = copy.deepcopy(simulation_params)
-    sim_params['directory'] = tmp_path
+    sim_params['directory'] = 'results'
     sim_params['output_filename'] = 'data.pkl'
     sim_params['sequential'] = {
         'recursive_keys': ['algorithm_params.dt'],
@@ -199,9 +215,9 @@ def test_sequential_simulation(tmp_path):
     assert psi.dummy_counter == 3  # should have called Simulation.run 3 times on same psi
     # (this breaks if collect_results_in_memory is used, because dummy_counter isn't copied in
     # psi.copy()!)
-    assert (tmp_path / 'data_dt_0.5.pkl').exists()
-    assert (tmp_path / 'data_dt_0.3.pkl').exists()
-    assert (tmp_path / 'data_dt_0.2.pkl').exists()
+    assert (tmp_path / 'results' / 'data_dt_0.5.pkl').exists()
+    assert (tmp_path / 'results' / 'data_dt_0.3.pkl').exists()
+    assert (tmp_path / 'results' / 'data_dt_0.2.pkl').exists()
 
 
 groundstate_params = copy.deepcopy(simulation_params)
diff --git a/tests/test_tdvp.py b/tests/test_tdvp.py
index cbf341765..950e55388 100644
--- a/tests/test_tdvp.py
+++ b/tests/test_tdvp.py
@@ -6,7 +6,7 @@
 from tenpy.algorithms import tdvp
 from tenpy.algorithms import tebd
 from tenpy.networks.mps import MPS
-from tenpy.algorithms.truncation import TruncationError
+from tenpy.linalg.truncation import TruncationError
 
 
 @pytest.mark.slow
@@ -103,7 +103,7 @@ def test_fixes_339(L=8, chi=10, dt=0.5):
     err_max = np.max(tdvp2.trunc_err_list)
     wrong_err = expect_err + TruncationError(err_max, 1 - 2 * err_max)
 
-    
+
     if np.allclose(tdvp2.trunc_err.eps, wrong_err.eps):
         print('matches with wrong eps')
     if np.allclose(tdvp2.trunc_err.ov_err, wrong_err.ov_err):
@@ -113,4 +113,4 @@ def test_fixes_339(L=8, chi=10, dt=0.5):
     assert np.allclose(tdvp2.trunc_err.ov_err, expect_err.ov_err)
     assert not np.allclose(tdvp2.trunc_err.eps, wrong_err.eps)
     assert not np.allclose(tdvp2.trunc_err.ov_err, wrong_err.ov_err)
-    
\ No newline at end of file
+
diff --git a/tests/test_truncation.py b/tests/test_truncation.py
index b89a9ac1e..0481736ff 100644
--- a/tests/test_truncation.py
+++ b/tests/test_truncation.py
@@ -5,7 +5,7 @@
 import pytest
 
 import tenpy.linalg.np_conserved as npc
-from tenpy.algorithms import truncation
+from tenpy.linalg import truncation
 from tenpy.networks.mps import MPS
 from tenpy.models.tf_ising import TFIChain
 from tenpy.algorithms import mpo_evolution
@@ -93,7 +93,7 @@ def test_decompose_theta_qr_based(use_eig_based_svd, conserve, tol=1e-12):
     for i in range(15):
         eng.run()
     assert psi.chi[8] == 50  # make sure we actually saturated chi to 50.
-    
+
     # Fabricate dummy theta (not actually updated)
     S = psi.get_SL(8)
     old_T_L = psi.get_B(8, 'B').ireplace_label('p','p0')
@@ -112,12 +112,12 @@ def test_decompose_theta_qr_based(use_eig_based_svd, conserve, tol=1e-12):
 
             # QR decomposition and truncation
             T_Lc, S_qr, T_Rc, form, err_qr, renormalize_qr = truncation.decompose_theta_qr_based(
-                old_qtotal_L=old_T_L.qtotal, old_qtotal_R=old_T_R.qtotal, old_bond_leg=old_T_R.get_leg('vL'), 
+                old_qtotal_L=old_T_L.qtotal, old_qtotal_R=old_T_R.qtotal, old_bond_leg=old_T_R.get_leg('vL'),
                 theta=theta, move_right=move_right,
-                expand=options.get('cbe_expand'), 
+                expand=options.get('cbe_expand'),
                 min_block_increase=options.get('cbe_min_block_increase'),
                 use_eig_based_svd=use_eig_based_svd,
-                trunc_params=options.get('trunc_params'), 
+                trunc_params=options.get('trunc_params'),
                 compute_err=True,
                 return_both_T=True
             )
@@ -142,7 +142,7 @@ def test_decompose_theta_qr_based(use_eig_based_svd, conserve, tol=1e-12):
             norm_err = npc.norm(theta_approx - theta.split_legs())
             expect_err = np.sqrt(err_qr.eps) * npc.norm(theta)
             assert abs(norm_err - expect_err) < tol
-            
+
             # Check that QR truncated theta has the same accuracy as SVD truncated theta
             assert abs(err_svd.eps - err_qr.eps) < max(err_svd.eps * 0.01, 1e-15)