Releases: oscarhiggott/PyMatching
PyMatching v2.2.1
PyMatching v2.2.0
Changes made for v2.2.0
Support added for using pymatching as a C++ dependency (see changes in #77)
Renamed retworkx
to rustworkx
(since the retworkx package name has been deprecated):
- Added methods
Matching.load_from_rustworkx
andMatching.to_rustworkx
- DeprecationWarning added to
Matching.load_from_retworkx
andMatching.to_retworkx
retworkx
dependency removed.rustworkx
has not been added as a dependency, and instead anImportError
is raised ifMatching.load_from_rustworkx
orMatching.to_rustworkx
are used withoutrustworkx
installed.
PyMatching now requires Python>=3.7
(rather than Python>=3.6
)
Fixes an issue where multiple boundary nodes could sometimes lead to boundary edges being merged incorrectly (issue #81, fixed in #86)
PyMatching v2.1.0
Features and improvements
Added the following methods to pymatching.Matching
:
pymatching.Matching.decode_batch
: decodes a batch of (optionally bit-packed) shots to decode, instead of just a single shot (as done bypymatching.Matching.decode
). For smaller/easier problems,Matching.decode_batch
is much faster than iterating over the shots in python and callingMatching.decode
for each one. E.g. When decoding d=11,rounds=11, p=0.1% surface code circuits, looping overMatching.decode
in python is 1us per round vs 0.37us per round usingMatching.decode_batch
. For d=5,rounds=5, p=0.01%, looping Matching.decode in python is 0.8us per round vs 0.02us per round with Matching.decode_batch.pymatching.Matching.decode_to_edges_array
: returns the solution as an array of edges (given as pairs of detector node indices).pymatching.Matching.from_detector_error_model_file
pymatching.Matching.from_stim_circuit
pymatching.Matching.from_stim_circuit_file
Adds pymatching.cli
, which provides access to the pymatching command line tool via the Python API.
Adds the pymatching
console script entry point to the setup.py. Makes the pymatching
command line tool available when pip installing.
Bug fixes
Fixes a bug in the command line tool where b8-formatted stim dets files couldn't be read on windows machines (also causing issues with sinter, which uses the command line tool).
PyMatching v2.0.1
This patch release fixes an issue where placing a detection event on a node marked as a boundary node in the Python API would lead to an exception being raised (issue #41).
PyMatching v2.0.0
Changes made for v2.0
Flagship changes:
- The C++ extension has been completely rewritten, and includes a new implementation of the blossom algorithm
- PyMatching v2.0 is now around 100-1000x faster than PyMatching v0.7 for decoding surface codes with circuit-level noise
- The new implementation is also exact. It does not make the "local matching" approximation used in v0.7 and earlier,
which resulted in a reduction in accuracy for very large surface code circuits - The runtime of the new version is approximately linear in the size of the graph, and can process between 1 and 10
million detection events per second
Features and improvements
-
Decoding speeds improved 100-1000x
-
pymatching.Matching.load_from_check_matrix
is around 30x faster -
Added methods to
pymatching.Matching
:pymatching.Matching.add_boundary_edge
pymatching.Matching.decode_to_matched_dets_array
pymatching.Matching.decode_to_matched_dets_dict
pymatching.Matching.has_edge
pymatching.Matching.get_edge_data
pymatching.Matching.set_min_num_fault_ids
-
Added static methods to
pymatching.Matching
:pymatching.Matching.from_detector_error_model
pymatching.Matching.from_check_matrix
(static method equivalent to constructing a newpymatching.Matching
and
then callingpymatching.Matching.load_from_check_matrix
)
-
merge_strategy
argument added topymatching.Matching.add_edge
,pymatching.Matching.add_boundary_edge
and
pymatching.Matching.load_from_check_matrix
. When an attempt is made to
add an edge already present in the graph, the following strategies are available:disallow
: raises aValueError
if a parallel edge is addedindependent
: edge weights and error probabilities updated treating the parallel edges as independent error mechanismssmallest-weight
: The edge with the smallest weight is keptkeep-original
: The existing edge is kept and the new edge is silently ignoredreplace
: Only the edge being added is kept
-
faults_matrix
argument added topymatching.Matching.from_check_matrix
.faults_matrix
is an array that can be used to set
thefault_ids
attribute of edges in a graph loaded from a check matrix. For example,faults_matrix
can be used to specify the
logical observables whose outcome should be predicted by the decoder.
Minor changes to the API
spacelike_weights
renamed toweights
inpymatching.Matching.load_from_check_matrix
. Butspacelike_weights
still accepted for backward compatibility.H
renamed tograph
in the constructor forpymatching.Matching
.H
still accepted for backward compatibility.precompute_shortest_paths
argument removed from constructor (won't break if supplied)- Both a virtual boundary node (via
pymatching.Matching.add_boundary_edge
) and a regular boundary node are supported.
These are treated equivalently by the decoder, but are treated differently bypymatching.Matching.edges
,
pymatching.Matching.to_networkx
andpymatching.Matching.to_retworkx
Minor breaking changes to the API
pymatching.Matching.matching_graph
renamed topymatching.Matching._matching_graph
(since this property is only
intended to be used internally to access the C++ extension)pymatching.Matching.decode
arguments after the first argument are now keyword-only, andnum_neighbours
has been
removed as an argument. Users' code won't break or raise a warning if they already used keyword arguments (andnum_neighbours
is
silently ignored when provided). If users providenum_neighbours
orreturn_weight
as a positional argument, a deprecation warning is raised.pymatching.Matching.compute_all_pairs_shortest_paths
method removed
Bug fixes
- Fixed a bug where timelike error probabilities were set incorrectly if provided as a scalar
PyMatching v0.7.0
Adds support for creating Matching objects from retworkx graphs
PyMatching v0.6.1
Improves the error message for parallel edges.
PyMatching v0.6.0
- Adds support for negative edge weights
- Fixes an issue with Python 3.10 Windows builds
PyMatching v0.5.0
- Allow array inputs for
timelike_weights
andmeasurement_error_probabilities
(separate values can be supplied for each check in the check matrix) - Rename
measurement_error_probability
tomeasurement_error_probabilities
(but maintaining backward compatibility) - Rename edge attribute
qubit_id
tofault_ids
(but maintaining backward compatibility -qubit_id
still accepted)
PyMatching v0.4.0
- Matching graphs with multiple connected components are now supported
pymatching.Matching.add_edge
method added to allowpymatching.Matching
graphs to be constructed incrementally (rather than just via NetworkX graphs or scipy/numpy check matrices)- It is now permitted to include only a subset of the qubit_ids from 0...(num_qubits-1) as edge attributes.
- Added
num_nodes
,num_edges
andnum_detectors
properties topymatching.Matching
, andpymatching.Matching.stabiliser_graph
renamed topymatching.Matching.matching_graph
- Doctest examples added to docstrings
- Python type hints added
- Various changes to the C++ code and pybind11 bindings (e.g. refactoring, renaming and addition of docstrings and doctest examples), so that these can be more easily used directly by the user if desired (rather than just via the main
pymatching.Matching
class)