DynexCircuit
DynexCircuit executes quantum gate circuits on the Dynex neuromorphic computing platform. It accepts circuits in PennyLane, Qiskit, Cirq, and OpenQASM formats.
Installation
# PennyLane circuits
pip install pennylane
# Qiskit circuits
pip install qiskit pennylane-qiskit
# OpenQASM circuits — no additional packages needed
Imports
from dynex import DynexConfig, ComputeBackend, DynexCircuit
Basic usage
import pennylane as qml
from dynex import DynexConfig, ComputeBackend, DynexCircuit
def my_circuit(params):
qml.PauliX(wires=0)
qml.Hadamard(wires=1)
qml.CNOT(wires=[0, 1])
return qml.state()
config = DynexConfig(
compute_backend=ComputeBackend.QPU,
qpu_model='apollo_rc1'
)
dynex_circuit = DynexCircuit(config=config)
result = dynex_circuit.execute(
my_circuit,
params=[],
wires=2,
method='measure'
)
print("Result:", result)
execute() — method reference
result = dynex_circuit.execute(
circuit, # Circuit function or object
params, # List of circuit parameters
wires, # Number of qubits (int)
method='measure', # Measurement type (see below)
shots=1, # Minimum solutions from network (QPU: up to 5)
description="", # Job description
debugging=False, # Verbose output
num_reads=100, # Parallel samples (QPU: 1–100)
integration_steps=100, # ODE integration depth (QPU: 10–1000)
qpu_max_coeff=9.0, # Max absolute coefficient for QPU auto-scaling
# ... advanced ODE params (alpha, beta, gamma, delta, epsilon, zeta)
block_fee=None, # Priority fee in nanoDNX
)
For QPU backends, keep num_reads in the range 1–100, integration_steps in 10–1000, and shots up to 5. These are hardware limits on the current QPU models.
method values
| Value | Returns |
|---|
"measure" | Samples from a single measurement in the computational basis |
"probs" | Probability of each computational basis state per qubit |
"all" | All solutions as arrays, one per shot |
"sampleset" | dimod SampleSet object |
PennyLane circuits
import pennylane as qml
import numpy as np
from dynex import DynexConfig, ComputeBackend, DynexCircuit
def variational_circuit(params):
qml.RX(params[0], wires=0)
qml.RY(params[1], wires=1)
qml.CNOT(wires=[0, 1])
qml.RZ(params[2], wires=0)
return qml.state()
config = DynexConfig(
compute_backend=ComputeBackend.QPU,
qpu_model='apollo_rc1',
use_notebook_output=True
)
dynex_circuit = DynexCircuit(config=config)
params = [np.pi/4, np.pi/3, np.pi/6]
result = dynex_circuit.execute(variational_circuit, params, wires=2, method='probs')
print("Measurement probabilities:", result)
Qiskit circuits
from qiskit import QuantumCircuit
from dynex import DynexConfig, ComputeBackend, DynexCircuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.ry(0.5, 1)
config = DynexConfig(
compute_backend=ComputeBackend.QPU,
qpu_model='apollo_rc1'
)
dynex_circuit = DynexCircuit(config=config)
result = dynex_circuit.execute(qc, params=[], wires=2, method='measure')
print("Measurement:", result)
OpenQASM circuits
OpenQASM circuits are provided as strings. No additional plugins required.
from dynex import DynexConfig, ComputeBackend, DynexCircuit
qasm_circuit = """
OPENQASM 2.0;
include "qelib1.inc";
qreg q[2];
h q[0];
cx q[0], q[1];
"""
config = DynexConfig(
compute_backend=ComputeBackend.QPU,
qpu_model='apollo_rc1'
)
dynex_circuit = DynexCircuit(config=config)
result = dynex_circuit.execute(qasm_circuit, params=[], wires=2, method='measure')
print("Measurement:", result)
Getting probabilities
result = dynex_circuit.execute(
my_circuit, params, wires=3, method='probs'
)
# Returns probability array over 2^n basis states
for i, prob in enumerate(result):
if prob > 0.01:
print(f"|{i:0{3}b}⟩ : {prob:.4f}")
Getting all solutions
result = dynex_circuit.execute(
my_circuit, params, wires=2, method='all', shots=3
)
# Returns list of solution arrays, one per shot
for i, solution in enumerate(result):
print(f"Shot {i}: {solution}")
Using as dimod SampleSet
sampleset = dynex_circuit.execute(
my_circuit, params, wires=4, method='sampleset'
)
print(sampleset.first.sample)
print(sampleset.first.energy)