
Framework di stima delle risorse basato su Qiskit per circuiti quantistici di inversione modulare e addizione di punti affini efficienti in termini di spazio utilizzati negli algoritmi di logaritmo discreto su curve ellittiche.
Questo repository contiene codice Qiskit per la stima delle risorse dei circuiti quantistici di inversione modulare e di addizione di punti affine efficienti in termini di spazio, usati in contesti di logaritmi discreti su curve ellittiche.
Il codebase attuale è incentrato su tre flussi di lavoro:
.
├── README.md
│
├── eea_model/: original classical EEA reference implementation used for algorithm prototyping and correctness validation.
│
├── 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
Conta i passi dell'Algoritmo-3 EEA ricorsivamente, in chunk con checkpoint.
run_eea_s835_fastdual_recursive_chunks_checkpoint_nctopt.py
Stesso flusso di conteggio EEA, ma con ottimizzazione locale tramite template NCT.
count_s835_fastdual_wrapped_point_addition_blocks_compiled.py
Conta il circuito di addizione di punti incapsulato contando ricorsivamente i sottoblocchi compilati riutilizzabili e assemblando i componenti aritmetici ripetuti con molteplicità esatte.
eea_circuit_s835_fastdual.py: Implementazione principale del circuito EEA di produzione.eea_circuit_s835_lowaux.py: Routine helper con pochi qubit ausiliari usate dall'implementazione principale.eea_circuit_updated.py: Blocchi di costruzione EEA condivisi e utilità di conteggio ricorsivo delle risorse.eea_circuit.py: Wrapper di compatibilità all'indietro per i test.point_addition_fig14_s835_fastdual_wrapped_quadratic.py: costruisce il circuito di addizione di punti affine incapsulato corrispondente allo schedule della Fig.14.quadratic_fig15_inplace_s835_fastdual_wrapped.py: costruisce la struttura di divisione in-place e moltiplicazione in-place della Fig.15 con EEA, moltiplicazione, misurazione, reset e correzione di fase feed-forward.quadratic_modular_arithmetic.py: istruzioni di addizione/sottrazione modulare, moltiplicazione, moltiplicazione inversa, raddoppio e dimezzamento usate dal contatore di addizione di punti.quadratic_gidney_arithmetic.py: primitive aritmetiche in stile Gidney e helper di misurazione e feed-forward usati dal livello di aritmetica modulare quadratica.quadratic_squ_minus.py: blocco square-minus usato nello schedule dell'addizione di punti affine.under1000_eea_shared_s835_fastdual_wrapped.py: wrapper EEA condiviso e helper usati dal circuito di addizione di punti.under1000_modular_arithmetic_base.py: piccole utilità condivise di aritmetica modulare.ccx_recursive_block_counter.py: contatore ricorsivo per circuiti Qiskit, con policy per l'espansione MCX e l'espansione SWAP.nct_template_segment_optimizer.py: ottimizzatore locale basato su template per i segmenti {X, CX, CCX}.Ambiente consigliato:
Installa la dipendenza principale con:
python -m pip install --upgrade pip
python -m pip install qiskit
Esegui la suite di test:
python test_eea_strict_main.py
python test_point_addition_strict_main.py
Per uno smoke test più rapido dell'addizione di punti:
python test_point_addition_strict_main.py --skip-n256 --skip-report
Il punto di ingresso standard per il conteggio EEA è:
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
Argomenti importanti:
--n: larghezza in bit.--T-max: override opzionale per il numero di passi dell'Algoritmo-3; di default viene usato il valore da eea.get_n_config(n).--chunk-size: numero di passi dell'Algoritmo-3 contati per chunk di checkpoint.--aux-size: override opzionale per il pool di qubit helper; se omesso, la dimensione degli helper del layout viene calcolata automaticamente.--measurement-uncompute: abilita l'uncomputation basato su misurazione nei blocchi EEA contati.--resume: riutilizza i file JSON di chunk non vuoti esistenti in --workdir.--workdir: directory per i file di checkpoint per chunk.--out: riepilogo JSON cumulativo scritto dopo ogni chunk.Lo script scrive file per chunk come:
eea_s835_fastdual_chunks25/eea_s835_fastdual_n192_T0001_0025.json
e un JSON di output cumulativo contenente campi come:
mode
n
T_max
num_qubits
len_width
shift_width
aux_size
measurement_based
ops
chunks
elapsed_s_so_far
Il punto di ingresso per il conteggio ottimizzato è:
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
Questo flusso di lavoro tenta l'ottimizzazione locale tramite template sui segmenti {X, CX, CCX}. È progettato come un contatore fail-open con limite: se un passo ottimizzato va in timeout o solleva un'eccezione, quel passo viene contato esattamente, senza round di template, e poi salvato tramite checkpoint, così i conteggi finali riportati rimangono completi.
Argomenti utili in aggiunta a quelli standard dell'EEA:
--templates {small-nct,all-nct}: selezione della libreria di template.--rounds: numero di round di ottimizzazione tramite template.--max-nct-segment-gates: dimensione massima di un segmento reversibile inviato all'ottimizzazione tramite template.--max-nct-segment-qubits: numero massimo di qubit in un segmento.--segment-timeout-s: timeout per l'ottimizzazione del singolo segmento.--step-timeout-s: timeout per un intero passo dell'Algoritmo-3 prima di ripiegare sul conteggio invariato.--fallback-step-timeout-s: timeout per il conteggio di fallback esatto.--force: ricalcola anche se i checkpoint di passo/chunk esistono già.--ignore-policy-mismatch: riutilizza i vecchi checkpoint anche quando la policy di ottimizzazione differisce; serve principalmente al debug.Il flusso di lavoro ottimizzato scrive sia i checkpoint a livello di passo in:
<workdir>/steps/
sia i riepiloghi a livello di chunk in:
<workdir>/