Releases: QuantumKitHub/PEPSKit.jl
v0.7.0
PEPSKit v0.7.0
We are pleased to announce the release of PEPSKit.jl v0.7.0! This release brings significant new features for time evolution, improved PEPO support, and numerous bug fixes and performance improvements.
Highlights
- Time Evolution: Real-time and finite-temperature evolution functionality for simple update
- Enhanced PEPO Support: Extended PEPO operations including correlators and density matrices
- TensorKit v0.15 Compatibility: Updated compatibility with the latest TensorKit release
- Code Quality: Migration to Runic formatter for consistent code style
New Features
Time Evolution
- Real-time and finite-temperature evolution functionality for simple update
- Unified interface for Trotter-based time evolution algorithms via
timestepandtime_evolvefunctions
PEPO Operations
- Correlator for mixed state
InfinitePEPO - Simple update for PEPO, including 3-site version
- Single-layer and double-layer PEPO reduced density matrix
spacetypemethod forInfinitePartitionFunction
Environment Conversion
SUWeighttoCTMRGEnvconversion (asInfinitePEPSenvironment)
Symmetry Support
- Support for
SU2Irrepsymmetry inj1_j2_model
Breaking Changes
Interface Changes
- Time Evolution: The old
su_iterandsimpleupdatefunctions have been replaced by the unifiedtimestepandtime_evolveinterface - Gradient Algorithm: Default fixed-point gradient algorithm changed from the previous default to
:eigsolver
Removed Features
InfiniteWeightPEPSandmirror_antidiag- Support for integer space specifiers in state and environment constructors
- Redefinition of
tensorexpr - Support for dual physical spaces for non-bosonic symmetries
Improvements
Algorithm Enhancements
- BoundaryMPS methods now have their own custom transfer functions, avoiding double conjugation and fixing twist issues for fermions
physicalspaceand related functions now correctly handle periodic indexing for infinite networks- Unit normalization of half and full infinite environments before projector computation, improving gradient accuracy
Code Quality
- Migration to Runic formatter for consistent code style
- Updated compatibility with TensorKit v0.15
Bug Fixes
Gradient and Optimization
- Fixed sporadic test timeouts when running variational optimization after simple update for the Heisenberg model by switching to a
GMRES-based gradient solver - Fixed
maxiterbehavior for fallback gradient linear solver - Fixed gauge fixing in
:fixedmode for non-uniform unit cells from full SVD
Operator Handling
- Rotation of iPEPO is now done correctly
- Fixed
rotl90,rotr90androt180forLocalOperator - Fixed XXZ model convention
- Fixed
add_physical_chargefor fermionic operators
Performance
- Avoided
@autooptfor partition function calculations, improving compilation times - Multithreaded scheduler now correctly taken into account for the reverse rules
Dependencies
Compatibility
- TensorKit: 0.15+
Acknowledgments
Thank you to all contributors who made this release possible! Special thanks to those who submitted pull requests, reported issues, and participated in discussions.
Documentation
For detailed documentation, please visit:
Links
For any issues or questions, please file an issue on our GitHub repository.
Merged pull requests:
- Remove InfiniteWeightPEPS and mirror_antidiag (#239) (@Yue-Zhengyuan)
- define
spacetype(InfinitePartitionFunction)(#241) (@ogauthe) - Bump actions/checkout from 4 to 5 (#242) (@dependabot[bot])
- Runic formatter (#243) (@Yue-Zhengyuan)
- Set up optional color inversion for docs images (#244) (@leburgel)
- [perf] avoid
@autooptfor partition function (#245) (@ogauthe) - Change default fixed-point gradient algorithm to
:eigsolver(#246) (@leburgel) - Allow SU2Irrep symmetry in j1_j2_model (#248) (@Yue-Zhengyuan)
- Fix gauge fixing in
:fixedmode for non-uniform unit cells from full SVD (#249) (@pbrehmer) - Simple update for PEPO (#250) (@Yue-Zhengyuan)
- Actually use scheduler in reverse rules (#251) (@lkdvos)
- Add double-layer-pepo reduced densitymatrix (#252) (@lkdvos)
- Fix
add_physical_chargefor fermionic operators (#253) (@leburgel) - Add single-layer-pepo reduced densitymatrix (#254) (@lkdvos)
- Fix InfinitePEPO rotation (#260) (@Yue-Zhengyuan)
- Fix
maxiterbehavior for fallback gradient linear solver (#261) (@leburgel) - Simple update for PEPO (3-site version) (#262) (@Yue-Zhengyuan)
- Remove support for integer space specifiers in state and environment constructors (#266) (@leburgel)
- Fix
rotl90,rotr90androt180forLocalOperator(#267) (@pbrehmer) - Remove redefinition of
tensorexpr(#268) (@Yue-Zhengyuan) - CompatHelper: bump compat for TensorKit to 0.15 (#270) (@github-actions[bot])
- Fix XXZ model convention (#272) (@leburgel)
- Small tests for infinite partition function (#273) (@kshyatt)
- Add correlator for InfinitePEPO (mixed state) (#274) (@Yue-Zhengyuan)
- Add iPEPS SUWeight to CTMRGEnv conversion (#275) (@Yue-Zhengyuan)
- Normalize environments before SVD (#276) (@leburgel)
- Restrict Julia to
<v1.12due to Zygote incompatibility (#278) (@leburgel) - Switch to
GMRES-based gradient solver to stabilize simple update into AD optimization test (#279) (@leburgel) - Improve time evolution interface (#280) (@Yue-Zhengyuan)
- Remove unused
_setindex!(#281) (@leburgel) - Disallow dual physical spaces for symmetries with non-trivial braiding (#284) (@leburgel)
- Make physicalspace etc periodic for infinite networks (#290) (@Yue-Zhengyuan)
- Correct evolved time for bipartite simple update (#291) (@Yue-Zhengyuan)
- Release v0.7.0 (#293) (@lkdvos)
- Update README badges and links (#294) (@leburgel)
- Attempt to fix Julia v1.12 (#295) (@leburgel)
- Update diff link in changelog to most recent registered version [skip ci] (#296) (@leburgel)
- Remove some straggling integer space specifiers (#297) (@leburgel)
Closed issues:
- Renormalize the tensors before SVD for the CTMRG projectors (#137)
- Use
FixedSpaceTruncationbefore gauge fixing (#157) - Performance(?) regressions after update to Zygote.jl v0.7.5 (#166)
- Bug in
add_physical_chargefor fermionic operators (#259) - [Discussion] Remove support for specifying
ComplexSpaces using integers (#265) - Convention of XXZ model (#271)
- Set up a bot to re-generate example docs (#286)
- Error when implementing the example Fermi Hubbard model (#288)
v0.6.1
PEPSKit v0.6.1
- This version contains a number of performance improvements, specifically for the dominant contractions within CTMRG for PEPS.
- We now support constructing reduced density matrices (
reduced_densitymatrix), which also has a more efficient implementation than before. This is now used for obtaining expectation values as well. - There now is built-in support for computing correlators along the horizontal or vertical directions (
correlator). - There is a new truncation mode (
SiteDependentTruncation) to allow specifying site-dependent truncation schemes - Several small internal changes were made to improve type stability.
Merged pull requests:
- Add 3-site simple update (aka 3-site cluster update) (#171) (@Yue-Zhengyuan)
- Implement rotation for
InfiniteWeightPEPS(#182) (@Yue-Zhengyuan) - Rewrite svd to avoid empty blocks (#191) (@lkdvos)
- Update SVD reverse-rule broadening (#194) (@pbrehmer)
- Fix row and column mismatch in
correlation_lengthwith unit cells (#198) (@ogauthe) - Fix edge renormalization diagrams (#201) (@pbrehmer)
- Fix FixedSpaceTruncation for simple update (#202) (@Yue-Zhengyuan)
- Add full update bond environment and gauge fixing (#203) (@Yue-Zhengyuan)
- Properly normalize truncation error in
compute_projector(#206) (@pbrehmer) - Remove
_condition_numberand replace byLinearAlgebra.cond(#208) (@pbrehmer) - Update
fixedpointdocstring (#209) (@pbrehmer) - add correlation functions (#210) (@sanderdemeyer)
- Allow bond-dependent truncation scheme in Simple Update (#211) (@sanderdemeyer)
- Update correlation length normalization (#212) (@lkdvos)
- [Perf] EnlargedCorner optimizations (#214) (@lkdvos)
- Fix charge convention in Fermi-Hubbard example (#217) (@lkdvos)
- spacetype for PEPSKit objects (#218) (@ogauthe)
- Fix 3-site SU
dtand reduce artificial C4v breaking (#219) (@Yue-Zhengyuan) - Update JuliaFormatter to v2 (#224) (@lkdvos)
- Implement VectorInterface's
scale!!andadd!forInfinitePEPS(#226) (@pbrehmer) - Fix example caching
checksum(#227) (@pbrehmer) - [Perf] Another round of performance improvements (#229) (@lkdvos)
- Reduced density matrices (#230) (@lkdvos)
- Fix correlator for fermionic PEPS (#232) (@Yue-Zhengyuan)
- [Perf] reuse
renormalize_west_edgefor all directions (#237) (@ogauthe) - CompatHelper: bump compat for KrylovKit to 0.10, (keep existing compat) (#238) (@github-actions[bot])
- Bump v0.6.1 (#240) (@lkdvos)
Closed issues:
- Memory usage when calculating expectation value on two far away sites on the same row/column (#163)
- Stack on an empty collection for iterative svd (#185)
- About the graph (#193)
- PEPSKit.cost_function fluctuates for converged environment (#196)
- SpaceMismatch in correlation_length from CTMRG (#197)
correlation_lengthmay return wrong values (#199)- PEPSKit 0.6.0: LAPACK error and CTMRG failure in Fermi-Hubbard example with symmetries (#200)
- Possible useless
@setincompute_projector(#204) - Enlarged corners contraction order (#213)
- 2nd neighbor simple update results (#215)
- Projectors performance improvements (#220)
- Expectation value performance improvements (#221)
scale!!,add!!in VectorInterface.jl not implemented for InfinitePEPS (#225)- Mismatch between
correlatorandexpectation_valuefor fermionic PEPS (#231) dtmapis not diffable anymore? (#235)
v0.6.0
PEPSKit v0.6.0
Version 0.6.0 of PEPSKit contains a number of small improvements and fixes, some minor breaking changes and most notably a large amount of documentation improvements.
The documentation page now hosts a better explanation of the workings of the package, both through better docstrings, but also with a large amount of working examples that showcase the capabilities of the package.
We expanded the features for the differentiation of the SVD routines by adding the ability to have Lorentzian broadening.
The minor improvements consist of some better show methods, conversions, utility constructors, real, imag support, ...
We now also have a slightly more consistent interface for initializing boundary MPS, for which we added the (breaking change) of renaming initializeMPS -> initialize_mps.
Additionally, PEPSKit is now compatible with MPSKit v0.13+.
The fixes include some missing parity matrices in the fermionic contractions, and some inconsistencies in the chosen scalartype for the environments of states with real elements.
Merged pull requests:
- CompatHelper: bump compat for OhMyThreads to 0.8, (keep existing compat) (#159) (@github-actions[bot])
- Documentation update (#161) (@leburgel)
- Remove unnecessary type restriction on
_safe_pow(#165) (@pbrehmer) - Update VUMPS environments calling syntax (#167) (@leburgel)
- Define
Base.showforSUWeight(#168) (@Yue-Zhengyuan) - Add unit cell size check for simple update (#170) (@Yue-Zhengyuan)
- Add InfinitePEPS to InfiniteWeightPEPS conversion (#172) (@sanderdemeyer)
- Fermionic fixes (#174) (@lkdvos)
- Fix optimizer verbosity in
fixedpointalgorithm selector (#175) (@pbrehmer) - Fix
LocalOperatorconstructor for indices of typeTuple{Int,Int}(#176) (@pbrehmer) - Define
real,imagforLocalOperator(#177) (@Yue-Zhengyuan) - Refactor
initializeMPS(#180) (@pbrehmer) - Add modified
tsvd!reverse-rule with Lorentzian broadening (#181) (@pbrehmer) - Compatibility for MPSKit 0.13 (#183) (@github-actions[bot])
- Fix environment constructor scalar type (#186) (@lkdvos)
- Bump v0.6.0 (#189) (@lkdvos)
Closed issues:
v0.5.0
PEPSKit v0.5.0
PEPSKit.jl v0.5.0 consitutes a rather large update, featuring a thorough overhaul of the optimization interface, significant improvements in stability of the optimization and some new algorithm implementations. Changes of note are:
- A new keyword-based interface to the optimization and contraction routines which allows to set all relevant algorithm parameters through named tuples, avoiding the need to instantiate explicit algorithm structs on the user side.
- The original struct-based interface is still functional, but is now considered more as 'expert-mode' usage. However, some of the keyword names have changed to improve consistency, making this a breaking release.
- Significant improvements in stability and performance for the CTMRG fixed-point differentiation, with
- The addition of a more efficient
EigSolvergradient algorithm for solving the fixed-point gradient linear problem - Significant stability improvements in the constituent SVD pullback, using both a dense- and and sparse-style reverse rule.
- The addition of a more efficient
- The addition of custom PEPS retractions which preserve the Euclidean norm of each PEPS tensor, greatly improving the stability of the optimizations.
- The addition support for PEPS-PEPO-PEPS networks through a unified contractible network interface.
- The addition of bond truncation algorithms for time evolution.
Merged pull requests:
CTMRGsupport for PEPS-PEPO-PEPS networks (#134) (@leburgel)- Implement charge shift for
LocalOperator(#135) (@leburgel) - Implement TensorKit's
tsvd!reverse-rule for:fixeddifferentiation mode (#150) (@pbrehmer) - Implement norm-preserving retractions (#151) (@leburgel)
- Scale
rrule_algtolerance with singular value magnitude when usingKrylovKit.svdsolvepullback (#155) (@leburgel) - Split off norm-preserving vector retractions (#160) (@leburgel)
- Update README (#162) (@leburgel)
Closed issues:
v0.4.2
PEPSKit v0.4.2
Merged pull requests:
- Add eigsolve-style rrule for CTMRG fixed-point gradient (#126) (@leburgel)
- Clean up and simplify optimization interface (#127) (@pbrehmer)
- Add bond truncation algorithms for time evolution (#128) (@Yue-Zhengyuan)
- Implement keyword selector (#130) (@pbrehmer)
- Add unified contractible network interface (#131) (@leburgel)
- Refactor boundary MPS contractions (#132) (@leburgel)
- Enforce
FixedSpaceTruncationduring differentiation (#140) (@pbrehmer) - Pick out CTMRG left move as a separate function (#141) (@Yue-Zhengyuan)
- Wrap SU intermediate steps into functions (#143) (@Yue-Zhengyuan)
- Refactor
absorb_weightand useleftorthin_qr_bond(#146) (@Yue-Zhengyuan) - Fix
Base.similarfor physical and contractible network types (#149) (@leburgel) - Bump KrylovKit compat (#156) (@leburgel)
Closed issues:
- Use
FixedSpaceTruncationin CTMRG rrule (#138)
v0.4.1
PEPSKit v0.4.1
Merged pull requests:
v0.4.0
PEPSKit v0.4.0
Apart from several performance and utility features, this release features a host of new and improved algorithms.
We now support a simple update scheme for (imaginary) time evolution, and the CTMRG schemes also work on single-layer partition functions.
Behind the screens, we are now running on the newer versions of TensorKit (v0.13+), TensorOperations (v5+) and Zygote (v0.7+). We hopefully expect some performance increases from this.
This is however a breaking change, along with some minor interface changes.
Merged pull requests:
- Make
:sequentialact column-wise (#90) (@pbrehmer) - Use
reallinsolvefor solving the CTMRG gradient linear problem (#94) (@pbrehmer) - Add simple update algorithm (#97) (@Yue-Zhengyuan)
- Implement full-infinite projector algorithm (#99) (@pbrehmer)
- Macroexpand generated functions (#101) (@lkdvos)
- Warn in case of real environments in
:fixedmode (#102) (@pbrehmer) - Fix
FullInfiniteProjector(#107) (@Yue-Zhengyuan) - Fix faulty CTMRG contractions (#110) (@pbrehmer)
- Add CTMRG support for regular 2D partition functions (#111) (@leburgel)
- CompatHelper: bump compat for Zygote to 0.7, (keep existing compat) (#112) (@github-actions[bot])
- Fix contraction order optimization for
LocalOperatorcontractions (#114) (@pbrehmer) - CompatHelper: bump compat for MPSKit to 0.12, (keep existing compat) (#119) (@github-actions[bot])
- CompatHelper: bump compat for OptimKit to 0.4, (keep existing compat) (#122) (@github-actions[bot])
Closed issues:
- Possible improvement of sequential CTMRG (#88)
- Add option to use full-infinite (4x4) environment in CTMRG (#93)
- PEPSOptimize fails for real tensors (#100)
- Warning when precompiling: using OhMyThreads.@set in module PEPSKit conflicts with an existing identifier (#104)
- Bra and ket conjugated incorrectly in recent commits (#109)
- Introduce
InfiniteSquareNetworksupertype to reduce redundancies? (#113) - Generalization of the CTMRG
statetype (#115)
v0.3.0
PEPSKit v0.3.0
This release features a variety of updates, fixes and improvements.
Most notably, there now is extended multithreading over unitcells support for both the forwards, as well as backwards passes in CTMRG gradient calculations.
There are also several organization improvements, default parameter improvements and small fixes.
Merged pull requests:
- Implement multi-threading using OhMyThreads and make it differentiable (#70) (@pbrehmer)
- Implement sparse SVD with function handles (#72) (@pbrehmer)
- Zenodo link and citation file (#76) (@lkdvos)
- Fix Zenodo link (#77) (@pbrehmer)
- Make
sdiag_inv_sqrtuse pseudo-inverse (#78) (@pbrehmer) - Improve default SVD
rrule_alg(#79) (@pbrehmer) - Change default SVD algorithm to
SDDand update tests (#83) (@pbrehmer) - Remove CTMRG redundant logging (#84) (@Yue-Zhengyuan)
- CI updates (#85) (@lkdvos)
- CompatHelper: add new compat entry for OhMyThreads at version 0.7, (keep existing compat) (#87) (@github-actions[bot])
- Print degenerate singular values warning only during derivation (#92) (@pbrehmer)
- Excise RecursiveVec (#95) (@lkdvos)
- CompatHelper: bump compat for VectorInterface to 0.5, (keep existing compat) (#96) (@github-actions[bot])
Closed issues:
v0.2.2
PEPSKit v0.2.2
Merged pull requests:
- Clean up symmetrization and add optimization callback (#62) (@pbrehmer)
- Define + for LocalOperators (#63) (@Gertian)
- Improve CTMRG error computation (#65) (@lkdvos)
- Implement symmetric versions of models (#66) (@pbrehmer)
- FiniteDifferences
to_vecsupport (#67) (@lkdvos) - Change default values (#68) (@pbrehmer)
- Product state PEPS with noise (#69) (@pbrehmer)
- CompatHelper: add new compat entry for MPSKitModels at version 0.3, (keep existing compat) (#71) (@github-actions[bot])
- Fix CTMRG
miniterandAccessors.@set(#74) (@pbrehmer) - CompatHelper: add new compat entry for FiniteDifferences at version 0.12, (keep existing compat) (#75) (@github-actions[bot])
Closed issues:
- Question : How does CTMRG work together with symmetric tensors ? (#64)
v0.2.1
PEPSKit v0.2.1
Fixes an issue with unit cells
Merged pull requests: