A python library for quantum information and many-body calculations including tensor networks.
CircuitMPS
now supports multi qubit gates, including arbitrary multi-controls (which are treated in a low-rank manner), and faster simulation via better orthogonality center tracking.CircuitPermMPS
, more docs here: https://quimb.readthedocs.io/en/latest/tensor-circuit-mps.html
MatrixProductState.gate_nonlocal
for applying a gate, supplied as a raw matrix, to a non-local and arbitrary number of sites. The kwarg contract="nonlocal"
can be used to force this method, or the new option "auto-mps"
will select this method if the gate is non-local (https://github.com/jcmgray/quimb/issues/230)MatrixProductState.gate_with_mpo
for applying an MPO to an MPS, and immediately compressing back to MPS form using tensor_network_1d_compress
MatrixProductState.gate_with_submpo
for applying an MPO acting only of a subset of sites to an MPSMatrixProductOperator.from_dense
for constructing MPOs from dense matrices, including an only subset of sitesMatrixProductOperator.fill_empty_sites
for 'completing' an MPO which only has tensors on a subset of sites with (by default) identitiesMatrixProductState
and MatrixProductOperator
, now support the sites
kwarg in common constructors, enabling the TN to act on a subset of the full L
sites.TensorNetwork.drape_bond_between
for 'draping' an existing bond between two tensors through a thirdTensor.new_ind_pair_with_identity
TN_classical_partition_function_from_edges
) now all support outputs=
kwarg specifying non-marginalized variablesD1BP
qtn.enforce_1d_like
for checking whether a tensor network is 1D-like, including automatically adding strings of identities between non-local bonds, expanding applicability of tensor_network_1d_compress
MatrixProductState.canonicalize
as (by default non-inplace) version of canonize
, to follow the pattern of other tensor network methods. canonize
is now an alias for canonicalize_
[note trailing underscore].MatrixProductState.left_canonicalize
as (by default non-inplace) version of left_canonize
, to follow the pattern of other tensor network methods. left_canonize
is now an alias for left_canonicalize_
[note trailing underscore].MatrixProductState.right_canonicalize
as (by default non-inplace) version of right_canonize
, to follow the pattern of other tensor network methods. right_canonize
is now an alias for right_canonicalize_
[note trailing underscore].Circuit.apply_gate_raw
: fix kwarg bug (https://github.com/jcmgray/quimb/pull/226) by @juliendrapeauopt_einsum.PathInfo
for single scalar contraction (https://github.com/jcmgray/quimb/issues/231).Full Changelog: https://github.com/jcmgray/quimb/compare/v1.8.0...v1.8.1
Breaking Changes
TensorNetwork.compress_all
now defaults to using some local gaugingEnhancements:
add quimb.tensor.tensor_1d_compress.py
with functions for compressing generic 1D tensor networks (with arbitrary local structure) using various methods. The methods are:
tensor_network_1d_compress_direct
tensor_network_1d_compress_dm
tensor_network_1d_compress_zipup
tensor_network_1d_compress_zipup_first
tensor_network_1d_compress_fit
And can be accessed via the unified function tensor_network_1d_compress
. Boundary contraction in 2D can now utilize any of these methods.
add quimb.tensor.tensor_arbgeom_compress.py
with functions for compressing arbitrary geometry tensor networks using various methods. The methods are:
tensor_network_ag_compress_local_early
tensor_network_ag_compress_local_late
tensor_network_ag_compress_projector
tensor_network_ag_compress_superorthogonal
tensor_network_ag_compress_l2bp
And can be accessed via the unified function tensor_network_ag_compress
. 1D compression can also fall back to these methods.
support PBC in tn2d.contract_hotrg
, tn2d.contract_ctmrg
, tn3d.contract_hotrg
and the new function tn3d.contract_ctmrg
.
support PBC in gen_2d_bonds
and gen_3d_bonds
, with cyclic
kwarg.
support PBC in TN2D_rand_hidden_loop
and TN3D_rand_hidden_loop
, with cyclic
kwarg.
support PBC in the various base PEPS and PEPO construction methods.
add tensor_network_apply_op_op
for applying 'operator' TNs to 'operator' TNs.
tweak tensor_network_apply_op_vec
for applying 'operator' TNs to 'vector' or 'state' TNs.
add tnvec.gate_with_op_lazy
method for applying 'operator' TNs to 'vector' or 'state' TNs like $x \rightarrow A x$.
add tnop.gate_upper_with_op_lazy
method for applying 'operator' TNs to the upper indices of 'operator' TNs like $B \rightarrow A B$.
add tnop.gate_lower_with_op_lazy
method for applying 'operator' TNs to the lower indices of 'operator' TNs like $B \rightarrow B A$.
add tnop.gate_sandwich_with_op_lazy
method for applying 'operator' TNs to the upper and lower indices of 'operator' TNs like $B \rightarrow A B A^\dagger$.
unify all TN summing routines into tensor_network_ag_sum
, which allows summing any two tensor networks with matching site tags and outer indices, replacing specific MPS, MPO, PEPS, PEPO, etc. summing routines.
add rand_symmetric_array
, rand_tensor_symmetric
TN2D_rand_symmetric
for generating random symmetric arrays, tensors and 2D tensor networks.
Bug fixes:
Full Changelog: https://github.com/jcmgray/quimb/compare/v1.7.3...v1.8.0
Enhancements:
dist="rademacher"
.dist
and other randn
options in various TN builders.Bug fixes:
scipy.linalg.svd
with driver='gesvd') behavior for truncated SVD with numpy backend.Full Changelog: https://github.com/jcmgray/quimb/compare/v1.7.2...v1.7.3
Bug fixes:
numba.generated_jit
decorator.Enhancements:
normalized=True
option to tensor_network_distance
for computing the normalized distance between tensor networks: $2 |A - B| / (|A| + |B|)$, which is useful for convergence checks. Tensor.distance_normalized
and TensorNetwork.distance_normalized
added as aliases.TensorNetwork.cut_bond
for cutting a bond indexFull Changelog: https://github.com/jcmgray/quimb/compare/v1.7.1...v1.7.2
Enhancements:
add TensorNetwork.visualize_tensors
for visualizing the actual data entries of an entire tensor network.
add ham.build_mpo_propagator_trotterized
for building a trotterized propagator from a local 1D hamiltonian. This also includes updates for creating 'empty' tensor networks using TensorNetwork.new
, and building up gates from empty tensor networks using TensorNetwork.gate_inds_with_tn
.
add more options to Tensor.expand_ind
and Tensor.new_ind
: repeat tiling mode and random padding mode.
tensor decomposition: make eigh_truncated
backend agnostic.
tensor_compress_bond
: add reduced="left"
and reduced="right"
modes for when the pair of tensors is already in a canonical form.
add qtn.TN2D_embedded_classical_ising_partition_function
for constructing 2D (triangular) tensor networks representing all-to-all classical ising partition functions.
Bug fixes:
kruas_op
when operator spanned multiple subsystems (#214)qr_stabilized
when the diagonal of R
has significant imaginary parts.Full Changelog: https://github.com/jcmgray/quimb/compare/v1.7.0...v1.7.1
Breaking Changes
Circuit
: remove target_size
in preparation for all contraction specifications to be encapsulated at the contract level (e.g. with cotengra
)Enhancements:
Multi tag drawing support:
quimb.schematic
for main backend="matplotlib"
drawing. Enabling:
schematic
. Add methods text_between
, wedge
, line_offset
and other tweaks for future use by main TN drawing.cotengra
as the backendCircuit
: allow any gate to be controlled by any number of qubits.Circuit
: support for parsing openqasm2
specifications now with custom and nested gate definitions etc.is_cyclic_x
, is_cyclic_y
) and is_cyclic_z
to TensorNetwork2D and TensorNetwork3D.quimb.experimental.belief_propagation
: add various 1-norm/2-norm dense/lazy BP algorithms.Bug fixes:
Full Changelog: https://github.com/jcmgray/quimb/compare/v1.6.0...v1.7.0
Breaking Changes
Enhancements:
Circuit.from_openqasm2_file
Circuit
: add RXX, RYY, CRX, CRY, CRZ, toffoli, fredkin, givens gatesTensor.sum_reduce
and :meth:Tensor.vector_reduce
contract_compressed
, default to 'virtual-tree' gaugeTN_rand_tree
experimental.operatorbuilder
: fix parallel and heisenberg builderBug fixes:
Full Changelog: https://github.com/jcmgray/quimb/compare/v1.5.1...v1.6.0
Tensor.check()
and TensorNetwork.check()
for diagnosticsTensorNetwork.isconnected()
, TensorNetwork.istree()
Full Changelog: https://github.com/jcmgray/quimb/compare/v1.5.0...v1.5.1
Enhancements
quimb.tensor.decomp.isometrize
.~quimb.tensor.tensor_core.TensorNetwork.compute_reduced_factor
and :meth:~quimb.tensor.tensor_core.TensorNetwork.insert_compressor_between_regions
methos, for some RG style algorithms.mode="projector"
option for 2D tensor network contractions~quimb.tensor.tensor_2d.TensorNetwork2D.coarse_grain_hotrg
,
:meth:~quimb.tensor.tensor_2d.TensorNetwork2D.contract_hotrg
,
:meth:~quimb.tensor.tensor_3d.TensorNetwork3D.coarse_grain_hotrg
, and
:meth:~quimb.tensor.tensor_3d.TensorNetwork3D.contract_hotrg
,~quimb.tensor.tensor_2d.TensorNetwork2D.contract_ctmrg
~quimb.tensor.tensor_builder.TN2D_corner_double_line
furo <https://pradyunsg.me/furo/>
_ theme,
myst_nb <https://myst-nb.readthedocs.io/en/latest/>
_ for notebooks, and
several other sphinx
extensions.'adabelief'
optimizer to
:class:~quimb.tensor.optimize.TNOptimizer
as well as a quick plotter:
:meth:~quimb.tensor.optimize.TNOptimizer.plot
TensorNetwork.draw(dim=3, backend='matplotlib3d')
or
TensorNetwork.draw(dim=3, backend='plotly')
). The new backend='plotly'
can also be used for 2D interactive plots.~quimb.tensor.tensor_builder.HTN_from_cnf
to handle more
weighted model counting formats.~quimb.tensor.tensor_builder.cnf_file_parse
~quimb.tensor.tensor_builder.random_ksat_instance
~quimb.tensor.tensor_builder.TN_from_strings
~quimb.tensor.tensor_builder.convert_to_2d
~quimb.tensor.tensor_builder.TN2D_rand_hidden_loop
~quimb.tensor.tensor_builder.convert_to_3d
~quimb.tensor.tensor_builder.TN3D_corner_double_line
~quimb.tensor.tensor_builder.TN3D_rand_hidden_loop
'lu'
, 'polar_left'
and 'polar_right'
methods to
:func:~quimb.tensor.tensor_core.tensor_split
.~quimb.tensor.tensor_core.TensorNetwork
: allow empty constructor
(i.e. no tensors representing simply the scalar 1)~quimb.tensor.tensor_core.TensorNetwork.drop_tags
: allow all tags to
be dropped~quimb.tensor.tensor_core.TensorNetwork.combine
for unified
handling of combining
tensor networks potentially with structurequimb.experimental.cluster_update.py
Bug fixes:
~quimb.tensor.decomp.qr_stabilized
bug for strictly upper
triangular R factors.Full Changelog: https://github.com/jcmgray/quimb/compare/1.4.2...v1.5.0
Add automatic building and publishing of quimb
to pypi
.