Major changes:
- Added prototype `interactivate` diagrams for circuits. See [the crumble README](https://github.com/quantumlib/Stim/blob/main/glue/crumble/README.md).
Breaking changes:
- `stim.DetectorErrorModel.shortest_graphlike_error` now defaults `ignore_ungraphlike_errors` to True instead of False. Also, it now actually ignores all ungraphlike errors when set to True.
General additions and improvements:
- Added a new gate: `CXSWAP` (and `SWAPCX`). This gate is KAK-equivalent to the ISWAP, but avoids mixing X and Z terms, which is useful when creating/debugging circuits intended to use ISWAP-like interactions.
- Added a new diagram type `"interactive"`. Interactive diagrams are a HTML pages containing "crumble".
- Added `stim.Circuit.inverse`
- Added `stim.Circuit.with_inlined_feedback`
- Added `stim.TableauSimulator.measure_pauli_string`
- Gave the project a logo
- Simplified the names of diagram types (the old names still work but are no longer listed in documentation)
- Added `separate_observables=False` argument to `stim.read_shot_data_file`
- Added `unsigned=False` argument to `stim.PauliString.from_unitary_matrix`
- Added `stim.Tableau.x_sign`, `stim.Tableau.y_sign`, `stim.Tableau.z_sign` helper methods
- Added `stim.TableauSimulator.depolarize1`, `stim.TableauSimulator.depolarize2`, `stim.TableauSimulator.x_error`, `stim.TableauSimulator.y_error`, `stim.TableauSimulator.z_error`
- Added a `--ran_without_feedback` command line option to `stim m2d`
- Added `stim.PauliString.before`, `stim.PauliString.after`
Diagram improvements:
- Detector slice diagrams now use colors that are more color-blind friendly
- Added new diagram type `detslice-with-ops-svg` which overlays operations over the detector slice diagram
- The `type` argument for `.diagram` methods is no longer keyword-only
- The `tick` argument for `.diagram` methods can now be set to a `range(start, end)`, producing a diagram containing each tick in the range as a sub-diagram
- Detector slice diagrams now prefer shapes that have mirror symmetry, when choosing how to draw a stabilizer
- Detector slice diagrams now switch to using bezier curves when stroking between colinear points, to disambiguate which points are vertices and which points are skipped
- Increased the initial size used for the 3d model viewer and the svg viewer
- Improved the initial camera position used by the 3d model viewer to better frame the model
- Increased the font sizes used for gates in SVG diagrams, so they better fill their boxes
- Detector slice diagrams can now be filtered by `stim.DemTarget` (to slice observables in addition to detectors, include observable targets in the filter)
- SVG diagrams now group elements, making them easier to touch up afterwards in image editors
Sinter improvements:
- Added `--postselected_detectors_predicate` to `sinter collect`, generalizing `--postselect_detectors_with_non_zero_4th_coord`
- It's now possible to specify custom decoders
- Added `sinter.Decoder` class
- Added a `custom_decoders` arg to `sinter.collect`, `sinter.iter_ollect`, `sinter.predict_on_disk`, `sinter.predict_observables_bit_packed`
- Added a `--customer_decoders_module_function` command line argument to `sinter collect`
- `sinter predict` can now be given `--metadata_func auto` instead of `--metadata_func "sinter.comma_separated_key_values(path)"`
- Added command line arguments to `sinter plot`:
- `--y_func`
- `--y_axis`
- The expression given to `--plot_args_func` now has access to several more values: `stat`, `stats`, `decoder`, metadata`, and `strong_id`.
- The `plot_args_func` argument of `sinter.plot` methods can now take a third argument, `stats`, the list of stats in the curve
- Discard rate diagrams now include more Y axis indicators
- `sinter combine` now sorts its output
- Added `--order preserve|metadata|error` option to `sinter combine`
Bug fixes:
- Due to a [mysterious crash in collab](https://github.com/quantumlib/Stim/issues/432), the AVX build has been temporarily disabled.
- Fixed generating degenerate diagrams when circuits had no coordinate data
- Fixed `stimcirq.StimSampler` not working on cirq circuits containing repeated keys
- Fixed `stimcirq.SweepPauli._resolve_parameters_` failing to resolve strings, and not specifying `_parameter_names_`
- Fixed a typo in `stim.PauliString`'s documentation. The allowable signs are [1, -1, 1j, -1j].
- Fixed a quadratic overhead caused by iteratively growing the tableau simulator's state
- Fixed sinter crashing on shutdown on windows, due to not waiting for workers to die before deleting their files
- Fixed sinter ignoring error codes returned from pymatching.
- Fixed `stim.Tableau.from_stabilizers` not verifying that the given stabilizers actually commute
- Related: pymatching fixed a bug where it was linking an older version of stim that opened binary files in text mode, causing sinter to fail when using pymatching on windows.