Skip to content

v0.6.0

Compare
Choose a tag to compare
@jcmgray jcmgray released this 10 Apr 21:37
· 17 commits to main since this release

Bug fixes

  • all input node legs and pre-processing steps are now calculated lazily, allowing slicing of indices including those 'simplified' away #31.
  • make tree.peak_size more accurate, by taking max assuming left, right and parent present at the same time.

Enhancements

  • add simulated annealing tree refinement (in path_simulated_annealing.py), based on "Multi-Tensor Contraction for XEB Verification of Quantum Circuits" by Gleb Kalachev, Pavel Panteleev, Man-Hong Yung (arXiv:2108.05665), and the "treesa" implementation in OMEinsumContractionOrders.jl by Jin-Guo Liu and Pan Zhang. This can be accessed most easily by supplying opt = HyperOptimizer(simulated_annealing_opts={}).
  • add ContractionTree.plot_flat: a new method for plotting the contraction tree as a flat diagram showing all indices on
    every intermediate (without requiring any graph layouts), which is useful for visualizing and understanding small contractions.
    image
  • HyperGraph.plot: support showing hyper outer indices, multi-edges, and automatic unique coloring of nodes and indices (to match plot_flat).
  • add `ContractionTree.plot_circuit for plotting the contraction tree as a circuit diagram, which is fast and useful for visualizing the traversal ordering for larger trees.
    image
  • add ContractionTree.restore_ind for 'unslicing' or 'unprojecting' previously removed indices.
  • ContractionTree.from_path: add option complete to automatically complete the tree given an incomplete path (usually disconnected subgraphs - #29).
  • add ContractionTree.get_incomplete_nodes for finding all uncontracted childless-parentless node groups.
  • add ContractionTree.autocomplete for automatically completing a contraction tree, using above method.
  • tree.plot_flat: show any preprocessing steps and optionally list sliced indices
  • add get_rng as a single entry point for getting or propagating a random number generator, to help determinism.
  • set autojit="auto" for contractions, which by default turns on jit for backend="jax" only.
  • add tree.describe for a various levels of information about a tree, e.g. tree.describe("full") and tree.describe("concise").
  • add ctg.GreedyOptimizer and ctg.OptimalOptimizer to the top namespace.
  • add ContractionTree.benchmark for for automatically assessing hardware performance vs theoretical cost.
  • contraction trees now have a get_default_objective method to return the objective function they were optimized with, for simpler further refinement or scoring, where it is now picked up automatically.
  • change the default 'sub' optimizer on divisive partition building algorithms to be 'greedy' rather than 'auto'. This might make individual trials slightly worse but makes each cheaper, see discussion: #27.

Full Changelog: v0.5.6...v0.6.0