FAQ
Frequently asked questions about SoftQCOS and quantum computing.
General Questionsβ
What is SoftQCOS?β
SoftQCOS (Quantum Circuit Optimization Service) is a cloud platform for quantum computing that provides:
- Circuit Optimization - Reduce circuit depth and gate count for better hardware performance
- Multi-Backend Execution - Run circuits on simulators and real quantum hardware
- Cost Estimation - Know execution costs before running on QPUs
- Azure Quantum Integration - Access IonQ, Quantinuum, Rigetti, and PASQAL
Do I need a quantum computer to use SoftQCOS?β
No! SoftQCOS provides access to:
- High-performance simulators (free tier available)
- Real quantum hardware through Azure Quantum (paid)
You can develop and test entirely on simulators, then deploy to real hardware when ready.
What programming languages are supported?β
- Python - Full SDK (
softqcos-sdk) - Command Line - CLI tool (
softqcos) - REST API - Any language with HTTP support
What quantum frameworks are compatible?β
SoftQCOS accepts circuits from:
- OpenQASM 2.0 - Universal standard
- Qiskit - IBM's framework (auto-converts to QASM)
- Cirq - Google's framework
- PennyLane - Xanadu's framework
- Amazon Braket - AWS's format
# Example: Convert Qiskit circuit
from qiskit import QuantumCircuit
from softqcos_sdk import QCOSClient
qc = QuantumCircuit(2, 2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
client = QCOSClient()
result = client.execute(qasm=qc.qasm(), shots=1024)
Account & Billingβ
How do I get an API key?β
- Sign up at portal.softquantus.com
- Navigate to Settings β API Keys
- Click Create API Key
- Copy and store securely (shown only once)
What's included in the free tier?β
| Feature | Free Tier | Paid Plans |
|---|---|---|
| Simulator shots/month | 100,000 | Unlimited |
| Circuit optimization | 1,000/month | Unlimited |
| API requests/day | 1,000 | Unlimited |
| Azure Quantum | β | β |
| Priority support | β | β |
How is Azure Quantum usage billed?β
Azure Quantum costs are passed through at cost plus a small processing fee:
- IonQ: Per-shot pricing (~β¬0.01-0.03 per shot)
- Quantinuum: Per-HQC (Hybrid Quantum Credits)
- Rigetti: Per-shot pricing
Always use estimate_cost() before executing:
estimate = client.azure_quantum.estimate_cost(
circuit=circuit,
target="ionq.aria-1",
shots=100
)
print(f"Cost: β¬{estimate.cost_eur:.2f}")
Can I set spending limits?β
Yes! In the portal:
- Go to Settings β Billing
- Set Monthly Budget Limit
- Configure alerts at 50%, 80%, 100%
API-level budget control:
client = QCOSClient(
api_key="...",
max_cost_per_job=5.0, # EUR
monthly_budget=100.0 # EUR
)
Technical Questionsβ
What's the maximum circuit size?β
| Backend | Max Qubits | Max Depth | Max Gates |
|---|---|---|---|
| Simulator (Aer) | 32 | Unlimited | Unlimited |
| IonQ Aria | 25 | ~500 | ~1000 |
| Quantinuum H1 | 20 | ~500 | ~500 |
| Rigetti Ankaa | 84 | ~100 | ~500 |
For larger circuits, consider:
- Circuit cutting
- Tensor network simulation
- Hybrid classical-quantum algorithms
How do I improve circuit fidelity?β
- Optimize the circuit:
optimized = client.optimize(
circuit=circuit,
target="ionq",
objective="max_fidelity"
)
-
Use fewer shots on QPU (reduces queue time and cost)
-
Choose the right backend:
- IonQ/Quantinuum for high-fidelity needs
- Rigetti for speed and larger circuits
-
Apply error mitigation:
result = client.execute(
qasm=circuit,
shots=1024,
error_mitigation="zne" # Zero-noise extrapolation
)
Why are my results different from the simulator?β
Real quantum hardware has noise. Expected differences:
| Source | Simulator | Real QPU |
|---|---|---|
| Gate errors | 0% | 0.1-1% |
| Readout errors | 0% | 0.5-5% |
| Decoherence | None | Present |
This is normal! Use error mitigation or increase shots for better statistics.
Can I run circuits asynchronously?β
Yes! For long-running jobs:
from softqcos_sdk import AsyncQCOSClient
import asyncio
async def run_async():
client = AsyncQCOSClient()
# Submit without waiting
job = await client.submit(qasm=circuit, shots=1024)
print(f"Job ID: {job.job_id}")
# Do other work...
# Check later
result = await client.wait_for_result(job.job_id, timeout=300)
return result
asyncio.run(run_async())
How do I handle rate limits?β
The SDK handles rate limiting automatically with exponential backoff.
For custom handling:
from softqcos_sdk import QCOSClient, RateLimitError
import time
client = QCOSClient()
for circuit in circuits:
try:
result = client.execute(qasm=circuit, shots=1024)
except RateLimitError as e:
print(f"Rate limited. Waiting {e.retry_after}s...")
time.sleep(e.retry_after)
result = client.execute(qasm=circuit, shots=1024)
Rate limits by tier:
| Tier | Requests/second | Requests/day |
|---|---|---|
| Free | 10 | 1,000 |
| Starter | 50 | 10,000 |
| Professional | 100 | Unlimited |
| Enterprise | Custom | Unlimited |
Optimization Questionsβ
What optimization objectives are available?β
| Objective | Description | Best For |
|---|---|---|
max_fidelity | Maximize circuit fidelity | Noisy hardware |
min_depth | Minimize circuit depth | Decoherence-limited |
min_gates | Minimize gate count | Cost optimization |
min_cnots | Minimize two-qubit gates | Hardware-limited |
optimized = client.optimize(
circuit=circuit,
objective="max_fidelity",
target="ionq"
)
How much does optimization help?β
Typical improvements:
| Circuit Type | Depth Reduction | Gate Reduction | Fidelity Gain |
|---|---|---|---|
| Random | 20-40% | 15-30% | 5-15% |
| VQE Ansatz | 30-50% | 20-40% | 10-25% |
| QFT | 40-60% | 30-50% | 15-30% |
| Grover | 25-35% | 20-30% | 8-15% |
Does optimization change circuit behavior?β
No! Optimization preserves the mathematical transformation of the circuit. The optimized circuit produces identical results (on a perfect quantum computer) to the original.
Security Questionsβ
Is my code/data secure?β
Yes. SoftQCOS security includes:
- TLS 1.3 encryption in transit
- AES-256 encryption at rest
- SOC 2 Type II certified
- GDPR compliant
- Circuits are never stored permanently (configurable retention)
Can I use SoftQCOS for proprietary algorithms?β
Absolutely. Your circuits are:
- Encrypted during transmission
- Processed in isolated environments
- Deleted after execution (by default)
Enterprise customers can configure:
- Private deployment
- Custom data retention
- Audit logging
Where is my data processed?β
Default: EU (West Europe - Amsterdam)
Available regions:
- EU West (Amsterdam)
- EU North (Dublin)
- US East (Virginia)
- US West (California)
Enterprise: On-premises deployment available
Azure Quantum Questionsβ
Which Azure Quantum providers are available?β
| Provider | Targets | Technology |
|---|---|---|
| IonQ | ionq.simulator, ionq.aria-1, ionq.forte-1 | Trapped Ion |
| Quantinuum | quantinuum.sim.h1-1e, quantinuum.qpu.h1-1 | Trapped Ion |
| Rigetti | rigetti.sim.qvm, rigetti.qpu.ankaa-2 | Superconducting |
Do I need an Azure subscription?β
No! SoftQCOS manages Azure Quantum access for you. Your SoftQCOS credits work directly.
Enterprise customers can connect their own Azure subscription for:
- Dedicated quotas
- Reserved capacity
- Custom billing
How long do QPU jobs take?β
Typical queue times:
| Provider | Queue Time | Execution Time |
|---|---|---|
| IonQ Aria | 5-30 min | 1-5 min |
| Quantinuum H1 | 30-120 min | 5-15 min |
| Rigetti Ankaa | 5-15 min | < 1 min |
During high-demand periods, queues may be longer. Simulators are instant.
Troubleshootingβ
"Authentication failed" errorβ
# Check your API key
import os
print(os.environ.get("SOFTQCOS_API_KEY", "Not set"))
# Or explicitly set it
client = QCOSClient(api_key="your-api-key")
Common causes:
- API key not set or typo
- Key revoked or expired
- Wrong environment (test vs production)
"Circuit too large" errorβ
Your circuit exceeds backend limits. Options:
- Use a different backend with more qubits
- Optimize the circuit first
- Use circuit cutting for very large circuits
# Check circuit properties
analysis = client.analyze(circuit)
print(f"Qubits: {analysis.num_qubits}")
print(f"Depth: {analysis.depth}")
"Quota exceeded" errorβ
You've reached your plan limits. Options:
- Wait for quota reset (monthly)
- Upgrade your plan
- Contact support for temporary increase
# Check current usage
usage = client.usage.get_summary()
print(f"Shots used: {usage.shots_used}/{usage.shots_limit}")
Jobs stuck in "queued" statusβ
For Azure Quantum jobs:
- Check Azure Quantum status: status.azure.com
- Some providers have maintenance windows
- High demand causes longer queues
You can cancel and retry:
client.azure_quantum.cancel_job(job_id)
Getting Helpβ
Documentationβ
Support Channelsβ
| Channel | Response Time | Best For |
|---|---|---|
| Documentation | Instant | Self-service |
| Community Discord | Hours | General questions |
| Email: support@softquantus.com | 24h | Account issues |
| Enterprise Slack | < 1h | Urgent issues |
Reporting Bugsβ
Please include:
- SDK version (
pip show softqcos-sdk) - Python version
- Full error message
- Minimal reproduction code
Submit via:
- GitHub Issues: github.com/softquantus/softqcos-sdk
- Email: bugs@softquantus.com