Skip to content

v1.14.0 - More Flows

Latest
Compare
Choose a tag to compare
@Strilanc Strilanc released this 24 Sep 08:41
· 0 commits to 36cb178b48ec531aa084cf9aa79e585b90ab32de since this release
47190f4

Flagship changes:

  • Added stim.Circuit.flow_generators for finding the stabilizer flows of a circuit.
  • Added stim.Circuit.time_reversed_for_flows for reversing circuits containing resets and measurements.
  • Added sinter.Sampler for customizing sinter to more general Monte Carlo sampling tasks.

Notable changes:

  • Added stim.Circuit.flow_generators
  • Added stim.Circuit.insert
  • Added stim.Circuit.pop
  • Added stim.Circuit.time_reversed_for_flows
  • Added stim.Circuit.to_crumble_url
  • Added stim.Circuit.to_quirk_url
  • Added stim.CircuitInstruction.num_measurements
  • Added stim.CircuitInstruction.target_groups
  • Added stim.CircuitRepeatBlock.num_measurements
  • Added stim.DemInstruction.target_groups
  • Added stim.FlipSimulator.clear
  • Added stim.FlipSimulator.copy
  • Added stim.GateData.hadamard_conjugated
  • Added stim.GateData.is_symmetric_gate
  • stim.CompiledDetectorSampler.sample gained obs_out=None and dets_out=None arguments
  • stim.Circuit.to_crumble_url gained skip_detectors=False and mark=None arguments
  • stim.CircuitInstruction.__init__ gained the ability to parse single lines from a stim circuit file
  • stim.DemInstruction.__init__ gained the ability to parse single lines from a detector error model file
  • stim.DemTarget.__init__ gained the ability to parse targets from detector error mode files (e.g. stim.DemTarget("D2"))
  • In stim's gate data, the generalized inverse of R{X,Y,Z} is now M{X,Y,Z} instead of MR{X,Y,Z}
  • Added support for viewing and editing detectors and observables in crumble
  • Reduced the amount of copying during sampling, speeding up detector sampling by around 25%
  • Began collecting papers with available stim circuits at doc/circuit_data_references.md

Notable changes to diagrams:

  • stim.Circuit.diagram gained a rows=None argument, for controlling layout
  • Added "tick #" labels to timeslice diagrams
  • Improved stim.Circuit.detector_error_model error messages to suggest code for drawing a diagram of the problem
  • Match graph diagrams now highlight observable-flipping hyper errors (purple instead of blue)
  • In match graph diagrams, nodes with observable-crossing boundary edges are now colored red instead of black
  • The detector indicator in 3d match graph diagrams is not flat anymore, so it's easier to see from all angles
  • stim.Circuit.diagram("detslice") now draws a pink circle where bad detectors anticommute with dissipative operations, instead of raising an exception
  • Added -html variants of svg diagrams (e.g. circuit.diagram("detslice-html")
    • Outputs a little HTML viewer of the svg diagram, with a resizing tab, which works better in notebooks than a raw SVG
  • detslice diagrams no longer raise an exception for circuits with anticommuting detectors. Instead, a diagram highlighting the anticommutation is returned.
  • Improved the heuristics for using Bezier curves instead of straight lines

Notable changes to sinter:

  • Added sinter.Sampler
  • Added sinter.CompiledSampler
  • Added named sinter sampler perfectionist
  • Any sinter decoder can now indicate shots to discard, by adding an extra byte column to the returned observable data (0=keep, else=discard)
  • sinter collect now distributes workers evenly over tasks, instead of focusing on one task at a time
  • sinter collect now never switches a worker to a new task until their current task is done
  • Added sinter plot --point_label_func command line argument
  • Added sinter plot --dpi for increasing resolution of plots
  • Expanded sinter plot --group_func to take dictionary arguments
    • The "color" key of the dictionary controls color groups
    • The "linestyle" key of the dictionary controls linestyle groups
    • The "marker" key of the dictionary controls marker groups
    • The "label" key of the dictionary controls labels of curves in the legend
    • The "sort" key of the dictionary controls order of curves in the legend
  • sinter collect --processes now defaults to "auto" (number of CPUs) if not specified
  • sinter plot --show is now implied when --out isn't specified
  • Added sinter plot --preprocess_stats_func for specifying a python expression to process stats before plotting
  • Added sinter.TaskStats.with_edits
  • Added a safety check to sinter.TaskStats.__add__, raising an exception if decoder/json_metadata disagree despite strong ids agreeing
  • Added supported decoder "hypergraph_union_find"
  • Added supported decoder "mw_parity_factor"

Notable bug fixes:

  • Fixed HERALDED_PAULI_CHANNEL_1 permuting X/Y/Z/ error channels 😱😱😱
  • Fixed various internal methods not correctly propagating Pauli terms through MXX, MYY, and MZZ instructions that operated on the same qubit more than once 😱
  • Fixed stim.Circuit.with_inlined_feedback incorrectly ordering operations fused by the removal of a feedback operation
  • Fixed stimcirq.cirq_circuit_to_stim_circuit not adding TICKs from multi-moment CircuitOperation blocks
  • Fixed MPAD targets counting towards stim.Circuit.num_qubits
  • Fixed stim.PauliString.{before,after} not supporting SPP and SPP_DAG
  • Fixed stim.PauliString.before refusing to cross reset gates
  • Fixed sinter failing to create plots for data points with extremely large shot counts
  • Fixed stim.Tableau.from_stabilizers error messages claiming stabilizers were redundant when they actually anticommuted
  • Fixed incompatibility with numpy v2
  • Fixed incompatibility with new version of scipy (the linear regression type moved)