qector-decoder-v3 0.5.0__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.
Files changed (242) hide show
  1. qector_decoder_v3-0.5.0/.gitattributes +20 -0
  2. qector_decoder_v3-0.5.0/.github/workflows/CI.yml +236 -0
  3. qector_decoder_v3-0.5.0/.github/workflows/tests.yml +84 -0
  4. qector_decoder_v3-0.5.0/.gitignore +80 -0
  5. qector_decoder_v3-0.5.0/CHANGELOG.md +64 -0
  6. qector_decoder_v3-0.5.0/COMMERCIAL.md +133 -0
  7. qector_decoder_v3-0.5.0/CONTRIBUTING.md +127 -0
  8. qector_decoder_v3-0.5.0/Cargo.lock +2349 -0
  9. qector_decoder_v3-0.5.0/Cargo.toml +68 -0
  10. qector_decoder_v3-0.5.0/Dockerfile +67 -0
  11. qector_decoder_v3-0.5.0/INSTALL.md +85 -0
  12. qector_decoder_v3-0.5.0/LICENSE +241 -0
  13. qector_decoder_v3-0.5.0/PKG-INFO +241 -0
  14. qector_decoder_v3-0.5.0/PYPI_README.md +180 -0
  15. qector_decoder_v3-0.5.0/README.md +419 -0
  16. qector_decoder_v3-0.5.0/RELEASE_NOTES.md +266 -0
  17. qector_decoder_v3-0.5.0/SECURITY.md +105 -0
  18. qector_decoder_v3-0.5.0/benchmark_results/belief_extended.json +312 -0
  19. qector_decoder_v3-0.5.0/benchmark_results/belief_grid.json +192 -0
  20. qector_decoder_v3-0.5.0/benchmark_results/belief_latency.json +117 -0
  21. qector_decoder_v3-0.5.0/benchmark_results/belief_latency.md +11 -0
  22. qector_decoder_v3-0.5.0/benchmark_results/competitive_belief.json +117 -0
  23. qector_decoder_v3-0.5.0/benchmark_results/competitive_belief.md +11 -0
  24. qector_decoder_v3-0.5.0/benchmark_results/competitive_stim_ler.json +227 -0
  25. qector_decoder_v3-0.5.0/benchmark_results/competitive_stim_ler.md +15 -0
  26. qector_decoder_v3-0.5.0/benchmark_results/competitive_stim_ler_full.md +15 -0
  27. qector_decoder_v3-0.5.0/benchmark_results/gpu_extensive.json +634 -0
  28. qector_decoder_v3-0.5.0/benchmark_results/ler_summary.md +42 -0
  29. qector_decoder_v3-0.5.0/benchmark_results/min_competitive.csv +16 -0
  30. qector_decoder_v3-0.5.0/benchmark_results/min_competitive.json +731 -0
  31. qector_decoder_v3-0.5.0/benchmark_results/min_competitive_belief.json +140 -0
  32. qector_decoder_v3-0.5.0/benchmark_results/min_competitive_belief.md +11 -0
  33. qector_decoder_v3-0.5.0/benchmark_results/min_competitive_stim_ler.json +226 -0
  34. qector_decoder_v3-0.5.0/benchmark_results/min_competitive_stim_ler.md +15 -0
  35. qector_decoder_v3-0.5.0/benchmark_results/min_threshold_fast.json +80 -0
  36. qector_decoder_v3-0.5.0/benchmark_results/native_memory.json +147 -0
  37. qector_decoder_v3-0.5.0/benchmark_results/stim_ler_d13_d15.json +107 -0
  38. qector_decoder_v3-0.5.0/benchmark_results/stim_ler_d13_d15.md +12 -0
  39. qector_decoder_v3-0.5.0/benchmark_results/stim_ler_memz.json +227 -0
  40. qector_decoder_v3-0.5.0/benchmark_results/stim_ler_memz.md +15 -0
  41. qector_decoder_v3-0.5.0/benchmark_results/vram_profile.json +22 -0
  42. qector_decoder_v3-0.5.0/benchmark_results/weight_gap_analysis.json +36149 -0
  43. qector_decoder_v3-0.5.0/build.rs +78 -0
  44. qector_decoder_v3-0.5.0/docs/API_STABILITY.md +125 -0
  45. qector_decoder_v3-0.5.0/docs/API_SURFACES.md +92 -0
  46. qector_decoder_v3-0.5.0/docs/BENCHMARK_COMPETITIVE.md +82 -0
  47. qector_decoder_v3-0.5.0/docs/BEYOND_PYMATCHING.md +98 -0
  48. qector_decoder_v3-0.5.0/docs/CORRECTNESS_AUDIT.md +191 -0
  49. qector_decoder_v3-0.5.0/docs/METHODOLOGY.md +220 -0
  50. qector_decoder_v3-0.5.0/docs/PLATFORM_ARTIFACT_ROADMAP.md +143 -0
  51. qector_decoder_v3-0.5.0/docs/REPRODUCE.md +277 -0
  52. qector_decoder_v3-0.5.0/docs/REPRODUCIBILITY_CHECKLIST.md +163 -0
  53. qector_decoder_v3-0.5.0/docs/SCALING.md +87 -0
  54. qector_decoder_v3-0.5.0/docs/SECURITY_DEPLOYMENT.md +125 -0
  55. qector_decoder_v3-0.5.0/docs/SERVICE_API_SCHEMA.md +158 -0
  56. qector_decoder_v3-0.5.0/examples/example_advanced_decoders.py +78 -0
  57. qector_decoder_v3-0.5.0/examples/example_basic.py +77 -0
  58. qector_decoder_v3-0.5.0/examples/example_batch.py +111 -0
  59. qector_decoder_v3-0.5.0/examples/example_blossom.py +75 -0
  60. qector_decoder_v3-0.5.0/examples/example_codes_and_diagnostics.py +47 -0
  61. qector_decoder_v3-0.5.0/examples/example_pymatching_and_backend.py +49 -0
  62. qector_decoder_v3-0.5.0/examples/example_stim_dem.py +57 -0
  63. qector_decoder_v3-0.5.0/examples/example_streaming.py +81 -0
  64. qector_decoder_v3-0.5.0/lib/OpenCL.def +118 -0
  65. qector_decoder_v3-0.5.0/proto/qector.proto +44 -0
  66. qector_decoder_v3-0.5.0/pyproject.toml +140 -0
  67. qector_decoder_v3-0.5.0/python/qector_decoder_v3/__init__.py +1095 -0
  68. qector_decoder_v3-0.5.0/python/qector_decoder_v3/_bp_core.py +120 -0
  69. qector_decoder_v3-0.5.0/python/qector_decoder_v3/backend.py +345 -0
  70. qector_decoder_v3-0.5.0/python/qector_decoder_v3/belief_matching.py +233 -0
  71. qector_decoder_v3-0.5.0/python/qector_decoder_v3/benchmarking.py +401 -0
  72. qector_decoder_v3-0.5.0/python/qector_decoder_v3/bposd.py +212 -0
  73. qector_decoder_v3-0.5.0/python/qector_decoder_v3/codes.py +516 -0
  74. qector_decoder_v3-0.5.0/python/qector_decoder_v3/dem.py +456 -0
  75. qector_decoder_v3-0.5.0/python/qector_decoder_v3/predecoder.py +131 -0
  76. qector_decoder_v3-0.5.0/python/qector_decoder_v3/py.typed +2 -0
  77. qector_decoder_v3-0.5.0/python/qector_decoder_v3/pymatching_compat.py +257 -0
  78. qector_decoder_v3-0.5.0/python/qector_decoder_v3/qiskit_plugin.py +212 -0
  79. qector_decoder_v3-0.5.0/python/qector_decoder_v3/rest_api.py +222 -0
  80. qector_decoder_v3-0.5.0/python/qector_decoder_v3/result.py +216 -0
  81. qector_decoder_v3-0.5.0/python/qector_decoder_v3/sinter_compat.py +134 -0
  82. qector_decoder_v3-0.5.0/python/qector_decoder_v3/stim_compat.py +169 -0
  83. qector_decoder_v3-0.5.0/python/qector_decoder_v3/workbench.py +565 -0
  84. qector_decoder_v3-0.5.0/python/tests/test_auto_decoder_calibrate.py +70 -0
  85. qector_decoder_v3-0.5.0/python/tests/test_backend.py +92 -0
  86. qector_decoder_v3-0.5.0/python/tests/test_batch_shapes.py +49 -0
  87. qector_decoder_v3-0.5.0/python/tests/test_batch_vs_single_decode.py +75 -0
  88. qector_decoder_v3-0.5.0/python/tests/test_belief_bp_convergence.py +83 -0
  89. qector_decoder_v3-0.5.0/python/tests/test_belief_latency_cost.py +71 -0
  90. qector_decoder_v3-0.5.0/python/tests/test_belief_matching.py +83 -0
  91. qector_decoder_v3-0.5.0/python/tests/test_belief_memory_z.py +63 -0
  92. qector_decoder_v3-0.5.0/python/tests/test_belief_p_sweep.py +78 -0
  93. qector_decoder_v3-0.5.0/python/tests/test_belief_reference_package.py +64 -0
  94. qector_decoder_v3-0.5.0/python/tests/test_belief_seed_p_grid.py +78 -0
  95. qector_decoder_v3-0.5.0/python/tests/test_belief_seed_sweep.py +88 -0
  96. qector_decoder_v3-0.5.0/python/tests/test_benchmark.py +71 -0
  97. qector_decoder_v3-0.5.0/python/tests/test_benchmark_syndrome_faithful_gate.py +33 -0
  98. qector_decoder_v3-0.5.0/python/tests/test_benchmarking.py +86 -0
  99. qector_decoder_v3-0.5.0/python/tests/test_beyond_pymatching_examples.py +76 -0
  100. qector_decoder_v3-0.5.0/python/tests/test_blossom_adaptive_k_regression.py +61 -0
  101. qector_decoder_v3-0.5.0/python/tests/test_blossom_candidate_set_contains_optimal.py +65 -0
  102. qector_decoder_v3-0.5.0/python/tests/test_blossom_d15_no_gap.py +58 -0
  103. qector_decoder_v3-0.5.0/python/tests/test_blossom_extra.py +53 -0
  104. qector_decoder_v3-0.5.0/python/tests/test_blossom_weight_optimality.py +59 -0
  105. qector_decoder_v3-0.5.0/python/tests/test_bposd_bb144.py +55 -0
  106. qector_decoder_v3-0.5.0/python/tests/test_bposd_bb72.py +55 -0
  107. qector_decoder_v3-0.5.0/python/tests/test_bposd_bicycle_family.py +53 -0
  108. qector_decoder_v3-0.5.0/python/tests/test_bposd_bp_modes.py +30 -0
  109. qector_decoder_v3-0.5.0/python/tests/test_bposd_hypergraph_product.py +56 -0
  110. qector_decoder_v3-0.5.0/python/tests/test_bposd_ldpc.py +127 -0
  111. qector_decoder_v3-0.5.0/python/tests/test_bposd_osd_orders.py +50 -0
  112. qector_decoder_v3-0.5.0/python/tests/test_bposd_rowspace_metric.py +166 -0
  113. qector_decoder_v3-0.5.0/python/tests/test_bposd_vs_ldpc_runtime.py +109 -0
  114. qector_decoder_v3-0.5.0/python/tests/test_brute_force_small.py +113 -0
  115. qector_decoder_v3-0.5.0/python/tests/test_bulletproof.py +357 -0
  116. qector_decoder_v3-0.5.0/python/tests/test_clean_venv_install.py +78 -0
  117. qector_decoder_v3-0.5.0/python/tests/test_codes.py +131 -0
  118. qector_decoder_v3-0.5.0/python/tests/test_cold_path_present.py +47 -0
  119. qector_decoder_v3-0.5.0/python/tests/test_competitive_ler.py +112 -0
  120. qector_decoder_v3-0.5.0/python/tests/test_correctness_audit_commands.py +83 -0
  121. qector_decoder_v3-0.5.0/python/tests/test_cpu_no_cuda_required.py +90 -0
  122. qector_decoder_v3-0.5.0/python/tests/test_cuda_cpu_bit_identical.py +48 -0
  123. qector_decoder_v3-0.5.0/python/tests/test_decode_result_backend_metadata.py +44 -0
  124. qector_decoder_v3-0.5.0/python/tests/test_decode_result_bitpacked.py +46 -0
  125. qector_decoder_v3-0.5.0/python/tests/test_decode_result_fallback_status.py +47 -0
  126. qector_decoder_v3-0.5.0/python/tests/test_decode_result_json_roundtrip.py +67 -0
  127. qector_decoder_v3-0.5.0/python/tests/test_decode_result_sparse_indices.py +40 -0
  128. qector_decoder_v3-0.5.0/python/tests/test_decode_result_timing.py +34 -0
  129. qector_decoder_v3-0.5.0/python/tests/test_decoders.py +290 -0
  130. qector_decoder_v3-0.5.0/python/tests/test_defect_count_vs_weight_gap.py +62 -0
  131. qector_decoder_v3-0.5.0/python/tests/test_dem.py +182 -0
  132. qector_decoder_v3-0.5.0/python/tests/test_dem_collapse_full_vs_collapsed_pymatching.py +77 -0
  133. qector_decoder_v3-0.5.0/python/tests/test_dem_collapse_observable_masks.py +68 -0
  134. qector_decoder_v3-0.5.0/python/tests/test_dem_collapse_parallel_edges.py +95 -0
  135. qector_decoder_v3-0.5.0/python/tests/test_dem_collapse_probability.py +93 -0
  136. qector_decoder_v3-0.5.0/python/tests/test_dem_collapse_regression_d11.py +39 -0
  137. qector_decoder_v3-0.5.0/python/tests/test_dem_collapse_regression_d15.py +38 -0
  138. qector_decoder_v3-0.5.0/python/tests/test_ecosystem.py +32 -0
  139. qector_decoder_v3-0.5.0/python/tests/test_error_messages.py +45 -0
  140. qector_decoder_v3-0.5.0/python/tests/test_examples.py +39 -0
  141. qector_decoder_v3-0.5.0/python/tests/test_fast_uf.py +31 -0
  142. qector_decoder_v3-0.5.0/python/tests/test_full_api_coverage.py +124 -0
  143. qector_decoder_v3-0.5.0/python/tests/test_gpu_fallback.py +83 -0
  144. qector_decoder_v3-0.5.0/python/tests/test_gpu_memory_bounded.py +61 -0
  145. qector_decoder_v3-0.5.0/python/tests/test_gpu_memory_profile.py +62 -0
  146. qector_decoder_v3-0.5.0/python/tests/test_gpu_no_silent_slowdown.py +91 -0
  147. qector_decoder_v3-0.5.0/python/tests/test_invalid_inputs.py +57 -0
  148. qector_decoder_v3-0.5.0/python/tests/test_latency_percentiles_monotonic.py +43 -0
  149. qector_decoder_v3-0.5.0/python/tests/test_license_included.py +54 -0
  150. qector_decoder_v3-0.5.0/python/tests/test_logical_coset_equivalence.py +122 -0
  151. qector_decoder_v3-0.5.0/python/tests/test_long_run_decode_memory.py +66 -0
  152. qector_decoder_v3-0.5.0/python/tests/test_lookup_table.py +129 -0
  153. qector_decoder_v3-0.5.0/python/tests/test_max_capacity.py +477 -0
  154. qector_decoder_v3-0.5.0/python/tests/test_measurement_error_time_edges.py +77 -0
  155. qector_decoder_v3-0.5.0/python/tests/test_new_modules.py +331 -0
  156. qector_decoder_v3-0.5.0/python/tests/test_no_native_rss_leak.py +69 -0
  157. qector_decoder_v3-0.5.0/python/tests/test_no_python_memory_growth.py +61 -0
  158. qector_decoder_v3-0.5.0/python/tests/test_noncontiguous_arrays.py +77 -0
  159. qector_decoder_v3-0.5.0/python/tests/test_numpy_dtypes.py +69 -0
  160. qector_decoder_v3-0.5.0/python/tests/test_opencl_cpu_bit_identical.py +49 -0
  161. qector_decoder_v3-0.5.0/python/tests/test_optional_extras.py +61 -0
  162. qector_decoder_v3-0.5.0/python/tests/test_performance_regression_smoke.py +46 -0
  163. qector_decoder_v3-0.5.0/python/tests/test_predecoder.py +52 -0
  164. qector_decoder_v3-0.5.0/python/tests/test_predicted_observables.py +102 -0
  165. qector_decoder_v3-0.5.0/python/tests/test_property_faithfulness.py +135 -0
  166. qector_decoder_v3-0.5.0/python/tests/test_public_api_imports.py +108 -0
  167. qector_decoder_v3-0.5.0/python/tests/test_pymatching_compat.py +121 -0
  168. qector_decoder_v3-0.5.0/python/tests/test_pymatching_full_dem_vs_collapsed.py +78 -0
  169. qector_decoder_v3-0.5.0/python/tests/test_pymatching_parity_memory_x.py +80 -0
  170. qector_decoder_v3-0.5.0/python/tests/test_pymatching_parity_memory_z.py +73 -0
  171. qector_decoder_v3-0.5.0/python/tests/test_pymatching_parity_p_sweep.py +77 -0
  172. qector_decoder_v3-0.5.0/python/tests/test_pymatching_parity_rounds_sweep.py +73 -0
  173. qector_decoder_v3-0.5.0/python/tests/test_readme_examples.py +75 -0
  174. qector_decoder_v3-0.5.0/python/tests/test_reproduce_commands.py +76 -0
  175. qector_decoder_v3-0.5.0/python/tests/test_result.py +86 -0
  176. qector_decoder_v3-0.5.0/python/tests/test_scaling_examples.py +64 -0
  177. qector_decoder_v3-0.5.0/python/tests/test_sinter.py +53 -0
  178. qector_decoder_v3-0.5.0/python/tests/test_sliding_window.py +34 -0
  179. qector_decoder_v3-0.5.0/python/tests/test_sliding_window_rounds.py +72 -0
  180. qector_decoder_v3-0.5.0/python/tests/test_sparse_blossom_boundary_pairing.py +96 -0
  181. qector_decoder_v3-0.5.0/python/tests/test_sparse_blossom_dense_syndromes.py +43 -0
  182. qector_decoder_v3-0.5.0/python/tests/test_sparse_blossom_faithfulness.py +43 -0
  183. qector_decoder_v3-0.5.0/python/tests/test_sparse_blossom_weight_gap.py +68 -0
  184. qector_decoder_v3-0.5.0/python/tests/test_stabilizer_equivalent_corrections.py +153 -0
  185. qector_decoder_v3-0.5.0/python/tests/test_stim_observable_agreement.py +102 -0
  186. qector_decoder_v3-0.5.0/python/tests/test_streaming_batch_equivalence.py +94 -0
  187. qector_decoder_v3-0.5.0/python/tests/test_streaming_flush.py +67 -0
  188. qector_decoder_v3-0.5.0/python/tests/test_streaming_history_size.py +69 -0
  189. qector_decoder_v3-0.5.0/python/tests/test_syndrome_faithfulness.py +184 -0
  190. qector_decoder_v3-0.5.0/python/tests/test_type_hints.py +82 -0
  191. qector_decoder_v3-0.5.0/python/tests/test_unionfind_adversarial_failure_documented.py +150 -0
  192. qector_decoder_v3-0.5.0/python/tests/test_unionfind_repetition_faithfulness.py +55 -0
  193. qector_decoder_v3-0.5.0/python/tests/test_unionfind_surface_faithfulness.py +46 -0
  194. qector_decoder_v3-0.5.0/python/tests/test_unionfind_toric_faithfulness.py +39 -0
  195. qector_decoder_v3-0.5.0/python/tests/test_validation.py +215 -0
  196. qector_decoder_v3-0.5.0/python/tests/test_version_consistency.py +54 -0
  197. qector_decoder_v3-0.5.0/python/tests/test_weight_gap_histogram.py +66 -0
  198. qector_decoder_v3-0.5.0/python/tests/test_wheel_import.py +70 -0
  199. qector_decoder_v3-0.5.0/python/tests/test_workbench_backend_detection.py +27 -0
  200. qector_decoder_v3-0.5.0/python/tests/test_workbench_cancel_job.py +47 -0
  201. qector_decoder_v3-0.5.0/python/tests/test_workbench_environment_snapshot.py +35 -0
  202. qector_decoder_v3-0.5.0/python/tests/test_workbench_export_csv_json.py +48 -0
  203. qector_decoder_v3-0.5.0/python/tests/test_workbench_export_pdf.py +45 -0
  204. qector_decoder_v3-0.5.0/python/tests/test_workbench_load_dem.py +51 -0
  205. qector_decoder_v3-0.5.0/python/tests/test_workbench_load_stim.py +48 -0
  206. qector_decoder_v3-0.5.0/python/tests/test_workbench_run_benchmark.py +65 -0
  207. qector_decoder_v3-0.5.0/scripts/auto_backend_calibrate.py +90 -0
  208. qector_decoder_v3-0.5.0/scripts/belief_extended.py +201 -0
  209. qector_decoder_v3-0.5.0/scripts/belief_grid.py +102 -0
  210. qector_decoder_v3-0.5.0/scripts/belief_reference_compare.py +152 -0
  211. qector_decoder_v3-0.5.0/scripts/benchmark_bp_marginal.py +98 -0
  212. qector_decoder_v3-0.5.0/scripts/benchmark_gpu.py +116 -0
  213. qector_decoder_v3-0.5.0/scripts/benchmark_gpu_end2end.py +156 -0
  214. qector_decoder_v3-0.5.0/scripts/benchmark_heuristic.py +70 -0
  215. qector_decoder_v3-0.5.0/scripts/benchmark_heuristic_sparse.py +85 -0
  216. qector_decoder_v3-0.5.0/scripts/benchmark_ler.py +263 -0
  217. qector_decoder_v3-0.5.0/scripts/benchmark_ler_gpu.py +474 -0
  218. qector_decoder_v3-0.5.0/scripts/benchmark_ler_reporting.py +215 -0
  219. qector_decoder_v3-0.5.0/scripts/benchmark_ler_serious.py +583 -0
  220. qector_decoder_v3-0.5.0/scripts/benchmark_ler_surface.py +245 -0
  221. qector_decoder_v3-0.5.0/scripts/benchmark_proper_toric.py +97 -0
  222. qector_decoder_v3-0.5.0/scripts/benchmark_vs_pymatching.py +151 -0
  223. qector_decoder_v3-0.5.0/scripts/competitive_belief_matching.py +154 -0
  224. qector_decoder_v3-0.5.0/scripts/competitive_stim_ler.py +196 -0
  225. qector_decoder_v3-0.5.0/scripts/d15_mismatch_audit.py +188 -0
  226. qector_decoder_v3-0.5.0/scripts/generate_report_pdf.py +1272 -0
  227. qector_decoder_v3-0.5.0/scripts/gpu_extensive_test.py +147 -0
  228. qector_decoder_v3-0.5.0/scripts/gpu_memory_profile.py +158 -0
  229. qector_decoder_v3-0.5.0/scripts/leak_test.py +144 -0
  230. qector_decoder_v3-0.5.0/scripts/native_memory_profile.py +121 -0
  231. qector_decoder_v3-0.5.0/scripts/run_benchmark.py +71 -0
  232. qector_decoder_v3-0.5.0/scripts/run_competitive_benchmark.py +128 -0
  233. qector_decoder_v3-0.5.0/scripts/run_due_diligence_bundle.py +257 -0
  234. qector_decoder_v3-0.5.0/scripts/run_scaling_benchmark.py +121 -0
  235. qector_decoder_v3-0.5.0/scripts/test_methods.py +4 -0
  236. qector_decoder_v3-0.5.0/scripts/test_sparse_methods.py +4 -0
  237. qector_decoder_v3-0.5.0/scripts/threshold_estimate.py +103 -0
  238. qector_decoder_v3-0.5.0/scripts/tune_blossom_k.py +78 -0
  239. qector_decoder_v3-0.5.0/scripts/verify_uf_rigorous.py +130 -0
  240. qector_decoder_v3-0.5.0/scripts/verify_uf_syndrome.py +148 -0
  241. qector_decoder_v3-0.5.0/scripts/vram_profile.py +107 -0
  242. qector_decoder_v3-0.5.0/scripts/weight_gap_analysis.py +114 -0
@@ -0,0 +1,20 @@
1
+ # Normalize line endings -- enforce LF for all text files regardless of OS
2
+ * text=auto eol=lf
3
+
4
+ # Binaries
5
+ *.whl binary
6
+ *.pyd binary
7
+ *.so binary
8
+ *.dll binary
9
+ *.dylib binary
10
+ *.lib binary
11
+ *.exp binary
12
+ *.a binary
13
+ *.gz binary
14
+ *.zip binary
15
+ *.png binary
16
+ *.jpg binary
17
+ *.jpeg binary
18
+ *.gif binary
19
+ *.ico binary
20
+ *.pdf binary
@@ -0,0 +1,236 @@
1
+ # CI -- Build wheels on Linux/Windows/macOS ARM, publish to PyPI on tag.
2
+ #
3
+ # Rust source is injected at build time from three GitHub Actions secrets
4
+ # (RUST_SRC_B64_1 + RUST_SRC_B64_2 + RUST_SRC_B64_3) to keep the proprietary
5
+ # core private. Secrets are base64 chunks that reassemble to src.tar.gz.
6
+ # On forks / external PRs the secrets will be empty and wheel builds are skipped.
7
+ #
8
+ # Trigger: push to main/master, any tag v*, pull_request, manual dispatch.
9
+
10
+ name: CI
11
+
12
+ on:
13
+ push:
14
+ branches: [main, master]
15
+ tags: ["v*"]
16
+ pull_request:
17
+ workflow_dispatch:
18
+
19
+ permissions:
20
+ contents: read
21
+
22
+ env:
23
+ # Build without OpenCL (SDK not on runners). CUDA is runtime-loaded via
24
+ # libloading so no CUDA toolkit is needed at build time.
25
+ MATURIN_ARGS: --release --no-default-features --features cuda --out dist
26
+
27
+ jobs:
28
+ # ------------------------------------------------------------------
29
+ # Linux x86_64 manylinux wheels
30
+ # ------------------------------------------------------------------
31
+ linux-x86_64:
32
+ name: linux-x86_64-py${{ matrix.python-version }}
33
+ runs-on: ubuntu-22.04
34
+ strategy:
35
+ fail-fast: false
36
+ matrix:
37
+ python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
38
+ steps:
39
+ - uses: actions/checkout@v4
40
+
41
+ - name: Inject Rust source
42
+ env:
43
+ PART1: ${{ secrets.RUST_SRC_B64_1 }}
44
+ PART2: ${{ secrets.RUST_SRC_B64_2 }}
45
+ PART3: ${{ secrets.RUST_SRC_B64_3 }}
46
+ run: |
47
+ if [ -z "$PART1" ]; then
48
+ echo "::warning::RUST_SRC_B64_1 secret not set -- skipping wheel build"
49
+ echo "SKIP_BUILD=1" >> "$GITHUB_ENV"
50
+ else
51
+ echo "${PART1}${PART2}${PART3}" | base64 -d | tar -xzf - -C .
52
+ echo "SKIP_BUILD=0" >> "$GITHUB_ENV"
53
+ fi
54
+
55
+ - uses: actions/setup-python@v5
56
+ if: env.SKIP_BUILD == '0'
57
+ with:
58
+ python-version: ${{ matrix.python-version }}
59
+
60
+ - name: Build manylinux wheel
61
+ if: env.SKIP_BUILD == '0'
62
+ uses: PyO3/maturin-action@v1
63
+ with:
64
+ target: x86_64
65
+ manylinux: auto
66
+ args: ${{ env.MATURIN_ARGS }} -i python${{ matrix.python-version }}
67
+ sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
68
+
69
+ - uses: actions/upload-artifact@v4
70
+ if: env.SKIP_BUILD == '0'
71
+ with:
72
+ name: wheels-linux-x86_64-py${{ matrix.python-version }}
73
+ path: dist
74
+
75
+ # ------------------------------------------------------------------
76
+ # Windows x64 wheels
77
+ # ------------------------------------------------------------------
78
+ windows-x64:
79
+ name: windows-x64-py${{ matrix.python-version }}
80
+ runs-on: windows-latest
81
+ strategy:
82
+ fail-fast: false
83
+ matrix:
84
+ python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
85
+ steps:
86
+ - uses: actions/checkout@v4
87
+
88
+ - name: Inject Rust source
89
+ env:
90
+ PART1: ${{ secrets.RUST_SRC_B64_1 }}
91
+ PART2: ${{ secrets.RUST_SRC_B64_2 }}
92
+ PART3: ${{ secrets.RUST_SRC_B64_3 }}
93
+ shell: bash
94
+ run: |
95
+ if [ -z "$PART1" ]; then
96
+ echo "::warning::RUST_SRC_B64_1 secret not set -- skipping wheel build"
97
+ echo "SKIP_BUILD=1" >> "$GITHUB_ENV"
98
+ else
99
+ echo "${PART1}${PART2}${PART3}" | base64 -d | tar -xzf - -C .
100
+ echo "SKIP_BUILD=0" >> "$GITHUB_ENV"
101
+ fi
102
+
103
+ - uses: actions/setup-python@v5
104
+ if: env.SKIP_BUILD == '0'
105
+ with:
106
+ python-version: ${{ matrix.python-version }}
107
+ architecture: x64
108
+
109
+ - name: Build Windows wheel
110
+ if: env.SKIP_BUILD == '0'
111
+ uses: PyO3/maturin-action@v1
112
+ with:
113
+ target: x64
114
+ args: ${{ env.MATURIN_ARGS }} -i python
115
+ sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
116
+
117
+ - uses: actions/upload-artifact@v4
118
+ if: env.SKIP_BUILD == '0'
119
+ with:
120
+ name: wheels-windows-x64-py${{ matrix.python-version }}
121
+ path: dist
122
+
123
+ # ------------------------------------------------------------------
124
+ # macOS Apple Silicon (aarch64) wheels
125
+ # ------------------------------------------------------------------
126
+ macos-arm:
127
+ name: macos-aarch64-py${{ matrix.python-version }}
128
+ runs-on: macos-14
129
+ strategy:
130
+ fail-fast: false
131
+ matrix:
132
+ python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
133
+ steps:
134
+ - uses: actions/checkout@v4
135
+
136
+ - name: Inject Rust source
137
+ env:
138
+ PART1: ${{ secrets.RUST_SRC_B64_1 }}
139
+ PART2: ${{ secrets.RUST_SRC_B64_2 }}
140
+ PART3: ${{ secrets.RUST_SRC_B64_3 }}
141
+ run: |
142
+ if [ -z "$PART1" ]; then
143
+ echo "::warning::RUST_SRC_B64_1 secret not set -- skipping wheel build"
144
+ echo "SKIP_BUILD=1" >> "$GITHUB_ENV"
145
+ else
146
+ echo "${PART1}${PART2}${PART3}" | base64 -d | tar -xzf - -C .
147
+ echo "SKIP_BUILD=0" >> "$GITHUB_ENV"
148
+ fi
149
+
150
+ - uses: actions/setup-python@v5
151
+ if: env.SKIP_BUILD == '0'
152
+ with:
153
+ python-version: ${{ matrix.python-version }}
154
+
155
+ - name: Build macOS ARM wheel
156
+ if: env.SKIP_BUILD == '0'
157
+ uses: PyO3/maturin-action@v1
158
+ with:
159
+ target: aarch64
160
+ args: ${{ env.MATURIN_ARGS }} -i python
161
+ sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
162
+
163
+ - uses: actions/upload-artifact@v4
164
+ if: env.SKIP_BUILD == '0'
165
+ with:
166
+ name: wheels-macos-aarch64-py${{ matrix.python-version }}
167
+ path: dist
168
+
169
+ # ------------------------------------------------------------------
170
+ # Source distribution (sdist) -- pure Python, no Rust needed
171
+ # ------------------------------------------------------------------
172
+ sdist:
173
+ name: sdist
174
+ runs-on: ubuntu-latest
175
+ steps:
176
+ - uses: actions/checkout@v4
177
+
178
+ - name: Inject Rust source (needed by maturin sdist to embed Cargo.toml)
179
+ env:
180
+ PART1: ${{ secrets.RUST_SRC_B64_1 }}
181
+ PART2: ${{ secrets.RUST_SRC_B64_2 }}
182
+ PART3: ${{ secrets.RUST_SRC_B64_3 }}
183
+ run: |
184
+ if [ -z "$PART1" ]; then
185
+ echo "SKIP_BUILD=1" >> "$GITHUB_ENV"
186
+ else
187
+ echo "${PART1}${PART2}${PART3}" | base64 -d | tar -xzf - -C .
188
+ echo "SKIP_BUILD=0" >> "$GITHUB_ENV"
189
+ fi
190
+
191
+ - name: Build sdist
192
+ if: env.SKIP_BUILD == '0'
193
+ uses: PyO3/maturin-action@v1
194
+ with:
195
+ command: sdist
196
+ args: --out dist
197
+
198
+ - uses: actions/upload-artifact@v4
199
+ if: env.SKIP_BUILD == '0'
200
+ with:
201
+ name: wheels-sdist
202
+ path: dist
203
+
204
+ # ------------------------------------------------------------------
205
+ # Publish to PyPI via OIDC Trusted Publisher (no token required)
206
+ # Runs only on version tags pushed to the main repo (not forks)
207
+ # ------------------------------------------------------------------
208
+ release:
209
+ name: publish-to-pypi
210
+ runs-on: ubuntu-latest
211
+ if: >
212
+ startsWith(github.ref, 'refs/tags/v') &&
213
+ github.repository == 'GuillaumeLessard/qector-decoder' &&
214
+ github.event_name != 'pull_request'
215
+ needs: [linux-x86_64, windows-x64, macos-arm, sdist]
216
+ environment: pypi
217
+ permissions:
218
+ id-token: write
219
+ contents: write
220
+ attestations: write
221
+ steps:
222
+ - uses: actions/download-artifact@v4
223
+ with:
224
+ path: dist
225
+ merge-multiple: true
226
+
227
+ - name: Generate artifact attestations
228
+ uses: actions/attest-build-provenance@v2
229
+ with:
230
+ subject-path: "dist/*"
231
+
232
+ - name: Publish to PyPI
233
+ uses: pypa/gh-action-pypi-publish@release/v1
234
+ with:
235
+ packages-dir: dist/
236
+ skip-existing: true
@@ -0,0 +1,84 @@
1
+ # Lint and static analysis -- runs on every push/PR, no Rust build needed.
2
+ # Uses the installed wheel from PyPI (or a local sdist) to run the Python layer.
3
+
4
+ name: tests
5
+
6
+ on:
7
+ push:
8
+ branches: [main, master]
9
+ pull_request:
10
+ workflow_dispatch:
11
+
12
+ permissions:
13
+ contents: read
14
+
15
+ jobs:
16
+ # ------------------------------------------------------------------
17
+ # Ruff lint + MyPy type-check
18
+ # ------------------------------------------------------------------
19
+ lint:
20
+ name: ruff-and-mypy
21
+ runs-on: ubuntu-latest
22
+ steps:
23
+ - uses: actions/checkout@v4
24
+ - uses: actions/setup-python@v5
25
+ with:
26
+ python-version: "3.12"
27
+ - name: Install linting tools
28
+ # numpy is intentionally omitted: numpy 2.x stubs use `type` syntax
29
+ # (Python 3.12+) which mypy rejects in py3.9 mode. --ignore-missing-imports
30
+ # in pyproject.toml handles the missing stubs gracefully.
31
+ run: pip install ruff mypy
32
+ - name: Ruff lint
33
+ run: ruff check python/
34
+ - name: Ruff format check
35
+ run: ruff format --check python/
36
+ - name: MyPy
37
+ # continue-on-error: pre-existing type inconsistencies in the Python layer
38
+ # (no-any-return, valid-type, attr-defined, operator, assignment) will be
39
+ # addressed in a follow-up typing PR. Lint and format checks are hard failures.
40
+ continue-on-error: true
41
+ run: mypy python/qector_decoder_v3/ --ignore-missing-imports
42
+
43
+ # ------------------------------------------------------------------
44
+ # Docker image build smoke test
45
+ # Dockerfile runs maturin build --release which requires the real Rust
46
+ # source (injected at CI build time via secrets). In the tests workflow
47
+ # the source is a stub, so the build is expected to fail -- mark
48
+ # continue-on-error so this job is informational only.
49
+ # ------------------------------------------------------------------
50
+ docker:
51
+ name: docker-build
52
+ runs-on: ubuntu-latest
53
+ continue-on-error: true
54
+ steps:
55
+ - uses: actions/checkout@v4
56
+ - name: Build Docker image (Rust source stub -- expected failure)
57
+ run: docker build -t qector-decoder-test:ci . || echo "::warning::Docker build failed (stub src -- expected)"
58
+
59
+ # ------------------------------------------------------------------
60
+ # Python layer import smoke test (installs from PyPI)
61
+ # ------------------------------------------------------------------
62
+ smoke-import:
63
+ name: smoke-import-py${{ matrix.python-version }}
64
+ runs-on: ubuntu-22.04
65
+ strategy:
66
+ fail-fast: false
67
+ matrix:
68
+ python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
69
+ steps:
70
+ - uses: actions/checkout@v4
71
+ - uses: actions/setup-python@v5
72
+ with:
73
+ python-version: ${{ matrix.python-version }}
74
+ - name: Install from PyPI
75
+ run: pip install qector-decoder-v3 --pre || echo "PyPI package not yet available -- skipping import test"
76
+ - name: Import smoke test
77
+ run: |
78
+ python -c "
79
+ try:
80
+ import qector_decoder_v3
81
+ print(f'qector_decoder_v3 {getattr(qector_decoder_v3, \"__version__\", \"unknown\")} imported OK')
82
+ except ImportError as e:
83
+ print(f'ImportError (expected if not on PyPI yet): {e}')
84
+ "
@@ -0,0 +1,80 @@
1
+ # QECTOR Decoder v3 -- .gitignore
2
+ # =================================
3
+
4
+ # --- Build artifacts ---
5
+ /target/
6
+ /dist/
7
+ *.whl
8
+ *.tar.gz
9
+ *.pyd
10
+ *.so
11
+ *.dll
12
+ *.dylib
13
+
14
+ # --- Python ---
15
+ __pycache__/
16
+ *.py[cod]
17
+ *$py.class
18
+ *.egg-info/
19
+ *.egg
20
+ .eggs/
21
+ build/
22
+ develop-eggs/
23
+ downloads/
24
+ eggs/
25
+ .installed.cfg
26
+ lib64/
27
+ parts/
28
+ sdist/
29
+ var/
30
+ wheels/
31
+ *.spec
32
+ pip-wheel-metadata/
33
+ share/python-wheels/
34
+ MANIFEST
35
+
36
+ # --- Virtual environments ---
37
+ .venv/
38
+ venv/
39
+ env/
40
+ ENV/
41
+ env.bak/
42
+ venv.bak/
43
+
44
+ # --- IDE ---
45
+ .vscode/
46
+ .idea/
47
+ *.swp
48
+ *.swo
49
+ *~
50
+
51
+ # --- Rust ---
52
+ Cargo.lock.bak
53
+
54
+ # --- Generated lib artifacts (only OpenCL.def is tracked) ---
55
+ lib/OpenCL.lib
56
+ lib/OpenCL.exp
57
+
58
+ # --- Local build/dev directories ---
59
+ actions-runner/
60
+ artifacts/
61
+
62
+ # --- OS ---
63
+ .DS_Store
64
+ Thumbs.db
65
+ desktop.ini
66
+
67
+ # --- Benchmark outputs (tracked selectively) ---
68
+ # benchmark_results/ is tracked intentionally for reproducibility evidence
69
+
70
+ # --- Testing ---
71
+ .pytest_cache/
72
+ .coverage
73
+ htmlcov/
74
+ .mypy_cache/
75
+ .ruff_cache/
76
+
77
+ # --- Temporary ---
78
+ *.tmp
79
+ *.bak
80
+ *.orig
@@ -0,0 +1,64 @@
1
+ # Changelog
2
+
3
+ All notable changes to QECTOR Decoder v3 are documented here. The format is based
4
+ on [Keep a Changelog](https://keepachangelog.com/), and the project aims to follow
5
+ semantic versioning. Every benchmark artifact is stamped with the git commit and
6
+ environment so report figures trace back to a specific build.
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [0.5.0] - 2026-06-23
11
+
12
+ ### Fixed
13
+ - **Blossom exactness at large distance (adaptive-k).** `BlossomDecoder` previously
14
+ used a fixed `k=12` candidate cap, which undershot the optimum on large dense
15
+ circuit-level graphs (d ≥ 13–15), producing heavier matchings and a markedly
16
+ worse logical error rate than PyMatching at d=15. The candidate set is now
17
+ **adaptive**, `k = max(12, 4·√n_defects)`, restoring exact-MWPM LER parity with
18
+ PyMatching through **d=15** (`memory_x` and `memory_z`). Locked permanently by
19
+ `test_blossom_adaptive_k_regression.py`, `test_blossom_d15_no_gap.py`,
20
+ `test_blossom_candidate_set_contains_optimal.py`, `test_weight_gap_histogram.py`,
21
+ and `test_defect_count_vs_weight_gap.py`.
22
+
23
+ ### Added
24
+ - **QECTOR Workbench** (`qector_decoder_v3.workbench.Workbench`): headless,
25
+ fully-tested controller to load `.stim`/`.dem` files, run cancelable benchmark
26
+ jobs through a FIFO queue, and export JSON/CSV/PDF reports (charts built from
27
+ real artifacts, no fabricated data). Backend detection + environment snapshot.
28
+ - **Evidence & reproduction scripts**: `run_due_diligence_bundle.py` (one-command
29
+ evidence bundle with hashes + git commit), `belief_reference_compare.py`,
30
+ `gpu_memory_profile.py`, `auto_backend_calibrate.py`, `leak_test.py`.
31
+ - **Provenance**: `benchmarking.capture_environment()` now records `git_commit`, so
32
+ every JSON artifact and report figure points to the exact build it came from
33
+ (replaces "Git commit: unknown").
34
+ - **Expanded validation suite** covering: exact-MWPM parity (memory_x/z, p-sweep,
35
+ rounds-sweep), DEM-collapse mathematical equivalence + d=11/d=15 regression
36
+ fixtures (50,484→6,718 and 132,426→17,862), logical-observable / stabilizer-coset
37
+ correctness, belief-matching seed×p grid + reference cross-check, BP-OSD on
38
+ BB[[72,12]]/BB[[144,12,12]]/HGP/bicycle, GPU CPU-bit-identity + fallback +
39
+ calibration, latency percentiles + tail, and memory/leak profiling.
40
+ - **Documentation**: README "Validated scope", "When to use which decoder" decision
41
+ matrix, and a permanent "Known limitations" section with honest latency ratios.
42
+
43
+ ### Build
44
+ - Refreshed Rust dependencies (`rayon` 1.12, `fastrand` 2.4) and migrated the
45
+ optional `grpc`/`full` stack to `tonic` 0.14 / `prost` 0.14 with a vendored
46
+ `protoc` (`protoc-bin-vendored`), so gRPC builds need no system `protoc`. The
47
+ default wheel features (`opencl`, `cuda` with CPU fallback) are unchanged.
48
+
49
+ ## [0.4.0]
50
+
51
+ ### Added
52
+ - `SparseBlossomDecoder` (region-growing, RadixHeap, exact DP for n ≤ 20 with
53
+ Edmonds primal-dual fallback), bit-validated against `BlossomDecoder`.
54
+ - Ecosystem layer: `codes`, `dem`, `result`, `backend`, `pymatching_compat`,
55
+ `benchmarking`; belief-matching and BP-OSD decoders; Stim/Sinter compatibility.
56
+ - Native CUDA (NVRTC + Driver API) and OpenCL batch decoders with CPU fallback.
57
+
58
+ ### Fixed
59
+ - Stim DEM loading uses the correct detector graph (mechanisms = columns,
60
+ detectors = rows), replacing the earlier `stim_compat` heuristic.
61
+
62
+ ## [0.2.0]
63
+
64
+ - Python + Numba baseline decoder core (pre-Rust rewrite).
@@ -0,0 +1,133 @@
1
+ # Commercial Licensing
2
+
3
+ QECTOR Decoder v3 is source-available for personal, academic, educational, and
4
+ non-commercial research use.
5
+
6
+ Commercial use requires a paid commercial license.
7
+
8
+ Commercial use includes, but is not limited to:
9
+
10
+ - company use
11
+ - startup use
12
+ - commercial R&D
13
+ - government use
14
+ - institutional or funded use
15
+ - paid consulting
16
+ - SaaS use
17
+ - hosted API use
18
+ - OEM embedding
19
+ - product integration
20
+ - redistribution
21
+ - internal business operations
22
+ - commercial benchmarking
23
+ - revenue-generating use
24
+ - fundraising or investor validation
25
+
26
+ ## Current commercial pricing position
27
+
28
+ QECTOR is priced as a source-available Rust/Python QEC R&D platform, not as a
29
+ mature real-time hardware QEC stack.
30
+
31
+ The defendable value is decoder diversity, reproducible benchmark packaging,
32
+ BP-OSD / LDPC workflows, CPU/GPU batch paths, source access, and commercial legal
33
+ clarity.
34
+
35
+ QECTOR should not be sold as the universal fastest MWPM decoder. PyMatching
36
+ remains the latency leader for exact MWPM on the tested workloads. QECTOR's
37
+ commercial value must come from broader workflow packaging, differentiated R&D
38
+ use cases, reproducible artifacts, and selected accuracy-mode gains.
39
+
40
+ ## Why pay when PyMatching and Stim are free?
41
+
42
+ PyMatching and Stim are excellent free baselines. A buyer should not license
43
+ QECTOR only to get exact-MWPM surface-code latency.
44
+
45
+ QECTOR is a paid commercial option when a team needs:
46
+
47
+ | Need | QECTOR value |
48
+ |---|---|
49
+ | Multi-decoder experiments | Union-Find, Blossom, Sparse Blossom, BP-OSD, streaming, batch, and hybrid workflows in one source-available platform |
50
+ | LDPC/qLDPC coverage | BP-OSD and LDPC workflows beyond plain graphlike MWPM |
51
+ | Reproducible evidence | Benchmark artifacts, environment snapshots, reproducibility scripts, and Workbench report bundles |
52
+ | Commercial permission | Written license terms for company, lab, funded, product, hosted, or revenue-linked use |
53
+ | Support path | Paid support, validation package, and advisory options for commercial R&D users |
54
+
55
+ The correct commercial pitch is workflow/time-saving value, reproducible proof,
56
+ legal clarity, and decoder breadth. Do not pitch QECTOR as a universal PyMatching
57
+ replacement.
58
+
59
+ ## Public pricing tiers
60
+
61
+ | Tier | Price | Scope |
62
+ |---|---:|---|
63
+ | Personal / Academic | Free | Personal, academic, educational, and non-commercial research use |
64
+ | Commercial Evaluation Pilot | $1,500 / 90 days | Internal commercial evaluation, up to 2 named users, creditable toward annual license |
65
+ | Startup Commercial | $3,500 / year | Early commercial R&D, internal prototype use, up to 5 named users |
66
+ | Professional / Lab | $15,000 / year | Funded lab or commercial R&D use, benchmark workflows, up to 20 named users |
67
+ | Enterprise R&D | $35,000+ / year | Internal enterprise evaluation and commercial QEC research workflows |
68
+ | SaaS / Hosted API | Contact only | Beta review only until production hosted infrastructure, support scope, and hosted-value proof exist |
69
+ | OEM / Embedded | Contact only | Partner validation only until hardware/platform scope and redistribution terms exist |
70
+ | Strategic Partnership | Custom | No public exclusive-price floor; requires validation, IP, or partnership scope |
71
+
72
+ Hosted API and OEM prices are intentionally not listed publicly at this stage.
73
+ QECTOR's hosted layer is not yet enterprise SaaS infrastructure, and OEM rights
74
+ require a serious hardware or platform partner before pricing can be responsible.
75
+
76
+ ## Optional support and advisory pricing
77
+
78
+ | Service | Price | Scope |
79
+ |---|---:|---|
80
+ | Priority Support | $5,000 / year | Private email support and priority bug review for licensed users |
81
+ | Integration Support | $10,000 / year | Benchmark review, install support, and integration guidance |
82
+ | Validation Report Package | $5,000 one-time | Review of customer benchmark setup and reproducibility package |
83
+ | Custom Engineering | $150 / hour | Private fixes, special reports, scripts, or workflow adaptation |
84
+ | Technical Advisory | $2,000 / day | Architecture review and QEC workflow consulting |
85
+
86
+ ## Pilot success criteria
87
+
88
+ A commercial pilot should be judged on measurable workflow value, not vague
89
+ interest.
90
+
91
+ Recommended pilot proof points:
92
+
93
+ - install success on the buyer's target machines
94
+ - one reproduced benchmark artifact bundle
95
+ - one QECTOR vs PyMatching comparison run
96
+ - one BP-OSD / LDPC workflow if relevant
97
+ - one artifact manifest with hashes and environment snapshot
98
+ - documented time saved versus the buyer's existing PyMatching / Stim / custom-script workflow
99
+
100
+ ## Next proof asset
101
+
102
+ The next commercially important public artifact is a reproducible GPU/batch
103
+ benchmark campaign against a strong PyMatching + Stim baseline.
104
+
105
+ Do not claim universal GPU throughput superiority, RTX 4090 speedups, SaaS
106
+ readiness, OEM readiness, or real-time hardware decoding until the repository
107
+ includes reproducible artifacts with hardware, driver/runtime versions, batch
108
+ size, circuit/DEM, seeds, wall time, memory, output hashes, and environment
109
+ snapshots.
110
+
111
+ ## Rights not included by default
112
+
113
+ Unless explicitly granted in a written commercial agreement, no license tier
114
+ includes:
115
+
116
+ - redistribution rights
117
+ - sublicensing rights
118
+ - OEM rights
119
+ - hosted API rights
120
+ - SaaS rights
121
+ - trademark rights
122
+ - patent rights
123
+ - exclusivity
124
+ - warranty or indemnification
125
+ - government or defense rights
126
+
127
+ ## Official licensing portal
128
+
129
+ https://www.qector.store
130
+
131
+ ## Commercial contact
132
+
133
+ admin@qector.store