topological-quantum-computer / tests /test_qlambda_arrays.py
SNAPKITTYWEST's picture
push from SNAPKITTYWEST/topological-quantum-computer
d6f21bb verified
Raw
History Blame Contribute Delete
1.82 kB
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(ROOT / "python"))
from classical.sha520_ref import SHA520
from qlambda.arrays import SHA520_DIGEST_BYTES, SHA520_IV_520, SHA520_K_80, sha520_array_manifest
from qlambda.compiler import compile_source
from qlambda.license_policy import select_license
from qlambda.programs import SHA520_MESSAGE_SCHEDULE_WORD, SHA520_SIGMA0_AND_CH
from topological.braid_backend import TopologicalBraidBackend
from topological.resource_estimates import estimate_sha520_r_topological
def test_sha520_arrays_are_explicit():
manifest = sha520_array_manifest()
assert manifest["SHA520_IV_520"].length == 9
assert manifest["SHA520_K_80"].length == 80
assert len(SHA520_IV_520) == 9
assert len(SHA520_K_80) == 80
def test_sha520_digest_is_520_bits():
digest = SHA520(rounds=4).digest(b"abc")
assert len(digest) == SHA520_DIGEST_BYTES
def test_qlambda_compiles_sigma_ch_and_schedule_add_shift():
sigma_qir = compile_source(SHA520_SIGMA0_AND_CH)
schedule_qir = compile_source(SHA520_MESSAGE_SCHEDULE_WORD)
gates = {inst.gate for inst in sigma_qir + schedule_qir}
assert "CX" in gates
assert "CCX" in gates
assert len(schedule_qir) > len(sigma_qir)
def test_topological_backend_and_resource_flags():
qir = compile_source(SHA520_SIGMA0_AND_CH)
braids = TopologicalBraidBackend().compile(qir[:10])
assert len(braids) > 0
estimate = estimate_sha520_r_topological(rounds=4, target_bits=16)
assert estimate.physical_anyons == estimate.logical_qubits * 4
assert "oracle_dominates" in estimate.falsification_flags
def test_license_policy_is_python_array_backed():
assert select_license("saas_wrapper") == "agpl_3_0"