Skip to content

build(deps): bump quimb from 1.14.0 to 1.15.0 - #4

Merged
Panadestein merged 2 commits into
mainfrom
dependabot/uv/quimb-1.15.0
Sep 1, 2026
Merged

Panadestein merged 2 commits into
mainfrom
dependabot/uv/quimb-1.15.0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Aug 31, 2026

Copy link
Copy Markdown
Contributor

Bumps quimb from 1.14.0 to 1.15.0.

Release notes

Sourced from quimb's releases.

v1.15.0

Breaking Changes:

  • Circuit.uni: now returns the non-transposed unitary tensor network, so that circ.uni.to_dense() gives U acting on a state like U @ psi. This was previously transposed and emitting a FutureWarning announcing the change; the warning is now removed. Use circ.get_uni(transposed=True) to recover the old transposed convention.
  • TensorNetwork.gauge_all_simple: all arguments after max_iterations and tol (smudge, power, damping, ...) are now keyword-only.
  • automatic generalized loop size, i.e. max_size=None in tn.gen_gloops and equivalently gloops=None in the loop expansions: the loops now grow until every target tid or site is covered, rather than stopping at the first, smallest, loop found, which on non-uniform geometries left some sites in no loop at all. Targets outside the 2-core can never appear in a loop, and are ignored, with a UserWarning if they were named explicitly, or if the network is tree like and so has no loops at all. Loops larger than the resolved size are also no longer emitted. Pass max_size='min' (or gloops='min') for the old behavior.
  • simple update style gauging: smudge and gauge_smudge are now relative to the largest gauge value. These options add smudge * max(g) to the gauge vector, where they previously added smudge. This affects tensor_gauge_simple_bond, TensorNetwork.gauge_all_simple, TensorNetwork.gauge_simple_insert, TensorNetwork.gauge_simple_temp, tensor_canonize_bond, tensor_compress_bond, TensorNetwork.contract_compressed, tensor_network_ag_gate_simple, TensorNetworkGenVector.get_cluster, TensorNetworkGenVector.partial_trace_cluster, and CircuitPEPSSimpleUpdate. Results do not change when the gauges are normalized so that max(g) == 1, which is the usual case. They do change for unnormalized gauges.
  • the non-exact circuit simulators (CircuitMPS, CircuitPermMPS, CircuitMPSLazy, CircuitPEPSSimpleUpdate, CircuitPEPOSimpleUpdate) no longer subclass the exact Circuit; they now compose the shared CircuitBase. Use isinstance(circ, CircuitBase) rather than isinstance(circ, Circuit) to check for any circuit type. As a consequence these classes no longer expose exact-contraction-only methods that they previously inherited but which did not produce meaningful results (e.g. get_uni, get_psi_simplified, sample_gate_by_gate); the methods they do support (to_dense, amplitude, sample, partial_trace, local_expectation, simulate_counts, xeb, where applicable) remain, with the MPS implementations now native: they operate directly on the current, possibly compressed, state, perform no exact-TN simplification and so take no simplify_* options, and the MPS simulators gain compute_marginal and sample_chaotic this way too. Methods a representation can never support (e.g. uni on the non-exact simulators) now uniformly raise NotImplementedError, where some previously raised ValueError.

Enhancements:

  • add CircuitPEPSSimpleUpdate: a high level quantum circuit simulator that keeps the state as an arbitrary geometry PEPS and applies nearest-neighbor gates with 'simple update' style gauging. The geometry is given by a set of edges, inferred from the gates or read from a psi0; the accuracy is set by max_bond; gauges can be periodically re-equilibrated with equilibrate; local expectations are computed with the cluster approximation.
  • add CircuitPEPOSimpleUpdate: the Heisenberg-picture companion to CircuitPEPSSimpleUpdate. Gates are recorded lazily, then a local observable is built as a bond dimension 1 PEPO on the edges and evolved backwards through them with simple update gauging and compression (skipping gates outside its reverse lightcone), exposing the evolved operator via get_evolved_operator and its |00...0> expectation via local_expectation.
  • add CircuitBase: the shared, representation-agnostic base for all circuit simulators, holding the gate-application front-end and convenience gate methods, named-parameter management, the from_* constructors and drawing. The exact, MPS, PEPS and PEPO simulators now compose it instead of inheriting the exact Circuit. The state is exposed via a single get_psi method that each representation implements, and which the psi property calls. Representation-specific options such as the PEPS/PEPO geometry edges can be passed through all the from_* constructors.
  • add an infinite, translation-invariant 2D tensor-network family (quimb.tensor.tn2dinf) for infinite-PEPS ground states via simple update: GeometryInfinite2D defines a unit cell from a set of edges, with sites labelled (cell, site_type) and bonds canonicalized into translation classes (bond_type); PEPSInfinite2D (and its base TensorNetworkInfinite2DFlat) stores a single tensor per site, keeping all translates in sync via shared tensors and indices; LocalHamInfinite2D defines a Hamiltonian per bond_type (its geometry may extend beyond the state's, e.g. longer-range terms on a nearest-neighbor PEPS); and SimpleUpdateInfinite2D drives imaginary-time simple update by reusing SimpleUpdateGen. Local expectations use a cluster (max_distance) or cheaper generalized-loop (gloops) approximation, and the dense, abelian-symmetric and fermionic (symmray) backends are all supported.
  • add GeometryInfinite2D.square: build a square-lattice unit cell of any N by M size and neighbor range in one call, the range given as couplings (an int number of shells, 1 for nearest-neighbor, 2 to also include next-nearest, ..., or an explicit list of (dx, dy) site-step displacements) or a radius cutoff, both in basis-independent square-lattice distance, with sites placed at the 0-based lattice points.
  • TensorNetwork.gauge_all_simple: add a fuse_multibonds option for updating gauges while preserving multi-index bonds, supported by explicit bond-index selection in tensor_compress_bond.
  • add tensor_gauge_simple_bond: the single-bond 'simple update' gauging step extracted from gauge_all_simple, for gauging an individual bond between two tensors against a shared gauges dict.
  • tensor_network_ag_gate_simple (the gate_simple / gate_simple_ methods): support long-range gates between sites that are not directly bonded, dispatching to the new tensor_network_ag_gate_simple_long_range, which splits the gate into a matrix-product operator and applies it along a path of sites with simple-update gauging and recompression.
  • tensor_canonize_bond: add a swap_inds option to relocate one or more indices onto the other tensor while canonizing (e.g. to 'move' a physical index), plus a bond_ind option for explicit bond-index selection, matching tensor_compress_bond.
  • SimpleUpdateGen: gauge with fuse_multibonds=False so simple update preserves multi-index bond structure.
  • LocalHamGen.get_auto_ordering: support group=True (return commuting layers) for the sort / random / None strategies, and for order="random-ungrouped" chunk the shuffled terms into commuting layers sequentially (preserving the random order rather than greedily packing each layer).
  • add LatticeBondMap: helper for consistently assigning lattice bond indices across ordinary and periodic boundaries, use it in PEPS, PEPO, PEPS3D, scalar 2D/3D lattice tensor-network construction, and classical Ising tensor-network construction.
  • eigh_truncated: add a shift option for optional diagonal regularization.
  • CircuitMPSLazy: add a MPS-based circuit simulator using lazily evaluated gates and periodic automated compression, performing better compared to CircuitMPS for long-range gates when using src compression method.
  • CircuitBase.from_openqasm3_str, CircuitBase.from_openqasm3_file, and CircuitBase.from_openqasm3_url: add OpenQASM 3 parsing with custom gates, register broadcasting, and symbolic input tracking.
  • CircuitDense: support controlled gates supplied via the controls= kwarg, by inserting the low-rank hyper tensor network representation of the gate and contracting it into the dense state (avoiding ever forming the full dense operator).
  • add gauge_d2bp and the convenience method TensorNetwork.gauge_all_belief_propagation: gauge an arbitrary tensor network into the 'symmetric' gauge using dense 2-norm belief propagation, equivalent to simple update gauging with the singular values absorbed equally into both tensors, implemented via the new D2BP.gauge_symmetric, which inserts the full-rank oblique projectors associated with the current messages.
  • D2BP: add power and relative smudge conditioning, converge_d2bp, and support its messages as projector environments, including canonize='bp' in tensor_network_ag_compress_projector.
  • TensorNetwork.norm: add a strip_exponent option for returning the norm as a separate mantissa and log10 exponent, useful for very large or small values.
  • TensorNetworkGenVector.norm_gloop_expand: add a strip_exponent option, an info cache for the cluster contractions and the site neighbor map, keyed as in D1BP.contract_gloop_expand and passed through by TensorNetworkGenVector.compute_local_expectation_gloop_expand so that normalized="global" shares it, and no longer modify the supplied gauges (a copy is taken instead). Supported by a new strip_exponent option on TensorNetworkGen.normalize_simple for returning the normalization factor as a separate mantissa and log10 exponent, and an overall power option on combine_local_contractions.
  • add Tensor.to and TensorNetwork.to for conveniently switching backends, dtype and devices (requires autoray v0.9.0+).
  • D1BP.contract_gloop_expand: caches normalized contractions and adds all singleton regions. It can also remove dangling tensors from regions. These operations do not modify the target tensor network.
  • trace_distance: compute the trace norm from the absolute eigenvalues of the difference of the two states rather than its singular values, which is valid since that difference is hermitian, and faster, increasingly so with dimension. A new isherm=False option restores the previous singular value based computation.

Internal:

  • gloop_remove_dangling: test region membership with a set rather than a list, which is behavior preserving and 1.2x to 4x faster.
  • squared_op_to_reduced_factor: route the cholesky method through array_split like the other methods (behavior preserving).
  • reorganize the quimb.tensor.circuit module into a package (gates, qasm, core, exact, simple_update, mps, peps, pepo submodules). The public import path quimb.tensor.circuit.* and every class's __module__ are unchanged, so the relocation is behavior-preserving for users and pickles. core holds the new CircuitBase and simple_update a shared base for the PEPS/PEPO simple-update simulators (see the Breaking Changes above for the inheritance change).

Docs:

  • sphinx-autoapi: only document objects at the actual location, e.g. Tensor at quimb.tensor.tensor_core rather than also at quimb.tensor. Use matching # e.g. Tensor as short forms in the docs now.

Bug fixes:

... (truncated)

Changelog

Sourced from quimb's changelog.

v1.15.0 (2026-08-10)

Breaking Changes:

  • Circuit.uni: return the non-transposed unitary tensor network. Thus, circ.uni.to_dense() gives U, which acts on a state as U @ psi. The earlier transposed form and its FutureWarning are removed. Use circ.get_uni(transposed=True) for the old convention.
  • TensorNetwork.gauge_all_simple: arguments after max_iterations and tol are now keyword-only. This includes smudge, power, and damping.
  • Automatic generalized loop size (max_size=None in tn.gen_gloops, or gloops=None in loop expansions): grow loops until they cover every target tensor ID or site. Previously, loop growth stopped at the first and smallest loop. On non-uniform geometries, this could leave some sites without a loop. Targets outside the 2-core cannot be part of a loop and are ignored. A UserWarning is raised if these targets were explicit or if the network is a tree and has no loops. Loops larger than the resolved size are no longer returned. Use max_size="min" or gloops="min" for the old behavior.
  • Simple-update gauging: smudge and gauge_smudge are now relative to the largest gauge value. They add smudge * max(g) to the gauge vector instead of smudge. This affects tensor_gauge_simple_bond, TensorNetwork.gauge_all_simple, TensorNetwork.gauge_simple_insert, TensorNetwork.gauge_simple_temp, tensor_canonize_bond, tensor_compress_bond, TensorNetwork.contract_compressed, tensor_network_ag_gate_simple, TensorNetworkGenVector.get_cluster, TensorNetworkGenVector.partial_trace_cluster, and CircuitPEPSSimpleUpdate. Results are unchanged for gauges normalized to max(g) == 1, as is usual. Results change for unnormalized gauges.
  • Non-exact circuit simulators no longer subclass the exact Circuit. This applies to CircuitMPS, CircuitPermMPS, CircuitMPSLazy, CircuitPEPSSimpleUpdate, and CircuitPEPOSimpleUpdate. They now use the shared CircuitBase. Use isinstance(circ, CircuitBase) to check for any circuit type. Exact-contraction-only methods such as get_uni, get_psi_simplified, and sample_gate_by_gate are no longer available on these simulators. Supported methods remain available where applicable: to_dense, amplitude, sample, partial_trace, local_expectation, simulate_counts, and xeb. The MPS methods now operate directly on the current, possibly compressed state. They do not perform exact tensor-network simplification and do not accept simplify_* options. MPS simulators also gain compute_marginal and sample_chaotic. Methods that a representation cannot support, e.g. uni, now raise NotImplementedError consistently instead of sometimes raising ValueError.

Enhancements:

  • Add CircuitPEPSSimpleUpdate, a circuit simulator that stores the state as an arbitrary-geometry PEPS. It applies nearest-neighbor gates with simple-update gauging. A set of edges defines the geometry. These edges can be inferred from gates or read from psi0. Use max_bond to control accuracy and equilibrate to rebalance gauges at intervals. Local expectations use the cluster approximation.
  • Add CircuitPEPOSimpleUpdate, a Heisenberg-picture simulator related to CircuitPEPSSimpleUpdate. It records gates without applying them immediately. For an expectation, it builds the local observable as a bond-dimension-1 PEPO on edges. It then evolves the PEPO backward with simple-update gauging and compression. Gates outside the reverse light cone are skipped. Use get_evolved_operator to get the evolved operator and local_expectation to get its |00...0> expectation.
  • Add CircuitBase, the shared base for all circuit simulators. It provides gate application, gate helper methods, named-parameter management, from_* constructors, and drawing. Exact, MPS, PEPS, and PEPO simulators now use this base instead of inheriting the exact Circuit. Each representation implements get_psi, which the psi property calls. All from_* constructors accept representation-specific options, such as PEPS or PEPO geometry edges.
  • Add quimb.tensor.tn2dinf, a translation-invariant 2D tensor-network family for finding infinite-PEPS ground states with simple update. GeometryInfinite2D defines a unit cell from edges. Sites have (cell, site_type) labels, and bonds are grouped into translation classes named bond_type. PEPSInfinite2D and its base TensorNetworkInfinite2DFlat store one tensor per site. Shared tensors and indices keep all translations synchronized. LocalHamInfinite2D defines one Hamiltonian per bond_type. Its geometry can extend beyond the state geometry, e.g. for longer-range terms on a nearest-neighbor PEPS. SimpleUpdateInfinite2D uses SimpleUpdateGen for imaginary-time simple update. Local expectations use either a cluster approximation (max_distance) or a less costly generalized-loop approximation (gloops). Dense, Abelian-symmetric, and fermionic symmray backends are supported.
  • Add GeometryInfinite2D.square to create an N by M square-lattice unit cell. Sites are placed on zero-based lattice points. Set the neighbor range with couplings or radius. couplings can be the number of neighbor shells (1 for nearest neighbors, 2 to include next-nearest neighbors, etc.) or a list of (dx, dy) site displacements. radius sets a cutoff. Both use basis-independent square-lattice distance.
  • TensorNetwork.gauge_all_simple: add fuse_multibonds. It updates gauges while preserving multi-index bonds. tensor_compress_bond now supports the required explicit bond-index selection.
  • Add tensor_gauge_simple_bond, the single-bond gauging step from gauge_all_simple. It gauges one bond between two tensors against a shared gauges dictionary.
  • tensor_network_ag_gate_simple (gate_simple and gate_simple_): support long-range gates between sites without a direct bond. The new tensor_network_ag_gate_simple_long_range splits the gate into a matrix-product operator. It applies the operator along a site path with simple-update gauging and recompression.
  • tensor_canonize_bond: add swap_inds to move one or more indices to the other tensor during canonization, e.g. to move a physical index. Also add bond_ind for explicit bond-index selection, matching tensor_compress_bond.
  • SimpleUpdateGen: use fuse_multibonds=False during gauging. This preserves multi-index bond structure.
  • LocalHamGen.get_auto_ordering: support group=True for the sort, random, and None strategies. This returns commuting layers. With order="random-ungrouped", shuffled terms are placed sequentially into commuting layers. This preserves random order instead of filling each layer greedily.
  • Add LatticeBondMap to assign lattice bond indices consistently across open and periodic boundaries. PEPS, PEPO, PEPS3D, scalar 2D and 3D lattice tensor networks, and classical Ising tensor networks now use it.
  • eigh_truncated: add shift for optional diagonal regularization.
  • Add CircuitMPSLazy, an MPS circuit simulator with deferred gate evaluation and periodic automatic compression. For long-range gates with src compression, it can be more efficient than CircuitMPS.
  • CircuitBase.from_openqasm3_str, CircuitBase.from_openqasm3_file, and CircuitBase.from_openqasm3_url: add OpenQASM 3 parsing. This supports custom gates, register broadcasting, and symbolic input tracking.
  • CircuitDense: accept controlled gates through controls=. The method inserts a low-rank hyper tensor-network form of the gate and contracts it into the dense state. It does not build the full dense operator.
  • Add gauge_d2bp and TensorNetwork.gauge_all_belief_propagation. They put any tensor network in the symmetric gauge with dense 2-norm belief propagation. This is equivalent to simple-update gauging with singular values absorbed equally into the two tensors. The new D2BP.gauge_symmetric method inserts the full-rank oblique projectors for the current messages.
  • D2BP: add power, relative smudge conditioning, and converge_d2bp. Messages can also be used as projector environments. This includes canonize="bp" in tensor_network_ag_compress_projector.
  • TensorNetwork.norm: add strip_exponent. It returns the norm as separate mantissa and base-10 exponent values. This supports very large or small norms.
  • TensorNetworkGenVector.norm_gloop_expand: add strip_exponent and an info cache for cluster contractions and the site-neighbor map. The cache uses the same keys as D1BP.contract_gloop_expand. TensorNetworkGenVector.compute_local_expectation_gloop_expand passes it through, so normalized="global" shares the cache. The method now copies supplied gauges instead of modifying them. TensorNetworkGen.normalize_simple also gains strip_exponent to return the normalization factor as separate mantissa and base-10 exponent values. combine_local_contractions gains an overall power option.
  • Add Tensor.to and TensorNetwork.to to change the backend, dtype, or device. This requires autoray v0.9.0 or newer.
  • D1BP.contract_gloop_expand: cache normalized contractions and add all singleton regions, i.e. regions with one tensor. The method can also remove dangling tensors from regions. These operations do not modify the target tensor network.
  • trace_distance: compute the trace norm from the absolute eigenvalues of the difference between two states. Previously, it used singular values. Eigenvalues are valid because the difference is Hermitian. This method is faster, with larger gains at higher dimensions. Use isherm=False for the previous singular-value calculation.

Internal:

  • gloop_remove_dangling: use a set instead of a list to test region membership. This is 1.2 to 4 times faster and does not change behavior.
  • squared_op_to_reduced_factor: use array_split for the cholesky method, as for the other methods. This does not change behavior.
  • Convert quimb.tensor.circuit from a module to a package with gates, qasm, core, exact, simple_update, mps, peps, and pepo submodules. The public quimb.tensor.circuit.* import paths and each class's __module__ remain unchanged. Existing imports and pickles continue to work. core contains the new CircuitBase. simple_update contains the shared base for the PEPS and PEPO simple-update simulators. See the inheritance change above.

Docs:

  • Sphinx AutoAPI now documents each object only where it is defined. For example, it documents Tensor at quimb.tensor.tensor_core, not also at quimb.tensor. Documentation can use matching short links such as Tensor.

... (truncated)

Commits
  • f4267f5 Merge pull request #393 from jcmgray/peps-inf-long-range
  • 682a7b8 Merge branch 'main' into peps-inf-long-range
  • ad2e2cb update changelog resolve and autoapi use [skip ci]
  • f4c389e Merge pull request #406 from jcmgray/gloop-auto-cover
  • 53bd4dc gloop expand functions: max_size=None auto mode now covers all sites by defau...
  • 57b0889 Merge pull request #405 from lm1909/trace-distance-isherm
  • 7b03d65 trace_distance: use hermitian trace norm by default
  • 4a81209 Merge pull request #403 from jcmgray/dependabot/github_actions/dependencies-f...
  • 64ed45b Merge branch 'main' into peps-inf-long-range
  • ab51a1d Merge pull request #404 from jcmgray/d1bp-gloop-contract-optimize
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [quimb](https://github.com/jcmgray/quimb) from 1.14.0 to 1.15.0.
- [Release notes](https://github.com/jcmgray/quimb/releases)
- [Changelog](https://github.com/jcmgray/quimb/blob/main/docs/changelog.md)
- [Commits](jcmgray/quimb@v1.14.0...v1.15.0)

---
updated-dependencies:
- dependency-name: quimb
  dependency-version: 1.15.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file python:uv Pull requests that update python:uv code labels Aug 31, 2026
@sonarqubecloud

sonarqubecloud Bot commented Sep 1, 2026

Copy link
Copy Markdown

@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Test Results

  4 files  ±0    4 suites  ±0   2m 0s ⏱️ +5s
 32 tests ±0   31 ✅ ±0  1 💤 ±0  0 ❌ ±0 
108 runs  ±0  106 ✅ ±0  2 💤 ±0  0 ❌ ±0 

Results for commit 26f2478. ± Comparison against base commit 4066814.

@Panadestein
Panadestein merged commit ec64aa4 into main Sep 1, 2026
11 checks passed
@Panadestein
Panadestein deleted the dependabot/uv/quimb-1.15.0 branch September 1, 2026 13:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file python:uv Pull requests that update python:uv code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant