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.
- symq/__init__.py +100 -0
- symq/__main__.py +732 -0
- symq/_io.py +30 -0
- symq/_native_hint.py +53 -0
- symq/anf.py +101 -0
- symq/backends/__init__.py +102 -0
- symq/backends/adaptive.py +215 -0
- symq/backends/base.py +197 -0
- symq/backends/linear.py +129 -0
- symq/backends/packed.py +290 -0
- symq/backends/reference.py +56 -0
- symq/backends/sparse.py +111 -0
- symq/backends/truthtable.py +90 -0
- symq/backends/zdd.py +309 -0
- symq/backends/zdd_native.py +450 -0
- symq/circuit.py +356 -0
- symq/corpus.py +100 -0
- symq/doctor.py +156 -0
- symq/equivalence.py +278 -0
- symq/errors.py +63 -0
- symq/experimental/__init__.py +40 -0
- symq/experimental/api.py +229 -0
- symq/experimental/blocks.py +398 -0
- symq/experimental/capabilities.py +214 -0
- symq/experimental/channel.py +465 -0
- symq/experimental/contracts.py +121 -0
- symq/experimental/domains.py +321 -0
- symq/experimental/execution.py +362 -0
- symq/experimental/hybrid.py +748 -0
- symq/experimental/prepared.py +231 -0
- symq/experimental/profiling.py +177 -0
- symq/experimental/serialization.py +149 -0
- symq/experimental/table_xor.py +597 -0
- symq/external/__init__.py +64 -0
- symq/external/cudd.py +190 -0
- symq/external/polybori.py +82 -0
- symq/external/qcec.py +75 -0
- symq/facade.py +109 -0
- symq/generators/__init__.py +89 -0
- symq/generators/arithmetic.py +104 -0
- symq/generators/bilinear_factors.py +187 -0
- symq/generators/bilinear_optimization.py +232 -0
- symq/generators/gf2n.py +487 -0
- symq/hashing.py +24 -0
- symq/kickmix.py +245 -0
- symq/labs/__init__.py +62 -0
- symq/labs/_isolated_miter_verifier.py +92 -0
- symq/labs/_isolated_miter_worker.py +67 -0
- symq/labs/affine_basis_study.py +629 -0
- symq/labs/affine_hmr_portable.py +443 -0
- symq/labs/affine_phase.py +595 -0
- symq/labs/affine_table.py +201 -0
- symq/labs/anchored_kraus.py +385 -0
- symq/labs/anchored_stream.py +319 -0
- symq/labs/backward_ancilla.py +498 -0
- symq/labs/bilinear_substitution.py +121 -0
- symq/labs/bitset_anf.py +218 -0
- symq/labs/channel_certificate.py +519 -0
- symq/labs/channel_composition.py +464 -0
- symq/labs/classical_cone.py +600 -0
- symq/labs/classical_transcript.py +237 -0
- symq/labs/contextual_substitution.py +454 -0
- symq/labs/corpus_qualification.py +452 -0
- symq/labs/cut_invariants.py +685 -0
- symq/labs/cyclotomic.py +412 -0
- symq/labs/dyadic_phase.py +310 -0
- symq/labs/finite_domain.py +182 -0
- symq/labs/gf24_choice.py +82 -0
- symq/labs/gf24_order.py +61 -0
- symq/labs/gf24_tower.py +216 -0
- symq/labs/hmr_repair.py +220 -0
- symq/labs/hmr_table_contract.py +498 -0
- symq/labs/hybrid_substitution.py +292 -0
- symq/labs/importers.py +269 -0
- symq/labs/indexed_substitution.py +379 -0
- symq/labs/isolated_miter.py +394 -0
- symq/labs/isolated_miter_supervisor.py +288 -0
- symq/labs/kmb_affine_resources.py +293 -0
- symq/labs/kmb_reset_cache.py +358 -0
- symq/labs/kmb_resource_frontier.py +360 -0
- symq/labs/kmb_source_index.py +238 -0
- symq/labs/kmb_window.py +541 -0
- symq/labs/kmx_source_index.py +528 -0
- symq/labs/kmx_window.py +236 -0
- symq/labs/kraus_graph.py +201 -0
- symq/labs/ledger.py +178 -0
- symq/labs/linear_certificate.py +42 -0
- symq/labs/lrat_export.py +215 -0
- symq/labs/lrat_lean.py +155 -0
- symq/labs/lrat_rup.py +256 -0
- symq/labs/miter_cnf.py +280 -0
- symq/labs/miter_proof_bundle.py +228 -0
- symq/labs/nonlinear_phase_bits.py +170 -0
- symq/labs/phase_adaptive.py +285 -0
- symq/labs/phase_delta_binding.py +387 -0
- symq/labs/phase_discovery.py +328 -0
- symq/labs/phase_factored.py +355 -0
- symq/labs/phase_proof_bundle.py +289 -0
- symq/labs/phase_quotient.py +437 -0
- symq/labs/phase_separator.py +149 -0
- symq/labs/proof_graph.py +433 -0
- symq/labs/qasm3.py +187 -0
- symq/labs/qcec_adapter.py +114 -0
- symq/labs/qualtran.py +91 -0
- symq/labs/rename.py +219 -0
- symq/labs/reset_cache.py +244 -0
- symq/labs/reset_support.py +324 -0
- symq/labs/rewrite.py +310 -0
- symq/labs/rewrite_bricks.py +345 -0
- symq/labs/rewrite_engine.py +105 -0
- symq/labs/rewrite_locator.py +154 -0
- symq/labs/rewrite_prepare.py +267 -0
- symq/labs/rewrite_request.py +441 -0
- symq/labs/shared_table.py +258 -0
- symq/labs/shift_diagonal_ancilla.py +391 -0
- symq/labs/site_resources.py +510 -0
- symq/labs/table_xor_contract.py +22 -0
- symq/labs/verification_contracts.py +478 -0
- symq/labs/xag.py +398 -0
- symq/order.py +83 -0
- symq/phase.py +401 -0
- symq/phase_oracle.py +57 -0
- symq/py.typed +0 -0
- symq/qasm.py +243 -0
- symq/resources.py +278 -0
- symq/sat/__init__.py +47 -0
- symq/sat/_solve.py +68 -0
- symq/sat/assumptions.py +297 -0
- symq/sat/composition.py +766 -0
- symq/sat/encoding.py +348 -0
- symq/sat/miter.py +272 -0
- symq/strategy.py +200 -0
- symq/verification.py +251 -0
- symq-0.2.0.dist-info/METADATA +321 -0
- symq-0.2.0.dist-info/RECORD +139 -0
- symq-0.2.0.dist-info/WHEEL +4 -0
- symq-0.2.0.dist-info/entry_points.txt +2 -0
- symq-0.2.0.dist-info/licenses/LICENSE +21 -0
- 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
|
+
]
|