Coming from Qiskit
Tested with: Quanta SDK v0.8.1
Why Switch?
| Feature |
Qiskit |
Quanta |
| Install size |
~500 MB |
~5 MB (Python + NumPy only) |
| IBM Hardware |
✅ (via Runtime) |
✅ (direct REST API, no Qiskit needed) |
| Dependencies |
20+ packages |
2 (numpy, python-dotenv) |
| Learning curve |
Steep (Primitives, Transpiler, Provider) |
Gentle (3 imports to start) |
| Gate count |
50+ |
31 (IBM Heron parity + Google/IonQ native) |
| AI Integration |
❌ |
✅ (20 MCP tools for Claude/GPT) |
Side-by-Side: 15 Common Patterns
1. Create a Circuit
# ── Qiskit ──
from qiskit import QuantumCircuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
# ── Quanta ──
from quanta import circuit, H, CX, measure
@circuit(qubits=2)
def bell(q):
H(q[0])
CX(q[0], q[1])
return measure(q)
2. Run a Circuit
# ── Qiskit ──
from qiskit.primitives import StatevectorSampler
sampler = StatevectorSampler()
job = sampler.run([qc], shots=1024)
result = job.result()
# ── Quanta ──
from quanta import run
result = run(bell, shots=1024)
print(result.counts) # {'00': 512, '11': 512}
3. Apply Gates
# ── Qiskit ──
qc.rx(3.14/4, 0)
qc.ry(3.14/3, 1)
qc.rz(3.14/6, 0)
# ── Quanta ──
RX(3.14/4)(q[0]) # Note: gate(angle)(qubit) syntax
RY(3.14/3)(q[1])
RZ(3.14/6)(q[0])
4. Noise Simulation
# ── Qiskit ──
from qiskit_aer.noise import NoiseModel, depolarizing_error
noise = NoiseModel()
noise.add_all_qubit_quantum_error(depolarizing_error(0.01, 1), ['h', 'x'])
# ── Quanta ──
from quanta.simulator.noise import NoiseModel, Depolarizing
noise = NoiseModel().add(Depolarizing(p=0.01))
result = run(bell, shots=1024, noise=noise)
5. Export to QASM
# ── Qiskit ──
from qiskit.qasm3 import dumps
qasm_str = dumps(qc)
# ── Quanta ──
from quanta.export.qasm import to_qasm
qasm_str = to_qasm(bell)
# Both output OPENQASM 3.0
6. Grover Search
# ── Qiskit ──
from qiskit.circuit.library import GroverOperator
from qiskit_algorithms import Grover, AmplificationProblem
oracle = QuantumCircuit(3)
oracle.cz(0, 2)
problem = AmplificationProblem(oracle)
grover = Grover(sampler=sampler)
result = grover.amplify(problem)
# ── Quanta ──
from quanta.layer3.search import search
result = search(target=5, n_qubits=3)
print(result.found_value) # 5
7. VQE
# ── Qiskit ──
from qiskit_algorithms import VQE
from qiskit.circuit.library import EfficientSU2
from qiskit.primitives import StatevectorEstimator
ansatz = EfficientSU2(2, reps=1)
vqe = VQE(StatevectorEstimator(), ansatz, COBYLA())
result = vqe.compute_minimum_eigenvalue(hamiltonian)
# ── Quanta ──
from quanta.layer3.vqe import vqe
result = vqe([(-1.05, "ZZ"), (0.39, "XX")], n_qubits=2)
print(result.energy)
8. Run on IBM Hardware
# ── Qiskit ──
from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2
service = QiskitRuntimeService(channel="ibm_quantum", token="...")
backend = service.least_busy(min_num_qubits=2)
sampler = SamplerV2(backend)
job = sampler.run([qc])
result = job.result()
# ── Quanta ──
from quanta.backends.ibm_rest import IBMRestBackend
backend = IBMRestBackend(backend_name="ibm_torino")
result = run(bell, backend=backend, shots=4096)
9. QAOA Optimization
# ── Qiskit ──
from qiskit_algorithms import QAOA
from qiskit_algorithms.optimizers import COBYLA
qaoa = QAOA(sampler, COBYLA(), reps=2)
result = qaoa.compute_minimum_eigenvalue(cost_operator)
# ── Quanta ──
from quanta.layer3.optimize import optimize
result = optimize(edges=[(0,1),(1,2),(2,3)], p=2)
10. Circuit Visualization
# ── Qiskit ──
qc.draw("mpl")
# ── Quanta ──
from quanta.visualize import draw
draw(bell) # ASCII diagram
# Or SVG:
from quanta.visualize_svg import draw_svg
draw_svg(bell, "circuit.html")
11. Statevector Access
# ── Qiskit ──
from qiskit.quantum_info import Statevector
sv = Statevector.from_instruction(qc)
print(sv.data)
# ── Quanta ──
result = run(bell, shots=1)
print(result.statevector) # Always available
12. Custom Gate
# ── Qiskit ──
from qiskit.circuit.library import UnitaryGate
import numpy as np
gate = UnitaryGate(np.array([[0,1],[1,0]]))
qc.append(gate, [0])
# ── Quanta ──
from quanta import custom_gate
custom_gate("MyGate", np.array([[0,1],[1,0]]))
# Then use: MyGate(q[0])
13. Measurement
# ── Qiskit ──
qc.measure_all() # Measure everything
# or
qc.measure([0], [0]) # Selective
# ── Quanta ──
return measure(q) # Measure all
return measure(q[0:2]) # Measure qubits 0,1 only
14. Transpilation
# ── Qiskit ──
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
pm = generate_preset_pass_manager(optimization_level=2, backend=backend)
isa_circuit = pm.run(qc)
# ── Quanta ──
from quanta.compiler.pipeline import compile_circuit
dag = compile_circuit(bell, target="heron")
# Automatic: SWAP insertion, gate translation, optimization
15. QML Classification
# ── Qiskit (via qiskit-machine-learning) ──
from qiskit_machine_learning.algorithms import VQC
from qiskit.circuit.library import ZZFeatureMap, RealAmplitudes
vqc = VQC(feature_map=ZZFeatureMap(2), ansatz=RealAmplitudes(2),
optimizer=COBYLA(), sampler=sampler)
vqc.fit(X_train, y_train)
# ── Quanta ──
from quanta.layer3.qml import QuantumClassifier
clf = QuantumClassifier(n_qubits=2, n_layers=2)
clf.fit(X_train, y_train, epochs=30)
predictions = clf.predict(X_test)
Key Differences to Remember
| Qiskit |
Quanta |
QuantumCircuit(n) |
@circuit(qubits=n) |
qc.h(0) |
H(q[0]) |
qc.rx(angle, 0) |
RX(angle)(q[0]) |
Sampler().run() |
run(circuit, shots=N) |
NoiseModel() |
NoiseModel().add(...) |
QiskitRuntimeService |
IBMRestBackend() |
| Multiple packages |
Single pip install quanta-sdk |
Getting Help