{ "cells": [ { "cell_type": "markdown", "id": "7bd45290", "metadata": {}, "source": [ "# 19 - Qiskit Interoperability\n", "\n", "Convert circuits between QuantSDK and Qiskit.\n", "\n", "**Concepts:** Interop, to_qiskit, from_qiskit" ] }, { "cell_type": "code", "execution_count": null, "id": "ac9e2491", "metadata": {}, "outputs": [], "source": [ "import quantsdk as qs" ] }, { "cell_type": "markdown", "id": "0991a8f8", "metadata": {}, "source": [ "## QuantSDK -> Qiskit" ] }, { "cell_type": "code", "execution_count": null, "id": "40943db6", "metadata": {}, "outputs": [], "source": [ "# Build a circuit in QuantSDK\n", "circuit = qs.Circuit(2, name=\"bell\")\n", "circuit.h(0).cx(0, 1).measure_all()\n", "\n", "print(\"QuantSDK circuit:\")\n", "print(f\" Qubits: {circuit.num_qubits}\")\n", "print(f\" Gates: {circuit.gate_count}\")\n", "print(f\" Depth: {circuit.depth}\")\n", "print(f\" Ops: {circuit.count_ops()}\")" ] }, { "cell_type": "code", "execution_count": null, "id": "b605c834", "metadata": {}, "outputs": [], "source": [ "# Convert to Qiskit\n", "try:\n", " qc = circuit.to_qiskit()\n", " print(\"Qiskit circuit:\")\n", " print(f\" Type: {type(qc).__name__}\")\n", " print(f\" Qubits: {qc.num_qubits}\")\n", " print(f\" Depth: {qc.depth()}\")\n", " print(qc.draw())\n", "except ImportError:\n", " print(\"Qiskit not installed, showing API usage only\")\n", " print(\" circuit.to_qiskit() -> qiskit.QuantumCircuit\")" ] }, { "cell_type": "markdown", "id": "03942a8c", "metadata": {}, "source": [ "## Qiskit -> QuantSDK" ] }, { "cell_type": "code", "execution_count": null, "id": "6146511e", "metadata": {}, "outputs": [], "source": [ "try:\n", " from qiskit import QuantumCircuit\n", " \n", " # Build in Qiskit\n", " qc = QuantumCircuit(3)\n", " qc.h(0)\n", " qc.cx(0, 1)\n", " qc.cx(1, 2)\n", " qc.measure_all()\n", " \n", " # Convert to QuantSDK\n", " qs_circuit = qs.Circuit.from_qiskit(qc)\n", " \n", " print(f\"Converted circuit: {qs_circuit.num_qubits} qubits, {qs_circuit.gate_count} gates\")\n", " \n", " # Run on QuantSDK\n", " result = qs.run(qs_circuit, shots=1000, seed=42)\n", " print(f\"Result: {result.counts}\")\n", " print(f\"Most likely: {result.most_likely}\")\n", "except ImportError:\n", " print(\"Qiskit not installed. API:\")\n", " print(\" qs.Circuit.from_qiskit(qiskit_circuit) -> qs.Circuit\")" ] }, { "cell_type": "markdown", "id": "04d8cd77", "metadata": {}, "source": [ "## Round-Trip Validation" ] }, { "cell_type": "code", "execution_count": null, "id": "ebb1ba62", "metadata": {}, "outputs": [], "source": [ "# Build complex circuit\n", "original = qs.Circuit(3, name=\"complex\")\n", "original.h(0).cx(0, 1).ry(2, 1.23).cz(1, 2).rx(0, 0.45).measure_all()\n", "\n", "# Run original\n", "r1 = qs.run(original, shots=2000, seed=42)\n", "\n", "try:\n", " # Round-trip: QuantSDK -> Qiskit -> QuantSDK\n", " qc = original.to_qiskit()\n", " roundtrip = qs.Circuit.from_qiskit(qc)\n", " \n", " r2 = qs.run(roundtrip, shots=2000, seed=42)\n", " \n", " print(\"Round-trip fidelity check:\")\n", " print(f\" Original gates: {original.gate_count}\")\n", " print(f\" Roundtrip gates: {roundtrip.gate_count}\")\n", " print(f\" Original top: {r1.most_likely}\")\n", " print(f\" Roundtrip top: {r2.most_likely}\")\n", " print(f\" Match: {r1.most_likely == r2.most_likely}\")\n", "except ImportError:\n", " print(f\"Original result: {r1.most_likely}\")\n", " print(\"Round-trip requires Qiskit installed.\")" ] } ], "metadata": { "language_info": { "name": "python" } }, "nbformat": 4, "nbformat_minor": 5 }