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.

Files changed (66) hide show
  1. {sinter-1.15.dev1738302984/src/sinter.egg-info → sinter-1.15.dev1738710176}/PKG-INFO +1 -1
  2. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/setup.py +1 -1
  3. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/__init__.py +1 -1
  4. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_decoding/_decoding_fusion_blossom.py +4 -1
  5. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_decoding/_decoding_mwpf.py +35 -53
  6. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176/src/sinter.egg-info}/PKG-INFO +1 -1
  7. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/MANIFEST.in +0 -0
  8. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/README.md +0 -0
  9. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/readme_example_plot.png +0 -0
  10. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/requirements.txt +0 -0
  11. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/setup.cfg +0 -0
  12. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_collection/__init__.py +0 -0
  13. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_collection/_collection.py +0 -0
  14. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_collection/_collection_manager.py +0 -0
  15. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_collection/_collection_manager_test.py +0 -0
  16. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_collection/_collection_test.py +0 -0
  17. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_collection/_collection_worker_loop.py +0 -0
  18. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_collection/_collection_worker_state.py +0 -0
  19. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_collection/_collection_worker_test.py +0 -0
  20. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_collection/_mux_sampler.py +0 -0
  21. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_collection/_printer.py +0 -0
  22. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_collection/_sampler_ramp_throttled.py +0 -0
  23. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_command/__init__.py +0 -0
  24. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_command/_main.py +0 -0
  25. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_command/_main_collect.py +0 -0
  26. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_command/_main_collect_test.py +0 -0
  27. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_command/_main_combine.py +0 -0
  28. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_command/_main_combine_test.py +0 -0
  29. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_command/_main_plot.py +0 -0
  30. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_command/_main_plot_test.py +0 -0
  31. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_command/_main_predict.py +0 -0
  32. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_command/_main_predict_test.py +0 -0
  33. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_data/__init__.py +0 -0
  34. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_data/_anon_task_stats.py +0 -0
  35. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_data/_anon_task_stats_test.py +0 -0
  36. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_data/_collection_options.py +0 -0
  37. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_data/_collection_options_test.py +0 -0
  38. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_data/_csv_out.py +0 -0
  39. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_data/_existing_data.py +0 -0
  40. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_data/_existing_data_test.py +0 -0
  41. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_data/_task.py +0 -0
  42. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_data/_task_stats.py +0 -0
  43. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_data/_task_stats_test.py +0 -0
  44. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_data/_task_test.py +0 -0
  45. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_decoding/__init__.py +0 -0
  46. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_decoding/_decoding.py +0 -0
  47. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_decoding/_decoding_all_built_in_decoders.py +0 -0
  48. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_decoding/_decoding_decoder_class.py +0 -0
  49. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_decoding/_decoding_pymatching.py +0 -0
  50. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_decoding/_decoding_test.py +0 -0
  51. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_decoding/_decoding_vacuous.py +0 -0
  52. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_decoding/_perfectionist_sampler.py +0 -0
  53. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_decoding/_sampler.py +0 -0
  54. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_decoding/_stim_then_decode_sampler.py +0 -0
  55. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_decoding/_stim_then_decode_sampler_test.py +0 -0
  56. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_plotting.py +0 -0
  57. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_plotting_test.py +0 -0
  58. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_predict.py +0 -0
  59. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_predict_test.py +0 -0
  60. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_probability_util.py +0 -0
  61. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter/_probability_util_test.py +0 -0
  62. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter.egg-info/SOURCES.txt +0 -0
  63. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter.egg-info/dependency_links.txt +0 -0
  64. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter.egg-info/entry_points.txt +0 -0
  65. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter.egg-info/requires.txt +0 -0
  66. {sinter-1.15.dev1738302984 → sinter-1.15.dev1738710176}/src/sinter.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: sinter
3
- Version: 1.15.dev1738302984
3
+ Version: 1.15.dev1738710176
4
4
  Summary: Samples stim circuits and decodes them using pymatching.
5
5
  Author: Craig Gidney
6
6
  Author-email: craig.gidney@gmail.com
@@ -19,7 +19,7 @@ with open('README.md', encoding='UTF-8') as f:
19
19
  with open('requirements.txt', encoding='UTF-8') as f:
20
20
  requirements = f.read().splitlines()
21
21
 
22
- __version__ = '1.15.dev1738302984'
22
+ __version__ = '1.15.dev1738710176'
23
23
 
24
24
  setup(
25
25
  name='sinter',
@@ -1,4 +1,4 @@
1
- __version__ = '1.15.dev1738302984'
1
+ __version__ = '1.15.dev1738710176'
2
2
 
3
3
  from sinter._collection import (
4
4
  collect,
@@ -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(prediction, bitorder='little')
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
 
@@ -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(shape=(num_shots, (self.num_obs + 7) // 8), dtype=np.uint8)
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(prediction, bitorder="little")
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 compile_decoder_for_dem(
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, decoder_cls=decoder_cls
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 compile_decoder_for_dem(
140
- self, *, dem: "stim.DetectorErrorModel"
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: List[int] = []
197
- frames: List[int] = []
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.append(t.val + det_offset)
182
+ dets ^= {t.val + det_offset}
203
183
  elif t.is_logical_observable_id():
204
- frames.append(t.val)
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})
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: sinter
3
- Version: 1.15.dev1738302984
3
+ Version: 1.15.dev1738710176
4
4
  Summary: Samples stim circuits and decodes them using pymatching.
5
5
  Author: Craig Gidney
6
6
  Author-email: craig.gidney@gmail.com