Changelog
=========

v1.12.5
-------

* Update bibtex with publications, add zenodo package for v1.12.x (being in preparation).
* Fix sphinx build breaking (type checking, cyclic imports)
* Small fixes sphinx (broken links, short underlining)
* Reduce number of table of contents entries in sphinx for changelog (group by minor
  current minor version).
* Update readme (removing outdated information).

v1.12.4
-------
* Bugfix: fixing a bug in :py:meth:`qtealeaves.emulator.mps_simulator.MPS.meas_bond_entropy` 
  where casting to a numpy array made problems in GPU computations.

v1.12.3
-------
* Bugfix: removing tracking of singular values for ``oqs_mode=3`` for now.

v1.12.2
-------
* Updates from master branch including `v1.7.28`_ to `v1.7.34`_.
* Removed parallelization in GPU and mixed device mode to avoid race conditions.

v1.12.1
-------
* Definetly removed the deprecated ``set_subtensor_entry`` method.
* Fixed ``test_batched_tensordot`` to be compatible with GPU.
* Fixed ``test_dynamics_tunneling_mode_1_DenseMPO``.
* Fixed ``einsum`` to handle the case where output is a scalar (gets converted to a 0-dim array).

v1.12.0
-------

* Added ``squeeze_update`` method to the :py:class:`qtealeaves.tensors._AbstractQteaTensor` (and derived) class, which allows to squeeze the tensor in-place, mimicking the ``np.squeeze`` method.
  It is similar to ``.remove_dummy_link()``, but it accepts also ``None`` or a list of dimensions to be squeezed.
* Fixed the logic of :py:meth:`qtealeaves.abstracttns.abstract_tn._AbstractQteaTensor.move_pos`, to handle both iterable and non-iterable effective operators on links.
  This required the addition of :py:meth:`qtealeaves.tensors._AbstractQteaTensor.__init_subclass__` to raise an error if someone tries to implement ``__iter__`` in
  derived classes.
* Added ``__truediv__`` abstract method to the :py:class:`qtealeaves.tensors._AbstractQteaTensor` to force implementing the division of a tensor by a scalar in derived classes.
* Added ``__pow__`` and ``__ipow__`` methods to the :py:class:`qtealeaves.tensors._AbstractQteaBaseTensor`. (Useful for qchaitea).
* Removed deprecated machine learning methods. This removes just the ``ml_...`` methods, but some logic related to machine learning was still present in the code, e.g., in the ``iso_towards``.
  This is a breaking change, removing of the remaining logic should not.

Summary for versions v1.11.x
----------------------------

v1.11.4
~~~~~~~

* Import updates from master versions `1.7.16`_ to `1.7.27`_.
* Default `True` for copying convergence parameters when copying ansatz.

v1.11.3
~~~~~~~

* typing for ansaetze.

v1.11.2
~~~~~~~

* Added ``dim`` and ``size`` attributes to ``HilbertCurveMap`` for easier access.
* Fixed ``Ellipsis`` handling in ``_AbstractQteaBaseTensor.__getitem__``.
* Fixed issue with ``QteaTensor.convert_singvals`` where passing a dtype as a scalar type would lead to an error.
  Now it handles all ``np.typing.DTypeLike`` inputs.
* Fixed ``_AbstractQteaTensor.__eq__`` to return ``False`` when comparing with non-tensor objects.

v1.11.1
~~~~~~~

* Tracking of cut singular values implemented for the ``_AbstractMatrixTN`` class.
* Fixed ``_AbstractMatrixTN.apply_one_site_operator`` and ``_AbstractMatrixTN.apply_two_site_operator``
  to pass correct arguments to ``.tensordot``.
* Added ``.current_kraus_dim`` to LPTN
* Fixed ``_initialize_lptn`` to set singvals in the correct backend.

v1.11.0
~~~~~~~

* Improved tracking of singular values cut during two-site gate application, both 
  nearest-neighbor and long-range, and multi-site MPO application for MPS, TTN, TTO. 
  All methods involving truncation now return the truncated singular values.

Summary for versions v1.10.x
----------------------------

v1.10.5
~~~~~~~

* Implemented effective operators for DenseMPOs for ground state search.
* Added the fit_mpo() method: variationally find a new state representation of
  the contraction of a DenseMPO with an existing state. For MPS and TTN.

v1.10.4
~~~~~~~

* Open system dynamics (``oqs_mode=3``) now available for LPTN.
* New convergence parameter ``cut_ratio_kraus`` used in application of Kraus channels. 

v1.10.3
~~~~~~~

* Replaced np.bool with bool, as the former is deprecated in newer numpy versions.

v1.10.2
~~~~~~~

* Introduced the ``batched_tensordot`` method for efficient tensor contraction 
  in cases where one or more links are associated with batch dimensions.

v1.10.1
~~~~~~~

* typing checked by ``mypy`` also for ``qtealeaves/observables``.
* Improvements to changelog.

v1.10.0
~~~~~~~

* All observables save in HDF5 format. Fortran-style read/write functions
  are removed.
* `input` directory removed. Simulation hash goes to output directory.
* Static and dynamic observables are returned as time-ordered arrays. The user is returned 
  a dictionary with observable names as keys and arrays of time-ordered results as values.
* Implementing bond entropy measurement on left/right boundary partitions of a TTO.
* TTO log negativity mode "A" updated to "N" for native partitions.

Summary for versions v1.9.x
---------------------------

v1.9.1
~~~~~~

* Convergence parameters are specified when the ``read_pickle()`` function is called,
  otherwise a warning is raised.

v1.9.0
~~~~~~

* Major improvements to :doc:`QUBOSolver <optimization>`. 
  Key new features include support for reading from and writing to QUBO problems
  as standard LP files for combinatorial optimization, and a redesigned interface
  for QUBO convergence parameters that inherits from the qtealeaves base convergence
  parameters object.

Summary for versions v1.8.x
---------------------------

v1.8.4
~~~~~~

* typing checked by ``mypy`` for ``qtealeaves/tensors`` submodule passing
  ``mypy --disallow-untyped-defs qtealeaves/tensors/. | grep "qtealeaves/tensors"``
* Extending some docstring, moving some methods to abstract base tensor.
* Non-backwards compatible changes include interface of ``convert``,
  ``attach_dummy_link``, ``remove_dummy_link`` (relying on undocumented return).

v1.8.3
~~~~~~

* Updates from stable branch including `v1.7.12`_ to `v1.7.15`_

v1.8.2
~~~~~~

* Fix observables tests on other QTEA applications, revert build server toolkit to develop

v1.8.1
~~~~~~

* Revamped the observables for more clarity and better code quality.
  To migrate from old code, rename the observables according to the new names:

  - ``TNObsBondEntropy`` -> ``BondEntropy``
  - ``TNObsCorr`` -> ``Correlation``
  - ``TNObsCustom`` -> ``CustomCorrelation``
  - ``TNCustomFunctionObs`` -> ``CustomFunction``
  - ``TNObsDenseMPOList`` -> ``GenericMPO``
  - ``TNObsLocal`` -> ``Local``
  - ``TNObsLogNegativity`` -> ``LogNegativity``
  - ``TNObsDistance2Pure`` -> ``Overlap``
  - ``TNObsProbability`` -> ``Probability``
  - ``TNObsProjective`` -> ``Projective``
  - ``TNState2File`` -> ``State2File``
  - ``TNObsTensorProduct`` -> ``TensorProduct``
  - ``TNObsTZeroCorr`` -> ``TimeCorr``
  - ``TNObsVarE`` -> ``VarE``
  - ``TNObsWeightedSum`` -> ``WeightedSum``

* Added a ``measure`` method to the observables, which is now the main method to call for measurements.
  ``run_tn_measurement`` is still advisable when measuring multiple observables at once, since it introduces some performance optimizations.
* Bugfix for appending ``CustomCorrelation`` instances to each other.
* Bugfix for ``TTO.from_statevector`` when the input state has a number of sites that is not a power of two.
* Bugfix for ``TTO.from_statevector`` not setting the ``tensor_backend`` correctly.
* Bugfix for ``TTO.log_negativity`` not returning the tensor on cpu.
* Bugfix for ``_AbstractTN.mpi_send_tensor()`` and ``_AbstractTN.mpi_receive_tensor()`` passing too many arguments.
* Bugfix for ``.flatten()`` not available for TensorFlow backend.
* Changed how ``CustomFunction`` handles ``kwargs``: they have to match the input arguments of the callable.
* Added a test case for measuring a bunch of observables all together.
* Added ``TTO`` to the observables test cases
* Added typing to observables.
* Added a ``base`` parameter to ``BondEntropy`` and ``X.meas_bond_entropy``, which allows to specify the logarithm base for the entropy calculation.
* ``TTO.entropy()`` now accepts ``base`` instead of ``local_dim`` to specify the logarithm base.
* Removed the tn type and tensor backend input args from ``run_tn_measurement``: they are automatically inferred through from the input state.
* Added type hints to ``observables`` module.

v1.8.0
~~~~~~

* Version bump to separate new develop from master.

Summary for versions v1.7.x
---------------------------

v1.7.34
~~~~~~~

* Minimal changes to Gitlab CI/CD configuration, to fix some issue for the public version.

v1.7.33
~~~~~~~

* Improve einsum performance for contractions of two tensors.

v1.7.32
~~~~~~~
* Switch to Gitlab CI/CD.

v1.7.31
~~~~~~~
* Hotfix for mixed device mode and asynchronous data movement causing race conditions.
  Issue opened for better implementation handling extreme cases.

v1.7.30
~~~~~~~
* Bugfix logger not writing to file when running in Jupyter notebook
  or simulations in for-loop

v1.7.29
~~~~~~~
* Do not check dtype in :meth:`_AbstractQteaBaseTensor.__setitem__` if attribute not available.

v1.7.28
~~~~~~~

* Allow true two-tensor update in variational ground state search via
  `statics_method=6`.
* Skip same tensors pairs in two-site variational updates.

v1.7.27
~~~~~~~

* Modernized the build system  by relying solely on ``pyproject.toml``.
  ``setup.py`` is now a thin wrapper around ``setuptools.setup()``.
  This and ``conanfile.py`` will be removed once we switch to Gitlab CI/CD.
* Removed ``requirements.txt`` as dependencies are now specified in ``pyproject.toml``.

v1.7.26
~~~~~~~

* Fix bug moving tensors to memory device in `to_statevector` in `MPS` class.

v1.7.25
~~~~~~~

* Boolean flag to allow convergence parameters to be copied (in rare
  cases where the convergence parameters cannot be pickled, deepcopy
  might also be prevented and the error will be raised during the copy).
* `_add` (MPS) deepcopies convergence parameters instead of creating
  them from scratch. Same fix for `kron` (TTN).
* Summation of TTN takes convergence parameters from first state in
  the sum instead of the default ones.

v1.7.24
~~~~~~~

* Allow to skip duplicate checks when creating a `DenseMPO`.

v1.7.23
~~~~~~~

* Updates to documentation (no version bump in version.py
  and conanfile.py).

v1.7.22
~~~~~~~

* Update year 2025 to 2026.
* Update bibliography file in docs.

v1.7.21
~~~~~~~

* Bugfix MPI calls (no more `TN_MPI_TYPES` necessary for
  `_AbstractQteaTensor`)

v1.7.20
~~~~~~~

* Allow to inject custom ansatz via `tn_type` for tensor network as well
  as using our ansatz and pass it. This allows to make `tn_type` as integer
  deprecated in the future.
* Allow to choose ansatz via string.

v1.7.19
~~~~~~~

* Fixed bug in __mul__ function in mps_simulator.
* Fixed typo in mps_simulator.

v1.7.18
~~~~~~~

* Implement `set_subtensor_entry` via slices and copy-paste
  unittest back for `set_subtensor_entry`.

v1.7.17
~~~~~~~

* Removing potential dangerous default arguments `TNOperators` and `TensorBackend`
  triggered mainly by `TNOperators` fulfilling the role of a dictionary.

v1.7.16
~~~~~~~

* Bugfix: snapshot of SparseMPO matrix no more accesses identity (which
  is not always defined).
* Additional feature to return only diagonal of SparseMPO matrix.

v1.7.15
~~~~~~~

* Re-introduce ``set_subtensor_entry`` because it is still needed for symmetries.
  (Deprecated warning is raised to not add it to new implementations.)
* Finite-T simulation will write to the log that they are converged, but
  not exit (as the user requested a temperature grid, not one final state).

v1.7.14
~~~~~~~

* Removed the sorting of the excited states in get_static_obs.
* Bugfix: generalized TTN.apply_mpo() to work with all tensor backends.

v1.7.13
~~~~~~~

* Provide snapshot of SparseMPO as matrix on full Hilbert space to
  facilitate debugging.
* Fix inefficient ``__imul__`` and ``__itruediv__``; now without copy for MPS.
  (Comment: apparently, no other ansatz has this implemented.)
* Fix ``_add`` in MPS not using ``cls``.
* Fix ``DenseMPO`` and calls to ``move_pos``
* Fix TTNs ``dot``, now ``<self|other>`` consistent with tensors and MPS.
* MPS ``add_site`` accepts now ``np.ndarray`` for state.
* MPS ``get_substate`` without truncation does only minimal shifting of iso center.
* DenseMPO and its ``from_tensor_list`` can accept ``np.ndarray``.
* Intermediate abstract class ``_AbstractEffectiveProjector`` and
  ``_AbstractEffectiveMpo`` for ``isinstance`` checks.
* Modeling by layout avoids relying on 2d float position and uses
  integer indices of the lattice now (allowing for more flexibility on
  how the 2d system is encoded, e.g., fake-2d system being 1d).
* Insert full path for autoclass of TNConvergenceParameters.

v1.7.12
~~~~~~~

* Implement TTO "batched" measurement for each eigenstate for
  single-site reduced density matrix, local observables, and
  overlap to a pure state.
* Bugfix TTO measurement ``meas_tensor_product`` and ``meas_weighted_sum``.
* Fix order checks ``local_meas`` in abstract TN.

v1.7.11
~~~~~~~

* Updated dockerfile.

v1.7.10
~~~~~~~

* Prepare public version
* Import `v1.5.21`_ changes from ``master`` (stable branch).

v1.7.9
~~~~~~~

* Method ``renyi_negativity()`` now available for the ``TTO`` class

v1.7.8
~~~~~~

* Example of CustomSiteTerm added.

v1.7.7
~~~~~~

* Updated html documentation for dense MPOs and iTPOs.
* Updated docstrings for dense MPO and iTPO functions.
* ``print()`` now prints meaningful output for dense MPO and iTPO objects.
* Added MPOSite function ``from_operator()`` which allows to generate MPOSite directly
  from a passed operator.
* Bugfix in aTTN check for convergence of disentangler optimization which was
  failing for symmetric tensors and ``"mera"`` disentangler optimization.
* Bugfix in applying disentangler layer to Hamiltonian which was sometimes not
  compressing the horizontal link bond dimension.
* Removed throwing an error when running symmetric tensor simulation with automatic
  ``mpo_mode``, as the automatic value falls to iTPO.

v1.7.6
~~~~~~~

* Added convergence parameter ``solver_reorthogonalize`` for eigen/exponantiation solver
  which controls with respect to how many vectors in the Krylov basis is a current
  vector reorthogonalized, in each iteration.

v1.7.5
~~~~~~

* Removed ``set_subtensor_entry()``. Numpy-like indexing is now used throughout the library.

v1.7.4
~~~~~~

* Fixing versions for Jenkins

v1.7.3
~~~~~~

* Updated dockerfile.

v1.7.2
~~~~~~

* Import changes from `v1.5.19`_ and `v1.5.20`_.

v1.7.1
~~~~~~

* Improvement of ``get_local_kraus_operators()`` with new numpy-like indexing feature

v1.7.0
~~~~~~

* The measurable observables are no longer specified in the ansatz class but in
  the observables, individually, through a whitelist of ansatzes.
* Introducing abstract ``eigvalsh`` in ``_AbstractQteaBaseTensor``.

Summary for versions v1.6.x
---------------------------

v1.6.26
~~~~~~~

* Bugfix in ``get_eigenstates()`` for TTO.

v1.6.25
~~~~~~~

* Enabled batches for custom correlators.
* Fixed a bug where creating a TTN with num_sites not a power of two in TTN.product_state_from_local
  did not correctly mask the unused tensors.
* Fixed the check of convergence in TTN.sum_approximate().
* Fixed a bug where the result of sum_approximate() would get an additional overall phase if the size
  was not a power of two.

v1.6.24
~~~~~~~

* Switch build server to GPUs; unittest run now as well on GPU.

v1.6.23
~~~~~~~

* Implemented gradient-descent based disentangler optimization for aTTNs. The
  optimization method can be choosed via convergence parameter ``de_opt_strategy``
* Bugfix optimization failing with the new GPU torch solver ``DenseTensorEigenSolverH``
* Bugfix aTTNs: now running on mixed device mode
* Bugfix: symmetric tensor identity initialization
* Bugfix aTTNs: explicitly handle contractions that destroy the local Hilbert space,
  which breaks the disentangler optimization (like annihilation operator on an empty site).

v1.6.22
~~~~~~~

* Overwritten ``__str__()`` function for ``AbstractQteaBaseTensor`` to print a
  tensor class with its elements, shape, dtype, and device.
* Added ``_repr_html_()`` function for ``AbstractQteaBaseTensor`` for print output in
  Jupyter Notebook.

v1.6.21
~~~~~~~

* Now every tensor inheriting from ``AbstractQteaBaseTensor`` can be indexed with
  ``__getitem__`` and ``__setitem__`` methods. This allows to use the same
  syntax as for numpy arrays, e.g., ``tensor[0, 1] = 1.0``. This covers all types
  of tensors, excluding symmetric ones.

v1.6.20
~~~~~~~

* show_map method added in HilbertCurveMap
* GeneralizedHilbertCurveMap class added.
* The new class is inherited from HilbertCurveMap.
* It alllows to use the Hilbert Curvature for lattices with linear sizes which are not powers of two.
* The input lattice is centered in an embedding one, with power-of-two sizes.
* It is implemented for 2d and 3d.
* hilbert_curvature.py renamed in mapping.py
* test_hilbert_curvature.py renamed in test_mapping.py
* test_GeneralizedHilbertCurveMap.py added

v1.6.19
~~~~~~~

* New observable ``TNObsLogNegativity`` for the ``TTO``
  allowing to measure the logarithmic negativity for various partitions.
* Bugfixes for ``save_pickle()`` and ``load_pickle()`` with mixed devide mode

v1.6.18
~~~~~~~

* Spin-1 operators now available
* New model: spin-1 XYZ model in 1D, i.e, ``get_spin1_xyz_1d()``

v1.6.17
~~~~~~~

* CustomSiteTerm class added.
* The new class allows one to add a n-body term (n is generic) by specifying its coordinates.
* The class is independent from the dimensionality of the problem.

v1.6.16
~~~~~~~

* Fortran logic removed.
* tensor_backend parameter of GreenTeaSimulation is now deprecated.
* disentangler_file, qgreentea_exe and verbosity parameters of GreenTeaSimulation were deprecated and now are removed.
* TensorProductOperator class is removed.

v1.6.15
~~~~~~~

* Added Conjugate gradient descent as optimization method to ``ml_optimize()``.
  To use it, set ``tn_ml_mode = "labellink_conj"`` or ``"linkfree_conj"``.

v1.6.14
~~~~~~~

* Import seeding via tensor backend from master branch and `v1.5.18`_.
* Make ``set_seed`` an abstract method for the base tensor class.

v1.6.13
~~~~~~~

* Added the new observable ``TNObsVarE`` that measures the energy variance of a state
  VarE = <H^2> - <H>^2. Equally, other MPOs can be measured.
* Added functions ``trace()`` and ``mpo_product()`` for ``DenseMPOList`` and ``ITPO``
* Added functions for measuring expectation value directly on the state
* Bugfix in ``DenseMPO._sort_sites_chi_one()`` not setting operator string after sorting.

v1.6.12
~~~~~~~

* Added arbitrary precision sampling for meas_unbiased_probabilites.

v1.6.11
~~~~~~~

* Bugfixes from stable `v1.5.15`_ to `v1.5.17`_.

v1.6.10
~~~~~~~

* Import bugfixes from `v1.5.3`_ and `v1.5.4`_ to `v1.6.10`_.

v1.6.9
~~~~~~

* Restructure tensors a bit (abstract classes)
* No MPI types to be passed to tensors.

v1.6.8
~~~~~~

* Implemented the MPSProjector class, which allows iterative calculation of
  excited states. Set 'num_excited_states' = x in your params dictionary for
  x + 1 iterations (ground state and x excited).
* Added a new MPS method ``sum_approximate``. It takes a list of MPSs and a list of
  amplitudes, and efficiently calculates an optimal MPS representation of their sum.

v1.6.7
~~~~~~

* Added an option to add noise in the ground state search. ``noise`` is a new convergence parameter.
  Can be a number (defaults to zero), or a list, with a value for each sweep.

v1.6.6
~~~~~~

* Import changes from `v1.5.10`_ to `v1.5.12`_.

v1.6.5
~~~~~~

* New eigensolver targeting dense tensors; optimized for reducing kernel calls on GPU.
* Abstract checks for eigensolver
* Abstract solver class unifying dimension of problem, iterations, tolerance etc.

v1.6.4
~~~~~~

* Added tolerance in abstract checks, based on ``dtype_eps``.
* Tolerance coherent across tests.
* Added ``subTest`` context in for loops for abstract tensor checks.

v1.6.3
~~~~~~

* Removed unnecessary warning in custom correlation. The measurement works for terms of 3+ operators.

v1.6.2
~~~~~~

* Deprecation warnings added for machine learning methods.

v1.6.1
~~~~~~

* Import changes from `v1.5.9`_ and one fix of credentials.
* Update developers readme.

v1.6.0
~~~~~~

* New minor version; identical to `v1.5.8`_.

Summary for versions v1.5.x
---------------------------

v1.5.21
~~~~~~~

* Bugfixes for computational device, e.g., MPS initialization and context manager.
* Small changes towards a fix for symmetric tensors.
* ``kron`` functions allowing to install isometry center directly in the new wave function
* Implement ``get_substate`` for TTN (working only for subsystems being
  subtree of the current tree).
* Implement ``flip`` for MPS inverting the order.
* Enabling SVD via eigenvalue as well on CPU; allowing to enforce SVD via
  eigenvalue on unfavorable rectangular matrices (no speedup observed).

v1.5.20
~~~~~~~

* Update in the publication data.

v1.5.19
~~~~~~~~

* Bugfix in ``get_eigenstates()`` for TTO.

v1.5.18
~~~~~~~

* Set seed via tensor backend allowing to also set seeed of backend (for now if
  available).

v1.5.17
~~~~~~~

* Bugfix: enforce normalization of a random TTN due to accumulated floating point
  errors (especially for single precision, normalization was given up to four digits,
  but a second call gets it to around seven digits. Also be aware of accumulating
  errors in single-precision simulations for large bond dimensions).

v1.5.16
~~~~~~~
* Bugfix unittest ``tto.from_lptn``.

v1.5.15
~~~~~~~

* Bugfix checkpoints could not restart when running with GPUs.
* Bugfix convert function not converting all the attributes when doing the conversion.

v1.5.14
~~~~~~~

* Bugfix: correct the expected norm in ``test_set_subtensor_entry`` and check absolute difference.

v1.5.13
~~~~~~~

* Bugfix: enforcing the local_dims to be a python list.
* Replaced ``np.repeat()`` with python lists for local_dims in many places.

v1.5.12
~~~~~~~

* bugfix: changed the method for randomizing the initial state for excited state search.

v1.5.11
~~~~~~~

* Allowing ``meas_unbiased_probability`` and ``probability`` observable to work with different precision.
* Bugfix in probability observable.

v1.5.10
~~~~~~~

* Fixing import checks to be compatible with cluster environments that have cupy but are running without GPU.

v1.5.9
~~~~~~

* Switch to new build server.
* Update references with new zenodo packages.


v1.5.8
~~~~~~

* Prepare public version with ``python3.11``.
* Changes up to 1.5.0 - 1.5.7 can break backwards compatability.
* Bugfix probability measurements with torch (or non-numpy backend).
* Improve unittests MPI and tensors, e.g., protect with timeout.

v1.5.7
~~~~~~

* Fixed a bug in probability observable.
* Imaginary time evolution with real dtype improved and generalized to be compatible with torch tensors.

v1.5.6
~~~~~~

* More general ``MLDataMPO.from_matrix`` and ``_ml_predict_label_link_via_mpo``

v1.5.5
~~~~~~

* Memory-friendly measurement of two-point correlators; user can specify batch
  size in the observable as optional argument (breaks backwards compatibility
  of ``to_itpo`` which is now an iterator).

v1.5.4
~~~~~~

* In ``QuantumGreenTeaSimulation``, the default ``tn_type`` is now 6 (MPS), and the ``tensor_backend`` is 2 (non-symmetric simulation).
* Fixing errors in several unittests.
* Fixing failing documentation autoclasses.
* Fixing probability type in MPS ``apply_projective_operator``.
* Patching ``tensordot`` by automatic (warned) switching to left-tensor device.
* ``meas_local`` now converts numpy/cupy observable operators to backend tensors.

v1.5.3
~~~~~~

* Fixed a bug where the cpu+gpu mode failed for systems with masked tensors (when size is not power of two)
  because tensors were moved incorrectly.
* Added the get_unmasked_positions method for the TTN.

v1.5.2
~~~~~~

* Bugfixes probability observable, especially confusing default values.
* Probability observable with "U" returns count now as well.
* Detect complex numbers with imaginary part equal to zero
  in ``QteaTensors`` multiplication (allowing in-place updates).

v1.5.1
~~~~~~

* Update official version for build server to python3.11 via new dockerfile.
* Introduce unittests for MPI checking tensor's methods; improve MPI tooling.
* Improve abstract checks for tensor classes.

v1.5.0
~~~~~~

* Version bump on minor (no changes).

Summary for versions v1.4.x
---------------------------

v1.4.38
~~~~~~~

* Implemented sorting of the overlaps with native Python functions,
  because pytorch's argsort() does not support lists.
* Bugfix normalization of the projected tensors.

v1.4.37
~~~~~~~

* Bugfix for unnormalized state after space-link expansion and truncation.

v1.4.36
~~~~~~~

* Prepare public version (just version bump and merge conflicts).

v1.4.35
~~~~~~~

* Method ``product_state_from_local_states_2d()`` for the TTO class.

v1.4.34
~~~~~~~

* Mixed device update, new mixed device notation is ``cpu+gpu``.
* GPU switch decorator to allow choosing GPU via index, e.g., ``gpu:1``. As
  mixed device ``cpu+gpu:0`` is allowed.
* Small fixes: small fixes in conversion data types, devices to be consistent.
* Remove in tensor ``get_sqrt_func`` and ``get_argsort_func`` which can be replaced
  with ``get_attr``.

v1.4.33
~~~~~~~

* Fixed a bug where local measurements would not update when loading a pickled state.
  Pickling now removes the cache of local density matrices.

v1.4.32
~~~~~~~

* Reorder some unittest to match submodule structure of qtealeaves.
* Update bibtex collection for Quantum TEA.

v1.4.31
~~~~~~~

* Minor refactor & typo in convergence parameters.

v1.4.30
~~~~~~~

* Introduce new tensor network machine learning modes, e.g., using backpropagation.
* Quantum mutual information and reduced two-site density matrices for TTN.
* Temporary folders for more unittests
* Decall method for unittest class goes into tooling.
* Bugfixes mixed device, reading files, extension attribute of TN.

v1.4.29
~~~~~~~

* New ``oqs_mode=3`` for open system dynamics with density operators (``TTO``)
* New ``AbstractTN`` method ``apply_local_kraus_channel`` and its implementation for the ``TTO`` class
* Observable ``meas_bond_entropy`` now available for the ``TTO`` class
* New method ``get_local_kraus_operators`` in the ``ITPO`` class, which constructs Kraus operators from input (local) Lindblad operators
* New method ``eig``, which return eigenvalues and eigenvectors of a two-leg tensor
* New method ``expm``, which returns the exponential of a tensor
* Generalized method ``diag`` such that it allows to pass a vector

v1.4.28
~~~~~~~

* Bugfix for local measurements for the mixed device (cgpu) mode.
* Bugfixes for ttn_projectors for the mixed device mode.

v1.4.27
~~~~~~~

* Bugfix ``LPTN`` read() method was not reading pickled states
* Bugfix in ``TTO._probabilities`` to make compatible with qredtea backends
* Enabled ``static_method`` in ``TNConvergenceParametersFiniteT`` to be a list of
  different imaginary time evolution methods.

v1.4.26
~~~~~~~

* Update convergence parameters for python, restructure order and docstring.

v1.4.25
~~~~~~~

* Implemented a randomize method for all tensor networks.

v1.4.23
~~~~~~~

* Implemented ``from_x`` feature to construct a desired tn from another tn ansatz.

v1.4.22
~~~~~~~

* Special handling of linter settings removed.

v1.4.21
~~~~~~~
* Bugfix for pytest test discovery

v1.4.20
~~~~~~~

* Fixing TTO initialization argument to interface correctly with matcha.

v1.4.19
~~~~~~~

* License copyright update and year update.

v1.4.18
~~~~~~~

* Bugfix convert cached local density matrices.

v1.4.17
~~~~~~~

* Added ``AbstractTN`` function ``get_substate`` and its implementation for MPS.
* Added ``kron`` as the abstract method of ``_AbstractTN``, implementation was present
for ``MPS`` and ``_AbstractMatrixTN``, now implemented as well for TTN.
* Bugfix MPS random initialization was not imposing dummy link on last site.

v1.4.16
~~~~~~~

* Bugfix generation example tensor with symmetries (added argument to generate
  base tensor class).
* Enforce normalization during measurements; catch missing normalization in
  one imaginary time evolution mode.

v1.4.15
~~~~~~~

* Bugfix for SPO when running with backend different than numpy
* Bugfix OPES, improved error handling for OPES.

v1.4.14
~~~~~~~

* Second round of streams enabling them iTPO loops. Few use-cases with benefit according to benchmark.

v1.4.13
~~~~~~~

* Tensor network machine learning: enable label-link, decomposition-free iso-shift
  only for TN-ML.
* Implement RQ (default is QR with permutation, but tensors can overwrite now
  for performance, scipy's RQ does not seem to work).

v1.4.12
~~~~~~~

* Bugfix for operator sets (Lindblad term)
* Product state from local states allows different local dimension enabling list of vectors.
* Bugfix attribute check in quantum model.

v1.4.11
~~~~~~~

* Added ``get_eigenstates`` method to the ``TTO`` class. It extracts a number of
  selected eigenstates in the TTN format and the respective probabilities
  from a given TTO.

v1.4.10
~~~~~~~

* Autoselection of disentangler positions now only takes positions which lay fully on
  any MPO term of Hamiltonian.
* Bugfix in aTTN checkpoints: the disentanglers were optimized in every sweep even if
  there was checkpoint to be loaded after.

v1.4.9
~~~~~~

* Enable complex time evolution with dt having real and imaginary part.

v1.4.8
~~~~~~

* Fixed a bug that wrote the string and the json version of the
  overlaps between excited states into the same file.
* Overlaps are only written in json format.

1.4.7
~~~~~~

* Implemented an abstract stream method to generalize streams for all backends
  (streams can be enabled for cupy/GPU by the user, but are not enabled by default).

v1.4.6
~~~~~~

* Implemented the TTNProjector class, which allows iterative calculation of
  excited states. Set 'num_excited_states' = x in your params dictionary for
  x + 1 iterations (ground state and x excited).
* Added a new TTN method ``sum_approximate``. It takes a list of TTNs and a list of
  amplitudes, and efficiently calculates an optimal TTN representation of their sum.
* Fixed a bug in the distance2pure measurement. Now supports pickled states, and MPS.

v1.4.5
~~~~~~

* Work on ``from_local_states`` to make it consistent across all ansätze.

v1.4.4
~~~~~~

* Bugfix tensor-backend-related function ``sqrt`` in mps_simulator.py was used on numpy array.

v1.4.3
~~~~~~

* Added a tensor-network based QUBO solver in the new submodule ``qtealeaves.optimization``.
  The solver takes a QUBO problem in a common format and returns the solution via qtealeaves
  tensor network methods. Propagated this new submodule through the infrastructure, including
  unittest and example on a small set of small-size integer random instances.

v1.4.2
~~~~~~

* Fixed convergence issue with arpack: if the conditions are not met with ``arnoldi_min_tolerance``,
  the ``arnoldi_max_tolerance`` is used. If even this tolerance is too big, the optimization of the
  tensor is carried out by qtealeaves solver.
* Added ``MPS.product_state_from_local_states`` as in ``TTN``.

v1.4.1
~~~~~~

* Update tooling to pylint==3.2.4 and black=24.4.2.
* Custom error class ``QTeaError`` and ``QTeaLeavesError`` allowing to tailor
  try-except statements to quantum tea.

v1.4.0
~~~~~~

* Introduces major diff with minimal changes (import paths) to the code logic.
* Version bump minor to 1.4.0 as not compatible with 1.3.x in qmatchatea due to imports.
* Include isort as a git (pre-commit) hook.
* Resolves circular imports in library code by using full import paths.
* Full import paths are now required when importing names with a leading underscore,
  in both library and user code.

Summary for versions v1.3.x
---------------------------

v1.3.17
~~~~~~~

* added the test_check_completeness() to the test_examples.py file, to check that are the examples in the Examples
  folder are properly unittested

v1.3.16
~~~~~~~

* Bugfix ``assert_int_values`` had inplace update (discovered when generating mapping
  for irreps and original Hilbert space, not clear where the inplace update happens).

v1.3.15
~~~~~~~

* renamed the DELayer() methods extend() and append() as they were
  overwriting the pickle() layers and messing up unpickling.
* moved the get_default_datamover() to base_tensor_class
* solved the sum() bugfix appearing when using aTTNs with non-numpy symmetric tensors

v1.3.14
~~~~~~~

* Move observables unittests into qtealeaves as abstract class
* Bugfixes to make all backends pass the observables unittests

v1.3.13
~~~~~~~

* Added singlet fission 1d model as one of the pre-defined default models
* Added singlet fission 1d example

v1.3.12
~~~~~~~

* Bugfix integer padding for product states.
* Added get_default_datamover() method for tensor classes.

v1.3.11
~~~~~~~

* Einsum optimization level as static function
* stack first and last link as abstract method
* Bugfix MPS addition not passing tensor backend

v1.3.10
~~~~~~~

* Bugfix logger not writing the output if simulation was starting from
  checkpoint - this was due to logger setup being outside the checkpoint if-case
  in simulation_setup.py.
* Bugfix simulation not removing old checkpoints, so if simulation had more than one
  checkpoint it would always start from the oldest one, i.e. the one from the lowest
  sweep. Fixed by enforcing the removing.

v1.3.9
~~~~~~

* ML MPS with effective operators and einsum, threading mostly removed, initial guess.
* ML TTO is enabled.
* Tensor class coming with new methods, e.g., ``einsum``
* Small fixes in initialization (TTO, vacuum vs ground keyword).

v1.3.8
~~~~~~

* Examples are now tested;
* Negative probabilities from ``unbiased_probabilities`` set to zero with a warning
  on the precision.

v1.3.7
~~~~~~

* Fixed bug in add_identity method of DenseMPO that made the
  symmetric aTTNs fail.
* Bugfix aTTN: typo integer key, property bond dimension cannot resolve parameterization.
* Bugifx: get site tensor in the MPI-MPS uses mapping now.
* Bugfix for local symmetries / to-dense: new keyword for global sector is "global";
  ``to_dense`` needs to adapt tensor class for tensor backend.

v1.3.6
~~~~~~

* Adapted ordering convention for input disentangler positions to Python-side logic
* Enabled disentangler position autoselection for Python aTTNs, autoselection now
  favours disentanglers that lay on interaction terms
* aTTN can now measure local observables
* Bugfix new LPTN to TTO conversion setup ``tensor_backend`` default argument,
  setting the ``conv_k0`` in ``lptn_to_tto_move_tensors``.

v1.3.5
~~~~~~

* Import bugfixes from ``master`` branch and version `v1.2.30`_

v1.3.4
~~~~~~

* Enable and test finite-T imaginary time evolution for LPTNs
* Change how truncated norm is tracked (all decompositions)
* New conversion for LPTN to TTO combined all in ``from_lptn`` now. Returns
  norm considering losses always, now.
* Enable two-tensor update for imaginary time evolution
* Tensors can be initialized with "1" meaning identity (rank-2 square matrix only).
* Convert ``_AbstractMatrixTN`` with symmetries into matrix (rank-3 tensor)
* Bugfix mismatch links due to invalid fast return in DenseMPO.
* Update how we call measurements due to finite temperature (``run_tn_measurement``
  needs a function to be passed).
* ``iso_center`` is ``None  | int | tuple``; ``list`` no longer accepted due to
  comparisons. Use ``self.iso_center`` or comply to ``None | int | tuple``.

v1.3.3
~~~~~~

* Enabled groundstate search for symmetric MPS
* Enforced the canonization in MPS bond entropy measurement to ensure that the
  singular values are updated
* Merge bugfixes up to `v1.2.19`_ into here

v1.3.2
~~~~~~~

* Implemented aTTNs ground state search.

v1.3.1
~~~~~~~

* Added Raise ValueError when ``from_state_vector()`` has a zero vector

v1.3.0
~~~~~~

* Version bump for new develop.

Summary for versions v1.2.x
---------------------------

v1.2.32
~~~~~~~

* Exception for bug discovered with iTPO and symmetric tensors in ground state search.
  (Ticket is open)

v1.2.31
~~~~~~~

* Bugfix in ``LPTN.write()`` function, disabled overwriting initialized ``iso_center`` in
  case input ``iso_center`` is ``None``.
* Fix sphinx reference to abstract tensor networks.
* Update bibtex.

v1.2.30
~~~~~~~

* Iteration for fixing integration tests in qgreentea.
* Bugfix multiple custom correlation measurements.
* Bugfix ``DenseMPO``: reordering strategy when sorting sites.
* No use of cached singular values for measurements.
* Update in abstract tensors and tensors: ``__matmul__``, ``restrict_irreps``, ``split_link_deg_charge``
* ``TNOperators`` can be used with pickle, which was prevented by default mapping function.
* Wrapper for ``logger.warning`` to avoid repetition of warnings.
* Bugfix truncation LPTN to TTO.

v1.2.29
~~~~~~~

* Provide ``__contains__`` for TNOperators.
* Bugfix parsing SVD control and tuning setting.
* Avoid conversion warning for complex to real singular values.
* Lindblad via quantum trajectories with weak symmetries for TTN
* Bugfix Krylov (non-hermitian) solver
* Small fixes (MPS raising error if not initialized, norm via singular values,
  time-dependent coupling Lindblad)
* New method ``is_identical_irrep``

v1.2.28
~~~~~~~

* Bugfix orthogonalization eigensolver for complex vectors.

v1.2.27
~~~~~~~

* Bugfix time evolution with measurement period.

v1.2.26
~~~~~~~

* Bugfix eigensolver not actually resolving abs with self.abs in `v1.2.25`_
* Bugfix ``None.__ne__`` not available in python3.12

v1.2.25
~~~~~~~

* Bugfix ``abs`` is no attribute for numpy.

v1.2.24
~~~~~~~

* Bugfix in measuring entanglement entropy; taking into account that TTN uppermost
  layer has only one link and enabled measurement with symmetric tensors.

v1.2.23
~~~~~~~

* Integrate commits from master `v1.1.12`_

v1.2.22
~~~~~~~

* ``DenseMPO`` and ``LPTN`` now inherits both from the new ``_AbstractMatrixTN`` class, since they shared multiple routines
* Implemented ``__add__`` method for ``_AbstractMatrixTN`` that enables sum of MPOs;
* Implemented application of one/two/multi sites operators to an ``_AbstractMatrixTN``, which can be applied from the
  top or from the bottom;
* Implemented multiplication between two MPS ``mps_multiply_mps`` (the bond dimension fo the product is the product of the bond dimensions)
* Implemented ``optimize_two_tensors`` in the ``_AbstractTN`` class
* Added ``maxiter`` parameter in the greedy probability measurements for ``MPS`` to avoid an infinite loop
* Fixed bug in SVD arising in *very specific* cases;

v1.2.21
~~~~~~~

* Bugfix einsum (cupy has no out argument), normalization enforced, eigensolver assignment
* Property linear algebra library

v1.2.20
~~~~~~~

* Enabled custom correlation measurements for qtealeaves.
* Bugfix in ``ITPOSites`` function ``add_dense_mpo_list`` for initializing
  the tensor backend based on the first non-empty term instead of just
  the first term.

v1.2.19
~~~~~~~
* Fix calls to ``numpy.product`` with ``numpy.prod`` to prepare for numpy v2.0.0

v1.2.18
~~~~~~~

* Bugfix random SVD (data type, dimensions)
* Potential bugfix in optimize with link expansion on quick return
* Introduce ``concatenate_vectors`` as common interface for all backend libraries.

v1.2.17
~~~~~~~

* Enable coupling of individual terms in SumOfLocal Lindblad.

v1.2.16
~~~~~~~

* Bugfix in initializing the MPS with a general tensor backend instead of only the numpy one.
* Bugfix for initializing TTN and TTO from a product state with general tensor backend.
* Implemented the ``pad`` method using the ``expand_tensor`` method. Padding is only possible at
  the end of the tensor.
* Implemented ``kron`` function for ``AbstractQTeaTensor`` and ``QTeaTensor``.
* Implemented ``ctrl=scalar`` initialization for ``QTeaTensor``, where the tensor is filled with
  that scalar value. This initialization now overlaps with ``ctrl="O"`` and ``ctrl="Z"``.

v1.2.15
~~~~~~~

* Incorporated python's built-in logging functionality, removed internal logging setup code.
* Deprecated ``verbosity`` option in ``QuantumGreenTeaSimulation``.
* Moved simultion-related modules to new namespace ``.simulation`` (helps filtering logs).
* Added example on logging configuration (optional, works out of the box).
* Track and propagate up Krylov convergence during time evolution.
* Improved some log and exception messages, removed print statements.

v1.2.14
~~~~~~~

* Bugfix: attribute ``sum`` is not available for all tensorbackends
  and their singular values, e.g., tensorflow.
* Convert norm-error in eigensolver into warning.

v1.2.13
~~~~~~~

* Broadcasting TTN states via MPI and parallel sampling via MPI.

v1.2.12
~~~~~~~

* Introduced the ``LocalKrausTerm``, which maps a Kraus map to a set of
  Lindblad operators with a first-order approximation.Notice that the
  timestep with which you define your Kraus operator should be comparable
  to the timestep of the simulation. When passing the Kraus operators,
  the first operator should be the closest to the identity.
  The Kraus operator can be numerically unstable when the timestep
  is too small, i.e. when the resulting lindblad have entries >1

v1.2.11
~~~~~~~

* Merge bugfixes in master (`v1.1.11`_) into develop branch.

v1.2.10
~~~~~~~

* Enabled time-evolution (``tevo_mode``=1-4) for TTOs (``tn_type``=8)
* Added ``product_state_from_local_states`` for TTOs
* Added ``ttn_to_tto``, a function that converts a given TTN to a TTO (projector)
* Added ``to_ttn``, a function that converts a given TTO (projector) to a TTN
* Added ``to_statevector`` for TTOs
* Bugfix in ``compute_energy`` and ``leg_towards``, where in both cases the input given to ``move_pos`` (which expects a tuple) could result in errors
* Bugfix in ``ttn_simulator.build_effective_operators``; removed the exception if the iso_center is not the default iso_center. This could result in the termination of the simulation (time-evolution), if only local measurements are performed. Now the iso_center is installed at the default position in this case. The function was further slightly changed such that correlation measurements also work on TTOs.

v1.2.9
~~~~~~

* Bugfixes for statics and mixed device (mostly passing cgpu as actual device).

v1.2.8
~~~~~~

* Enable skipping RG tensors which are tensors without truncation and
  therefore representing only a unitary transformation. Idea from
  renormalization group (RG).

v1.2.7
~~~~~~

* Fix inconsistencies discovered when running qgreentea integration tests
* Fix problems with symmetric links.
* Fix problems with conversion into symmetric tensors for operator sets.
* Fix problem with bond entropy measurement (qgreentea-fortran measures top
  link of TTN and all lowest layers by default).
* Eigensolver cannot rely on ``real`` attribute (for future tensorflow backend).

v1.2.6
~~~~~~~

* add ``SumLindbladTerm`` to enable the term to be a sum of local Lindblad
 operators.
* iTPO logic can also support other non-local Lindblads now.

v1.2.5
~~~~~~

* Allow to overrule bond dimension to reach "good" settings for hardware. Default
  setting does not change behavior in comparison to < v1.2.5.

v1.2.4
~~~~~~
* Bugfix typo in test for convergence parameters at finite temperature.

v1.2.3
~~~~~~

* Enable different Hilbert spaces via operator sets, e.g., a mixture of qubits
  and qudits.

v1.2.2
~~~~~~~

* TTN for systems with a non-power-of-two number of degrees of freedom via trivial legs.

v1.2.1
~~~~~~~

* Require tensor backend for python to be passed from the outside.
* Tensor backend allows injection of properties of the symmetry.
* Changes to abstract tensor in preparation for alternative to numpy/cupy.
* Start using einsum notation for certain contractions, e.g., scale link.
* Version bump minor to v1.2.x anticipating merge of master and increase
  to v1.1.x for master.

Summary for versions v1.1.x
---------------------------

v1.1.12
~~~~~~~

* Fix build of documentation (importlib, path, code-blocks, missing chapters)

v1.1.11
~~~~~~~

* Bugfix checkpoints: optimize did not return state, so loading
  did not have an effect.

v1.1.10
~~~~~~~

* Bugfix energy not json serializable (float32).
* Customizable json encoder via tooling, where common unsupported
  cases can be added.
* Remove print statement.

v1.1.9
~~~~~~

* Bugfix of convergence parameters that could not be parameterized.

v1.1.8
~~~~~~

* Bugfix on the ``ml_get_gradient_tensor`` method. Adding missing multiplication of the gradient by the label.

v1.1.7
~~~~~~

* Bugfix on the ``QteaTensor._eigvl_svd`` method. Now matrices that are smaller than a ``3x3``
  are treated by the dense solver even if ``"X"`` is the chosen method for stability of the
  arpack methods

v1.1.6
~~~~~~

* Bugfix enabling MPS loading pkl files, iso center check with None.
* Bugfix data type ``vector_with_zeros_like``
* Bugfix ``conv_params`` not required for SVD via SVD control.
* Bugfix TTN evolution with chi=1 (throws warning, we can set minimal chi).
* Bugfix TDVP imag time evo with space-link expansion: less aggressive
  expansion strategy to avoid issue with decompositions.
* Avoid warning for inconsistency with two or more quenches (retrieving
  ground state parameters for couplings not present in quench).

v1.1.5
~~~~~~

* Added the missing autodoc statements.


v1.1.4
~~~~~~

* Bugfix for MPS initialization of singular values when starting from the ``|00...0>``
  state;
* Changed ``np.product`` in ``np.prod`` because of numpy deprecations;

v1.1.3
~~~~~~

* Bugfix loading states and for imaginary TDVP missing solver.

v1.1.2
~~~~~~

* Bugfix for combined operators and unittest to check their use in a simulation.

v1.1.1
~~~~~~

* Update master branch to version v1.1.1 which includes the new major version v1.x.x
* Changes contain everything up to version 1.0.20

Summary for versions v1.0.x
---------------------------

v1.0.21
~~~~~~~

* ``ITPO`` and ``SparseMPO`` have now an ``__iter__`` method, that iterates through all the tensors
* ``TensorBackend`` now supports mixed device for simulation, having two additional properties:
  ``self.computational_device`` and ``self.memory_device``. These two devices are the same if we
  select a single device, i.e. ``device in ("cpu", "gpu")``, but differs for mixed devices.
  For example, is ``device="cgpu"``, then ``self.computational_device="gpu"`` and ``self.memory_device="cpu"``.
* Implemented mixed device for simulation. Now it is possible to keep all the tensors but the
  one we are updating on one device (cpu), and the other on the accelerating device (gpu).
  The movement is mostly done on the level of the ``iso_towards()`` method, since in this way
  we are able to overlap computations and communications. The mixed device is tested for MPS
  and TTN. The method that is actually doing the movement is ``move_pos``, which converts
  the tensor and the effective operators insisting on that tensor.
* Implemented correct convergence stats

v1.0.20
~~~~~~~

* Bugfix setting auto-disentangler
* Bugfix nml file for convergence parameters and fortran; skipping python-only
  entries now.
* Bugfix iso-center set as well to (0, 0) for empty TTN.

v1.0.19
~~~~~~~

* Implement checkpoints for statics after each sweep, intrasweep, and for dynamics
  after each time step.
* New restriction on ``delete_existing_folder`` and ``store_checkpoints``; they cannot
  both be ``True`` as checkpoints can never be used with this combination.
* New function for ``QuantumGreenTeaSimulation`` returning status of simulations.
* Generation of hash for simulations leading to the fact that unhashable objects
  have to be excluded.
* Update all examples and make them working with qtealeaves (no code fragments for
  symmetries, fortran code)
* Warning that fortran quenches is not consistent with time-dependent quenches in
  python for two and more quenches.

v1.0.18
~~~~~~~

* Bugfix for ``require_singvals`` still present in ``run_tn_simulation``
* Bugfix in contraction 43 in ``ITPO``
* Bugfix for ``MPS`` random initialization, there was an hardcoded local dimenison 2
* Bugfix for ``QteaTensor.read``, the device was not passed giving rise to an error
* Several bugfixes for machine learning MPS
* Bugfix for multiplication with a ``QteaTensor``: ``__mul__`` was implemented, but not
  ``__rmul__``, and so ``tens*a`` worked, but ``a*tens`` did not. Added ``__rmul__`` in the
  abstract tensor class.
* Added ``__add__`` and ``__iadd__`` methods for ``QteaTensor`` and the abstract class.
  Elementwise addition.

v1.0.17
~~~~~~~

* Introduced the ATTN and DELayer class
* Implemented aTTN correlation measurements
* Initial state in ``continue_file`` can now be passed directly from python instead
  of as a file
* Bugfix in ``TTN.from_state_vector()``
* Allowed to enforce SVD to have singular values on each available link of the
  tensor network
* Implemented applying a two-site gate on a state vector.

v1.0.16
~~~~~~~

* Implemented exact diagonalization with the Krylov solver. This method avoids creating
  the full Hamiltonian matrix.
* Added ``apply_ham_to_state`` method to QuantumModel, which computes H|psi>.
* Changed the default time_evolve_modes for exact diagonalisation:
  10 is with matrix construction, 11 with Krylov. 0 (default) points to 10.

v1.0.15
~~~~~~~

* Added modeling.stringterm1d and tests.modeling.tests_string_term
* Bugfix for tests.modeling.tests_block_term
* Bugfix for modeling.tensorproductoperator
* Same changes as v0.5.13

v1.0.14
~~~~~~~

* Bugfix device ``None``, tensors now enforce device being not ``None`` when creating tensor
  (For converting tensors, it will still be allowed).
* Pass device through in TTN initialization.

v0.1.13
~~~~~~~

* Implement quantum trajectories.

v1.0.12
~~~~~~~

* Moved the public attribute ``QteaTensor.elem`` to the private ``QteaTensor._elem``.
  The attribute can still be accessed with the ``QteaTensor.elem`` property, but
  cannot be set.
* Added warning if you try to initialize a ``QteaTensor.from_elem_array`` using an
  integer array passing ``dtype=None``. The cases where you want to use integer
  arithmetic in TNs are *very rare* (please let me know if you find one).
* Implemented ``apply_mpo`` method for MPS and TTN that let you apply a general MPO
  to the state. It can be used to apply n-qubits gates with n>=2. It takes a ``DenseMPO``
  as input.
* Implemented ``matrix_to_tensorlist`` method for the _abstractTN, to map a generic matrix to an
  MPO form.
* Implemented a ``from_matrix`` method for the ``DenseMPO``
* Fixed bug in ``copy()`` method of ``QTeaTensor`` when using gpu.
* Fixed bug in ``MPS.swap_qubits``.
* Added in the ``DevelopersREADME.md`` how to run only tests affected by your changes
  using pytest (no need of migrating the unittests).
* Moved ``TNObservables.result_buffer`` inside the ``__init__`` method;
* Changed the ``TNObsWeightedSum.from_pauli_string`` into a ``class_method``;
* Fixed bug for ``QteaTensor.read``
* Fixed bug for converting singular values (someone accidentally deleted the fact that
  singvals are reals. This messes up with mpi)

v1.0.11
~~~~~~~

* Fixed the leg order in ``TTO.trunc_probabilities()``

v1.0.10
~~~~~~~

* Add missing methods to abstract tensor class.
* Read method for tensor class (format F90 compatible), requires now tensor backend.
* Modify ``to_dense`` method returning dense tensor without symmetry.
* Bugfix continue file, bugfix theta tensor contraction, bond entropy measure.

v1.0.9
~~~~~~

* Pickle TN states for continue file State2File
* Enable flex-TDVP time evolution for python as in Fortran
* Enable iTPO modes 2 and 4 (updated, compressed and updated)
* Bugfixes (MPS Corr not enable, SPO two-tensor update, Corr
  measurement singular values)
* Separate SPO into two classes for F90 and PY.
* Start testing models.


v1.0.8
~~~~~~

* Implemented single-site link expansion imaginary time evolution.
* Improved docs of ``TTN``;
* Fixed bug for MPI communications due to the wrong type of singular values;
* Fixed bug in the eigenvalue decomposition for SVDs;
* Fixed the ``MPIMPS`` class for MPI simulations in qmatchatea.

v1.0.7
~~~~~~

* Typos in ``TNConvergenceParameters`` docstring.

v1.0.6
~~~~~~

* Bugfix weighted sum measurement via iTPO for MPS and TTN.

v1.0.5
~~~~~~

* Enable log file in python simulator
* Bugfix parameterization (tn type, mpo mode, disentangler, ...)
* Bugfix SPO matrices (building them, trace)
* Bugfix TTN parent tensors
* Add comments convergence parameters for python-only variables.

v1.0.4
~~~~~~

* Implemented single-site imaginary time evolution.
* Implemented eigenvalue decomposition svd (``"E"``), sparse eigenvalue decomposition svd (``"X"``), random svd (``"R"``) for QTeaTensor.
* Operators for ``MPS.meas_tensor_prod`` should now be general rank-4 operators, i.e. general MPO. For the old tensor product
  just use bond dimension 1 MPOs. ``TTN.meas_tensor_prod`` accept rank-4 operators, but only for bond dimension 1.
* Added ``qiskit_convention`` optional argument in ``TNObsProjective, TNObsProbability`` that is used only in python to avoid
  an hardcoded ordering.
* Added a ``to_itpo`` method to ``TNObsCorrelation`` and ``TNObsWeightedSum`` to have a more readable ``run_measurement`` function.
* Implemented ITPO measurement for weighted sum. Works only for two-bodies interactions at the moment.
* Added tests for observables computed in ``run_measurement``

v1.0.3
~~~~~~

* Small changes suggested in v1.0.2 code review.
* Fix qtealeaves solvers, now using ``norm_sqrt`` (equivalent to Fortran code
  where ``norm`` was what ``norm_sqrt`` is now).
* ATTNSimulation to QuantumGreenTeaSimulation (deprecated warning for ATTNSimulation).
* Enable half-precision real (via single in LinAlg), enable switching precisions.
* Time evolution methods tested up to constant local terms (no interaction, no time-dependency).
* Compression for iTPO
* TPO via iTPO, other TPO as ``mpo_mode=21`` still available for debugging.

v1.0.2
~~~~~~~

* Bugfix for the symmetry sector being initialized as maximum bond dimenison instead of 1
* Added stop on python statics based on ``convergence_parameters.abs_deviation`` and ``convergence_parameters.rel_deviation``
* Added possible stop only after ``convergence_parameters.n_points_conv_check`` sweeps
* Added selection of device and data type through the convergence parameters in python
* Added the ``convergence_parameters.ini_bond_dimension`` in python, such that you can initialize a random
  tensor network (either TTN or MPS) at a bond dimension that is smaller than the maximum bond dimension of the simulation

v1.0.1
~~~~~~~

* Implemented Ground state search for the MPS ansatz
* Effective operators are now carried over in the MPS if present
* The MPS is now a backend in the ATTNSimulation for tn_type=6
* The ttn_simulation and ttn_measurement functions have been Removed
* Added a new file emulator/tn_simulation that takes care of a general
  python simulation independently from the TN ansatz
* Added the physical_links method to TTN and MPS for interoperability with
  the TensorProductOperators
* Added new initialization method for MPS. Now it can be initialized as a random
  mps at a given bond dimension
* timestep is now an ``_AbstractTN`` function
* Improved docs
* TTN and MPS unittests now inherits from the AbstractTN unittests
* Fixed the xp checks at any time

v1.0.0
~~~~~~

* Introduce abstract class for tensors.
* python: link expansion, iTPO, SPO, sketch
  single-tensor time evolution

Summary for versions v0.5.x
---------------------------

v0.5.14
~~~~~~~

* Add bibtex files for all articles and theses involving Quantum TEA, its precessors, and
  the flexmps fork of the library.

v0.5.13
~~~~~~~

* Added modeling.stringterm1d and tests.modeling.tests_string_term
* Bugfix for tests.modeling.tests_block_term
* Bugfix for modeling.tensorproductoperator

v0.5.12
~~~~~~~

* Include changes from v0.4.48 to v0.4.54 in develop branch

v0.5.11
~~~~~~~

* Catch the 'file not found' error when trying to read partial results of time evolution.

v0.5.10
~~~~~~~

* Added check which prevents users from accidentally deleting current or parent folder
  when running the simulations.

v0.5.9
~~~~~~

* Added new modeling term BlockTerm2D

v0.5.8
~~~~~~

* Added methods to read from the hdf5 files for the local and correlation observables.
* This enables reading/writing to hdf5 for energy, norm, time and local and correlation observables.
* Bugfix for continue file, now allowing parameterization.

v0.5.7
~~~~~~~

* Added the new observable type TNObsCustom which can measure correlations
  on the customly chosen positions.

v0.5.6
~~~~~~

* Add write method and to_tensor_list_mps for the LPTN emulator.
* Move spinglass operators from Contrib to quantumtealeaves.
* Add example for LPTN via MPS.

v0.5.5
~~~~~~

* Second caching strategy for sampling and TTN.
* Bugfix during estimating size of current cache
* Bugfix writing data type of finite-temperature convergence parameters
  (now considering data type)

v0.5.4
~~~~~~

* Fixed online generation of the documentation by installing the mpmath and joblib libraries
  on the gitlab server

v0.5.3
~~~~~~

* Bugfix for unbiased (OPES) sampling with low precision (numpy). In particular,
  the ``np.isclose`` function was impaired by the relative tolerance, now set to 0.

v0.5.2
~~~~~~

* Implemented measurement of magic for MPS emulator
* The OPES (unbiased) sampling now uses numpy if a low enough precision is asked,
  being numpy much faster than mpmath.
* ``ATTNSimulation`` can now use the python backend for TTN ground state searches
  with single-site update and no symmetry.

v0.5.1
~~~~~~

* Implemented machine learning MPS, computing the gradient
  of the tensors as in this work: https://arxiv.org/pdf/1605.05775.pdf
* The ``MPS.dot`` method can now contract only subsections of the MPS

v0.5.0
~~~~~~

* New develop version

Summary for versions v0.4.x
---------------------------

v0.4.54
~~~~~~~

* requirements as a static list in ``setup.py``.

v0.4.53
~~~~~~~

* Fix requirements in package setup.

v0.4.52
~~~~~~~

* Update descriptions for PyPi package delivery.

v0.4.51
~~~~~~~

* Setup PyPi deployment to testpypi for master branch, i.e., the conan channel ``stable``.

v0.4.50
~~~~~~~

* Update exporting of conan packages
* Small updates docs

v0.4.49
~~~~~~~

* Bugfix for docs not showing

v0.4.48
~~~~~~~

* Update to stable master branch
* Solved bug in ``get_rho_i`` for the ``MPS`` class

v0.4.47
~~~~~~~

* The singular values are updated when the isometry is moved through SVD
* Added plotting option for the TTN for visualizng, for example, the entanglement.

v0.4.46
~~~~~~~

* Implemented data_type as new simulation parameter to pass the options
  for data precision C/D/S/Z.

v0.4.45
~~~~~~~

* Bugfix conversion LPTN to TTO, i.e., number of layers, QR
  on top layer, factor 100.

v0.4.44
~~~~~~~

* Bugfix for occasionally missing left/right operator in 1d system
  with symmetries.
* Bugfixes sampling TTN.
* Add automatic cleaning of TTN cache during sampling.

v0.4.43
~~~~~~~

* Enable parameterization of ``tn_type``, e.g., TTN vs MPS in one simulation.

v0.4.42
~~~~~~~

* Add combined operators.

v0.4.41
~~~~~~~

* Enable sparse MPO for local terms and 1d nearest-neighbor terms.

v0.4.40
~~~~~~~

* Enable caching strategy for sampling from TTN for superiterations
  (in the unbiased sampling).
* Fix unittest with random results testing fortran interface writing
  operators.

v0.4.39
~~~~~~~

* Construction of Hamiltonian as a sparse matrix for ED.
* Exectuable of quantum green tea can be specified.
* Fix some additional linter checks raised by difference in function call.
* Fix unittest with mpi4py present, but not running with MPI.

v0.4.38
~~~~~~~

* Add mpi send/recv tensor function in ``_AbstractTN``
* Add support for MPI simulations with the MPS backend with the MPIMPS simulator

v0.4.37
~~~~~~~

* Added masks in the ``PlaquetteTerm2D``.
* Moved ``PlaquetteTerm`` to ``qtealeaves.modeling`` and renamed to ``PlaquetteTerm2D``.


v0.4.36
~~~~~~~

* Negativity of TTO density matrix can now be computed via the eigenvalues
  of partially transposed density matrix.
* Upgraded the error message in aTTN disentangler position check.

v0.4.35
~~~~~~~

* Add support for data parallel MPI simulations in quantum green tea.
* Parse CPU time from log file if available.

v0.4.34
~~~~~~~

* Bugfix for the padding introduced in 0.4.33. It is now possible to pass a ``None``
  value without an error.

v0.4.33
~~~~~~~
* The TTN function for generating product TTN state from local states can now
  pad the TTN tensors with zeros.

v0.4.32
~~~~~~~
* Added the option for automatic disentangler position selection
  for aTTN simulations.

v0.4.31
~~~~~~~
* Enabled setting the initial state with ``continue_file`` for
  exact diagonalization methods.

v0.4.30
~~~~~~~
* Enabled cupy for TTO/TTNs: now you can run them on GPU.
* Enable singular values cut track in TTNs.
* Added ``trnc_tracking_mode`` in ``TNConvergenceParameters`` for handling the
  ttn cut singvals in python
* renamed ``to_tensorlist`` to ``to_mps_tensorlist`` since it was misleading,
  you could not call ``TTN.from_tensorlist(ttn.to_tensorlist())`` to obtain
  the same TTN. Now the function ``TTN().to_tensorlist()`` returns the input
  of ``from_tensorlist()``
* bugfix in ``TTN().apply_two_sites_operator()``
* Removed automatic swap in ``MPS().apply_two_sites_operator()``

v0.4.29
~~~~~~~
* Added check for disentangler position which prevents the fortran error
  when working with Plaquette terms.

v0.4.28
~~~~~~~
* Removed print statements from Hilbert curvature unittest.

v0.4.27
~~~~~~~
* Automatic generation of simulation for quantum trajectories.
* Add subfolders for input and output of quantum trajectories run.
* Add quantum trajectory_id and seed.
* Read and average observables for quantum trajectories.

v0.4.26
~~~~~~~

* Provide 3d quantum Ising model as one of the default models
* Extend HilbertCurve with function to backmap observables.
* Allow passing new variables now available in the input reader.

v0.4.25
~~~~~~~

* Modified leg order for the TTO, now it follows leg order of TTN
* TTO now inherits from TTN, so all the functions are freely available
* TTN is more flexible now, does not always have two tensors on top
* Added ``get_rho_i`` method to MPS
* Moved ``meas_local`` to the ``_AbstractTN``

v0.4.24
~~~~~~~

* Implemented shifting of a selected link through the TTN.
* Implemented applying the 2-site operators to TTN.
* Implemented swapping of two sites in TTN.
* Added the possibility to truncate the singular values
  throughout the isometry shifting procedure.

v0.4.23
~~~~~~~

* Improve description bond entropy to distinguish between MPS and TTN implementation.

v0.4.22
~~~~~~~

* Implemented measurement of local operators for TTNs
* Implemented measurement of tensor product operators for TTNs
* Implemented measurement of weighted sum operators for TTNs
* Implemented measurement of bond entropy for TTNs
* Added ``singvals`` attribute to ``TTNLayer`` to keep track of the singular
  values on each link of the TTN
* Modified the ouput of ``meas_entanglement`` in the mps simulator such that
  it is the same of the ttn emulator, i.e. a dict where the key is the bipartition
  and the value is the Von Neumann entanglement.
* Added checks for observables in ``_AbstractTN``
* Added automatic removal of singvals in ``qr_towards_top`` method of ``TTNLayer``
* Added optional removal of singvals in ``iso_towards``
* Implemented possible ``None`` values in the singvals also for the MPS

v0.4.21
~~~~~~~

* Fixed broken 3D masked terms.

v0.4.20
~~~~~~~

* Added new checks for the choice of disentangler positions.

v0.4.19
~~~~~~~

* Added missing documentation to lptn_to_tto_iso function in TTO simulator.

v0.4.18
~~~~~~~

* Implemented unbiased sampling at arbitrary precision through the mpmath library.

v0.4.17
~~~~~~~

* Allow to set seed from the python side, e.g., for quantum trajectories.

v0.4.16
~~~~~~~
* Documented TTN time evolution workflow in ``ATTNSimulation.run`` function.

v0.4.15
~~~~~~~
* Fixed typo in README file.

v0.4.14
~~~~~~~

* Implemented constructing a separable state TTN given the local
  states of each of the sites for 1d and 2d grid. The 2d case is
  handled by mapping the particle positions from 2d to 1d.

v0.4.13
~~~~~~~

* Added new class of operators: effective operators
* Added rules to update the effective operators along a TNN when the isometry is
  moved.
* Added local optimization of tensor in the TTN
* Added neighbors, sites, op_neighbors attributes to TTNLayer mimicking fortran
* Ground state searches are now possible for hamiltonians that are tensor product
  operators
* The TTN class is going towards supporting a general TTN, not only a binary one,
  even though at the moment the only topology still supported is the binary
* The TTN is now not initialized empty but with a random isometry

v0.4.12
~~~~~~~

* Added the missing import of ``timecorrelator`` observable to the
  corresponding __init__.py file.

v0.4.11
~~~~~~~

* Fixed bug in the ``from_pauli`` method of WeightedSumOperators.

v0.4.10
~~~~~~~

* Added a new method for the expansion of the bond dimension of a link through
  a QR decomposition following https://arxiv.org/pdf/2212.09782.pdf in the
  ``AbstractTN`` class.
* Moved the truncation of the singular values in its own method instead of being
  inside the ``tSVD`` function
* Added new possible truncation scheme using the norm truncated in the singular values
* Added new parameters to control the singular values cut in ``TNConvergenceParameters``
* Modified the diagonal matrix multiplication with broadcast in ``tSVD``

v0.4.9
~~~~~~

* Bugfix in computing the isometrization path in TTN simulator

v0.4.8
~~~~~~

* Update reading and writing of TTN for updated TTN attributes
  on the fortran side, e.g., ``op_neighbors``.

v0.4.7
~~~~~~

* Bugfix shifting isometry center in TTN emulator.
* Convert isometry center from F90 file to python indices

v0.4.6
~~~~~~

* Allow trivial mapping for 1d case and zigzag.

v0.4.5
~~~~~~

* Generate symmetric operators for fortran which can be contracted
  over the columns. Backwards compatibility broken for python-fortran
  interface.
* Bugfix writing symmetric tensors of a zero-matrix. Add unit test
  for spin 1/2 operators and bosonic operators.

v0.4.4
~~~~~~

* Start mirroring stable, i.e., master to public repository.
* Change link to documentation.

v0.4.3
~~~~~~

* Documentation for new ``State2File`` measurement option saving TN
  without symmetries
* Remove superfluous print

v0.4.2
~~~~~~

* Breaks backwards compatibility
* Remove input version v1 and v2
* Remove other deprecated input, e.g., ``bc`` for boundary condition
  which is now ``has_obc``.
* Remove integration test out of this repository.

v0.4.1
~~~~~~

* Introduces major diff without changing code logic
* Include pre-commit in requirements.
* Include black as a git (pre-commit) hook.

v0.4.0
~~~~~~

* Breaks backwards compatibility
* Rename package in qtealeaves.
* We suggest import qtealeaves as ``import qtealeaves as qtl``

Summary for versions v0.3.x
---------------------------

v0.3.39
~~~~~~~

* Allow custom maps derived from Hilbert curvature.

v0.3.38
~~~~~~~

* Replace Hilbert curve encoded only for selected cubes by
  function generating Hilbert curve on the fly.

v0.3.37
~~~~~~~

* Bugfix when building Hamiltonian (operators defined
  as functions where not correctly resolved).


v0.3.36
~~~~~~~

* Bugfix writing observables from ED simulations, which
  requires setting boolean for what observables are
  measured.
* Bugfix in vector of system sizes.

v0.3.35
~~~~~~~

* Fixed the bug for importing models and operators.

v0.3.34
~~~~~~~

* Bugfix for linear combinations of MPSs states. Before, the shape of the tensor
  used was always the same. Now, it uses left and right tensor correctly.

v0.3.33
~~~~~~~

* A finite temperature density matrix can now be computed for a given model.

v0.3.32
~~~~~~~

* Fixed bugs in TTO simulator.
* Added isometrized LPTN to TTO conversion.
* Added aditional SVD in LPTN to TTO conversion function.
* Implemented norm tracking and added the option for
  changing K_0 in LPTN to TTO conversion.
* Added function for truncating the TTO probabilities to
  TTO simulator.

v0.3.31
~~~~~~~

* Implement periodic boundary conditions for plaquette term classes,
  methods "get_interactions". Added keywork argument 'has_obc' to init method

v0.3.30
~~~~~~~

* Fixed resolution of system sizes in qed_models.
  PlaquetteTerm methods are made compatible with
  system sizes specified as per v0.3.28.

v0.3.29
~~~~~~~

* Introduce new measurement of time correlator to the
  initial state at t=0. The correlator is measured
  between two operators A and B as ``<A(t=0) B(t)>``.
* Introduce new measurement of four-body correlator
  of the type ``<O_1 O_2 O_3 O_4>``.
* The implementation of new observables depends on
  the backend; an availability on the python frontend
  does not indicate that they will be measured on
  the backend.

v0.3.28
~~~~~~~

* Bugfix for rectangular or cubed systems in the modeling of
  Hamiltonians. The assumption of equal dimensions was removed.
  System sizes can be passed as parameter and are resolved
  correctly.

v0.3.27
~~~~~~~

* Fixed bug for reset operation in MPSs
* Added scipy SVD when numpy fails
* Added possibility of performing the canonization through SVDs
  to reduce the bond dimension

v0.3.26
~~~~~~~

* Migrate CI/CD to docker; update linter version.

v0.3.25
~~~~~~~

* Enable projective measurements and unbiased projective
  measurements to the TTN

v0.3.24
~~~~~~~

* Now user can install and shift the gauge center of the
  LPTN.
* Added function for computing the reduced density matrix
  from the LPTN for single or neighbour sites.
* TTO functions for installing and shifting the gauge
  center are no longer staticmethods, but methods.
* Added the gauge center attribute to TTO.

v0.3.23
~~~~~~~

* Implemented functions for computing the
  entanglement monotones of a TTO density
  matrix.
* Replaced QR decomposition with SVD in
  conversion from LPTN to TTO.
* Fixed bug of indentation error in read_tensor()
  function in fortran_interfaces.py.

v0.3.22
~~~~~~~

* Update reading results with version number of results.
* Bugfix writing real parameters, which is required for
  gfortran compiler.
* Bugfix missing write of version number when writing
  observables from python.
* Remove integration tests from this repository.

v0.3.21
~~~~~~~
* Solved error in plaquette coordinates, methods "get_interactions"
  in file "qed_models.py"

v0.3.20
~~~~~~~

* Now qtealeaves can read the latest version of ``tn_api_input_reader``,
  that also shows the version of the input reader.

v0.3.20
~~~~~~~

* Implemented function for reading LPTN from fortran output file.


v0.3.19
~~~~~~~

* Move convergence parameters into an extra folder; old simulation
  require to modify the import statements.
* Provide convergence parameters for finite-temperature
  simulations.


v0.3.18
~~~~~~~

* Update links in readme and docs to baltig.


v0.3.17
~~~~~~~

* Solved bug for reading TNObsBondEntropy from fortran


v0.3.16
~~~~~~~
* Implemented tSVD on GPU using cupy library on the AbstractTN class
* Implemented fully working MPS simulator on GPU using cupy

v0.3.15
~~~~~~~

* Change conan user for deployment.

v0.3.14
~~~~~~~

* Remove fortran dependencies; move integration tests to different folder.
  (to be removed later from this repository.)


v0.3.13
~~~~~~~

* Added function for Kronecker product of two LPTNs.


v0.3.12
~~~~~~~

* Solved bug on time_offset for saving time-dependent parameters into a dict.


v0.3.11
~~~~~~~

* Solved bug on 4 Levels qudit operators.

v0.3.10
~~~~~~~

* Fixed bug: before when adding sites to the MPS the gauge center was always
  always moved one step to the right, even if the site was added after the
  gauge center. Now it is moved only when the site is added to the left of
  the gauge center, as expected.

v0.3.9
~~~~~~

* Update fortran dependency: changes in cmake structure and module names.
* Export license files into conan package.


v0.3.8
~~~~~~

* added class for LPTN, class for TTO and function for converting LPTN to TTO

v0.3.7
~~~~~~

* Solved bug on add/remove site on mps simulator.
  The methods previously were not modifying the lists
  handling the singular values.

v0.3.6
~~~~~~

* Solved circular input problems

v0.3.5
~~~~~~

* Enable LPTN as backend for TN simulations. Restrictions
  are still in place, i.e., no symmetries, only
  nearest-neighbor interactions in 1d, no dynamics
  (new git submodule/module in dependency).
* Bugfix vector of convergence parameters

v0.3.4
~~~~~~
* Improved documentation for observables.
* Added support for sphinx-gallery and examples are now in
  the docs.

v0.3.3
~~~~~~

* Import of operators has to be fixed to use old scripts.

v0.3.2
~~~~~~

* Introduce function to ``QuantumModel`` to extract time-dependent
  pulses.

v0.3.1
~~~~~~

* Import of the ``QuantumModel`` and model terms has to be fixed
  to use old scripts.
* The ``RydbergModel`` has been removed.
* The deprecated variable specifying the boundary conditions
  of the ``QuantumModel`` has been converted to an optional
  argument.
* Short-cuts to common models have been introduced, e.g.,
  the quantum Ising model.

v0.3.0
~~~~~~

* Import of observables has to be fixed to use old scripts.
* New observables are available, mainly implemented for
  quantum circuit MPS.
