# 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 operationsAdded

`projector()`

for constructing projectors from observablesAdded

`measure()`

for measuring and collapsing quantum statesAdded

`cprint()`

pretty printing states in computational basisAdded

`simulate_counts()`

for simulating computational basis countsTN: 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 modeTN: 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 tensorsTN: 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 argumentTN: 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`

kwargMany updates to tensor network quantum circuit (

`quimb.tensor.circuit.Circuit`

) simulation including:`quimb.tensor.circuit.CircuitMPS`

`quimb.tensor.circuit.CircuitDense`

49-qubit depth 30 circuit simulation example TN Quantum-Circuit Simulation

Add

`from quimb.gates import *`

as shortcut to import`X, Z, CNOT, ...`

.Add

`U_gate()`

for parametrized arbitrary single qubit unitary

**Bug fixes:**