
Qiskit-basiertes Ressourcenschätzungs-Framework für platzeffiziente Quanten-Modularinversion und affine Punktadditionsschaltungen, die in Algorithmen für diskrete Logarithmen auf elliptischen Kurven verwendet werden.
Dieses Repository enthält Qiskit-Code zur Ressourcenabschätzung der platzsparenden Quanten-Modular-Inversions- und affinen Punktadditionsschaltungen, die in elliptischen Kurven-Diskrete-Logarithmen-Szenarien verwendet werden.
Der aktuelle Codebestand konzentriert sich auf drei Arbeitsabläufe:
.
├── README.md
│
├── eea_model/: Originale klassische EEA-Referenzimplementierung, die für Algorithmen-Prototyping und Korrektheitsvalidierung verwendet wird.
│
├── run_eea_s835_fastdual_recursive_chunks_checkpoint.py
├── run_eea_s835_fastdual_recursive_chunks_checkpoint_nctopt.py
├── count_s835_fastdual_wrapped_point_addition_blocks_compiled.py
│
├── eea_circuit.py
├── eea_circuit_s835_fastdual.py
├── eea_circuit_s835_lowaux.py
├── eea_circuit_updated.py
├── under1000_eea_shared_s835_fastdual_wrapped.py
├── under1000_modular_arithmetic_base.py
│
├── point_addition_fig14_s835_fastdual_wrapped_quadratic.py
├── quadratic_fig15_inplace_s835_fastdual_wrapped.py
├── quadratic_gidney_arithmetic.py
├── quadratic_lazy_instruction.py
├── quadratic_modular_arithmetic.py
├── quadratic_squ_minus.py
│
├── ccx_recursive_block_counter.py
├── nct_template_segment_optimizer.py
│
├── test_eea_strict_main.py
└── test_point_addition_strict_main.py
run_eea_s835_fastdual_recursive_chunks_checkpoint.py
Zählt die EEA-Algorithmus-3-Schritte rekursiv in checkpointierten Chunks.
run_eea_s835_fastdual_recursive_chunks_checkpoint_nctopt.py
Gleicher EEA-Zählworkflow, jedoch mit lokaler NCT-Vorlagenoptimierung.
count_s835_fastdual_wrapped_point_addition_blocks_compiled.py
Zählt die umschlossene Punktadditionsschaltung durch rekursives Zählen wiederverwendbarer kompilierter Unterblöcke und Zusammenfügen der wiederholten arithmetischen Komponenten mit exakten Multiplizitäten.
eea_circuit_s835_fastdual.py: Hauptimplementierung der Produktions-EEA-Schaltung.eea_circuit_s835_lowaux.py: Hilfsroutinen mit geringem Hilfsqubit-Aufwand, die von der Hauptimplementierung verwendet werden.eea_circuit_updated.py: Gemeinsame EEA-Bausteine und rekursive Ressourcenzähl-Hilfsprogramme.eea_circuit.py: Abwärtskompatibilitäts-Wrapper für Tests.point_addition_fig14_s835_fastdual_wrapped_quadratic.py: Erstellt die umschlossene affine Punktadditionsschaltung entsprechend des Fig.14-Zeitplans.quadratic_fig15_inplace_s835_fastdual_wrapped.py: Erstellt die Fig.15-In-Place-Division und In-Place-Multiplikationsstruktur mit EEA, Multiplikation, Messung, Zurücksetzen und Feed-Forward-Phasenkorrektur.quadratic_modular_arithmetic.py: Modulare Additions-/Subtraktions-, Multiplikations-, inverse Multiplikations-, Verdopplungs- und Halbierungsinstruktionen, die vom Punktadditionszähler verwendet werden.quadratic_gidney_arithmetic.py: Gidney-artige arithmetische Primitive sowie Mess- und Feed-Forward-Helfer, die von der quadratischen modularen Arithmetikschicht verwendet werden.quadratic_squ_minus.py: Square-minus-Block, der im affinen Punktadditionsplan verwendet wird.under1000_eea_shared_s835_fastdual_wrapped.py: Gemeinsamer EEA-Wrapper und Helfer, der von der Punktadditionsschaltung verwendet wird.under1000_modular_arithmetic_base.py: Kleine gemeinsame modulare Arithmetik-Hilfsprogramme.ccx_recursive_block_counter.py: Rekursiver Zähler für Qiskit-Schaltungen mit Richtlinien für MCX-Expansion und SWAP-Expansion.nct_template_segment_optimizer.py: Lokaler vorlagenbasierter Optimierer für {X, CX, CCX}-Segmente.Empfohlene Umgebung:
Installieren Sie die Hauptabhängigkeit mit:
python -m pip install --upgrade pip
python -m pip install qiskit
Führen Sie die Testsuite aus:
python test_eea_strict_main.py
python test_point_addition_strict_main.py
Für einen schnelleren Punktadditions-Smoke-Test:
python test_point_addition_strict_main.py --skip-n256 --skip-report
Der Standard-Einstiegspunkt für die EEA-Zählung ist:
python run_eea_s835_fastdual_recursive_chunks_checkpoint.py \
--n 192 \
--chunk-size 25 \
--measurement-uncompute \
--resume \
--workdir eea_s835_fastdual_chunks25 \
--out eea_s835_fastdual_algorithm3_recursive_chunks_n192_measurement.json
Wichtige Argumente:
--n: Bitbreite.--T-max: optionale Überschreibung für die Anzahl der Algorithmus-3-Schritte; standardmäßig wird der Wert von eea.get_n_config(n) verwendet.--chunk-size: Anzahl der Algorithmus-3-Schritte, die pro Checkpoint-Chunk gezählt werden.--aux-size: optionale Überschreibung für den Hilfsqubit-Pool; wenn nicht angegeben, wird die Layout-Hilfsgröße automatisch berechnet.--measurement-uncompute: Aktiviert messungsbasiertes Uncomputing in den gezählten EEA-Blöcken.--resume: Verwendet vorhandene nicht-leere Chunk-JSON-Dateien in --workdir erneut.--workdir: Verzeichnis für Checkpoint-Dateien pro Chunk.--out: Kumulative JSON-Zusammenfassung, die nach jedem Chunk geschrieben wird.Das Skript schreibt Dateien pro Chunk wie:
eea_s835_fastdual_chunks25/eea_s835_fastdual_n192_T0001_0025.json
und eine kumulative Ausgabe-JSON mit Feldern wie:
mode
n
T_max
num_qubits
len_width
shift_width
aux_size
measurement_based
ops
chunks
elapsed_s_so_far
Der optimierte Zähleinstiegspunkt ist:
python run_eea_s835_fastdual_recursive_chunks_checkpoint_nctopt.py \
--n 128 \
--chunk-size 25 \
--measurement-uncompute \
--templates small-nct \
--rounds 1 \
--max-nct-segment-gates 40 \
--segment-timeout-s 10 \
--timeout-mode auto \
--resume \
--workdir eea_s835_fastdual_chunks_nctopt_failopen_r1_128_seg40_to10 \
--out eea_s835_fastdual_algorithm3_recursive_chunks_n128_measurement_nctopt_failopen_r1_seg40_to10.json
Dieser Workflow versucht eine lokale Vorlagenoptimierung für {X, CX, CCX}-Segmente. Er ist als begrenzter Fail-Open-Zähler konzipiert: Wenn ein optimierter Schritt eine Zeitüberschreitung verursacht oder eine Ausnahme auslöst, wird dieser Schritt exakt ohne Vorlagenrunden gezählt und dann checkpointiert, sodass die endgültigen gemeldeten Zählungen vollständig bleiben.
Nützliche Argumente zusätzlich zu den Standard-EEA-Argumenten:
--templates {small-nct,all-nct}: Auswahl der Vorlagenbibliothek.--rounds: Anzahl der Vorlagenoptimierungsrunden.--max-nct-segment-gates: Maximale Größe eines reversiblen Segments, das zur Vorlagenoptimierung gesendet wird.--max-nct-segment-qubits: Maximale Anzahl von Qubits in einem Segment.--segment-timeout-s: Zeitüberschreitung für die Optimierung eines einzelnen Segments.--step-timeout-s: Zeitüberschreitung für einen gesamten Algorithmus-3-Schritt, bevor auf die unveränderte Zählung zurückgegriffen wird.--fallback-step-timeout-s: Zeitüberschreitung für die exakte Fallback-Zählung.--force: Berechnet auch dann neu, wenn Schritt-/Chunk-Checkpoints bereits existieren.--ignore-policy-mismatch: Verwendet alte Checkpoints erneut, selbst wenn die Optimierungsrichtlinie abweicht; dies dient hauptsächlich zum Debuggen.Der optimierte Workflow schreibt sowohl Schritt-Level-Checkpoints unter:
<workdir>/steps/
als auch Chunk-Level-Zusammenfassungen unter:
<workdir>/