Saltar a contenido

Serialización

vqubit puede guardar y recuperar circuitos como texto, y exportarlos a OpenQASM 2.0.

JSON

Cada valor serializable se convierte en un objeto JSON con un campo cirq_type, y read_json lo reconstruye.

import vqubit as vq

q0, q1 = vq.LineQubit.range(2)
circuito = vq.Circuit(vq.H(q0), vq.CNOT(q0, q1), vq.Rz(0.3)(q1))

texto = vq.to_json(circuito)
recuperado = vq.read_json(texto)
print(recuperado == circuito)   # True

También hay variantes comprimidas:

datos = vq.to_json_gzip(circuito)          # bytes comprimidos
assert vq.read_json_gzip(datos) == circuito

Puedes consultar el tipo de un valor y buscar la clase por su nombre:

print(vq.json_cirq_type(vq.X))             # 'XPowGate'
print(vq.cirq_type_from_json('LineQubit')) # <class 'vqubit._qubits.LineQubit'>

OpenQASM 2.0

import vqubit as vq

q0, q1 = vq.LineQubit.range(2)
circuito = vq.Circuit(vq.H(q0), vq.CNOT(q0, q1), vq.measure(q0, q1, key="m"))
print(vq.qasm(circuito))

Produce:

// Generated by vqubit
OPENQASM 2.0;
include "qelib1.inc";
qreg q[2];
creg m_m[2];
h q[0];
cx q[0],q[1];
measure q[0] -> m_m[0];
measure q[1] -> m_m[1];

Las puertas sin instrucción nativa (como la de Fredkin) se expanden con su descomposición antes de escribirse.

Quirk

quirk_url convierte un circuito en un enlace al simulador Quirk, para las puertas que Quirk entiende de forma nativa:

q0, q1 = vq.LineQubit.range(2)
circuito = vq.Circuit(vq.H(q0), vq.CNOT(q0, q1))
print(vq.quirk_url(circuito))   # https://algassert.com/quirk#circuit=...

El objeto QasmArgs transporta el contexto (nombres de qubits, precisión y argumentos libres) que recibe el escritor QASM de una puerta.

Siguientes pasos