Skip to content

Latest commit

 

History

History
141 lines (130 loc) · 10.6 KB

v0.4.0.rst

File metadata and controls

141 lines (130 loc) · 10.6 KB

[0.4.0] - 2019-04-28

Backwards incompatible changes

  • The argument order of tenpy.models.lattice.Lattice could be a tuple (priority, snake_winding) before. This is no longer valid and needs to be replaced by ("standard", snake_winding, priority).
  • Moved the boundary conditions bc_coupling from the tenpy.models.model.CouplingModel into the tenpy.models.lattice.Lattice (as bc). Using the parameter bc_coupling will raise a FutureWarning, one should set the boundary conditions directly in the lattice.
  • Added parameter permute (True by default) in tenpy.networks.mps.MPS.from_product_state and tenpy.networks.mps.MPS.from_Bflat. The resulting state will therefore be independent of the "conserve" parameter of the Sites - unlike before, where the meaning of the p_state argument might have changed.
  • Generalize and rename tenpy.networks.site.DoubleSite to tenpy.networks.site.GroupedSite, to allow for an arbitrary number of sites to be grouped. Arguments site0, site1, label0, label1 of the __init__ can be replaced with [site0, site1], [label0, label1] and op0, op1 of the kronecker_product with [op0, op1]; this will recover the functionality of the DoubleSite.
  • Restructured callstructure of Mixer in DMRG, allowing an implementation of other mixers. To enable the mixer, set the DMRG parameter "mixer" to True or 'DensityMatrixMixer' instead of just 'Mixer'.
  • The interaction parameter in the tenpy.models.bose_hubbbard_chain.BoseHubbardModel (and tenpy.models.bose_hubbbard_chain.BoseHubbardChain) did not correspond to U/2N(N − 1) as claimed in the Hamiltonian, but to UN2. The correcting factor 1/2 and change in the chemical potential have been fixed.
  • Major restructuring of tenpy.linalg.np_conserved and tenpy.linalg.charges. This should not break backwards-compatibility, but if you compiled the cython files, you need to remove the old binaries in the source directory. Using bash cleanup.sh might be helpful to do that, but also remove other files within the repository, so be careful and make a backup beforehand to be on the save side. Afterwards recompile with bash compile.sh.
  • Changed structure of tenpy.models.model.CouplingModel.onsite_terms and tenpy.models.model.CouplingModel.coupling_terms: Each of them is now a dictionary with category strings as keys and the newly introduced tenpy.networks.terms.OnsiteTerms and tenpy.networks.terms.CouplingTerms as values.
  • tenpy.models.model.CouplingModel.calc_H_onsite is deprecated in favor of new methods.
  • Argument raise_op2_left of tenpy.models.model.CouplingModel.add_coupling is deprecated.

Added

  • tenpy.networks.mps.MPS.canonical_form_infinite.
  • tenpy.networks.mps.MPS.expectation_value_term, tenpy.networks.mps.MPS.expectation_value_terms_sum and tenpy.networks.mps.MPS.expectation_value_multi_sites for expectation values of terms.
  • tenpy.networks.mpo.MPO.expectation_value for an MPO.
  • tenpy.linalg.np_conserved.Array.extend and tenpy.linalg.charges.LegCharge.extend, allowing to extend an Array with zeros.
  • DMRG parameter 'orthogonal_to' allows to calculate excited states for finite systems.
  • possibility to change the number of charges after creating LegCharges/Arrays.
  • more general way to specify the order of sites in a tenpy.models.lattice.Lattice.
  • new tenpy.models.lattice.Triangular, tenpy.models.lattice.Honeycomb and tenpy.models.lattice.Kagome lattice
  • a way to specify nearest neighbor couplings in a ~tenpy.models.lattice.Lattice, along with methods to count the number of nearest neighbors for sites in the bulk, and a way to plot them (~tenpy.models.lattice.Lattice.plot_coupling and friends)
  • tenpy.networks.mpo.MPO.from_grids to generate the MPO from a grid.
  • tenpy.models.model.MultiCouplingModel for couplings involving more than 2 sites.
  • request #8: Allow shift in boundary conditions of ~tenpy.models.model.CouplingModel.
  • Allow to use state labels in tenpy.networks.mps.MPS.from_product_state.
  • tenpy.models.model.CouplingMPOModel structuring the default initialization of most models.
  • Allow to force periodic boundary conditions for finite MPS in the ~tenpy.modles.model.CouplingMPOModel. This is not recommended, though.
  • tenpy.models.model.NearestNeighborModel.calc_H_MPO_from_bond and tenpy.models.model.MPOModel.calc_H_bond_from_MPO for conversion of H_bond into H_MPO and vice versa.
  • tenpy.algorithms.tebd.RandomUnitaryEvolution for random unitary circuits
  • Allow documentation links to github issues, arXiv, papers by doi and the forum with e.g. :issue:`5`, :arxiv:`1805.00055`, :doi:`10.21468/SciPostPhysLectNotes.5`, :forum:`3`
  • tenpy.models.model.CouplingModel.coupling_strength_add_ext_flux for adding hoppings with external flux.
  • tenpy.models.model.CouplingModel.plot_coupling_terms to visualize the added coupling terms.
  • tenpy.networks.terms.OnsiteTerms, tenpy.networks.terms.CouplingTerms, tenpy.networks.terms.MultiCouplingTerm containing the of terms for the ~tenpy.models.model.CouplingModel and ~tenpy.models.model.MultiCouplingModel. This allowed to add the category argument to ~tenpy.models.model.CouplingModel.add_onsite, ~tenpy.models.model.CouplingModel.add_coupling and ~tenpy.models.model.MultiCouplingModel.add_multi_coupling.
  • tenpy.networks.terms.TermList as another (more human readable) representation of terms with conversion from and to the other *Term classes.
  • tenpy.networks.mps.MPS.init_LP and tenpy.networks.mps.MPS.init_RP to initialize left and right parts of an Environment.
  • tenpy.networks.mpo.MPOGraph.from_terms and tenpy.networks.mpo.MPOGraph.from_term_list.
  • argument charge_sector in tenpy.networks.mps.MPS.correlation_length.

Changed

  • moved toycodes from the folder examples/ to a new folder toycodes/ to separate them clearly.
  • major remodelling of the internals of tenpy.linalg.np_conserved and tenpy.linalg.charges.
    • Introduced the new module tenpy/linalg/_npc_helper.pyx which contains all the Cython code, and gets imported by
    • ~tenpy.linalg.np_conserved.Array now rejects addition/subtraction with other types
    • ~tenpy.linalg.np_conserved.Array now rejects multiplication/division with non-scalar types
    • By default, make deep copies of npc Arrays.
  • Restructured lanczos into a class, added time evolution calculating exp(A*dt)|psi0>
  • Warning for poorly conditioned Lanczos; to overcome this enable the new parameter reortho.
  • Simplified call strucutre of ~tenpy.linalg.np_conserved.Array.extend, and ~tenpy.linalg.charges.LegCharge.extend.
  • Restructured tenpy.algorithms.dmrg:
    • ~tenpy.algorithms.dmrg.run is now just a wrapper around the new ~tenpy.algorithms.dmrg.Engine.run, run(psi, model, pars) is roughly equivalent to eng = EngineCombine(psi, model, pars); eng.run().
    • Added ~tenpy.algorithms.dmrg.Engine.init_env and ~tenpy.algorithms.dmrg.Engine.reset_stats to allow a simple restart of DMRG with slightly different parameters, e.g. for tuning Hamiltonian parameters.
    • Call ~tenpy.networks.mps.MPS.canonical_form for infinite systems if the final state is not in canonical form.
  • Changed default values for some parameters:
    • set trunc_params['chi_max'] = 100. Not setting a chi_max at all will lead to memory problems. Disable DMRG_params['chi_list'] = None by default to avoid conflicting settings.
    • reduce to mixer_params['amplitude'] = 1.e-5. A too strong mixer screws DMRG up pretty bad.
    • increase Lanczos_params['N_cache'] = N_max (i.e., keep all states)
    • set DMRG_params['P_tol_to_trunc'] = 0.05 and provide reasonable ..._min and ..._max values.
    • increased (default) DMRG accuracy by setting DMRG_params['max_E_err'] = 1.e-8 and DMRG_params['max_S_err'] = 1.e-5.
    • don't check the (absolute) energy for convergence in Lanczos.
    • set DMRG_params['norm_tol'] = 1.e-5 to check whether the final state is in canonical form.
  • Verbosity of ~tenpy.tools.params.get_parameter reduced: Print parameters only for verbosity >=1. and default values only for verbosity >= 2.
  • Don't print the energy during real-time TEBD evolution - it's preserved up to truncation errors.
  • Renamed the SquareLattice class to tenpy.models.lattice.Square for better consistency.
  • auto-determine whether Jordan-Wigner strings are necessary in ~tenpy.models.model.CouplingModel.add_coupling.
  • The way the labels of npc Arrays are stored internally changed to a simple list with None entries. There is a deprecated propery setter yielding a dictionary with the labels.
  • renamed first_LP and last_RP arguments of ~tenpy.networks.mps.MPSEnvironment and ~tenpy.networks.mpo.MPOEnvironment to init_LP and init_RP.
  • Testing: insetad of the (outdated) nose, we now use pytest <https://pytest.org> for testing.

Fixed

  • 22: Serious bug in tenpy.linalg.np_conserved.inner: if do_conj=True is used with non-zero qtotal, it returned 0. instead of non-zero values.
  • avoid error in tenpy.networks.mps.MPS.apply_local_op
  • Don't carry around total charge when using DMRG with a mixer
  • Corrected couplings of the FermionicHubbardChain
  • 2: memory leak in cython parts when using intelpython/anaconda
  • 4: incompatible data types.
  • 6: the CouplingModel generated wrong Couplings in some cases
  • 19: Convergence of energy was slow for infinite systems with N_sweeps_check=1
  • more reasonable traceback in case of wrong labels
  • wrong dtype of npc.Array when adding/subtracting/... arrays of different data types
  • could get wrong H_bond for completely decoupled chains.
  • SVD could return outer indices with different axes
  • tenpy.networks.mps.MPS.overlap works now for MPS with different total charge (e.g. after psi.apply_local_op(i, 'Sp')).
  • skip existing graph edges in MPOGraph.add() when building up terms without the strength part.

Removed

  • Attribute chinfo of ~tenpy.models.lattice.Lattice.