symq 0.2.0__py3-none-any.whl

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 (139) hide show
  1. symq/__init__.py +100 -0
  2. symq/__main__.py +732 -0
  3. symq/_io.py +30 -0
  4. symq/_native_hint.py +53 -0
  5. symq/anf.py +101 -0
  6. symq/backends/__init__.py +102 -0
  7. symq/backends/adaptive.py +215 -0
  8. symq/backends/base.py +197 -0
  9. symq/backends/linear.py +129 -0
  10. symq/backends/packed.py +290 -0
  11. symq/backends/reference.py +56 -0
  12. symq/backends/sparse.py +111 -0
  13. symq/backends/truthtable.py +90 -0
  14. symq/backends/zdd.py +309 -0
  15. symq/backends/zdd_native.py +450 -0
  16. symq/circuit.py +356 -0
  17. symq/corpus.py +100 -0
  18. symq/doctor.py +156 -0
  19. symq/equivalence.py +278 -0
  20. symq/errors.py +63 -0
  21. symq/experimental/__init__.py +40 -0
  22. symq/experimental/api.py +229 -0
  23. symq/experimental/blocks.py +398 -0
  24. symq/experimental/capabilities.py +214 -0
  25. symq/experimental/channel.py +465 -0
  26. symq/experimental/contracts.py +121 -0
  27. symq/experimental/domains.py +321 -0
  28. symq/experimental/execution.py +362 -0
  29. symq/experimental/hybrid.py +748 -0
  30. symq/experimental/prepared.py +231 -0
  31. symq/experimental/profiling.py +177 -0
  32. symq/experimental/serialization.py +149 -0
  33. symq/experimental/table_xor.py +597 -0
  34. symq/external/__init__.py +64 -0
  35. symq/external/cudd.py +190 -0
  36. symq/external/polybori.py +82 -0
  37. symq/external/qcec.py +75 -0
  38. symq/facade.py +109 -0
  39. symq/generators/__init__.py +89 -0
  40. symq/generators/arithmetic.py +104 -0
  41. symq/generators/bilinear_factors.py +187 -0
  42. symq/generators/bilinear_optimization.py +232 -0
  43. symq/generators/gf2n.py +487 -0
  44. symq/hashing.py +24 -0
  45. symq/kickmix.py +245 -0
  46. symq/labs/__init__.py +62 -0
  47. symq/labs/_isolated_miter_verifier.py +92 -0
  48. symq/labs/_isolated_miter_worker.py +67 -0
  49. symq/labs/affine_basis_study.py +629 -0
  50. symq/labs/affine_hmr_portable.py +443 -0
  51. symq/labs/affine_phase.py +595 -0
  52. symq/labs/affine_table.py +201 -0
  53. symq/labs/anchored_kraus.py +385 -0
  54. symq/labs/anchored_stream.py +319 -0
  55. symq/labs/backward_ancilla.py +498 -0
  56. symq/labs/bilinear_substitution.py +121 -0
  57. symq/labs/bitset_anf.py +218 -0
  58. symq/labs/channel_certificate.py +519 -0
  59. symq/labs/channel_composition.py +464 -0
  60. symq/labs/classical_cone.py +600 -0
  61. symq/labs/classical_transcript.py +237 -0
  62. symq/labs/contextual_substitution.py +454 -0
  63. symq/labs/corpus_qualification.py +452 -0
  64. symq/labs/cut_invariants.py +685 -0
  65. symq/labs/cyclotomic.py +412 -0
  66. symq/labs/dyadic_phase.py +310 -0
  67. symq/labs/finite_domain.py +182 -0
  68. symq/labs/gf24_choice.py +82 -0
  69. symq/labs/gf24_order.py +61 -0
  70. symq/labs/gf24_tower.py +216 -0
  71. symq/labs/hmr_repair.py +220 -0
  72. symq/labs/hmr_table_contract.py +498 -0
  73. symq/labs/hybrid_substitution.py +292 -0
  74. symq/labs/importers.py +269 -0
  75. symq/labs/indexed_substitution.py +379 -0
  76. symq/labs/isolated_miter.py +394 -0
  77. symq/labs/isolated_miter_supervisor.py +288 -0
  78. symq/labs/kmb_affine_resources.py +293 -0
  79. symq/labs/kmb_reset_cache.py +358 -0
  80. symq/labs/kmb_resource_frontier.py +360 -0
  81. symq/labs/kmb_source_index.py +238 -0
  82. symq/labs/kmb_window.py +541 -0
  83. symq/labs/kmx_source_index.py +528 -0
  84. symq/labs/kmx_window.py +236 -0
  85. symq/labs/kraus_graph.py +201 -0
  86. symq/labs/ledger.py +178 -0
  87. symq/labs/linear_certificate.py +42 -0
  88. symq/labs/lrat_export.py +215 -0
  89. symq/labs/lrat_lean.py +155 -0
  90. symq/labs/lrat_rup.py +256 -0
  91. symq/labs/miter_cnf.py +280 -0
  92. symq/labs/miter_proof_bundle.py +228 -0
  93. symq/labs/nonlinear_phase_bits.py +170 -0
  94. symq/labs/phase_adaptive.py +285 -0
  95. symq/labs/phase_delta_binding.py +387 -0
  96. symq/labs/phase_discovery.py +328 -0
  97. symq/labs/phase_factored.py +355 -0
  98. symq/labs/phase_proof_bundle.py +289 -0
  99. symq/labs/phase_quotient.py +437 -0
  100. symq/labs/phase_separator.py +149 -0
  101. symq/labs/proof_graph.py +433 -0
  102. symq/labs/qasm3.py +187 -0
  103. symq/labs/qcec_adapter.py +114 -0
  104. symq/labs/qualtran.py +91 -0
  105. symq/labs/rename.py +219 -0
  106. symq/labs/reset_cache.py +244 -0
  107. symq/labs/reset_support.py +324 -0
  108. symq/labs/rewrite.py +310 -0
  109. symq/labs/rewrite_bricks.py +345 -0
  110. symq/labs/rewrite_engine.py +105 -0
  111. symq/labs/rewrite_locator.py +154 -0
  112. symq/labs/rewrite_prepare.py +267 -0
  113. symq/labs/rewrite_request.py +441 -0
  114. symq/labs/shared_table.py +258 -0
  115. symq/labs/shift_diagonal_ancilla.py +391 -0
  116. symq/labs/site_resources.py +510 -0
  117. symq/labs/table_xor_contract.py +22 -0
  118. symq/labs/verification_contracts.py +478 -0
  119. symq/labs/xag.py +398 -0
  120. symq/order.py +83 -0
  121. symq/phase.py +401 -0
  122. symq/phase_oracle.py +57 -0
  123. symq/py.typed +0 -0
  124. symq/qasm.py +243 -0
  125. symq/resources.py +278 -0
  126. symq/sat/__init__.py +47 -0
  127. symq/sat/_solve.py +68 -0
  128. symq/sat/assumptions.py +297 -0
  129. symq/sat/composition.py +766 -0
  130. symq/sat/encoding.py +348 -0
  131. symq/sat/miter.py +272 -0
  132. symq/strategy.py +200 -0
  133. symq/verification.py +251 -0
  134. symq-0.2.0.dist-info/METADATA +321 -0
  135. symq-0.2.0.dist-info/RECORD +139 -0
  136. symq-0.2.0.dist-info/WHEEL +4 -0
  137. symq-0.2.0.dist-info/entry_points.txt +2 -0
  138. symq-0.2.0.dist-info/licenses/LICENSE +21 -0
  139. symq-0.2.0.dist-info/licenses/THIRD_PARTY_NOTICES.md +49 -0
symq/__init__.py ADDED
@@ -0,0 +1,100 @@
1
+ """symq: exact Boolean ANF and classical reversible circuits (experimental).
2
+
3
+ The names below are the supported entry points. Heavier ones (the SAT engine and the explicit
4
+ verification facade) are imported on first access, so ``import symq`` stays cheap.
5
+ """
6
+ from importlib import metadata as _metadata
7
+ from typing import Any
8
+
9
+ from .anf import ANF
10
+ from .backends import BACKENDS, has_native, make_algebra, simulate
11
+ from .circuit import Circuit, Gate
12
+ from .equivalence import (
13
+ EquivalenceResult,
14
+ ReferenceChecker,
15
+ check_equivalence,
16
+ check_equivalence_by_blocks,
17
+ )
18
+ from .errors import (
19
+ InternalInconsistency,
20
+ QasmSyntaxError,
21
+ ResourceLimitExceeded,
22
+ SatUnavailable,
23
+ SymqError,
24
+ UnsupportedOperation,
25
+ )
26
+ from .order import POLICIES, algebra_order, order_for
27
+ from .phase import PhaseProgram, check_phase_equivalence, phase_semantics
28
+ from .qasm import load_qasm, parse_qasm
29
+ from .resources import Budget
30
+ from .strategy import Choice, choose, features
31
+
32
+ try:
33
+ __version__ = _metadata.version("symq")
34
+ except _metadata.PackageNotFoundError: # running from a source tree that is not installed
35
+ __version__ = "0+unknown"
36
+
37
+ _LAZY = {
38
+ "check_sat_equivalence": ("symq.sat", "check_sat_equivalence"),
39
+ "SatVerdict": ("symq.sat", "SatVerdict"),
40
+ "verify_explicit": ("symq.verification", "verify_explicit"),
41
+ "VerificationRecord": ("symq.verification", "VerificationRecord"),
42
+ "verify": ("symq.facade", "verify"),
43
+ "Verdict": ("symq.facade", "Verdict"),
44
+ }
45
+
46
+
47
+ def __getattr__(name: str) -> Any:
48
+ try:
49
+ module_name, attribute = _LAZY[name]
50
+ except KeyError:
51
+ raise AttributeError(f"module 'symq' has no attribute {name!r}") from None
52
+ from importlib import import_module
53
+
54
+ value = getattr(import_module(module_name), attribute)
55
+ globals()[name] = value
56
+ return value
57
+
58
+
59
+ def __dir__() -> list[str]:
60
+ return sorted(__all__)
61
+
62
+
63
+ __all__ = [
64
+ "ANF",
65
+ "BACKENDS",
66
+ "POLICIES",
67
+ "Budget",
68
+ "Choice",
69
+ "Circuit",
70
+ "EquivalenceResult",
71
+ "Gate",
72
+ "InternalInconsistency",
73
+ "PhaseProgram",
74
+ "QasmSyntaxError",
75
+ "ReferenceChecker",
76
+ "ResourceLimitExceeded",
77
+ "SatUnavailable",
78
+ "SatVerdict",
79
+ "SymqError",
80
+ "UnsupportedOperation",
81
+ "Verdict",
82
+ "VerificationRecord",
83
+ "__version__",
84
+ "algebra_order",
85
+ "check_equivalence",
86
+ "check_equivalence_by_blocks",
87
+ "check_phase_equivalence",
88
+ "check_sat_equivalence",
89
+ "choose",
90
+ "features",
91
+ "has_native",
92
+ "load_qasm",
93
+ "make_algebra",
94
+ "order_for",
95
+ "parse_qasm",
96
+ "phase_semantics",
97
+ "simulate",
98
+ "verify",
99
+ "verify_explicit",
100
+ ]