Your First Circuit
This tutorial walks you through executing your first quantum circuit with QCOS.
The Bell Stateβ
We'll create and execute a Bell state - a fundamental quantum circuit that demonstrates entanglement:
βββββ
q_0: β€ H ββββ ββ
ββββββββ΄ββ
q_1: ββββββ€ X β
βββββ
This circuit:
- Applies a Hadamard gate to put qubit 0 in superposition
- Applies a CNOT gate to entangle qubits 0 and 1
- Measures both qubits
Method 1: Python SDKβ
Basic Executionβ
from softqcos_sdk import QCOSClient
# Initialize client
client = QCOSClient()
# Define Bell state circuit in OpenQASM
bell_circuit = """
OPENQASM 2.0;
include "qelib1.inc";
qreg q[2];
creg c[2];
h q[0];
cx q[0],q[1];
measure q -> c;
"""
# Execute circuit
result = client.execute(
qasm=bell_circuit,
shots=1024
)
# View results
print(f"Job ID: {result.job_id}")
print(f"Status: {result.status}")
print(f"Counts: {result.counts}")
# {'00': 512, '11': 512}
With Qiskit Integrationβ
from softqcos_sdk import QCOSClient
from qiskit import QuantumCircuit
# Create circuit using Qiskit
qc = QuantumCircuit(2, 2)
qc.h(0)
qc.cx(0, 1)
qc.measure([0, 1], [0, 1])
# Execute via QCOS (default backend)
client = QCOSClient()
result = client.execute_qiskit(qc, shots=1024)
print(result.counts)
# {'00': 512, '11': 512}
Multi-Supplier Execution (New in v2.1)β
from softqcos_sdk import QCOSClient
client = QCOSClient()
# Execute on Azure Quantum IonQ
result_ionq = client.execute_on_backend(
qasm=bell_circuit,
backend="ionq.simulator",
supplier="azure_quantum",
shots=1024
)
print(f"IonQ: {result_ionq.counts}")
# Execute on IBM Quantum
result_ibm = client.execute_on_backend(
qasm=bell_circuit,
backend="ibm_kyoto",
supplier="ibm_quantum",
shots=1024
)
print(f"IBM: {result_ibm.counts}")
# Execute on AWS Braket
result_braket = client.execute_on_backend(
qasm=bell_circuit,
backend="sv1",
supplier="braket",
shots=1024
)
print(f"Braket: {result_braket.counts}")
# List available providers
azure_providers = client.list_providers("azure_quantum")
for p in azure_providers:
print(f"{p.name}: {p.num_qubits} qubits")
See Multi-Supplier Guide for full details.
Async Executionβ
import asyncio
from softqcos_sdk import AsyncQCOSClient
async def run_bell_state():
async with AsyncQCOSClient() as client:
# Submit job
job = await client.submit(
qasm=bell_circuit,
shots=1024
)
print(f"Submitted: {job.job_id}")
# Wait for result
result = await job.wait()
print(f"Result: {result.counts}")
asyncio.run(run_bell_state())
Method 2: Command Lineβ
Create Circuit Fileβ
# bell.qasm
cat > bell.qasm << 'EOF'
OPENQASM 2.0;
include "qelib1.inc";
qreg q[2];
creg c[2];
h q[0];
cx q[0],q[1];
measure q -> c;
EOF
Execute Circuitβ
# Submit and wait for result
softqcos execute bell.qasm --shots 1024
# Output:
# β Job submitted: job_abc123
# β³ Waiting for result...
# β Completed in 1.2s
#
# Results:
# βββββββββββ¬ββββββββ¬ββββββββββ
# β State β Count β Percent β
# βββββββββββΌββββββββΌββββββββββ€
# β 00 β 512 β 50.0% β
# β 11 β 512 β 50.0% β
# βββββββββββ΄ββββββββ΄ββββββββββ
Async Executionβ
# Submit without waiting
softqcos execute bell.qasm --shots 1024 --no-wait
# β Job submitted: job_abc123
# Check status later
softqcos status job_abc123
# Status: completed
# Duration: 1.2s
# Get results
softqcos results job_abc123
# {'00': 512, '11': 512}
Method 3: REST APIβ
Submit Job (Legacy LUMI)β
curl -X POST https://sqt-prod-azure-api-ca.icybay-7dfb32ea.westeurope.azurecontainerapps.io/execute \
-H "Content-Type: application/json" \
-H "X-API-Key: your-api-key" \
-d '{
"qasm": "OPENQASM 2.0; include \"qelib1.inc\"; qreg q[2]; creg c[2]; h q[0]; cx q[0],q[1]; measure q -> c;",
"shots": 1024
}'
Response:
{
"job_id": "lumi_abc123",
"status": "queued",
"message": "Job queued for GPU execution on LUMI",
"estimated_time_seconds": 30
}
Multi-Supplier Execution (New in v2.1)β
Execute on Azure Quantumβ
curl -X POST https://sqt-prod-azure-api-ca.icybay-7dfb32ea.westeurope.azurecontainerapps.io/api/v1/azure_quantum/execute \
-H "Content-Type: application/json" \
-H "X-API-Key: your-api-key" \
-d '{
"qasm": "OPENQASM 2.0; include \"qelib1.inc\"; qreg q[2]; creg c[2]; h q[0]; cx q[0],q[1]; measure q -> c;",
"backend": "ionq.simulator",
"shots": 1024
}'
Execute on IBM Quantumβ
curl -X POST https://sqt-prod-azure-api-ca.icybay-7dfb32ea.westeurope.azurecontainerapps.io/api/v1/ibm_quantum/execute \
-H "Content-Type: application/json" \
-H "X-API-Key: your-api-key" \
-d '{
"qasm": "OPENQASM 2.0; include \"qelib1.inc\"; qreg q[2]; creg c[2]; h q[0]; cx q[0],q[1]; measure q -> c;",
"backend": "ibm_kyoto",
"shots": 1024
}'
Execute on AWS Braketβ
curl -X POST https://sqt-prod-azure-api-ca.icybay-7dfb32ea.westeurope.azurecontainerapps.io/api/v1/braket/execute \
-H "Content-Type: application/json" \
-H "X-API-Key: your-api-key" \
-d '{
"qasm": "OPENQASM 2.0; include \"qelib1.inc\"; qreg q[2]; creg c[2]; h q[0]; cx q[0],q[1]; measure q -> c;",
"device_arn": "arn:aws:braket:us-east-1::device/quantum-simulator/amazon/sv1",
"shots": 1024
}'
See API Reference for all endpoints.
Check Statusβ
# Legacy LUMI job
curl https://sqt-prod-azure-api-ca.icybay-7dfb32ea.westeurope.azurecontainerapps.io/status/lumi_abc123 \
-H "X-API-Key: your-api-key"
# Azure Quantum job
curl https://sqt-prod-azure-api-ca.icybay-7dfb32ea.westeurope.azurecontainerapps.io/api/v1/azure_quantum/status/azure_job_123 \
-H "X-API-Key: your-api-key"
# IBM Quantum job
curl https://sqt-prod-azure-api-ca.icybay-7dfb32ea.westeurope.azurecontainerapps.io/api/v1/ibm_quantum/status/ibm_job_123 \
-H "X-API-Key: your-api-key"
# AWS Braket job
curl https://sqt-prod-azure-api-ca.icybay-7dfb32ea.westeurope.azurecontainerapps.io/api/v1/braket/status/arn:aws:braket:us-east-1:123456789012:quantum-task/task-abc123 \
-H "X-API-Key: your-api-key"
Response:
{
"job_id": "lumi_abc123",
"status": "completed",
"result": {
"counts": {"00": 512, "11": 512},
"num_qubits": 2,
"shots": 1024,
"execution_time_seconds": 0.05,
"backend": "cuStateVec",
"device": "NVIDIA A100"
}
}
List Available Providersβ
# List Azure Quantum providers
curl https://sqt-prod-azure-api-ca.icybay-7dfb32ea.westeurope.azurecontainerapps.io/api/v1/azure_quantum/providers \
-H "X-API-Key: your-api-key"
# List IBM Quantum backends
curl https://sqt-prod-azure-api-ca.icybay-7dfb32ea.westeurope.azurecontainerapps.io/api/v1/ibm_quantum/backends \
-H "X-API-Key: your-api-key"
# List AWS Braket devices
curl https://sqt-prod-azure-api-ca.icybay-7dfb32ea.westeurope.azurecontainerapps.io/api/v1/braket/devices \
-H "X-API-Key: your-api-key"
Understanding Resultsβ
Result Objectβ
result = client.execute(qasm=circuit, shots=1024)
# Basic properties
result.job_id # "abc123-def456-ghi789"
result.status # "completed"
result.counts # {'00': 512, '11': 512}
# Execution metadata
result.num_qubits # 2
result.shots # 1024
result.execution_time # 0.05 seconds
result.backend # "cuStateVec"
result.device # "NVIDIA A100"
# Timestamps
result.created_at # datetime
result.completed_at # datetime
Probability Distributionβ
# Get probabilities instead of counts
probs = result.probabilities()
print(probs)
# {'00': 0.5, '11': 0.5}
# Most likely state
print(result.most_likely_state())
# '00' (or '11' with 50% probability)
Visualizationβ
from softqcos.visualization import plot_histogram
# Plot histogram
plot_histogram(result.counts, title="Bell State Results")
Larger Circuitsβ
GHZ State (5 qubits)β
ghz_5 = """
OPENQASM 2.0;
include "qelib1.inc";
qreg q[5];
creg c[5];
h q[0];
cx q[0],q[1];
cx q[1],q[2];
cx q[2],q[3];
cx q[3],q[4];
measure q -> c;
"""
result = client.execute(qasm=ghz_5, shots=2048)
print(result.counts)
# {'00000': 1024, '11111': 1024}
50-Qubit Circuit (Pro Tier)β
# Generate 50-qubit GHZ state
qubits = 50
qasm = f"""
OPENQASM 2.0;
include "qelib1.inc";
qreg q[{qubits}];
creg c[{qubits}];
h q[0];
"""
for i in range(qubits - 1):
qasm += f"cx q[{i}],q[{i+1}];\n"
qasm += "measure q -> c;"
result = client.execute(qasm=qasm, shots=1024)
print(f"Execution time: {result.execution_time:.2f}s")
# Execution time: 2.45s
Error Handlingβ
from softqcos_sdk import QCOSClient, QCOSError, RateLimitError, QuotaExceededError
client = QCOSClient()
try:
result = client.execute(qasm=circuit, shots=1024)
except RateLimitError as e:
print(f"Rate limit hit. Reset at: {e.reset_time}")
except QuotaExceededError as e:
print(f"Quota exceeded: {e.message}")
print(f"Your limit: {e.limit}, Requested: {e.requested}")
except QCOSError as e:
print(f"Error: {e.message}")
Next Stepsβ
- SDK Quickstart - Deep dive into the Python SDK
- CLI Commands - Learn all CLI commands
- API Reference - Complete API documentation
- GPU Acceleration - Optimize for large circuits