Releases: quantumlib/Stim
v1.15.0 - Terror of the Tag
Flagship changes:
- Circuit and detector error model instructions can now be tagged with free-form text.
- Example use: note the desired hardware implementation of a two qubit gate (
CX[adiabatic] 0 1) - Example use: note the subgraph of a detector (
DETECTOR[subgraph=X,color=red] rec[-1] rec[-2]) 
 - Example use: note the desired hardware implementation of a two qubit gate (
 OBSERVABLE_INCLUDEcan now be given Pauli targets, to artificially start/end correlation sheets.- Example use: describe an experiment verifying RX-then-MZ produces unbiased random results
 - Example use: keep observables away from the arbitrary rotation in a magic state injection circuit
 
Notable changes:
- Added method 
stim.Circuit.reference_detector_and_observable_signs - Added method 
stim.Circuit.solve_flow_measurements - Added method 
stim.Circuit.without_tags - Added method 
stim.CircuitErrorLocation.noise_tagproperty - Added method 
stim.DetectorErrorModel.without_tags - Added method 
stim.FlipSimulator.generate_bernoulli_samples - Added method 
stim.FlipSimulator.to_numpy - Added method 
stim.Flow.__mul__ - Added property 
stim.CircuitInstruction.tag - Added property 
stim.CircuitRepeatBlock.tag - Added property 
stim.CircuitTargetsInsideInstruction.tag - Added property 
stim.CircuitRepeatBlock.tag - Added property 
stim.DemInstruction.tag - Added property 
stim.Flow.included_observables - Added argument 
stim.Flow.__init__(..., included_observables=None) - Added argument 
stim.Circuit.append(..., tag: str = "") - Added argument 
stim.DetectorErrorModel.append(..., tag: str = "") stim.Circuit.appendnow allows targets of typestim.PauliString(for gates likeMPP)stim.Circuit.appendcan now be given astim.Circuit- The stim circuit file format now allows specifying tags (e.g. 
CX[custom_tag] 0 1) - The stim detector error model format now allows specifying tags (e.g. 
error[custom_tag](0.1) D0 L0) stim.Tableau.from_state_vectorno longer requires its input to be normalizedstim.DetectorErrorModel.appendcan now be given astim.DetectorErrorModel- Added wheel packages for sinter and stimcirq
 - Added python 3.13 builds for linux and osx
 - The 
sinter.Decoderbase class now auto-implementsdecode_via_filesif a child implementscompile_decoder_for_dem - Gates documentation now includes MBQC decompositions
 
New gates:
- Added 
C_NXYZgate - Added 
C_XNYZgate - Added 
C_XYNZgate - Added 
C_NZYXgate - Added 
C_ZNYXgate - Added 
C_ZYNXgate - Added 
H_NXYgate - Added 
H_NXZgate - Added 
H_NYZgate (the final single qubit Clifford needed to have all 24!) - Added 
IIgate - Added 
I_ERRORgate - Added 
II_ERRORgate 
Bug fixes:
- Fixed 
stim.Circuit.to_tableauignoringSPPandSPP_DAG - Fixed stimcirq failing to round trip circuits using MR (such as stim's example circuits)
 - Fixed 
stim.Circuit.detecting_regionsnot raising an exception for anticommutations at the start of the circuit - Fixed 
stim.Circuit.diagram("detslice")not showing anticommutations at the start of the circuit - Fixed various 
stim.FlipSimulatorquery methods refusing to accept negative indices - Fixed 
stim.Tableau.iter_all(0)segfaulting - Fixed 
stim.Flow.__init__not xor-sorting its measurements to make them unique - Fixed sinter's 
max_batch_sizeconfiguration option being ignored 
Special thanks to this release's contributors:
v1.14.0 - More Flows
Flagship changes:
- Added 
stim.Circuit.flow_generatorsfor finding the stabilizer flows of a circuit. - Added 
stim.Circuit.time_reversed_for_flowsfor reversing circuits containing resets and measurements. - Added 
sinter.Samplerfor 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.samplegainedobs_out=Noneanddets_out=Noneargumentsstim.Circuit.to_crumble_urlgainedskip_detectors=Falseandmark=Noneargumentsstim.CircuitInstruction.__init__gained the ability to parse single lines from a stim circuit filestim.DemInstruction.__init__gained the ability to parse single lines from a detector error model filestim.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 nowM{X,Y,Z}instead ofMR{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.diagramgained arows=Noneargument, for controlling layout- Added "tick #" labels to timeslice diagrams
 - Improved 
stim.Circuit.detector_error_modelerror 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 
-htmlvariants 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 collectnow distributes workers evenly over tasks, instead of focusing on one task at a timesinter collectnow never switches a worker to a new task until their current task is done- Added 
sinter plot --point_label_funccommand line argument - Added 
sinter plot --dpifor increasing resolution of plots - Expanded 
sinter plot --group_functo 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 
 - The 
 sinter collect --processesnow defaults to"auto"(number of CPUs) if not specifiedsinter plot --showis now implied when--outisn't specified- Added 
sinter plot --preprocess_stats_funcfor 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_1permuting X/Y/Z/ error channels 😱😱😱 - Fixed various internal methods not correctly propagating Pauli terms through 
MXX,MYY, andMZZinstructions that operated on the same qubit more than once 😱 - Fixed 
stim.Circuit.with_inlined_feedbackincorrectly ordering operations fused by the removal of a feedback operation - Fixed 
stimcirq.cirq_circuit_to_stim_circuitnot addingTICKs from multi-momentCircuitOperationblocks - Fixed 
MPADtargets counting towardsstim.Circuit.num_qubits - Fixed 
stim.PauliString.{before,after}not supportingSPPandSPP_DAG - Fixed 
stim.PauliString.beforerefusing to cross reset gates - Fixed sinter failing to create plots for data points with extremely large shot counts
 - Fixed 
stim.Tableau.from_stabilizerserror 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)
 
Special thanks to this release contributors:
@aebrahimi
@inmzhang
@qec-pconner
@dougthor42
@nelimee
@mghibaudi
@folded
@AlexBourassa
v1.13.0 - Freed Flows
Flagship changes:
- Added support for representing and verifying stabilizer flows (
stim.Flow,stim.Circuit.has_flow,stim.Circuit.detecting_regions) 
Notable changes:
- New top-level methods/types:
- Added 
stim.Flowclass for representing stabilizer flows - Added 
stim.target_pauli - Added 
stim.target_combined_paulis - Added 
stim.PauliStringIterator 
 - Added 
 - New 
stim.Circuitmethods:- Added 
stim.Circuit.decomposed - Added 
stim.Circuit.detecting_regions - Added 
stim.Circuit.to_qasm - Added 
stim.Circuit.has_flow - Added 
stim.Circuit.has_all_flows - Added 
stim.Circuit.shortest_error_sat_problem - Added 
stim.Circuit.likeliest_error_sat_problem 
 - Added 
 - New 
stim.GateDatamethods:- Added 
stim.GateData.{__eq__,__ne__,__repr__,__init__,__str__} - Added 
stim.GateData.flows - Added 
stim.GateData.generalized_inverse - Added 
stim.GateData.inverse 
 - Added 
 - New 
stim.PauliStringmethods:stim.PauliString.__init__now allows sparse syntax (likestim.PauliString("-X50*Z99"))- Added 
stim.PauliString.iter_all - Added 
stim.PauliString.pauli_indices - Added 
stim.PauliString.weight - Sped up 
stim.PauliString.{after,before}by over 10x 
 - New 
stim.Tableaumethods:- Added 
stim.Tableau.to_circuit("graph_state") - Added 
stim.Tableau.to_circuit("mpp_state") - Added 
stim.Tableau.to_circuit("mpp_state_unsigned") - Added 
stim.Tableau.to_stabilizers - Sped up 
stim.Tableau.from_stabilizersby over 200x 
 - Added 
 - New 
stim.FlipSimulatormethods:- Added 
stim.FlipSimulator.broadcast_pauli_errors 
 - Added 
 - New gates:
- Added 
CZSWAPgate (with aliasSWAPCZ) - Added 
SPPgate (generalized S gate that applies to Pauli products) - Added 
SPP_DAG(inverse ofSPP) 
 - Added 
 - Added 
sinter.FusionBlossomCompiledDecoder, speeding up decoding with fusion blossom - Added 
sinter plot --ymaxcommand line argument - stimcirq now converts 
PAULI_CHANNEL_2into cirq's native asymmetric channel - Added 
Bloch Rotation (Euler angles)to gate documentation - Added prebuilt wheels for python 3.12
 - Tweaked 
sinter plot's marker/color ordering to increase how many curves are needed to get two curves that look similar 
Notable bug fixes:
- Fixed 
sinter plot --xaxisonly applying to one subplot, instead of all subplots - Fixed build-from-source not working on IBM PowerPC
 - Fixed 
HERALDED_PAULI_CHANNEL_1targeting the wrong qubits (this fix was also backported to 1.12.1) - Fixed 
stim.Circuit.explain_dem_errorsnot supporting all gates - Fixed crumble not allowing 
eandqto repeatedly move between layers when held down - Fixed crumble not falling back to an emulated clipboard when clipboard permissions weren't granted
 
Special thanks to this release's contributors:
@fdmalone
@markturner289
@mmcewen-g
@nickdgardner
@noajshu
@tomirendo
v1.12.1 - Fix HERALDED_PAULI_CHANNEL_1
Notable changes:
- Add python 3.12 to the versions with prebuilt wheels
 
Bug fixes:
- Fixed 
HERALDED_PAULI_CHANNEL_1targeting fixed indices instead of the given qubits- For example, 
HERALDED_PAULI_CHANNEL_1(0.1) 2 5 3was behaving likeHERALDED_PAULI_CHANNEL_1(0.1) 0 1 2 
 - For example, 
 
v1.12.0 - Foreseen Flips
Flagship changes:
- Added support for heralded erasures
 - Added 
stim.FlipSimulatorfor tracking batches of Pauli flips through circuits - Doubled sinter's sample throughput on high core count machines
 
Notable changes to stim:
- Added gates: 
HERALDED_ERASE,HERALDED_PAULI_CHANNEL_1,MXX,MYY,MZZ,MPAD - Added top-level method 
stim.gate_data - Added class 
stim.GateData- Properties: 
aliases,is_noisy_gate,is_reset,is_single_qubit_gate,is_two_qubit_gate,is_unitary,name,num_parens_arguments_range,produces_measurements,tableau,takes_measurement_record_targets,takes_pauli_targets,unitary_matrix 
 - Properties: 
 - Added class 
stim.FlipSimulator- Methods: 
__init__,do,get_detector_flips,get_measurement_flips,get_observable_flips,peek_pauli_flips,set_pauli_flip - Properties: 
batch_size,num_detectors,num_measurements,num_observables,num_qubits 
 - Methods: 
 - Added 
stim.Circuit.count_determined_measurements - Added 
stim.Circuit.num_ticks - Added 
stim.Circuit.reference_sample - Added 
stim.CircuitRepeatBlock.name(for duck typing vsstim.CircuitInstruction) - Added 
stim.DemRepeatBlock.type(for duck typing vsstim.DemInstruction) - Added 
stim.GateTarget.pauli_type - Added 
stim.GateTarget.qubit_value - Added 
stim.TableauSimulator.postselect_observable - Added optional 
reference_sampleargument tostim.Circuit.compile_sampler - Made 
stim.PauliString.{after,before}much less picky - Improved performance of 
stim.CompiledDetectorSamplerby ~30% under repetitive usage by caching more internal objects - Circuit-to-dem conversion now adds the probabilities of indistinguishable cases within a disjoint error channel, instead of Bernoulli-adding them
 - Added the 
stim convertcommand for converting between shot file formats 
Notable changes to sinter:
- sinter now has an API reference
 - sinter now has a command line reference
 - Added 
sinter.Decoder.compile_decoder_for_demmethod for custom decoders to implement- Improves performance ~2x on high core count machines by avoiding disk usage
 
 - Added a shorthand to 
sinter plot: usem.keyinstead ofmetadata.get("key", None)in*_funcarguments - Added square root scales to 
sinter plot(example:--xaxis "[sqrt]qubit count") - Added an optional 
custom_countscolumn to sinter's CSV format - Added 
autooption to use all processes (sinter collect --processes=auto) - Added 
sinter plot --line_fits - Added 
sinter plot --xmax - Added 
sinter plot --xmin - Added 
sinter plot --failure_values_func - Added 
sinter plot --subtitlewith{common}macro - Added 
sinter collect --count_detection_events - Added 
sinter collect --count_observable_error_combos - Added 
sinter collect --allowed_cpu_affinity_ids - Added 
sinter combine --strip_custom_counts - Added 
sinter plot --custom_error_count_keys - Added 
sinter.log_binomial - Added 
sinter.log_factorial - Added 
sinter.read_stats_from_csv_files - Added 
sinter.{AnonTaskStats,TaskStats}.custom_counts - Added 
sinter.Task.circuit_pathfield for specifying circuits by filepath - Added arguments 
count_observable_error_combos=Falseandcount_detection_events=Falsetosinter.{iter_collect,collect} 
Notable changes to crumble:
- Added support for MPP operations
 - Added example circuits
 
Notable bug fixes
- Fixed 
stimcirq.__version__andsinter.__version__not existing - Fixed 
stimcirq.cirq_circuit_to_stim_circuitchoking on tagged operations - Fixed 
stimcirq.cirq_circuit_to_stim_circuitnot putting repeat blocks in their own moment - Fixed triggering numpy 
bool8deprecation warnings - Fixed documentation not mentioning how to do pauli feedback
 - Fixed a failure in 
stim m2drelated to appending observables crossing a simd boundary when--obs_outwas used - Fixed some corner cases where 
sinter.better_sorted_str_termsproduced incomparable values - Fixed 
cmake installdoing nothing - Fixed some 
sinter plotcrashes on degenerate data - Fixed several sinter classes not having evaluatable reprs
 - Fixed 
stim.Tableau.inversereturning invalid results when the tableau's representation included size padding - Fixed HTML diagrams not being isolated from each other in notebooks (wrapped them all in iframes)
 - Fixed 
stimzxexample project discarding sign information of external stabilizers - Fixed 
stim.Circuit.shortest_graphlike_errorand friends not working if there were more than 64 observables 
Special thanks to this release's contributors:
@AlexBourassa
@fdmalone
@markturner289
@oon3m0oo
@viathor
@justinledford
v1.11.0 - Dancing Diagrams
Major changes:
- Added prototype 
interactivatediagrams for circuits. See the crumble README. 
Breaking changes:
stim.DetectorErrorModel.shortest_graphlike_errornow defaultsignore_ungraphlike_errorsto 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(andSWAPCX). 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=Falseargument tostim.read_shot_data_file - Added 
unsigned=Falseargument tostim.PauliString.from_unitary_matrix - Added 
stim.Tableau.x_sign,stim.Tableau.y_sign,stim.Tableau.z_signhelper methods - Added 
stim.TableauSimulator.depolarize1,stim.TableauSimulator.depolarize2,stim.TableauSimulator.x_error,stim.TableauSimulator.y_error,stim.TableauSimulator.z_error - Added a 
--ran_without_feedbackcommand line option tostim 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-svgwhich overlays operations over the detector slice diagram - The 
typeargument for.diagrammethods is no longer keyword-only - The 
tickargument for.diagrammethods can now be set to arange(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_predicatetosinter collect, generalizing--postselect_detectors_with_non_zero_4th_coord - It's now possible to specify custom decoders
- Added 
sinter.Decoderclass - Added a 
custom_decodersarg tosinter.collect,sinter.iter_ollect,sinter.predict_on_disk,sinter.predict_observables_bit_packed - Added a 
--customer_decoders_module_functioncommand line argument tosinter collect 
 - Added 
 sinter predictcan now be given--metadata_func autoinstead 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_funcnow has access to several more values:stat,stats,decoder, metadata, andstrong_id`. - The 
plot_args_funcargument ofsinter.plotmethods can now take a third argument,stats, the list of stats in the curve 
 - Discard rate diagrams now include more Y axis indicators
 sinter combinenow sorts its output- Added 
--order preserve|metadata|erroroption tosinter combine 
Bug fixes:
- Due to a mysterious crash in collab, the AVX build has been temporarily disabled.
 - Fixed generating degenerate diagrams when circuits had no coordinate data
 - Fixed 
stimcirq.StimSamplernot 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_stabilizersnot 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.
 
v1.10.0 - Inviting Interop
Flagship changes:
- Use open source decoders that are 100x to 1000x faster than before! (pymatching v2 and fusion_blossom)
 - Produce 2d and 3d diagrams of circuits and detector error models, with built-in viewers for Jupyter notebooks!
 - Sample directly from detector error models. Record the errors that occurred, edit them, and play them back!
 
Notable changes:
- Added 
stim.Circuit.diagram- Added diagram type 
"detector-slice-text" - Added diagram type 
"detector-slice-svg" - Added diagram type 
"match-graph-svg" - Added diagram type 
"match-graph-3d" - Added diagram type 
"match-graph-3d-html" - Added diagram type 
"timeline-text" - Added diagram type 
"timeline-svg" - Added diagram type 
"timeline-3d" - Added diagram type 
"timeline-3d-html" 
 - Added diagram type 
 - Added 
stim.DetectorErrorModel.diagram- Added diagram type 
"match-graph-svg" - Added diagram type 
"match-graph-3d" - Added diagram type 
"match-graph-3d-html" 
 - Added diagram type 
 - Added methods to 
stim.PauliString:stim.PauliString.from_numpystim.PauliString.from_unitary_matrixstim.PauliString.to_numpystim.PauliString.to_tableaustim.PauliString.to_unitary_matrix
 - Added methods to 
stim.TableauSimulator:stim.TableauSimulator.__init__now has an optionalseedargumentstim.TableauSimulator.set_state_from_stabilizersstim.TableauSimulator.set_state_from_state_vectorstim.TableauSimulator.donow acceptsstim.CircuitInstructionandstim.CircuitRepeatBlock
 - Added methods to 
stim.Tableau:stim.Tableau.iter_allstim.Tableau.from_circuitstim.Tableau.from_numpystim.Tableau.from_stabilizersstim.Tableau.from_state_vectorstim.Tableau.from_unitary_matrixstim.Tableau.to_circuitstim.Tableau.to_numpystim.Tableau.to_pauli_stringstim.Tableau.to_state_vector
 - Added methods to 
stim.DetectorErrorModel:stim.DetectorErrorModel.flattenedstim.DetectorErrorModel.roundedstim.DetectorErrorModel.compile_sampler
 - Added 
stim.CompiledDemSamplerclass with methods:stim.CompiledDemSampler.samplestim.CompiledDemSampler.sample_write
 - Improvements to 
sinter- Added support for pymatching v2
 - Added support for fusion_blossom decoder
 - Added flag 
--titletosinter plot - Added flag 
--minytosinter plot - Added flag 
--plot_args_functosinter plot - Added flag 
--failure_units_per_shot_functosinter plot - Added flag 
--failure_unit_nameargument tosinter plot - Added grid lines to the plots made by 
sinter plot - Added 
filter_func,failure_units_per_shot_func, andfailure_unit_namearguments tosinter.plot_error_rateandsinter.plot_discard_rate - Added 
sinter.predict_observablesmethod - Added ability to discard shots based on observables being mispredicted
- Added 
--postselected_observables_predicateflag tosinter collect - Added 
sinter.Task.postselected_observables_maskfield - Added 
postselected_observable_maskargument tosinter.sample_decode 
 - Added 
 
 - Added 
stim diagramcommand for producing diagrams, with flags--in,--type,--out,--tick,--remove_noise,--filter_coords. - Added 
stim sample_demcommand for directly sampling from detector error model files, with flags--err_out,--err_out_format,--in,--obs_out,--obs_out_format,--out,--out_format,--replay_err_in,--replay_err_in_format,--seed,--shots,--err_out,--err_out_format,--replay_err_in,--replay_err_in_format. - Added 
separate_observables=Falseargument tostim.CompiledDetectorSampler.sample - Added 
bit_packed=Falseargument tostim.CompiledDetectorSampler.sample - Added 
bit_packed=Falseargument tostim.CompiledMeasurementSampler.sample - Deprecated 
stim.CompiledDetectorSampler.sample_bit_packed - Deprecated 
stim.CompiledMeasurementSampler.sample_bit_packed 
Notable bug fixes:
- Fixed 
stim.Circuit.flattenednot fusing all operations - Fixed 
stim.Circuit.without_noisenot fusing all operations - Fixed 
PAULI_CHANNEL_2not being marked as targeting pairs of qubits - Fixed sinter's internal python files not being marked as private, so they don't appear as autocomplete suggestions
 - Fixed 
stim.Circuit.detector_error_modelfailing when errors affected more than 15 detectors (unless decompose_errors=True) - Fixed 
stim.Circuit.without_noisenot making independent copies of the operations (!) - Fixed sinter only sampling using the first decoder given to it, instead of all decoders, when given multiple decoders
 - Fixed not redirecting stdout and stderr to python's when calling 
stim.main - Fixed unnecessary overhead in the conversion to/from numpy arrays (10x faster for small arrays)
 - Fixed a segfault and bad parsing logic in 
stim.read_shot_data_file(!). Fuzz tested the read/write methods against the python reference methods to avoid this happening again. 
Notable dev changes:
- Fixed files being opened in text mode instead of binary mode, resulting in bad parsing/serialization on Windows due to \n bytes being turned into \r\n and vice versa.
 - Templatized classes like 
simd_wordso AVX and SSE code can coexist in the same binary - Added 
stim_python_bindingscmake target - The cmake build now uses file lists which can be regenerated using a script
 - Added 
dev/directory for scripts - File lists used by cmake are now generated automatically instead of maintained manually
 - The polyfill simd_word that uses 64 bit words now only uses one word instead of two (reducing padding overhead)
 - To allow supporting a larger variety of decoders, sinter no longer includes each decoder in its requirements. Decoders need to be installed separately to use them.
 - Added 
-fPICtolibstimcmake target - Sinter now passes most information via the disk instead of through the multiprocessing API. This reduced the workload on the manager and the startup costs of batches, but made it much more disk limited on high core count machines.
 - The API reference no longer shows deprecated methods (these methods are still listed in the .pyi stubs file)
 - All doc strings now wrap at 80 characters, and this is enforced by continuous integration.
 - The command line reference documentation has been substantially improved (e.g. flag information now grouped with the command instead of separate)
 - Added python 3.11 support and OSX ARM support to the set of prebuilt wheels
 
v1.9.0 - Sintered Samples
Flagship changes:
- Released 
sinter, which uses stim and pymatching to perform multicore Monte Carlo sampling of error correction circuits. - Added a python stub file (
stim/__init__.pyi) to improve autocompletion in IDEs. 
Breaking changes:
- The 
"ptb64"format now requires the shot count to be a multiple of 64, both when reading and when writing. (Previously, missing shots resulted in padding with zero'd data, which created a very easy way to get bad data when reading if the number of shots was not known.) - The default value of 
stim.Circuit.shortest_graphlike_error's argumentignore_ungraphlike_errorshas changed from fromFalsetoTrue. (Setting it toFalsecan use "remnant edges" that only appear as components of decomposed errors, and so do not correspond to a single physical error mechanism.) 
Notable changes:
- New global methods:
stim.mainstim.read_shot_data_filestim.write_shot_data_file
 - New 
stim.DetectorErrorModelmethods:stim.DetectorErrorModel.to_filestim.DetectorErrorModel.from_file
 - New 
stim.Circuitmethods:stim.Circuit.without_noisestim.Circuit.flattenedstim.Circuit.search_for_undetectable_logical_errorsstim.Circuit.to_filestim.Circuit.from_file
 - New 
stim.TableauSimulatormethods:stim.TableauSimulator.c_xyzstim.TableauSimulator.c_zyxstim.TableauSimulator.cxstim.TableauSimulator.do_circuitstim.TableauSimulator.do_pauli_stringstim.TableauSimulator.do_tableaustim.TableauSimulator.h_xzstim.TableauSimulator.num_qubitsstim.TableauSimulator.peek_xstim.TableauSimulator.peek_ystim.TableauSimulator.peek_zstim.TableauSimulator.postselect_xstim.TableauSimulator.postselect_ystim.TableauSimulator.postselect_zstim.TableauSimulator.reset_xstim.TableauSimulator.reset_ystim.TableauSimulator.reset_zstim.TableauSimulator.zcxstim.TableauSimulator.zcystim.TableauSimulator.zcz
 - New 
stim.Tableaumethods:stim.Tableau.to_unitary_matrix
 - New method options:
obs_path=Noneandobs_formatforstim.CompiledDetectorSampler.sample_fileobs_path=Noneandobs_formatforstim.CompiledMeasurementsToDetectionEventsConverter.convert_fileignore_decomposition_failures=Falseforstim.Circuit.detector_error_modelblock_decompose_from_introducing_remnant_edges=Falseoption for thestim.Circuit.detector_error_modelbit_pack_result=Falseforstim.CompiledMeasurementsToDetectionEventsConverter.convert
 - Functional changes:
- Error analysis now attempts to avoid introducing remnant edges unless absolutely necessary (improves detector error models)
 - Error analysis now supports 
ELSE_CORRELATED_ERRORinstructions as long they occur in contiguous blocks started by aCORRELATED_ERROR - The stim python package now includes the stim command line tool. Much easier than building it for yourself.
 - The floating point accuracy of 
stim.TableauSimulator.state_vectorhas been substantially improved (e.g. all zeros are now exact) - The method signatures shown in the API reference are now more accurate, matching the ones in 
__init__.pyi 
 
Bug fixes:
- Worked around the pseudo random number generator state being duplicated when using multiprocessing with start method 
"fork". Samplers now seed from external entropy when constructed, instead of using entropy acquired at startup. - Fixed various reported build failures related to MacOS and Apple M chips.
 - Fixed 
setup.pynot forcing UTF8 encoding when loadingREADME.md, causing crashes on systems configured to use other encodings by default. - Fixed 
stimcirqnot understanding probabilisticcirq.DensePauliStringgates. - Worked around an issue where pytest gives useless failure messages for asserts involving stim objects.
 - Fixed an infinite loop in 
stim.Circuit.get_detector_coords. - Fixed complex indices like 
stim.Circuit()[1j]crashing the python interpreter (by switching to latest version of pybind11). - Fix loop folding during error analysis incorrectly folding loops with observables including measurements from only the last few iterations
 - Fixed a segfault in measurement-to-detection-event conversion related to failing to ignore noise channels
 - Fixed a bug in measurement-to-detection-event conversion where some OBSERVABLE_INCLUDE instructions were being forgotten
 
v1.8.0 - Explorable Errors
Flagship changes:
- Search for smallest logical errors directly from a circuit
 - Find circuit errors that explain detector error model symptoms
 - Helpful error messages when detector error model extraction fails
 - Better compatibility with cirq
 
Notable changes:
- Added 
stim.Circuit.shortest_graphlike_errorfor finding the smallest set of physical errors that can cause an undetected logical error (as long as they each have at most two detection events) - Added 
stim.Circuit.explain_detector_error_model_errorsfor listing how detector error model symptoms match up with physical circuit error mechanisms - When 
stim.Circuit.detector_error_modelfails due to an anti-commuting detector or observable, the error message now describes in great detail the involved detectors, qubits, and error sensitivities - Added several dataclasses for representing results from 
stim.Circuit.explain_detector_error_model_errors - Added 
stim.Circuit.get_detector_coordinates - Added 
stim.Circuit.get_final_qubit_coordinates - Added 
stim.DetectorErrorModel.get_detecetor_coordinates - Added 
stim.Circuit.appendas a shorter more pythonic alias forappend_operation stim.Circuit.appendnow allows the targets argument to be a single target, instead a list of targetsstim.Circuit.appendverifies that a probability argument is given when appending noisy gatesstimcirqnow convertsDETECTORannotations (viastimcirq.DetAnnotation)stimcirqnow convertsOBSERVABLE_INCLUDEannotations (viastimcirq.CumulativeObservableAnnotation)stimcirqnow convertsSHIFT_COORDSannotations (viastimcirq.ShiftCoordsAnnotation)stimcirqnow convertsREPEATblocks (viacirq.CircuitOperation)stimcirqnow convertsMPPmeasurements (viacirq.PauliMeasurementGate) (inverted results not yet supported due to quantumlib/Cirq#4814)stimcirqnow converts operations controlled by sweep targets (viastimcirq.SweepPauli)stimcirqnow supports cirq json serialization (viastimcirq.JSON_RESOLVERandstimcirq.JSON_RESOLVERS_DICT)- Fixed 
stim.CircuitInstruction,stim.GateTarget,stim.DemTarget,stim.DemInstructionnot being hashable - Improved documentation of the file formats for sample results
 - Fixed measurement-to-detection conversion going into an infinite loop for circuits with no measurements when using file format 
b8 - Development versions of stim are now automatically uploaded to pypi when changes are merged into 
main 
v1.7.1 - Installation Iteration
- Fix using AVX instructions as part of checking if AVX instructions can be used (see #179)
 - Fix the source distribution (sdist) not including header files