sinter 1.15.dev1738302984__tar.gz → 1.15.dev1738710176__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of sinter might be problematic. Click here for more details.
- {sinter-1.15.dev1738302984/src/sinter.egg-info → sinter-1.15.dev1738710176}/PKG-INFO +1 -1
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/setup.py +1 -1
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/__init__.py +1 -1
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_decoding/_decoding_fusion_blossom.py +4 -1
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_decoding/_decoding_mwpf.py +35 -53
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176/src/sinter.egg-info}/PKG-INFO +1 -1
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/MANIFEST.in +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/README.md +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/readme_example_plot.png +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/requirements.txt +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/setup.cfg +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_collection/__init__.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_collection/_collection.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_collection/_collection_manager.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_collection/_collection_manager_test.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_collection/_collection_test.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_collection/_collection_worker_loop.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_collection/_collection_worker_state.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_collection/_collection_worker_test.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_collection/_mux_sampler.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_collection/_printer.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_collection/_sampler_ramp_throttled.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_command/__init__.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_command/_main.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_command/_main_collect.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_command/_main_collect_test.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_command/_main_combine.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_command/_main_combine_test.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_command/_main_plot.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_command/_main_plot_test.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_command/_main_predict.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_command/_main_predict_test.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_data/__init__.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_data/_anon_task_stats.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_data/_anon_task_stats_test.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_data/_collection_options.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_data/_collection_options_test.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_data/_csv_out.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_data/_existing_data.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_data/_existing_data_test.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_data/_task.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_data/_task_stats.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_data/_task_stats_test.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_data/_task_test.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_decoding/__init__.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_decoding/_decoding.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_decoding/_decoding_all_built_in_decoders.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_decoding/_decoding_decoder_class.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_decoding/_decoding_pymatching.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_decoding/_decoding_test.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_decoding/_decoding_vacuous.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_decoding/_perfectionist_sampler.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_decoding/_sampler.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_decoding/_stim_then_decode_sampler.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_decoding/_stim_then_decode_sampler_test.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_plotting.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_plotting_test.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_predict.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_predict_test.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_probability_util.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_probability_util_test.py +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter.egg-info/SOURCES.txt +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter.egg-info/dependency_links.txt +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter.egg-info/entry_points.txt +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter.egg-info/requires.txt +0 -0
- {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter.egg-info/top_level.txt +0 -0
|
@@ -31,7 +31,10 @@ class FusionBlossomCompiledDecoder(CompiledDecoder):
|
|
|
31
31
|
syndrome = fusion_blossom.SyndromePattern(syndrome_vertices=dets_sparse)
|
|
32
32
|
self.solver.solve(syndrome)
|
|
33
33
|
prediction = int(np.bitwise_xor.reduce(self.fault_masks[self.solver.subgraph()]))
|
|
34
|
-
predictions[shot] = np.packbits(
|
|
34
|
+
predictions[shot] = np.packbits(
|
|
35
|
+
np.array(list(np.binary_repr(prediction, width=self.num_obs))[::-1],dtype=np.uint8),
|
|
36
|
+
bitorder="little",
|
|
37
|
+
)
|
|
35
38
|
self.solver.clear()
|
|
36
39
|
return predictions
|
|
37
40
|
|
{sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_decoding/_decoding_mwpf.py
RENAMED
|
@@ -38,7 +38,9 @@ class MwpfCompiledDecoder(CompiledDecoder):
|
|
|
38
38
|
bit_packed_detection_event_data: "np.ndarray",
|
|
39
39
|
) -> "np.ndarray":
|
|
40
40
|
num_shots = bit_packed_detection_event_data.shape[0]
|
|
41
|
-
predictions = np.zeros(
|
|
41
|
+
predictions = np.zeros(
|
|
42
|
+
shape=(num_shots, (self.num_obs + 7) // 8), dtype=np.uint8
|
|
43
|
+
)
|
|
42
44
|
import mwpf
|
|
43
45
|
|
|
44
46
|
for shot in range(num_shots):
|
|
@@ -58,29 +60,42 @@ class MwpfCompiledDecoder(CompiledDecoder):
|
|
|
58
60
|
np.bitwise_xor.reduce(self.fault_masks[self.solver.subgraph()])
|
|
59
61
|
)
|
|
60
62
|
self.solver.clear()
|
|
61
|
-
predictions[shot] = np.packbits(
|
|
63
|
+
predictions[shot] = np.packbits(
|
|
64
|
+
np.array(
|
|
65
|
+
list(np.binary_repr(prediction, width=self.num_obs))[::-1],
|
|
66
|
+
dtype=np.uint8,
|
|
67
|
+
),
|
|
68
|
+
bitorder="little",
|
|
69
|
+
)
|
|
62
70
|
return predictions
|
|
63
71
|
|
|
64
72
|
|
|
65
73
|
class MwpfDecoder(Decoder):
|
|
66
74
|
"""Use MWPF to predict observables from detection events."""
|
|
67
75
|
|
|
68
|
-
def
|
|
76
|
+
def __init__(
|
|
69
77
|
self,
|
|
70
|
-
*,
|
|
71
|
-
dem: "stim.DetectorErrorModel",
|
|
72
78
|
decoder_cls: Any = None, # decoder class used to construct the MWPF decoder.
|
|
73
79
|
# in the Rust implementation, all of them inherits from the class of `SolverSerialPlugins`
|
|
74
80
|
# but just provide different plugins for optimizing the primal and/or dual solutions.
|
|
75
81
|
# For example, `SolverSerialUnionFind` is the most basic solver without any plugin: it only
|
|
76
82
|
# grows the clusters until the first valid solution appears; some more optimized solvers uses
|
|
77
83
|
# one or more plugins to further optimize the solution, which requires longer decoding time.
|
|
78
|
-
cluster_node_limit: int = 50, # The maximum number of nodes in a cluster
|
|
84
|
+
cluster_node_limit: int = 50, # The maximum number of nodes in a cluster,
|
|
85
|
+
):
|
|
86
|
+
self.decoder_cls = decoder_cls
|
|
87
|
+
self.cluster_node_limit = cluster_node_limit
|
|
88
|
+
super().__init__()
|
|
89
|
+
|
|
90
|
+
def compile_decoder_for_dem(
|
|
91
|
+
self,
|
|
92
|
+
*,
|
|
93
|
+
dem: "stim.DetectorErrorModel",
|
|
79
94
|
) -> CompiledDecoder:
|
|
80
95
|
solver, fault_masks = detector_error_model_to_mwpf_solver_and_fault_masks(
|
|
81
96
|
dem,
|
|
82
|
-
decoder_cls=decoder_cls,
|
|
83
|
-
cluster_node_limit=cluster_node_limit,
|
|
97
|
+
decoder_cls=self.decoder_cls,
|
|
98
|
+
cluster_node_limit=self.cluster_node_limit,
|
|
84
99
|
)
|
|
85
100
|
return MwpfCompiledDecoder(
|
|
86
101
|
solver,
|
|
@@ -99,13 +114,14 @@ class MwpfDecoder(Decoder):
|
|
|
99
114
|
dets_b8_in_path: pathlib.Path,
|
|
100
115
|
obs_predictions_b8_out_path: pathlib.Path,
|
|
101
116
|
tmp_dir: pathlib.Path,
|
|
102
|
-
decoder_cls: Any = None,
|
|
103
117
|
) -> None:
|
|
104
118
|
import mwpf
|
|
105
119
|
|
|
106
120
|
error_model = stim.DetectorErrorModel.from_file(dem_path)
|
|
107
121
|
solver, fault_masks = detector_error_model_to_mwpf_solver_and_fault_masks(
|
|
108
|
-
error_model,
|
|
122
|
+
error_model,
|
|
123
|
+
decoder_cls=self.decoder_cls,
|
|
124
|
+
cluster_node_limit=self.cluster_node_limit,
|
|
109
125
|
)
|
|
110
126
|
num_det_bytes = math.ceil(num_dets / 8)
|
|
111
127
|
with open(dets_b8_in_path, "rb") as dets_in_f:
|
|
@@ -136,44 +152,8 @@ class MwpfDecoder(Decoder):
|
|
|
136
152
|
|
|
137
153
|
|
|
138
154
|
class HyperUFDecoder(MwpfDecoder):
|
|
139
|
-
def
|
|
140
|
-
|
|
141
|
-
) -> CompiledDecoder:
|
|
142
|
-
try:
|
|
143
|
-
import mwpf
|
|
144
|
-
except ImportError as ex:
|
|
145
|
-
raise mwpf_import_error() from ex
|
|
146
|
-
|
|
147
|
-
return super().compile_decoder_for_dem(
|
|
148
|
-
dem=dem, decoder_cls=mwpf.SolverSerialUnionFind
|
|
149
|
-
)
|
|
150
|
-
|
|
151
|
-
def decode_via_files(
|
|
152
|
-
self,
|
|
153
|
-
*,
|
|
154
|
-
num_shots: int,
|
|
155
|
-
num_dets: int,
|
|
156
|
-
num_obs: int,
|
|
157
|
-
dem_path: pathlib.Path,
|
|
158
|
-
dets_b8_in_path: pathlib.Path,
|
|
159
|
-
obs_predictions_b8_out_path: pathlib.Path,
|
|
160
|
-
tmp_dir: pathlib.Path,
|
|
161
|
-
) -> None:
|
|
162
|
-
try:
|
|
163
|
-
import mwpf
|
|
164
|
-
except ImportError as ex:
|
|
165
|
-
raise mwpf_import_error() from ex
|
|
166
|
-
|
|
167
|
-
return super().decode_via_files(
|
|
168
|
-
num_shots=num_shots,
|
|
169
|
-
num_dets=num_dets,
|
|
170
|
-
num_obs=num_obs,
|
|
171
|
-
dem_path=dem_path,
|
|
172
|
-
dets_b8_in_path=dets_b8_in_path,
|
|
173
|
-
obs_predictions_b8_out_path=obs_predictions_b8_out_path,
|
|
174
|
-
tmp_dir=tmp_dir,
|
|
175
|
-
decoder_cls=mwpf.SolverSerialUnionFind,
|
|
176
|
-
)
|
|
155
|
+
def __init__(self):
|
|
156
|
+
super().__init__(decoder_cls="SolverSerialUnionFind", cluster_node_limit=0)
|
|
177
157
|
|
|
178
158
|
|
|
179
159
|
def iter_flatten_model(
|
|
@@ -193,16 +173,16 @@ def iter_flatten_model(
|
|
|
193
173
|
_helper(instruction.body_copy(), instruction.repeat_count)
|
|
194
174
|
elif isinstance(instruction, stim.DemInstruction):
|
|
195
175
|
if instruction.type == "error":
|
|
196
|
-
dets:
|
|
197
|
-
frames:
|
|
176
|
+
dets: set[int] = set()
|
|
177
|
+
frames: set[int] = set()
|
|
198
178
|
t: stim.DemTarget
|
|
199
179
|
p = instruction.args_copy()[0]
|
|
200
180
|
for t in instruction.targets_copy():
|
|
201
181
|
if t.is_relative_detector_id():
|
|
202
|
-
dets
|
|
182
|
+
dets ^= {t.val + det_offset}
|
|
203
183
|
elif t.is_logical_observable_id():
|
|
204
|
-
frames
|
|
205
|
-
handle_error(p, dets, frames)
|
|
184
|
+
frames ^= {t.val}
|
|
185
|
+
handle_error(p, list(dets), list(frames))
|
|
206
186
|
elif instruction.type == "shift_detectors":
|
|
207
187
|
det_offset += instruction.targets_copy()[0]
|
|
208
188
|
a = np.array(instruction.args_copy())
|
|
@@ -310,6 +290,8 @@ def detector_error_model_to_mwpf_solver_and_fault_masks(
|
|
|
310
290
|
if decoder_cls is None:
|
|
311
291
|
# default to the solver with highest accuracy
|
|
312
292
|
decoder_cls = mwpf.SolverSerialJointSingleHair
|
|
293
|
+
elif isinstance(decoder_cls, str):
|
|
294
|
+
decoder_cls = getattr(mwpf, decoder_cls)
|
|
313
295
|
return (
|
|
314
296
|
(
|
|
315
297
|
decoder_cls(initializer, config={"cluster_node_limit": cluster_node_limit})
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_collection/_collection.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_collection/_collection_test.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_collection/_mux_sampler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_command/_main_collect.py
RENAMED
|
File without changes
|
{sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_command/_main_collect_test.py
RENAMED
|
File without changes
|
{sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_command/_main_combine.py
RENAMED
|
File without changes
|
{sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_command/_main_combine_test.py
RENAMED
|
File without changes
|
|
File without changes
|
{sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_command/_main_plot_test.py
RENAMED
|
File without changes
|
{sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_command/_main_predict.py
RENAMED
|
File without changes
|
{sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_command/_main_predict_test.py
RENAMED
|
File without changes
|
|
File without changes
|
{sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_data/_anon_task_stats.py
RENAMED
|
File without changes
|
{sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_data/_anon_task_stats_test.py
RENAMED
|
File without changes
|
{sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_data/_collection_options.py
RENAMED
|
File without changes
|
{sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_data/_collection_options_test.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_data/_existing_data_test.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_data/_task_stats_test.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_decoding/_decoding_pymatching.py
RENAMED
|
File without changes
|
{sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_decoding/_decoding_test.py
RENAMED
|
File without changes
|
{sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_decoding/_decoding_vacuous.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_probability_util_test.py
RENAMED
|
File without changes
|
|
File without changes
|
{sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|