symq 0.2.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 (751) hide show
  1. symq-0.2.0/.gitattributes +3 -0
  2. symq-0.2.0/.github/CODEOWNERS +3 -0
  3. symq-0.2.0/.github/ISSUE_TEMPLATE/config.yml +5 -0
  4. symq-0.2.0/.github/ISSUE_TEMPLATE/correctness.yml +57 -0
  5. symq-0.2.0/.github/ISSUE_TEMPLATE/feature.yml +23 -0
  6. symq-0.2.0/.github/ISSUE_TEMPLATE/question.yml +15 -0
  7. symq-0.2.0/.github/PULL_REQUEST_TEMPLATE.md +33 -0
  8. symq-0.2.0/.github/dependabot.yml +22 -0
  9. symq-0.2.0/.github/workflows/affine-basis-study.yml +54 -0
  10. symq-0.2.0/.github/workflows/affine-phase.yml +45 -0
  11. symq-0.2.0/.github/workflows/affine-target-table.yml +45 -0
  12. symq-0.2.0/.github/workflows/anchored-kraus.yml +36 -0
  13. symq-0.2.0/.github/workflows/backward-ancilla.yml +50 -0
  14. symq-0.2.0/.github/workflows/channel-certificates.yml +48 -0
  15. symq-0.2.0/.github/workflows/ci.yml +262 -0
  16. symq-0.2.0/.github/workflows/cut-invariants.yml +48 -0
  17. symq-0.2.0/.github/workflows/double-isolated-miter.yml +44 -0
  18. symq-0.2.0/.github/workflows/formal-runtime-cnf.yml +58 -0
  19. symq-0.2.0/.github/workflows/hmr-table-contract.yml +38 -0
  20. symq-0.2.0/.github/workflows/isolated-miter-worker.yml +38 -0
  21. symq-0.2.0/.github/workflows/lean-phase-proofs.yml +59 -0
  22. symq-0.2.0/.github/workflows/nightly.yml +117 -0
  23. symq-0.2.0/.github/workflows/nonlinear-phase-bits.yml +46 -0
  24. symq-0.2.0/.github/workflows/phase-adaptive.yml +43 -0
  25. symq-0.2.0/.github/workflows/phase-delta-binding.yml +53 -0
  26. symq-0.2.0/.github/workflows/phase-discovery.yml +41 -0
  27. symq-0.2.0/.github/workflows/phase-factored.yml +50 -0
  28. symq-0.2.0/.github/workflows/phase-quotient.yml +48 -0
  29. symq-0.2.0/.github/workflows/phase-separator.yml +47 -0
  30. symq-0.2.0/.github/workflows/portable-phase-proofs.yml +77 -0
  31. symq-0.2.0/.github/workflows/qiskit-transpiler-pilot.yml +74 -0
  32. symq-0.2.0/.github/workflows/release.yml +308 -0
  33. symq-0.2.0/.github/workflows/research.yml +135 -0
  34. symq-0.2.0/.github/workflows/shift-diagonal-ancilla.yml +71 -0
  35. symq-0.2.0/.github/workflows/streaming-kraus.yml +46 -0
  36. symq-0.2.0/.github/workflows/table-xor-contract.yml +53 -0
  37. symq-0.2.0/.github/workflows/table-xor-public-api.yml +40 -0
  38. symq-0.2.0/.gitignore +23 -0
  39. symq-0.2.0/AGENTS.md +12 -0
  40. symq-0.2.0/CHANGELOG.md +701 -0
  41. symq-0.2.0/CITATION.cff +23 -0
  42. symq-0.2.0/CODE_OF_CONDUCT.md +34 -0
  43. symq-0.2.0/CONTRIBUTING.md +91 -0
  44. symq-0.2.0/LICENSE +21 -0
  45. symq-0.2.0/PKG-INFO +321 -0
  46. symq-0.2.0/README.md +259 -0
  47. symq-0.2.0/RELEASING.md +127 -0
  48. symq-0.2.0/SECURITY.md +49 -0
  49. symq-0.2.0/THIRD_PARTY_NOTICES.md +49 -0
  50. symq-0.2.0/benchmarks/README.md +120 -0
  51. symq-0.2.0/benchmarks/__init__.py +1 -0
  52. symq-0.2.0/benchmarks/affine_basis.py +316 -0
  53. symq-0.2.0/benchmarks/affine_basis_cases.py +135 -0
  54. symq-0.2.0/benchmarks/affine_basis_operations.py +191 -0
  55. symq-0.2.0/benchmarks/affine_basis_summary.py +146 -0
  56. symq-0.2.0/benchmarks/affine_phase.py +343 -0
  57. symq-0.2.0/benchmarks/affine_table.py +150 -0
  58. symq-0.2.0/benchmarks/anchored_kraus.py +232 -0
  59. symq-0.2.0/benchmarks/anchored_stream.py +144 -0
  60. symq-0.2.0/benchmarks/backward_ancilla.py +255 -0
  61. symq-0.2.0/benchmarks/bilinear_kmb.py +164 -0
  62. symq-0.2.0/benchmarks/bitset_degree.py +60 -0
  63. symq-0.2.0/benchmarks/channel_certificate.py +226 -0
  64. symq-0.2.0/benchmarks/classical_cones.py +151 -0
  65. symq-0.2.0/benchmarks/comparative.py +405 -0
  66. symq-0.2.0/benchmarks/comparative_manifest.json +194 -0
  67. symq-0.2.0/benchmarks/comparative_report.py +144 -0
  68. symq-0.2.0/benchmarks/comparative_worker.py +280 -0
  69. symq-0.2.0/benchmarks/corpus/kickmix/LICENSE-APACHE-2.0 +202 -0
  70. symq-0.2.0/benchmarks/corpus/kickmix/MANIFEST.json +46 -0
  71. symq-0.2.0/benchmarks/corpus/kickmix/README.md +16 -0
  72. symq-0.2.0/benchmarks/corpus/kickmix/cmul16_mod_21.kmx +77 -0
  73. symq-0.2.0/benchmarks/corpus/kickmix/iadd8_qc_2clean_6dirty.kmx +163 -0
  74. symq-0.2.0/benchmarks/corpus/kickmix/inc3.kmx +6 -0
  75. symq-0.2.0/benchmarks/corpus/kickmix/inc8.kmx +45 -0
  76. symq-0.2.0/benchmarks/corpus/kickmix/mul16_mod_21.kmx +688 -0
  77. symq-0.2.0/benchmarks/corpus/kickmix/qft_measurement.kmx +29 -0
  78. symq-0.2.0/benchmarks/corpus/qcec/5xp1_194.qasm +90 -0
  79. symq-0.2.0/benchmarks/corpus/qcec/C7552_205.qasm +85 -0
  80. symq-0.2.0/benchmarks/corpus/qcec/LICENSE_QCEC.txt +22 -0
  81. symq-0.2.0/benchmarks/corpus/qcec/MANIFEST.json +412 -0
  82. symq-0.2.0/benchmarks/corpus/qcec/README.md +11 -0
  83. symq-0.2.0/benchmarks/corpus/qcec/add6_196.qasm +234 -0
  84. symq-0.2.0/benchmarks/corpus/qcec/alu1_198.qasm +37 -0
  85. symq-0.2.0/benchmarks/corpus/qcec/apla_203.qasm +85 -0
  86. symq-0.2.0/benchmarks/corpus/qcec/c2_181.qasm +121 -0
  87. symq-0.2.0/benchmarks/corpus/qcec/c2_182.qasm +310 -0
  88. symq-0.2.0/benchmarks/corpus/qcec/cm150a_210.qasm +58 -0
  89. symq-0.2.0/benchmarks/corpus/qcec/cm151a_211.qasm +38 -0
  90. symq-0.2.0/benchmarks/corpus/qcec/cm163a_213.qasm +44 -0
  91. symq-0.2.0/benchmarks/corpus/qcec/cu_219.qasm +45 -0
  92. symq-0.2.0/benchmarks/corpus/qcec/dk17_224.qasm +54 -0
  93. symq-0.2.0/benchmarks/corpus/qcec/dk27_225.qasm +29 -0
  94. symq-0.2.0/benchmarks/corpus/qcec/example2_231.qasm +162 -0
  95. symq-0.2.0/benchmarks/corpus/qcec/mlp4_245.qasm +136 -0
  96. symq-0.2.0/benchmarks/corpus/qcec/mod5adder_306.qasm +115 -0
  97. symq-0.2.0/benchmarks/corpus/qcec/pcler8_248.qasm +27 -0
  98. symq-0.2.0/benchmarks/corpus/qcec/rd73_312.qasm +81 -0
  99. symq-0.2.0/benchmarks/corpus/qcec/rd84_313.qasm +118 -0
  100. symq-0.2.0/benchmarks/corpus/qcec/sym9_317.qasm +69 -0
  101. symq-0.2.0/benchmarks/corpus/qsyn/LICENSE-APACHE-2.0 +202 -0
  102. symq-0.2.0/benchmarks/corpus/qsyn/NOTICE.txt +17 -0
  103. symq-0.2.0/benchmarks/corpus/qualtran/LICENSE-APACHE-2.0 +203 -0
  104. symq-0.2.0/benchmarks/corpus/qualtran/README.md +68 -0
  105. symq-0.2.0/benchmarks/corpus/qualtran/gf2mul_mbuc_m1.json +237 -0
  106. symq-0.2.0/benchmarks/corpus/qualtran/gf2mul_mbuc_m2.json +402 -0
  107. symq-0.2.0/benchmarks/corpus/qualtran/rewrite/MANIFEST.json +28 -0
  108. symq-0.2.0/benchmarks/corpus/qualtran/rewrite/m1-full-missing_correction/replacement.json +29 -0
  109. symq-0.2.0/benchmarks/corpus/qualtran/rewrite/m1-full-missing_correction/request.json +47 -0
  110. symq-0.2.0/benchmarks/corpus/qualtran/rewrite/m1-full-missing_correction/source.json +54 -0
  111. symq-0.2.0/benchmarks/corpus/qualtran/rewrite/m1-full-none/replacement.json +40 -0
  112. symq-0.2.0/benchmarks/corpus/qualtran/rewrite/m1-full-none/request.json +47 -0
  113. symq-0.2.0/benchmarks/corpus/qualtran/rewrite/m1-full-none/source.json +54 -0
  114. symq-0.2.0/benchmarks/corpus/qualtran/rewrite/m2-full-missing_correction/replacement.json +141 -0
  115. symq-0.2.0/benchmarks/corpus/qualtran/rewrite/m2-full-missing_correction/request.json +53 -0
  116. symq-0.2.0/benchmarks/corpus/qualtran/rewrite/m2-full-missing_correction/source.json +170 -0
  117. symq-0.2.0/benchmarks/corpus/qualtran/rewrite/m2-full-none/replacement.json +152 -0
  118. symq-0.2.0/benchmarks/corpus/qualtran/rewrite/m2-full-none/request.json +53 -0
  119. symq-0.2.0/benchmarks/corpus/qualtran/rewrite/m2-full-none/source.json +170 -0
  120. symq-0.2.0/benchmarks/corpus/veriq/LICENSE-MIT +21 -0
  121. symq-0.2.0/benchmarks/corpus/veriq/NOTICE.txt +18 -0
  122. symq-0.2.0/benchmarks/cut_invariants.py +186 -0
  123. symq-0.2.0/benchmarks/environment.py +117 -0
  124. symq-0.2.0/benchmarks/gf24_basis_scan.py +90 -0
  125. symq-0.2.0/benchmarks/gf24_order_search.py +150 -0
  126. symq-0.2.0/benchmarks/gf24_tower_qualification.py +110 -0
  127. symq-0.2.0/benchmarks/historical/handoff_2026-10-27.json +29 -0
  128. symq-0.2.0/benchmarks/hmr_qualification.py +459 -0
  129. symq-0.2.0/benchmarks/hmr_qualification_manifest.json +90 -0
  130. symq-0.2.0/benchmarks/hmr_table_contract.py +203 -0
  131. symq-0.2.0/benchmarks/import_qcec.py +110 -0
  132. symq-0.2.0/benchmarks/indexed_substitution.py +119 -0
  133. symq-0.2.0/benchmarks/kmb.py +131 -0
  134. symq-0.2.0/benchmarks/kmb_affine_resources.py +80 -0
  135. symq-0.2.0/benchmarks/kmb_reset_cache.py +76 -0
  136. symq-0.2.0/benchmarks/kmb_resource_frontier.py +111 -0
  137. symq-0.2.0/benchmarks/kmx_source_index.py +119 -0
  138. symq-0.2.0/benchmarks/lean_phase_proofs.py +308 -0
  139. symq-0.2.0/benchmarks/nonlinear_phase_bits.py +64 -0
  140. symq-0.2.0/benchmarks/paired.py +135 -0
  141. symq-0.2.0/benchmarks/phase_adaptive.py +161 -0
  142. symq-0.2.0/benchmarks/phase_delta_binding.py +235 -0
  143. symq-0.2.0/benchmarks/phase_discovery.py +106 -0
  144. symq-0.2.0/benchmarks/phase_factored.py +155 -0
  145. symq-0.2.0/benchmarks/phase_quotient.py +212 -0
  146. symq-0.2.0/benchmarks/phase_separator.py +123 -0
  147. symq-0.2.0/benchmarks/phase_separator_frontier.py +96 -0
  148. symq-0.2.0/benchmarks/phase_separator_source.py +92 -0
  149. symq-0.2.0/benchmarks/portable_phase_proofs.py +130 -0
  150. symq-0.2.0/benchmarks/qiskit_rewrite_benchmark.py +116 -0
  151. symq-0.2.0/benchmarks/qiskit_transpiler_pilot.py +101 -0
  152. symq-0.2.0/benchmarks/quick.py +187 -0
  153. symq-0.2.0/benchmarks/report.py +285 -0
  154. symq-0.2.0/benchmarks/reset_cache.py +68 -0
  155. symq-0.2.0/benchmarks/rewrite_cli.py +120 -0
  156. symq-0.2.0/benchmarks/rewrite_kmb_context.py +262 -0
  157. symq-0.2.0/benchmarks/rewrite_qualtran_hmr.py +190 -0
  158. symq-0.2.0/benchmarks/roadmap_campaign.py +319 -0
  159. symq-0.2.0/benchmarks/roadmap_manifest.json +19 -0
  160. symq-0.2.0/benchmarks/run.py +340 -0
  161. symq-0.2.0/benchmarks/shift_diagonal_ancilla.py +321 -0
  162. symq-0.2.0/benchmarks/substitution_crosscheck.py +184 -0
  163. symq-0.2.0/benchmarks/substitution_manifest.json +237 -0
  164. symq-0.2.0/benchmarks/substitution_qualification.md +96 -0
  165. symq-0.2.0/benchmarks/substitution_qualification.py +591 -0
  166. symq-0.2.0/benchmarks/substitution_worker.py +18 -0
  167. symq-0.2.0/benchmarks/table_xor_contract.py +140 -0
  168. symq-0.2.0/docs/architecture.md +130 -0
  169. symq-0.2.0/docs/archive-index.md +90 -0
  170. symq-0.2.0/docs/audit/2026-11-03-next-wave-independent-review.md +355 -0
  171. symq-0.2.0/docs/audit/2026-11-04-next-wave-integration-decision.md +77 -0
  172. symq-0.2.0/docs/audit/formal_runtime_169.md +60 -0
  173. symq-0.2.0/docs/audit/research_159_162.md +40 -0
  174. symq-0.2.0/docs/demo.md +132 -0
  175. symq-0.2.0/docs/evidence/2026-11-03-compiler-handoff-seed.md +133 -0
  176. symq-0.2.0/docs/evidence/2026-11-03-miter-cnf-pilot.md +55 -0
  177. symq-0.2.0/docs/evidence/2026-11-03-miter-proof-c1.md +122 -0
  178. symq-0.2.0/docs/evidence/2026-11-03-qiskit-timing-qualification.md +81 -0
  179. symq-0.2.0/docs/evidence/2026-11-03-qiskit-transpiler-pilot.md +114 -0
  180. symq-0.2.0/docs/evidence/2026-11-03-reset-affine-pilot.md +127 -0
  181. symq-0.2.0/docs/evidence/2026-11-04-bounded-miter-encoding.md +77 -0
  182. symq-0.2.0/docs/evidence/2026-11-04-double-isolated-miter.md +189 -0
  183. symq-0.2.0/docs/evidence/2026-11-04-isolated-miter-worker.md +98 -0
  184. symq-0.2.0/docs/evidence/affine-target-table-2026-11-02.md +64 -0
  185. symq-0.2.0/docs/evidence/comparative-pilot-2026-11-01.md +94 -0
  186. symq-0.2.0/docs/evidence/data/2026-10-31/SHA256SUMS +16 -0
  187. symq-0.2.0/docs/evidence/data/2026-10-31/round1/dev-base.json +809 -0
  188. symq-0.2.0/docs/evidence/data/2026-10-31/round1/dev-head.json +809 -0
  189. symq-0.2.0/docs/evidence/data/2026-10-31/round1/extension-base.json +1275 -0
  190. symq-0.2.0/docs/evidence/data/2026-10-31/round1/extension-head.json +1275 -0
  191. symq-0.2.0/docs/evidence/data/2026-10-31/round1/holdout-base.json +967 -0
  192. symq-0.2.0/docs/evidence/data/2026-10-31/round1/holdout-head.json +967 -0
  193. symq-0.2.0/docs/evidence/data/2026-10-31/round1/synthetic-base.json +933 -0
  194. symq-0.2.0/docs/evidence/data/2026-10-31/round1/synthetic-head.json +933 -0
  195. symq-0.2.0/docs/evidence/data/2026-10-31/round2/dev-base.json +809 -0
  196. symq-0.2.0/docs/evidence/data/2026-10-31/round2/dev-head.json +809 -0
  197. symq-0.2.0/docs/evidence/data/2026-10-31/round2/extension-base.json +1275 -0
  198. symq-0.2.0/docs/evidence/data/2026-10-31/round2/extension-head.json +1275 -0
  199. symq-0.2.0/docs/evidence/data/2026-10-31/round2/holdout-base.json +967 -0
  200. symq-0.2.0/docs/evidence/data/2026-10-31/round2/holdout-head.json +967 -0
  201. symq-0.2.0/docs/evidence/data/2026-10-31/round2/synthetic-base.json +933 -0
  202. symq-0.2.0/docs/evidence/data/2026-10-31/round2/synthetic-head.json +933 -0
  203. symq-0.2.0/docs/evidence/data/2026-11-01/SHA256SUMS +2 -0
  204. symq-0.2.0/docs/evidence/data/2026-11-01/coverage.json +3740 -0
  205. symq-0.2.0/docs/evidence/data/2026-11-01/paired.json +8009 -0
  206. symq-0.2.0/docs/evidence/external-baselines.md +152 -0
  207. symq-0.2.0/docs/evidence/formal-runtime-20261103.md +69 -0
  208. symq-0.2.0/docs/evidence/formal-runtime-20261103b.md +55 -0
  209. symq-0.2.0/docs/evidence/formal-runtime-20261103c.md +107 -0
  210. symq-0.2.0/docs/evidence/hmr-qualification-2026-10-30.md +164 -0
  211. symq-0.2.0/docs/evidence/lean-kernel-phase-proofs-2026-11-03.md +79 -0
  212. symq-0.2.0/docs/evidence/nonlinear-phase-bits-2026-11-02.md +38 -0
  213. symq-0.2.0/docs/evidence/performance-2026-10-31.md +172 -0
  214. symq-0.2.0/docs/evidence/phase-adaptive-2026-11-02.md +116 -0
  215. symq-0.2.0/docs/evidence/phase-discovery-2026-11-02.md +48 -0
  216. symq-0.2.0/docs/evidence/phase-factored-2026-11-02.md +106 -0
  217. symq-0.2.0/docs/evidence/phase-feature-strategies-2026-11-02.md +126 -0
  218. symq-0.2.0/docs/evidence/qcec-findings-2026-10-27.md +89 -0
  219. symq-0.2.0/docs/evidence/roadmap-evidence.md +108 -0
  220. symq-0.2.0/docs/evidence/roadmap-status.md +61 -0
  221. symq-0.2.0/docs/evidence/strategy.md +48 -0
  222. symq-0.2.0/docs/getting-started.md +114 -0
  223. symq-0.2.0/docs/glossary.md +71 -0
  224. symq-0.2.0/docs/guide/affine-basis-study.md +281 -0
  225. symq-0.2.0/docs/guide/affine-phase.md +227 -0
  226. symq-0.2.0/docs/guide/affine-resources.md +113 -0
  227. symq-0.2.0/docs/guide/backends.md +144 -0
  228. symq-0.2.0/docs/guide/backward-ancilla.md +198 -0
  229. symq-0.2.0/docs/guide/channel-certificates.md +185 -0
  230. symq-0.2.0/docs/guide/classical-cones.md +205 -0
  231. symq-0.2.0/docs/guide/cut-invariants.md +249 -0
  232. symq-0.2.0/docs/guide/experimental-composition.md +167 -0
  233. symq-0.2.0/docs/guide/experimental-phases.md +156 -0
  234. symq-0.2.0/docs/guide/experimental.md +82 -0
  235. symq-0.2.0/docs/guide/gf2n-synthesis.md +158 -0
  236. symq-0.2.0/docs/guide/hmr-table-contract.md +237 -0
  237. symq-0.2.0/docs/guide/indexed-substitution.md +162 -0
  238. symq-0.2.0/docs/guide/kickmix-windows.md +97 -0
  239. symq-0.2.0/docs/guide/kmb-binary-windows.md +115 -0
  240. symq-0.2.0/docs/guide/kmb-resource-frontier.md +108 -0
  241. symq-0.2.0/docs/guide/kmb-source-index.md +76 -0
  242. symq-0.2.0/docs/guide/kmx-source-index.md +204 -0
  243. symq-0.2.0/docs/guide/phase-delta-binding.md +204 -0
  244. symq-0.2.0/docs/guide/phase-quotient.md +221 -0
  245. symq-0.2.0/docs/guide/proof-contracts.md +78 -0
  246. symq-0.2.0/docs/guide/reset-cache.md +173 -0
  247. symq-0.2.0/docs/guide/resources.md +72 -0
  248. symq-0.2.0/docs/guide/rewrite-bricks.md +166 -0
  249. symq-0.2.0/docs/guide/rewrite.md +452 -0
  250. symq-0.2.0/docs/guide/sat.md +138 -0
  251. symq-0.2.0/docs/guide/shared-affine-tables.md +96 -0
  252. symq-0.2.0/docs/guide/shift-diagonal-ancilla.md +277 -0
  253. symq-0.2.0/docs/guide/table-xor-contract.md +199 -0
  254. symq-0.2.0/docs/guide/table-xor-public-api.md +81 -0
  255. symq-0.2.0/docs/index.md +146 -0
  256. symq-0.2.0/docs/labs/README.md +24 -0
  257. symq-0.2.0/docs/labs/affine-hmr-portable.md +114 -0
  258. symq-0.2.0/docs/labs/affine-lift-reuse.md +205 -0
  259. symq-0.2.0/docs/labs/affine-target-tables.md +137 -0
  260. symq-0.2.0/docs/labs/bitset-degree.md +87 -0
  261. symq-0.2.0/docs/labs/formal-runtime-soundness.md +210 -0
  262. symq-0.2.0/docs/labs/hmr-repair.md +100 -0
  263. symq-0.2.0/docs/labs/lean-kernel-proofs.md +153 -0
  264. symq-0.2.0/docs/labs/nonlinear-phase-bits.md +83 -0
  265. symq-0.2.0/docs/labs/phase-adaptive.md +118 -0
  266. symq-0.2.0/docs/labs/phase-degree-bound.md +103 -0
  267. symq-0.2.0/docs/labs/phase-discovery.md +71 -0
  268. symq-0.2.0/docs/labs/phase-factored.md +83 -0
  269. symq-0.2.0/docs/labs/phase-source-seeds.md +67 -0
  270. symq-0.2.0/docs/labs/portable-phase-proofs.md +144 -0
  271. symq-0.2.0/docs/labs/research-outlook-20261102.md +155 -0
  272. symq-0.2.0/docs/labs/site-resources.md +175 -0
  273. symq-0.2.0/docs/labs/streaming-kraus.md +113 -0
  274. symq-0.2.0/docs/maintainers/release-checklist.md +144 -0
  275. symq-0.2.0/docs/plans/2026-11-01-substitution-roadmap.md +142 -0
  276. symq-0.2.0/docs/reference/api-core.md +1025 -0
  277. symq-0.2.0/docs/reference/phase-hmr-spec.md +102 -0
  278. symq-0.2.0/docs/stability.md +133 -0
  279. symq-0.2.0/examples/README.md +36 -0
  280. symq-0.2.0/examples/classical_equivalence.py +21 -0
  281. symq-0.2.0/examples/contextual_substitution.py +49 -0
  282. symq-0.2.0/examples/experimental/candidate.json +32 -0
  283. symq-0.2.0/examples/experimental/contract.json +9 -0
  284. symq-0.2.0/examples/experimental/mutant.json +24 -0
  285. symq-0.2.0/examples/experimental/reference.json +7 -0
  286. symq-0.2.0/examples/gf24_rewrite.py +24 -0
  287. symq-0.2.0/examples/hybrid_substitution.py +35 -0
  288. symq-0.2.0/examples/import_circuits.py +29 -0
  289. symq-0.2.0/examples/locate/reference.json +21 -0
  290. symq-0.2.0/examples/locate/source.json +34 -0
  291. symq-0.2.0/examples/prepare/candidate.json +5 -0
  292. symq-0.2.0/examples/prepare/contract.json +1 -0
  293. symq-0.2.0/examples/prepare/original.json +22 -0
  294. symq-0.2.0/examples/prepare/source.json +35 -0
  295. symq-0.2.0/examples/prepare/weights.json +10 -0
  296. symq-0.2.0/examples/public_demo.py +75 -0
  297. symq-0.2.0/examples/rewrite/replacement.json +30 -0
  298. symq-0.2.0/examples/rewrite/request.json +16 -0
  299. symq-0.2.0/examples/rewrite/source.qasm +7 -0
  300. symq-0.2.0/examples/rewrite_bricks/clean_product.json +325 -0
  301. symq-0.2.0/examples/sat_contract.py +18 -0
  302. symq-0.2.0/examples/search_loop.py +18 -0
  303. symq-0.2.0/examples/table_xor/contract.json +37 -0
  304. symq-0.2.0/examples/table_xor/linear.json +27 -0
  305. symq-0.2.0/examples/table_xor/selector.json +62 -0
  306. symq-0.2.0/examples/wide_and_blocks.py +17 -0
  307. symq-0.2.0/formal/portable_lrat/GateContracts.lean +38 -0
  308. symq-0.2.0/formal/portable_lrat/GateLemmas.lean +35 -0
  309. symq-0.2.0/formal/portable_lrat/lake-manifest.json +7 -0
  310. symq-0.2.0/formal/portable_lrat/lakefile.lean +5 -0
  311. symq-0.2.0/formal/portable_lrat/lean-toolchain +1 -0
  312. symq-0.2.0/formal/symq_runtime/AcyclicDAG.lean +954 -0
  313. symq-0.2.0/formal/symq_runtime/Contracts.lean +383 -0
  314. symq-0.2.0/formal/symq_runtime/GateCNF.lean +132 -0
  315. symq-0.2.0/formal/symq_runtime/GraphRewrites.lean +79 -0
  316. symq-0.2.0/formal/symq_runtime/PhaseBits.lean +71 -0
  317. symq-0.2.0/formal/symq_runtime/lake-manifest.json +7 -0
  318. symq-0.2.0/formal/symq_runtime/lakefile.lean +8 -0
  319. symq-0.2.0/formal/symq_runtime/lean-toolchain +1 -0
  320. symq-0.2.0/hatch_build.py +81 -0
  321. symq-0.2.0/pyproject.toml +156 -0
  322. symq-0.2.0/src/symq/__init__.py +100 -0
  323. symq-0.2.0/src/symq/__main__.py +732 -0
  324. symq-0.2.0/src/symq/_io.py +30 -0
  325. symq-0.2.0/src/symq/_native_hint.py +53 -0
  326. symq-0.2.0/src/symq/anf.py +101 -0
  327. symq-0.2.0/src/symq/backends/__init__.py +102 -0
  328. symq-0.2.0/src/symq/backends/_zdd.c +3042 -0
  329. symq-0.2.0/src/symq/backends/adaptive.py +215 -0
  330. symq-0.2.0/src/symq/backends/base.py +197 -0
  331. symq-0.2.0/src/symq/backends/linear.py +129 -0
  332. symq-0.2.0/src/symq/backends/packed.py +290 -0
  333. symq-0.2.0/src/symq/backends/reference.py +56 -0
  334. symq-0.2.0/src/symq/backends/sparse.py +111 -0
  335. symq-0.2.0/src/symq/backends/truthtable.py +90 -0
  336. symq-0.2.0/src/symq/backends/zdd.py +309 -0
  337. symq-0.2.0/src/symq/backends/zdd_native.py +450 -0
  338. symq-0.2.0/src/symq/circuit.py +356 -0
  339. symq-0.2.0/src/symq/corpus.py +100 -0
  340. symq-0.2.0/src/symq/doctor.py +156 -0
  341. symq-0.2.0/src/symq/equivalence.py +278 -0
  342. symq-0.2.0/src/symq/errors.py +63 -0
  343. symq-0.2.0/src/symq/experimental/__init__.py +40 -0
  344. symq-0.2.0/src/symq/experimental/api.py +229 -0
  345. symq-0.2.0/src/symq/experimental/blocks.py +398 -0
  346. symq-0.2.0/src/symq/experimental/capabilities.py +214 -0
  347. symq-0.2.0/src/symq/experimental/channel.py +465 -0
  348. symq-0.2.0/src/symq/experimental/contracts.py +121 -0
  349. symq-0.2.0/src/symq/experimental/domains.py +321 -0
  350. symq-0.2.0/src/symq/experimental/execution.py +362 -0
  351. symq-0.2.0/src/symq/experimental/hybrid.py +748 -0
  352. symq-0.2.0/src/symq/experimental/prepared.py +231 -0
  353. symq-0.2.0/src/symq/experimental/profiling.py +177 -0
  354. symq-0.2.0/src/symq/experimental/serialization.py +149 -0
  355. symq-0.2.0/src/symq/experimental/table_xor.py +597 -0
  356. symq-0.2.0/src/symq/external/__init__.py +64 -0
  357. symq-0.2.0/src/symq/external/cudd.py +190 -0
  358. symq-0.2.0/src/symq/external/polybori.py +82 -0
  359. symq-0.2.0/src/symq/external/qcec.py +75 -0
  360. symq-0.2.0/src/symq/facade.py +109 -0
  361. symq-0.2.0/src/symq/generators/__init__.py +89 -0
  362. symq-0.2.0/src/symq/generators/arithmetic.py +104 -0
  363. symq-0.2.0/src/symq/generators/bilinear_factors.py +187 -0
  364. symq-0.2.0/src/symq/generators/bilinear_optimization.py +232 -0
  365. symq-0.2.0/src/symq/generators/gf2n.py +487 -0
  366. symq-0.2.0/src/symq/hashing.py +24 -0
  367. symq-0.2.0/src/symq/kickmix.py +245 -0
  368. symq-0.2.0/src/symq/labs/__init__.py +62 -0
  369. symq-0.2.0/src/symq/labs/_isolated_miter_verifier.py +92 -0
  370. symq-0.2.0/src/symq/labs/_isolated_miter_worker.py +67 -0
  371. symq-0.2.0/src/symq/labs/affine_basis_study.py +629 -0
  372. symq-0.2.0/src/symq/labs/affine_hmr_portable.py +443 -0
  373. symq-0.2.0/src/symq/labs/affine_phase.py +595 -0
  374. symq-0.2.0/src/symq/labs/affine_table.py +201 -0
  375. symq-0.2.0/src/symq/labs/anchored_kraus.py +385 -0
  376. symq-0.2.0/src/symq/labs/anchored_stream.py +319 -0
  377. symq-0.2.0/src/symq/labs/backward_ancilla.py +498 -0
  378. symq-0.2.0/src/symq/labs/bilinear_substitution.py +121 -0
  379. symq-0.2.0/src/symq/labs/bitset_anf.py +218 -0
  380. symq-0.2.0/src/symq/labs/channel_certificate.py +519 -0
  381. symq-0.2.0/src/symq/labs/channel_composition.py +464 -0
  382. symq-0.2.0/src/symq/labs/classical_cone.py +600 -0
  383. symq-0.2.0/src/symq/labs/classical_transcript.py +237 -0
  384. symq-0.2.0/src/symq/labs/contextual_substitution.py +454 -0
  385. symq-0.2.0/src/symq/labs/corpus_qualification.py +452 -0
  386. symq-0.2.0/src/symq/labs/cut_invariants.py +685 -0
  387. symq-0.2.0/src/symq/labs/cyclotomic.py +412 -0
  388. symq-0.2.0/src/symq/labs/dyadic_phase.py +310 -0
  389. symq-0.2.0/src/symq/labs/finite_domain.py +182 -0
  390. symq-0.2.0/src/symq/labs/gf24_choice.py +82 -0
  391. symq-0.2.0/src/symq/labs/gf24_order.py +61 -0
  392. symq-0.2.0/src/symq/labs/gf24_tower.py +216 -0
  393. symq-0.2.0/src/symq/labs/hmr_repair.py +220 -0
  394. symq-0.2.0/src/symq/labs/hmr_table_contract.py +498 -0
  395. symq-0.2.0/src/symq/labs/hybrid_substitution.py +292 -0
  396. symq-0.2.0/src/symq/labs/importers.py +269 -0
  397. symq-0.2.0/src/symq/labs/indexed_substitution.py +379 -0
  398. symq-0.2.0/src/symq/labs/isolated_miter.py +394 -0
  399. symq-0.2.0/src/symq/labs/isolated_miter_supervisor.py +288 -0
  400. symq-0.2.0/src/symq/labs/kmb_affine_resources.py +293 -0
  401. symq-0.2.0/src/symq/labs/kmb_reset_cache.py +358 -0
  402. symq-0.2.0/src/symq/labs/kmb_resource_frontier.py +360 -0
  403. symq-0.2.0/src/symq/labs/kmb_source_index.py +238 -0
  404. symq-0.2.0/src/symq/labs/kmb_window.py +541 -0
  405. symq-0.2.0/src/symq/labs/kmx_source_index.py +528 -0
  406. symq-0.2.0/src/symq/labs/kmx_window.py +236 -0
  407. symq-0.2.0/src/symq/labs/kraus_graph.py +201 -0
  408. symq-0.2.0/src/symq/labs/ledger.py +178 -0
  409. symq-0.2.0/src/symq/labs/linear_certificate.py +42 -0
  410. symq-0.2.0/src/symq/labs/lrat_export.py +215 -0
  411. symq-0.2.0/src/symq/labs/lrat_lean.py +155 -0
  412. symq-0.2.0/src/symq/labs/lrat_rup.py +256 -0
  413. symq-0.2.0/src/symq/labs/miter_cnf.py +280 -0
  414. symq-0.2.0/src/symq/labs/miter_proof_bundle.py +228 -0
  415. symq-0.2.0/src/symq/labs/nonlinear_phase_bits.py +170 -0
  416. symq-0.2.0/src/symq/labs/phase_adaptive.py +285 -0
  417. symq-0.2.0/src/symq/labs/phase_delta_binding.py +387 -0
  418. symq-0.2.0/src/symq/labs/phase_discovery.py +328 -0
  419. symq-0.2.0/src/symq/labs/phase_factored.py +355 -0
  420. symq-0.2.0/src/symq/labs/phase_proof_bundle.py +289 -0
  421. symq-0.2.0/src/symq/labs/phase_quotient.py +437 -0
  422. symq-0.2.0/src/symq/labs/phase_separator.py +149 -0
  423. symq-0.2.0/src/symq/labs/proof_graph.py +433 -0
  424. symq-0.2.0/src/symq/labs/qasm3.py +187 -0
  425. symq-0.2.0/src/symq/labs/qcec_adapter.py +114 -0
  426. symq-0.2.0/src/symq/labs/qualtran.py +91 -0
  427. symq-0.2.0/src/symq/labs/rename.py +219 -0
  428. symq-0.2.0/src/symq/labs/reset_cache.py +244 -0
  429. symq-0.2.0/src/symq/labs/reset_support.py +324 -0
  430. symq-0.2.0/src/symq/labs/rewrite.py +310 -0
  431. symq-0.2.0/src/symq/labs/rewrite_bricks.py +345 -0
  432. symq-0.2.0/src/symq/labs/rewrite_engine.py +105 -0
  433. symq-0.2.0/src/symq/labs/rewrite_locator.py +154 -0
  434. symq-0.2.0/src/symq/labs/rewrite_prepare.py +267 -0
  435. symq-0.2.0/src/symq/labs/rewrite_request.py +441 -0
  436. symq-0.2.0/src/symq/labs/shared_table.py +258 -0
  437. symq-0.2.0/src/symq/labs/shift_diagonal_ancilla.py +391 -0
  438. symq-0.2.0/src/symq/labs/site_resources.py +510 -0
  439. symq-0.2.0/src/symq/labs/table_xor_contract.py +22 -0
  440. symq-0.2.0/src/symq/labs/verification_contracts.py +478 -0
  441. symq-0.2.0/src/symq/labs/xag.py +398 -0
  442. symq-0.2.0/src/symq/order.py +83 -0
  443. symq-0.2.0/src/symq/phase.py +401 -0
  444. symq-0.2.0/src/symq/phase_oracle.py +57 -0
  445. symq-0.2.0/src/symq/py.typed +0 -0
  446. symq-0.2.0/src/symq/qasm.py +243 -0
  447. symq-0.2.0/src/symq/resources.py +278 -0
  448. symq-0.2.0/src/symq/sat/__init__.py +47 -0
  449. symq-0.2.0/src/symq/sat/_solve.py +68 -0
  450. symq-0.2.0/src/symq/sat/assumptions.py +297 -0
  451. symq-0.2.0/src/symq/sat/composition.py +766 -0
  452. symq-0.2.0/src/symq/sat/encoding.py +348 -0
  453. symq-0.2.0/src/symq/sat/miter.py +272 -0
  454. symq-0.2.0/src/symq/strategy.py +200 -0
  455. symq-0.2.0/src/symq/verification.py +251 -0
  456. symq-0.2.0/tests/conftest.py +231 -0
  457. symq-0.2.0/tests/data/api_snapshot.json +3663 -0
  458. symq-0.2.0/tests/data/archived_engine_outputs.json +51 -0
  459. symq-0.2.0/tests/data/table_xor_qualification/A_anf.contract.json +44 -0
  460. symq-0.2.0/tests/data/table_xor_qualification/A_anf.source.json +55 -0
  461. symq-0.2.0/tests/data/table_xor_qualification/A_clean_read_ok.contract.json +44 -0
  462. symq-0.2.0/tests/data/table_xor_qualification/A_clean_read_ok.source.json +62 -0
  463. symq-0.2.0/tests/data/table_xor_qualification/A_dontcare.contract.json +44 -0
  464. symq-0.2.0/tests/data/table_xor_qualification/A_dontcare.source.json +89 -0
  465. symq-0.2.0/tests/data/table_xor_qualification/A_illegal_row_changed.contract.json +44 -0
  466. symq-0.2.0/tests/data/table_xor_qualification/A_illegal_row_changed.source.json +252 -0
  467. symq-0.2.0/tests/data/table_xor_qualification/A_minterm_clean.contract.json +44 -0
  468. symq-0.2.0/tests/data/table_xor_qualification/A_minterm_clean.source.json +252 -0
  469. symq-0.2.0/tests/data/table_xor_qualification/A_mut_addr_order.contract.json +44 -0
  470. symq-0.2.0/tests/data/table_xor_qualification/A_mut_addr_order.source.json +55 -0
  471. symq-0.2.0/tests/data/table_xor_qualification/A_mut_cell.contract.json +44 -0
  472. symq-0.2.0/tests/data/table_xor_qualification/A_mut_cell.source.json +55 -0
  473. symq-0.2.0/tests/data/table_xor_qualification/A_mut_dirty_clean_read.contract.json +43 -0
  474. symq-0.2.0/tests/data/table_xor_qualification/A_mut_dirty_clean_read.source.json +62 -0
  475. symq-0.2.0/tests/data/table_xor_qualification/A_mut_legal_widened.contract.json +47 -0
  476. symq-0.2.0/tests/data/table_xor_qualification/A_mut_legal_widened.source.json +252 -0
  477. symq-0.2.0/tests/data/table_xor_qualification/A_mut_omitted_update.contract.json +44 -0
  478. symq-0.2.0/tests/data/table_xor_qualification/A_mut_omitted_update.source.json +49 -0
  479. symq-0.2.0/tests/data/table_xor_qualification/A_mut_tgt_order.contract.json +44 -0
  480. symq-0.2.0/tests/data/table_xor_qualification/A_mut_tgt_order.source.json +55 -0
  481. symq-0.2.0/tests/data/table_xor_qualification/B_dirty_temps.contract.json +45 -0
  482. symq-0.2.0/tests/data/table_xor_qualification/B_dirty_temps.source.json +138 -0
  483. symq-0.2.0/tests/data/table_xor_qualification/B_full_theorem_classical.contract.json +45 -0
  484. symq-0.2.0/tests/data/table_xor_qualification/B_full_theorem_classical.source.json +138 -0
  485. symq-0.2.0/tests/data/table_xor_qualification/B_mut_borrowed_unrestored.contract.json +45 -0
  486. symq-0.2.0/tests/data/table_xor_qualification/B_mut_borrowed_unrestored.source.json +130 -0
  487. symq-0.2.0/tests/data/table_xor_qualification/C_mut_slot_swap.contract.json +39 -0
  488. symq-0.2.0/tests/data/table_xor_qualification/C_mut_slot_swap.source.json +66 -0
  489. symq-0.2.0/tests/data/table_xor_qualification/C_per_slot_contract.contract.json +39 -0
  490. symq-0.2.0/tests/data/table_xor_qualification/C_per_slot_contract.source.json +66 -0
  491. symq-0.2.0/tests/data/table_xor_qualification/C_two_tables.contract.json +39 -0
  492. symq-0.2.0/tests/data/table_xor_qualification/C_two_tables.source.json +66 -0
  493. symq-0.2.0/tests/data/table_xor_qualification/D_mut_post_relation.contract.json +42 -0
  494. symq-0.2.0/tests/data/table_xor_qualification/D_mut_post_relation.source.json +70 -0
  495. symq-0.2.0/tests/data/table_xor_qualification/D_mut_widened.contract.json +38 -0
  496. symq-0.2.0/tests/data/table_xor_qualification/D_mut_widened.source.json +69 -0
  497. symq-0.2.0/tests/data/table_xor_qualification/D_post_relation_ok.contract.json +42 -0
  498. symq-0.2.0/tests/data/table_xor_qualification/D_post_relation_ok.source.json +69 -0
  499. symq-0.2.0/tests/data/table_xor_qualification/D_restricted_ok.contract.json +42 -0
  500. symq-0.2.0/tests/data/table_xor_qualification/D_restricted_ok.source.json +69 -0
  501. symq-0.2.0/tests/data/table_xor_qualification/E_anf.contract.json +36 -0
  502. symq-0.2.0/tests/data/table_xor_qualification/E_anf.source.json +31 -0
  503. symq-0.2.0/tests/data/table_xor_qualification/E_mut_cell.contract.json +36 -0
  504. symq-0.2.0/tests/data/table_xor_qualification/E_mut_cell.source.json +31 -0
  505. symq-0.2.0/tests/data/table_xor_qualification/F_large_borrowed.contract.json +48 -0
  506. symq-0.2.0/tests/data/table_xor_qualification/F_large_borrowed.source.json +27 -0
  507. symq-0.2.0/tests/data/table_xor_qualification/G_alias.contract.json +45 -0
  508. symq-0.2.0/tests/data/table_xor_qualification/G_alias.source.json +55 -0
  509. symq-0.2.0/tests/data/table_xor_qualification/G_empty_legal.contract.json +38 -0
  510. symq-0.2.0/tests/data/table_xor_qualification/G_empty_legal.source.json +55 -0
  511. symq-0.2.0/tests/data/table_xor_qualification/G_truncated_table.contract.json +43 -0
  512. symq-0.2.0/tests/data/table_xor_qualification/G_truncated_table.source.json +55 -0
  513. symq-0.2.0/tests/data/table_xor_qualification/manifest.json +196 -0
  514. symq-0.2.0/tests/fixtures/kmb_v2_8_qubit_adder.hex +57 -0
  515. symq-0.2.0/tests/fixtures/kmb_v2_three_qubit_incrementer.hex +15 -0
  516. symq-0.2.0/tests/test_adders.py +101 -0
  517. symq-0.2.0/tests/test_affine_basis_qualification.py +169 -0
  518. symq-0.2.0/tests/test_affine_basis_study.py +527 -0
  519. symq-0.2.0/tests/test_affine_hmr_portable.py +291 -0
  520. symq-0.2.0/tests/test_affine_phase.py +420 -0
  521. symq-0.2.0/tests/test_affine_phase_qualification.py +144 -0
  522. symq-0.2.0/tests/test_affine_table.py +167 -0
  523. symq-0.2.0/tests/test_affine_table_independent.py +64 -0
  524. symq-0.2.0/tests/test_anchored_independent.py +35 -0
  525. symq-0.2.0/tests/test_anchored_kraus.py +75 -0
  526. symq-0.2.0/tests/test_anchored_provenance.py +18 -0
  527. symq-0.2.0/tests/test_anchored_stream.py +153 -0
  528. symq-0.2.0/tests/test_anf.py +38 -0
  529. symq-0.2.0/tests/test_api_snapshot.py +404 -0
  530. symq-0.2.0/tests/test_archived_parity.py +46 -0
  531. symq-0.2.0/tests/test_audit_regressions.py +193 -0
  532. symq-0.2.0/tests/test_backends.py +296 -0
  533. symq-0.2.0/tests/test_backward_ancilla.py +351 -0
  534. symq-0.2.0/tests/test_backward_ancilla_qualification.py +156 -0
  535. symq-0.2.0/tests/test_bilinear_contextual_integration.py +104 -0
  536. symq-0.2.0/tests/test_bilinear_kmb.py +74 -0
  537. symq-0.2.0/tests/test_bilinear_optimization.py +121 -0
  538. symq-0.2.0/tests/test_bitset_degree3_research.py +129 -0
  539. symq-0.2.0/tests/test_block_equivalence.py +183 -0
  540. symq-0.2.0/tests/test_build_native.py +392 -0
  541. symq-0.2.0/tests/test_cache_growth.py +84 -0
  542. symq-0.2.0/tests/test_capability_boundaries.py +151 -0
  543. symq-0.2.0/tests/test_channel_certificate.py +395 -0
  544. symq-0.2.0/tests/test_channel_certificate_qualification.py +108 -0
  545. symq-0.2.0/tests/test_channel_criterion.py +159 -0
  546. symq-0.2.0/tests/test_channel_oracle.py +134 -0
  547. symq-0.2.0/tests/test_ci_workflow.py +326 -0
  548. symq-0.2.0/tests/test_circuit.py +31 -0
  549. symq-0.2.0/tests/test_circuit_contract.py +93 -0
  550. symq-0.2.0/tests/test_classical_cone.py +393 -0
  551. symq-0.2.0/tests/test_cli_check.py +214 -0
  552. symq-0.2.0/tests/test_cli_rewrite_json.py +103 -0
  553. symq-0.2.0/tests/test_comparative.py +171 -0
  554. symq-0.2.0/tests/test_composition.py +858 -0
  555. symq-0.2.0/tests/test_contextual_substitution.py +513 -0
  556. symq-0.2.0/tests/test_continuous_simulation.py +111 -0
  557. symq-0.2.0/tests/test_corpus.py +80 -0
  558. symq-0.2.0/tests/test_cross_engine.py +355 -0
  559. symq-0.2.0/tests/test_cudd_lifetime.py +42 -0
  560. symq-0.2.0/tests/test_cut_invariants.py +485 -0
  561. symq-0.2.0/tests/test_cyclotomic_modular_zero.py +63 -0
  562. symq-0.2.0/tests/test_deadline_inheritance.py +66 -0
  563. symq-0.2.0/tests/test_doctor.py +88 -0
  564. symq-0.2.0/tests/test_equivalence.py +211 -0
  565. symq-0.2.0/tests/test_evidence.py +157 -0
  566. symq-0.2.0/tests/test_examples.py +21 -0
  567. symq-0.2.0/tests/test_exclusive_profile.py +136 -0
  568. symq-0.2.0/tests/test_experimental_api.py +262 -0
  569. symq-0.2.0/tests/test_experimental_cli.py +112 -0
  570. symq-0.2.0/tests/test_experimental_domains.py +98 -0
  571. symq-0.2.0/tests/test_experimental_execution.py +47 -0
  572. symq-0.2.0/tests/test_experimental_hybrid.py +171 -0
  573. symq-0.2.0/tests/test_experimental_phases.py +298 -0
  574. symq-0.2.0/tests/test_experimental_prepared_audit.py +91 -0
  575. symq-0.2.0/tests/test_experimental_serialization.py +98 -0
  576. symq-0.2.0/tests/test_external.py +141 -0
  577. symq-0.2.0/tests/test_facade.py +89 -0
  578. symq-0.2.0/tests/test_factored.py +206 -0
  579. symq-0.2.0/tests/test_finite_domain_research.py +111 -0
  580. symq-0.2.0/tests/test_forgetful_channel_maps_research.py +178 -0
  581. symq-0.2.0/tests/test_formal_axioms.py +197 -0
  582. symq-0.2.0/tests/test_formal_flat_cnf.py +167 -0
  583. symq-0.2.0/tests/test_formal_graph_rewrites.py +68 -0
  584. symq-0.2.0/tests/test_formal_graph_snapshot.py +150 -0
  585. symq-0.2.0/tests/test_formal_phase_bits.py +43 -0
  586. symq-0.2.0/tests/test_formal_runtime_contract.py +95 -0
  587. symq-0.2.0/tests/test_generators.py +64 -0
  588. symq-0.2.0/tests/test_gf24_rewrite.py +143 -0
  589. symq-0.2.0/tests/test_gf24_tower.py +153 -0
  590. symq-0.2.0/tests/test_hashing.py +52 -0
  591. symq-0.2.0/tests/test_hmr_block_soundness.py +672 -0
  592. symq-0.2.0/tests/test_hmr_channel_cost.py +328 -0
  593. symq-0.2.0/tests/test_hmr_contract.py +320 -0
  594. symq-0.2.0/tests/test_hmr_feedback_research.py +111 -0
  595. symq-0.2.0/tests/test_hmr_field_mac_research.py +113 -0
  596. symq-0.2.0/tests/test_hmr_native_channel_research.py +121 -0
  597. symq-0.2.0/tests/test_hmr_qualification.py +91 -0
  598. symq-0.2.0/tests/test_hmr_superposition.py +63 -0
  599. symq-0.2.0/tests/test_hmr_table_contract.py +364 -0
  600. symq-0.2.0/tests/test_hybrid_channel_research.py +361 -0
  601. symq-0.2.0/tests/test_hybrid_phase_stream_research.py +142 -0
  602. symq-0.2.0/tests/test_hybrid_substitution.py +444 -0
  603. symq-0.2.0/tests/test_hybrid_substitution_independent_kraus.py +158 -0
  604. symq-0.2.0/tests/test_importer_robustness.py +423 -0
  605. symq-0.2.0/tests/test_indexed_substitution.py +297 -0
  606. symq-0.2.0/tests/test_isolated_miter_audit.py +187 -0
  607. symq-0.2.0/tests/test_isolated_miter_supervisor.py +346 -0
  608. symq-0.2.0/tests/test_isolated_miter_worker.py +196 -0
  609. symq-0.2.0/tests/test_isolated_typed_ipc.py +113 -0
  610. symq-0.2.0/tests/test_kickmix.py +184 -0
  611. symq-0.2.0/tests/test_kmb_affine_resources.py +325 -0
  612. symq-0.2.0/tests/test_kmb_reset_cache.py +190 -0
  613. symq-0.2.0/tests/test_kmb_reset_cache_publication.py +108 -0
  614. symq-0.2.0/tests/test_kmb_reset_cache_replay_io.py +81 -0
  615. symq-0.2.0/tests/test_kmb_resource_frontier.py +253 -0
  616. symq-0.2.0/tests/test_kmb_resource_frontier_optional.py +25 -0
  617. symq-0.2.0/tests/test_kmb_snapshot.py +152 -0
  618. symq-0.2.0/tests/test_kmb_source_index.py +183 -0
  619. symq-0.2.0/tests/test_kmb_window.py +417 -0
  620. symq-0.2.0/tests/test_kmx_source_index.py +273 -0
  621. symq-0.2.0/tests/test_kmx_window.py +195 -0
  622. symq-0.2.0/tests/test_kmx_window_audit.py +80 -0
  623. symq-0.2.0/tests/test_kraus_graph.py +123 -0
  624. symq-0.2.0/tests/test_labs_review_regressions.py +289 -0
  625. symq-0.2.0/tests/test_linear_backend.py +66 -0
  626. symq-0.2.0/tests/test_liveness.py +99 -0
  627. symq-0.2.0/tests/test_liveness_exact.py +163 -0
  628. symq-0.2.0/tests/test_lrat_adversarial.py +180 -0
  629. symq-0.2.0/tests/test_lrat_export.py +135 -0
  630. symq-0.2.0/tests/test_lrat_lean.py +200 -0
  631. symq-0.2.0/tests/test_lrat_rup.py +171 -0
  632. symq-0.2.0/tests/test_miter_cnf.py +140 -0
  633. symq-0.2.0/tests/test_miter_encoding_limits.py +191 -0
  634. symq-0.2.0/tests/test_miter_proof_bundle.py +270 -0
  635. symq-0.2.0/tests/test_native_collection.py +145 -0
  636. symq-0.2.0/tests/test_native_fault_injection.py +282 -0
  637. symq-0.2.0/tests/test_native_fuzz.py +353 -0
  638. symq-0.2.0/tests/test_native_hint.py +110 -0
  639. symq-0.2.0/tests/test_native_integration_audit.py +100 -0
  640. symq-0.2.0/tests/test_native_limits.py +194 -0
  641. symq-0.2.0/tests/test_native_roadmap.py +293 -0
  642. symq-0.2.0/tests/test_nonlinear_phase_bits.py +106 -0
  643. symq-0.2.0/tests/test_nonlinear_phase_independent.py +41 -0
  644. symq-0.2.0/tests/test_order_policy.py +127 -0
  645. symq-0.2.0/tests/test_packaging.py +58 -0
  646. symq-0.2.0/tests/test_phase.py +188 -0
  647. symq-0.2.0/tests/test_phase8_external.py +73 -0
  648. symq-0.2.0/tests/test_phase8_research.py +249 -0
  649. symq-0.2.0/tests/test_phase_adaptive.py +224 -0
  650. symq-0.2.0/tests/test_phase_adaptive_completion.py +111 -0
  651. symq-0.2.0/tests/test_phase_delta_binding.py +571 -0
  652. symq-0.2.0/tests/test_phase_delta_binding_qualification.py +125 -0
  653. symq-0.2.0/tests/test_phase_discovery.py +167 -0
  654. symq-0.2.0/tests/test_phase_discovery_adversarial.py +93 -0
  655. symq-0.2.0/tests/test_phase_factored.py +227 -0
  656. symq-0.2.0/tests/test_phase_independent_cohort.py +51 -0
  657. symq-0.2.0/tests/test_phase_proof_bundle.py +179 -0
  658. symq-0.2.0/tests/test_phase_quotient.py +353 -0
  659. symq-0.2.0/tests/test_phase_quotient_qualification.py +111 -0
  660. symq-0.2.0/tests/test_phase_revocation.py +75 -0
  661. symq-0.2.0/tests/test_phase_separator.py +87 -0
  662. symq-0.2.0/tests/test_phase_separator_frontier.py +36 -0
  663. symq-0.2.0/tests/test_phase_separator_integration.py +132 -0
  664. symq-0.2.0/tests/test_phase_separator_source.py +109 -0
  665. symq-0.2.0/tests/test_product_identities.py +96 -0
  666. symq-0.2.0/tests/test_public_api.py +175 -0
  667. symq-0.2.0/tests/test_public_compiler_rewrite.py +187 -0
  668. symq-0.2.0/tests/test_public_demo.py +32 -0
  669. symq-0.2.0/tests/test_public_docs.py +107 -0
  670. symq-0.2.0/tests/test_public_docstrings.py +185 -0
  671. symq-0.2.0/tests/test_public_qualification.py +22 -0
  672. symq-0.2.0/tests/test_pypi_readme.py +165 -0
  673. symq-0.2.0/tests/test_qasm.py +71 -0
  674. symq-0.2.0/tests/test_qcec_crosscheck.py +270 -0
  675. symq-0.2.0/tests/test_qiskit_transpiler_pilot.py +147 -0
  676. symq-0.2.0/tests/test_qiskit_workflow_hardening.py +39 -0
  677. symq-0.2.0/tests/test_qualtran_channel.py +30 -0
  678. symq-0.2.0/tests/test_qualtran_import.py +87 -0
  679. symq-0.2.0/tests/test_quantum_composition.py +393 -0
  680. symq-0.2.0/tests/test_quick_bench.py +95 -0
  681. symq-0.2.0/tests/test_release_check.py +583 -0
  682. symq-0.2.0/tests/test_release_text.py +108 -0
  683. symq-0.2.0/tests/test_release_workflow.py +294 -0
  684. symq-0.2.0/tests/test_reset_cache.py +146 -0
  685. symq-0.2.0/tests/test_reset_support.py +316 -0
  686. symq-0.2.0/tests/test_rewrite_bricks.py +386 -0
  687. symq-0.2.0/tests/test_rewrite_cli.py +290 -0
  688. symq-0.2.0/tests/test_rewrite_engine.py +193 -0
  689. symq-0.2.0/tests/test_rewrite_initial_assumption.py +319 -0
  690. symq-0.2.0/tests/test_rewrite_kmb_context.py +82 -0
  691. symq-0.2.0/tests/test_rewrite_locator.py +167 -0
  692. symq-0.2.0/tests/test_rewrite_prepare.py +309 -0
  693. symq-0.2.0/tests/test_rewrite_prepare_publication.py +296 -0
  694. symq-0.2.0/tests/test_rewrite_qualtran_hmr.py +54 -0
  695. symq-0.2.0/tests/test_roadmap_campaign.py +21 -0
  696. symq-0.2.0/tests/test_sat_availability.py +45 -0
  697. symq-0.2.0/tests/test_sat_encoding_deadline.py +322 -0
  698. symq-0.2.0/tests/test_sat_equivalence.py +318 -0
  699. symq-0.2.0/tests/test_sat_timeout.py +290 -0
  700. symq-0.2.0/tests/test_shared_table.py +144 -0
  701. symq-0.2.0/tests/test_shift_diagonal_ancilla.py +245 -0
  702. symq-0.2.0/tests/test_shift_diagonal_qualification.py +205 -0
  703. symq-0.2.0/tests/test_site_resources.py +407 -0
  704. symq-0.2.0/tests/test_stability.py +40 -0
  705. symq-0.2.0/tests/test_stack106_112_adversarial.py +114 -0
  706. symq-0.2.0/tests/test_strategy.py +195 -0
  707. symq-0.2.0/tests/test_substitution_qualification.py +103 -0
  708. symq-0.2.0/tests/test_table_xor_contract.py +461 -0
  709. symq-0.2.0/tests/test_table_xor_predicates.py +218 -0
  710. symq-0.2.0/tests/test_table_xor_public.py +88 -0
  711. symq-0.2.0/tests/test_temporal_transcript_research.py +140 -0
  712. symq-0.2.0/tests/test_tiers.py +90 -0
  713. symq-0.2.0/tests/test_timing_marker.py +118 -0
  714. symq-0.2.0/tests/test_tower_factors.py +127 -0
  715. symq-0.2.0/tests/test_transcript_deadlines.py +208 -0
  716. symq-0.2.0/tests/test_verification_contracts.py +679 -0
  717. symq-0.2.0/tests/test_verification_portfolio.py +302 -0
  718. symq-0.2.0/tests/test_verification_session.py +55 -0
  719. symq-0.2.0/tests/test_worker_cleanup.py +303 -0
  720. symq-0.2.0/tests/test_xag_decompositions.py +432 -0
  721. symq-0.2.0/tests/test_zdd_native.py +717 -0
  722. symq-0.2.0/tests/testkit/__init__.py +6 -0
  723. symq-0.2.0/tests/testkit/affine_basis_oracle.py +101 -0
  724. symq-0.2.0/tests/testkit/affine_loader_cases.py +80 -0
  725. symq-0.2.0/tests/testkit/affine_phase_oracle.py +56 -0
  726. symq-0.2.0/tests/testkit/continuous.py +94 -0
  727. symq-0.2.0/tests/testkit/factored_channel.py +224 -0
  728. symq-0.2.0/tests/testkit/field_hmr_reference.py +114 -0
  729. symq-0.2.0/tests/testkit/field_oracle.py +36 -0
  730. symq-0.2.0/tests/testkit/hmr_families.py +102 -0
  731. symq-0.2.0/tests/testkit/hmr_profile.py +307 -0
  732. symq-0.2.0/tests/testkit/hmr_table_cases.py +129 -0
  733. symq-0.2.0/tests/testkit/kraus_loader_cases.py +122 -0
  734. symq-0.2.0/tests/testkit/kraus_oracle.py +130 -0
  735. symq-0.2.0/tests/testkit/liveness.py +43 -0
  736. symq-0.2.0/tests/testkit/nonlinear_phase_cases.py +38 -0
  737. symq-0.2.0/tests/testkit/nonlinear_phase_cohort.py +109 -0
  738. symq-0.2.0/tests/testkit/phase_delta_oracle.py +114 -0
  739. symq-0.2.0/tests/testkit/phase_mixing_cohort.py +106 -0
  740. symq-0.2.0/tests/testkit/scalar_channel.py +200 -0
  741. symq-0.2.0/tests/testkit/sparse_branch_oracle.py +186 -0
  742. symq-0.2.0/tests/testkit/table_channel_oracle.py +199 -0
  743. symq-0.2.0/tests/testkit/width_study.py +224 -0
  744. symq-0.2.0/tools/api_snapshot.py +657 -0
  745. symq-0.2.0/tools/build_native.py +490 -0
  746. symq-0.2.0/tools/check_formal_axioms.py +314 -0
  747. symq-0.2.0/tools/formal_graph_snapshot.py +108 -0
  748. symq-0.2.0/tools/generate_qualtran_fixtures.py +197 -0
  749. symq-0.2.0/tools/pypi_readme.py +173 -0
  750. symq-0.2.0/tools/release_check.py +342 -0
  751. symq-0.2.0/tools/sanitize_native.py +81 -0
@@ -0,0 +1,3 @@
1
+ # Never convert line endings: corpus files, fixtures and evidence data are pinned by SHA-256, and a
2
+ # checkout that rewrites them (Git for Windows with core.autocrlf) would fail the integrity tests.
3
+ * -text
@@ -0,0 +1,3 @@
1
+ # Review ownership. Every change goes through a pull request; nothing is merged without a
2
+ # separate maintainer authorization (see AGENTS.md and CONTRIBUTING.md).
3
+ * @yoch
@@ -0,0 +1,5 @@
1
+ blank_issues_enabled: true
2
+ contact_links:
3
+ - name: Security vulnerability
4
+ url: https://github.com/yoch/symq/security/policy
5
+ about: Do not post exploit details publicly. Follow the security policy instead.
@@ -0,0 +1,57 @@
1
+ name: Correctness or soundness bug
2
+ description: A wrong verdict, a wrong witness, a crash, or an unsupported input that was accepted.
3
+ labels: [bug]
4
+ body:
5
+ - type: markdown
6
+ attributes:
7
+ value: |
8
+ A wrong `equivalent` or `different` verdict is the most serious kind of report. Please
9
+ give the exact inputs: an `inconclusive` or `unsupported` result is not a proof, and a
10
+ slow run is a performance report, not a correctness bug.
11
+ - type: input
12
+ id: version
13
+ attributes:
14
+ label: SymQ version or commit SHA
15
+ description: Output of `python -c "import symq; print(symq.__version__)"`, or the exact commit.
16
+ validations:
17
+ required: true
18
+ - type: textarea
19
+ id: environment
20
+ attributes:
21
+ label: Environment
22
+ description: Paste the output of `python -m symq doctor`.
23
+ render: text
24
+ validations:
25
+ required: true
26
+ - type: dropdown
27
+ id: layer
28
+ attributes:
29
+ label: Layer
30
+ options:
31
+ - Core (symq, symq.sat, backends, CLI check/anf/doctor)
32
+ - symq.experimental (opt-in)
33
+ - symq.labs (research, no API promise)
34
+ validations:
35
+ required: true
36
+ - type: input
37
+ id: theorem
38
+ attributes:
39
+ label: Theorem and engine
40
+ description: For example `classical_full` with `zdd-native`, or a SAT contract.
41
+ validations:
42
+ required: true
43
+ - type: textarea
44
+ id: reproducer
45
+ attributes:
46
+ label: Minimal reproducer
47
+ description: The smallest circuits or files and the exact call or command line. Do not attach private circuits.
48
+ render: python
49
+ validations:
50
+ required: true
51
+ - type: textarea
52
+ id: result
53
+ attributes:
54
+ label: Expected and observed result
55
+ description: Include the verdict, the reason and the witness, if any.
56
+ validations:
57
+ required: true
@@ -0,0 +1,23 @@
1
+ name: Feature or extension request
2
+ description: A new gate, theorem, importer, backend or command.
3
+ labels: [enhancement]
4
+ body:
5
+ - type: textarea
6
+ id: statement
7
+ attributes:
8
+ label: Statement to prove or task to support
9
+ description: State the exact theorem or task, its input grammar and what must be refused.
10
+ validations:
11
+ required: true
12
+ - type: textarea
13
+ id: motivation
14
+ attributes:
15
+ label: Motivation and a concrete example
16
+ description: A public circuit, format or workflow that needs it.
17
+ validations:
18
+ required: true
19
+ - type: textarea
20
+ id: oracle
21
+ attributes:
22
+ label: Independent reference
23
+ description: How could the result be checked against a simple independent oracle?
@@ -0,0 +1,15 @@
1
+ name: Question
2
+ description: How to express a verification task, or what a result means.
3
+ labels: [question]
4
+ body:
5
+ - type: textarea
6
+ id: question
7
+ attributes:
8
+ label: Question
9
+ description: What are you trying to prove, on which circuits, and what did you try?
10
+ validations:
11
+ required: true
12
+ - type: input
13
+ id: version
14
+ attributes:
15
+ label: SymQ version or commit SHA
@@ -0,0 +1,33 @@
1
+ ## Scope and theorem
2
+
3
+ Describe the supported input grammar, ancilla preparation, observed outputs,
4
+ theorem type (classical, SAT contract, strict HMR branch, channel, instrument)
5
+ and what this PR does **not** establish.
6
+
7
+ ## Changes
8
+
9
+ - Code / documentation:
10
+ - Exact base and head SHA:
11
+ - Dependence on other PRs, if any:
12
+
13
+ ## Tests and evidence
14
+
15
+ - [ ] Independent reference/oracle and positive/negative mutants (when applicable)
16
+ - [ ] Witness replay and resource/unsupported paths
17
+ - [ ] Python/native/pure-wheel checks as relevant
18
+ - [ ] Exact-head CI link
19
+ - [ ] Raw experiment source/binary hashes, environment and all failure counts (if measured)
20
+
21
+ ## Provenance and publication
22
+
23
+ - [ ] External code/corpus license and upstream commit verified
24
+ - [ ] No secrets, private fixtures or identifying local paths
25
+ - [ ] Historical measurements not relabeled as new holdout
26
+ - [ ] Research conclusions and API stability stated narrowly
27
+ - [ ] No external publication, release or merge assumed without approval
28
+
29
+ ## Review decision requested
30
+
31
+ What is the smallest safe integration unit? Document remaining blockers and
32
+ whether this is a maintained-code fix, experimental research, or historical
33
+ archive. See [CONTRIBUTING.md](../CONTRIBUTING.md).
@@ -0,0 +1,22 @@
1
+ # Keeps the SHA-pinned GitHub Actions and the bounded development tools (ruff, mypy) current.
2
+ # The package itself has no runtime dependency.
3
+ version: 2
4
+ updates:
5
+ - package-ecosystem: pip
6
+ directory: /
7
+ schedule:
8
+ interval: weekly
9
+ groups:
10
+ dev-tools:
11
+ patterns: ['*']
12
+ commit-message:
13
+ prefix: build
14
+ - package-ecosystem: github-actions
15
+ directory: /
16
+ schedule:
17
+ interval: weekly
18
+ groups:
19
+ actions:
20
+ patterns: ['*']
21
+ commit-message:
22
+ prefix: ci
@@ -0,0 +1,54 @@
1
+ name: Affine basis and cache study
2
+ on:
3
+ pull_request:
4
+ paths:
5
+ - 'src/symq/labs/affine_basis_study.py'
6
+ - 'src/symq/labs/affine_phase.py'
7
+ - 'src/symq/labs/dyadic_phase.py'
8
+ - 'src/symq/resources.py'
9
+ - 'src/symq/phase.py'
10
+ - 'src/symq/phase_oracle.py'
11
+ - 'benchmarks/affine_basis*.py'
12
+ - 'tests/test_affine_basis*.py'
13
+ - 'tests/testkit/affine_basis_oracle.py'
14
+ - 'docs/guide/affine-basis-study.md'
15
+ - '.github/workflows/affine-basis-study.yml'
16
+ workflow_dispatch:
17
+ permissions:
18
+ contents: read
19
+ concurrency:
20
+ group: affine-basis-study-${{ github.ref }}
21
+ cancel-in-progress: true
22
+ jobs:
23
+ qualification:
24
+ runs-on: ubuntu-latest
25
+ timeout-minutes: 10
26
+ env:
27
+ SYMQ_SKIP_NATIVE: '1'
28
+ SYMQ_TEST_REQUIRE: checkout
29
+ steps:
30
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
31
+ with:
32
+ fetch-depth: 0
33
+ - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
34
+ with:
35
+ python-version: '3.12'
36
+ cache: pip
37
+ - run: python -m pip install -e ".[dev]"
38
+ - run: ruff check .
39
+ - run: >-
40
+ python -m pytest -q tests/test_affine_basis_study.py
41
+ tests/test_affine_basis_qualification.py tests/test_affine_phase.py
42
+ tests/test_public_docs.py tests/test_public_api.py
43
+ - run: >-
44
+ python -m benchmarks.affine_basis --repetitions 3
45
+ --output evidence/affine-basis.json
46
+ - run: >-
47
+ python -m benchmarks.affine_basis_summary evidence/affine-basis.json
48
+ --output evidence/affine-basis-summary.json
49
+ - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
50
+ if: always()
51
+ with:
52
+ name: affine-basis-study-evidence
53
+ path: evidence/
54
+ if-no-files-found: error
@@ -0,0 +1,45 @@
1
+ name: Affine phase research
2
+ on:
3
+ pull_request:
4
+ paths:
5
+ - 'src/symq/labs/affine_phase.py'
6
+ - 'src/symq/labs/dyadic_phase.py'
7
+ - 'src/symq/phase.py'
8
+ - 'src/symq/resources.py'
9
+ - 'tests/test_affine_phase*.py'
10
+ - 'tests/testkit/affine_phase_oracle.py'
11
+ - 'benchmarks/affine_phase.py'
12
+ - 'docs/guide/affine-phase.md'
13
+ - '.github/workflows/affine-phase.yml'
14
+ workflow_dispatch:
15
+ permissions:
16
+ contents: read
17
+ concurrency:
18
+ group: affine-phase-${{ github.ref }}
19
+ cancel-in-progress: true
20
+ jobs:
21
+ qualification:
22
+ runs-on: ubuntu-latest
23
+ timeout-minutes: 15
24
+ env:
25
+ SYMQ_REQUIRE_NATIVE: '1'
26
+ SYMQ_TEST_REQUIRE: native,sat,checkout
27
+ steps:
28
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
29
+ - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
30
+ with:
31
+ python-version: '3.12'
32
+ cache: pip
33
+ - run: python -m pip install -e ".[dev]"
34
+ - run: ruff check .
35
+ - run: >-
36
+ python -m pytest -q tests/test_affine_phase.py
37
+ tests/test_affine_phase_qualification.py tests/test_phase8_research.py
38
+ tests/test_public_docs.py tests/test_public_api.py
39
+ - run: python -m benchmarks.affine_phase --repetitions 3 --output evidence/affine-phase.json
40
+ - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
41
+ if: always()
42
+ with:
43
+ name: affine-phase-evidence
44
+ path: evidence/
45
+ if-no-files-found: error
@@ -0,0 +1,45 @@
1
+ name: Affine target table research
2
+ on:
3
+ pull_request:
4
+ paths:
5
+ - 'src/symq/labs/affine_table.py'
6
+ - 'src/symq/labs/anchored_stream.py'
7
+ - 'src/symq/labs/anchored_kraus.py'
8
+ - 'src/symq/labs/kraus_graph.py'
9
+ - 'src/symq/resources.py'
10
+ - 'benchmarks/affine_table.py'
11
+ - 'tests/test_affine_table.py'
12
+ - 'tests/test_affine_table_independent.py'
13
+ - 'tests/testkit/affine_loader_cases.py'
14
+ - 'tests/testkit/table_channel_oracle.py'
15
+ - 'docs/labs/affine-target-tables.md'
16
+ - '.github/workflows/affine-target-table.yml'
17
+ workflow_dispatch:
18
+ permissions:
19
+ contents: read
20
+ jobs:
21
+ qualification:
22
+ runs-on: ubuntu-latest
23
+ timeout-minutes: 15
24
+ env:
25
+ SYMQ_TEST_REQUIRE: sat
26
+ steps:
27
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
28
+ - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
29
+ with:
30
+ python-version: '3.12'
31
+ - run: python -m pip install -e ".[dev]"
32
+ - run: ruff check .
33
+ - run: python -m pytest -q tests/test_affine_table.py tests/test_affine_table_independent.py tests/test_anchored_stream.py tests/test_kraus_graph.py tests/test_anchored_independent.py
34
+ - run: |
35
+ mkdir -p evidence
36
+ git rev-parse HEAD > evidence/commit.txt
37
+ git rev-parse 'HEAD^{tree}' > evidence/tree.txt
38
+ git diff --exit-code
39
+ python -m benchmarks.affine_table --programs 100 --output evidence/affine-target-table.json
40
+ - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
41
+ if: always()
42
+ with:
43
+ name: affine-target-table-evidence
44
+ path: evidence/
45
+ if-no-files-found: error
@@ -0,0 +1,36 @@
1
+ name: Anchored Kraus symbolic research
2
+ on:
3
+ pull_request:
4
+ paths:
5
+ - 'src/symq/labs/anchored_kraus.py'
6
+ - 'benchmarks/anchored_kraus.py'
7
+ - 'tests/test_anchored_kraus.py'
8
+ - 'docs/labs/research-outlook-20261102.md'
9
+ - '.github/workflows/anchored-kraus.yml'
10
+ workflow_dispatch:
11
+ permissions:
12
+ contents: read
13
+ jobs:
14
+ qualification:
15
+ runs-on: ubuntu-latest
16
+ timeout-minutes: 15
17
+ steps:
18
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
19
+ - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
20
+ with:
21
+ python-version: '3.12'
22
+ - run: python -m pip install -e ".[dev]"
23
+ - run: ruff check .
24
+ - run: python -m pytest -q tests/test_anchored_kraus.py tests/test_hmr_table_contract.py
25
+ - run: |
26
+ mkdir -p evidence
27
+ git rev-parse HEAD > evidence/commit.txt
28
+ git rev-parse 'HEAD^{tree}' > evidence/tree.txt
29
+ git diff --exit-code
30
+ python -m benchmarks.anchored_kraus --programs 400 --output evidence/anchored-kraus.json
31
+ - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
32
+ if: always()
33
+ with:
34
+ name: anchored-kraus-evidence
35
+ path: evidence/
36
+ if-no-files-found: error
@@ -0,0 +1,50 @@
1
+ name: Backward ancilla research
2
+ on:
3
+ push:
4
+ branches: [main]
5
+ paths:
6
+ - 'src/symq/labs/backward_ancilla.py'
7
+ - 'src/symq/experimental/hybrid.py'
8
+ - 'src/symq/resources.py'
9
+ - 'benchmarks/backward_ancilla.py'
10
+ - 'benchmarks/corpus/qualtran/**'
11
+ - 'tests/test_backward_ancilla*.py'
12
+ - '.github/workflows/backward-ancilla.yml'
13
+ pull_request:
14
+ paths:
15
+ - 'src/symq/labs/backward_ancilla.py'
16
+ - 'src/symq/experimental/hybrid.py'
17
+ - 'src/symq/resources.py'
18
+ - 'benchmarks/backward_ancilla.py'
19
+ - 'benchmarks/corpus/qualtran/**'
20
+ - 'tests/test_backward_ancilla*.py'
21
+ - '.github/workflows/backward-ancilla.yml'
22
+ permissions:
23
+ contents: read
24
+ concurrency:
25
+ group: backward-ancilla-${{ github.ref }}
26
+ cancel-in-progress: true
27
+ jobs:
28
+ qualification:
29
+ runs-on: ubuntu-latest
30
+ timeout-minutes: 15
31
+ steps:
32
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
33
+ - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
34
+ with:
35
+ python-version: '3.12'
36
+ cache: pip
37
+ - run: python -m pip install -e '.[dev]'
38
+ env:
39
+ SYMQ_SKIP_NATIVE: '1'
40
+ - run: >-
41
+ python -m pytest -q tests/test_backward_ancilla.py
42
+ tests/test_backward_ancilla_qualification.py
43
+ tests/test_hybrid_channel_research.py tests/test_public_docs.py
44
+ - run: python -m benchmarks.backward_ancilla --repetitions 3 --output evidence/backward-ancilla.json
45
+ - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
46
+ if: always()
47
+ with:
48
+ name: backward-ancilla-evidence
49
+ path: evidence/
50
+ if-no-files-found: error
@@ -0,0 +1,48 @@
1
+ name: HMR certificate research
2
+ on:
3
+ pull_request:
4
+ paths:
5
+ - 'src/symq/**'
6
+ - 'tests/test_channel_certificate*.py'
7
+ - 'benchmarks/channel_certificate.py'
8
+ - 'benchmarks/corpus/**'
9
+ - 'docs/guide/channel-certificates.md'
10
+ - 'pyproject.toml'
11
+ - '.github/workflows/channel-certificates.yml'
12
+ push:
13
+ branches: [main]
14
+ paths:
15
+ - 'src/symq/**'
16
+ - 'tests/test_channel_certificate*.py'
17
+ - 'benchmarks/channel_certificate.py'
18
+ - 'benchmarks/corpus/**'
19
+ - '.github/workflows/channel-certificates.yml'
20
+ workflow_dispatch:
21
+ permissions:
22
+ contents: read
23
+ concurrency:
24
+ group: research-channel-certificates-${{ github.ref }}
25
+ cancel-in-progress: true
26
+ jobs:
27
+ qualification:
28
+ runs-on: ubuntu-latest
29
+ timeout-minutes: 10
30
+ env:
31
+ SYMQ_SKIP_NATIVE: '1'
32
+ SYMQ_TEST_REQUIRE: checkout
33
+ steps:
34
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
35
+ - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
36
+ with:
37
+ python-version: '3.12'
38
+ cache: pip
39
+ - run: python -m pip install -e ".[dev]"
40
+ - run: python -m pytest -q tests/test_channel_certificate.py tests/test_channel_certificate_qualification.py tests/test_channel_criterion.py tests/test_public_api.py
41
+ - name: Reproduce bounded development qualification
42
+ run: python -m benchmarks.channel_certificate --repetitions 3 --output evidence/channel-certificates.json
43
+ - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
44
+ if: always()
45
+ with:
46
+ name: channel-certificates-evidence
47
+ path: evidence/
48
+ if-no-files-found: error