Changelog

Release notes for quimb.

v1.3.0 (18th Feb 2020)

Enhancements

  • Added time dependent evolutions to Evolution when integrating a pure state - see Time-Dependent Evolutions - as well as supporting LinearOperator defined hamiltonians (PR40).

  • Allow the Evolution callback compute= to optionally access the Hamiltonian (PR49).

  • Added quimb.tensor.tensor_core.Tensor.randomize() and quimb.tensor.tensor_core.TensorNetwork.randomize() to randomize tensor and tensor network entries.

  • Automatically squeeze tensor networks when rank-simplifying.

  • Add compress_site() for compressing around single sites of MPS etc.

  • Add MPS_ghz_state() and MPS_w_state() for building bond dimension 2 open boundary MPS reprentations of those states.

  • Various changes in conjunction with autoray to improve the agnostic-ness of tensor network operations with respect to the backend array type.

  • Add new_bond() on top of quimb.tensor.tensor_core.Tensor.new_ind() and quimb.tensor.tensor_core.Tensor.expand_ind() for more graph orientated construction of tensor networks, see Graph Orientated Tensor Network Creation.

  • Add the fsim() gate.

  • Make the parallel number generation functions use new numpy 1.17+ functionality rather than randomgen (which can still be used as the underlying bit generator) (PR50)

  • TN: rename contraction_complexity to contraction_width().

  • TN: update quimb.tensor.tensor_core.TensorNetwork.rank_simplify(), to handle hyper-edges.

  • TN: add quimb.tensor.tensor_core.TensorNetwork.diagonal_reduce(), to automatically collapse all diagonal tensor axes in a tensor network, introducing hyper edges.

  • TN: add quimb.tensor.tensor_core.TensorNetwork.antidiag_gauge(), to automatically flip all anti-diagonal tensor axes in a tensor network allowing subsequent diagonal reduction.

  • TN: add quimb.tensor.tensor_core.TensorNetwork.column_reduce(), to automatically identify tensor axes with a single non-zero column, allowing the corresponding index to be cut.

  • TN: add quimb.tensor.tensor_core.TensorNetwork.full_simplify(), to iteratively perform all the above simplifications in a specfied order until nothing is left to be done.

  • TN: add num_tensors and num_indices attributes, show num_indices in __repr__.

  • TN: various improvements to the pytorch optimizer (PR34)

  • TN: add some built-in 1D quantum circuit ansatzes: circ_ansatz_1D_zigzag(), circ_ansatz_1D_brickwork(), and circ_ansatz_1D_rand().

  • TN: add parametrized tensors PTensor and so trainable, TN based quantum circuits – see Tensor Network Training of Quantum Circuits.

Bug fixes:

  • Fix consistency of fidelity() by making the unsquared version the default for the case when either state is pure, and always return a real number.

  • Fix a bug in the 2D system example for when j != 1.0

  • Add environment variable QUIMB_NUMBA_PAR to set whether numba should use automatic parallelization - mainly to fix travis segfaults.

  • Make cache import and initilization of petsc4py and slepc4py more robust.

v1.2.0 (6th June 2019)

Enhancements

  • Added kraus_op() for general, noisy quantum operations

  • Added projector() for constructing projectors from observables

  • Added measure() for measuring and collapsing quantum states

  • Added cprint() pretty printing states in computational basis

  • Added simulate_counts() for simulating computational basis counts

  • TN: Add quimb.tensor.tensor_core.TensorNetwork.rank_simplify()

  • TN: Add quimb.tensor.tensor_core.TensorNetwork.isel()

  • TN: Add quimb.tensor.tensor_core.TensorNetwork.cut_iter()

  • TN: Add 'split-gate' gate mode

  • TN: Add TNOptimizer for tensorflow based optimization of arbitrary, contstrained tensor networks.

  • TN: Add quimb.tensor.tensor_1d.Dense1D.rand()

  • TN: Add connect() to conveniently set a shared index for tensors

  • TN: make many more tensor operations agnostic of the array backend (e.g. numpy, cupy, tensorflow, …)

  • TN: allow align_TN_1D() to take an MPO as the first argument

  • TN: add build_sparse()

  • TN: add quimb.tensor.tensor_core.Tensor.unitize() and quimb.tensor.tensor_core.TensorNetwork.unitize() to impose unitary/isometric constraints on tensors specfied using the left_inds kwarg

  • Many updates to tensor network quantum circuit (quimb.tensor.circuit.Circuit) simulation including:

  • Add from quimb.gates import * as shortcut to import X, Z, CNOT, ....

  • Add U_gate() for parametrized arbitrary single qubit unitary

Bug fixes:

  • Fix pkron for case len(dims) == len(inds) (GH17, PR18).

  • Fix qarray printing for older numpy versions

  • Fix TN quantum circuit bug where Z and X rotations were swapped

  • Fix variable bond MPO building (GH22) and L=2 DMRG

  • Fix norm(X, 'trace') for non-hermitian matrices

  • Add autoray as dependency (GH21)