SDK Capabilities
Complete reference of all capabilities offered by the softqcos-sdk Python package.
Installationβ
# SDK only
pip install softqcos-sdk
# Complete suite (includes CLI and QuantumLock)
pip install softqcos
Core Classesβ
QCOSClientβ
The main client for interacting with the QCOS API.
from softqcos_sdk import QCOSClient
client = QCOSClient(
api_key="your-api-key", # Required (or QCOS_API_KEY env var)
base_url="https://api.softquantus.com", # Optional
timeout=60.0, # Request timeout (seconds)
max_retries=3, # Automatic retry count
license_file="/path/to/license.lic", # Optional license file
license_key="QCOS-XXXX-XXXX", # Optional license key
validate_license=True, # Validate license on init
)
AsyncQCOSClientβ
Async version for high-performance applications.
from softqcos_sdk import AsyncQCOSClient
async def main():
client = AsyncQCOSClient(api_key="your-key")
result = await client.execute(qasm=circuit, shots=1024)
Circuit Executionβ
execute()β
Execute a quantum circuit synchronously (blocks until completion).
result = client.execute(
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
)
print(result.counts) # {'00': 512, '11': 512}
print(result.job_id) # 'job_abc123'
print(result.status) # 'completed'
Returns: JobResult
| Field | Type | Description |
|---|---|---|
job_id | str | Unique job identifier |
status | str | Job status: completed, failed |
counts | dict | Measurement counts |
metadata | dict | Execution metadata |
submit()β
Submit a circuit asynchronously (returns immediately).
job = client.submit(qasm=circuit, shots=1024)
print(job.job_id) # 'job_abc123'
print(job.status) # 'queued'
Returns: CircuitJob
get_status()β
Get the status of a submitted job.
status = client.get_status(job_id="job_abc123")
print(status.status) # 'processing' | 'completed' | 'failed'
print(status.progress) # 0.75 (if available)
get_result()β
Get the result of a completed job.
result = client.get_result(job_id="job_abc123")
print(result.counts)
print(result.metadata)
wait_for_result()β
Wait for a job to complete with polling.
result = client.wait_for_result(
job_id="job_abc123",
timeout=300.0, # Max wait time (seconds)
poll_interval=2.0 # Check every N seconds
)
Multi-Supplier Supportβ
list_providers()β
List available quantum providers from a specific supplier.
# Azure Quantum providers
azure_providers = client.list_providers("azure_quantum")
for p in azure_providers:
print(f"{p.name}: {p.num_qubits} qubits")
# IBM Quantum backends
ibm_backends = client.list_providers("ibm_quantum")
# AWS Braket devices
braket_devices = client.list_providers("braket")
Supported Suppliers:
| Supplier | Providers | Max Qubits |
|---|---|---|
azure_quantum | IonQ, Rigetti, Quantinuum, PASQAL | 100 |
ibm_quantum | Simulators, Kyoto, Osaka, Brisbane | 127 |
braket | SV1, IonQ, Rigetti, QuEra, OQC, IQM | 256 |
execute_on_backend()β
Execute a circuit on a specific backend.
# Execute on Azure Quantum IonQ
result = client.execute_on_backend(
qasm=circuit,
backend="ionq.simulator",
supplier="azure_quantum",
shots=1024
)
# Execute on IBM Quantum
result = client.execute_on_backend(
qasm=circuit,
backend="ibm_kyoto",
supplier="ibm_quantum",
shots=1024
)
# Execute on AWS Braket
result = client.execute_on_backend(
qasm=circuit,
backend="Aquila",
supplier="braket",
shots=1024
)
Licensingβ
license()β
Get the license object for the client.
lic = client.license()
print(lic.info)
license_info()β
Get license information as dictionary.
info = client.license_info()
print(info['type']) # 'enterprise'
print(info['expires_at']) # '2026-12-31'
print(info['features']) # ['core', 'optimization', 'multi-supplier']
has_feature()β
Check if a feature is licensed.
if client.has_feature("optimization"):
result = client.optimize(circuit)
require_feature()β
Require a feature or raise exception.
client.require_feature("enterprise") # Raises FeatureNotLicensed if not available
QCOSLicense Classβ
Standalone license management.
from softqcos_sdk.licensing import QCOSLicense, LicenseError
# From file
lic = QCOSLicense(license_file="~/.softqcos/license.lic")
# From key
lic = QCOSLicense(license_key="QCOS-XXXX-XXXX-XXXX")
# Validate
if lic.validate():
print("License valid!")
print(lic.info)
Modelsβ
JobResultβ
@dataclass
class JobResult:
job_id: str
status: str # 'completed' | 'failed'
counts: dict # {'00': 512, '11': 512}
metadata: dict # Execution metadata
created_at: datetime
completed_at: datetime
error: Optional[str]
CircuitJobβ
@dataclass
class CircuitJob:
job_id: str
status: str # 'queued' | 'processing'
created_at: datetime
ProviderInfoβ
@dataclass
class ProviderInfo:
id: str
name: str
num_qubits: int
targets: list[str]
description: str
cost_model: str
SupplierInfoβ
@dataclass
class SupplierInfo:
id: str
name: str
status: str
providers: list[ProviderInfo]
BackendInfoβ
@dataclass
class BackendInfo:
id: str
name: str
supplier: str
num_qubits: int
status: str
Exceptionsβ
| Exception | Description |
|---|---|
QCOSError | Base exception for all QCOS errors |
AuthenticationError | Invalid API key or authentication failed |
ValidationError | Invalid circuit or parameters |
JobNotFoundError | Job ID does not exist |
TimeoutError | Request or job timed out |
RateLimitError | API rate limit exceeded |
LicenseError | License validation failed |
FeatureNotLicensed | Feature not included in license |
from softqcos_sdk import QCOSError, AuthenticationError, RateLimitError
try:
result = client.execute(qasm=circuit, shots=1024)
except AuthenticationError:
print("Invalid API key")
except RateLimitError as e:
print(f"Rate limited. Retry after {e.retry_after} seconds")
except QCOSError as e:
print(f"QCOS error: {e}")
Environment Variablesβ
| Variable | Description |
|---|---|
QCOS_API_KEY | API key for authentication |
QCOS_API_URL | Base URL for API (default: https://api.softquantus.com) |
QCOS_LICENSE_KEY | License key |
QCOS_LICENSE_FILE | Path to license file |
QCOS_TIMEOUT | Default timeout in seconds |
Complete Exampleβ
from softqcos_sdk import QCOSClient
import os
# Initialize client
client = QCOSClient(
api_key=os.getenv("QCOS_API_KEY"),
validate_license=True
)
# Check license
if client.has_feature("multi-supplier"):
print("Multi-supplier access enabled!")
# Define circuit
bell_state = """
OPENQASM 2.0;
include "qelib1.inc";
qreg q[2];
creg c[2];
h q[0];
cx q[0],q[1];
measure q -> c;
"""
# Execute on default backend
result = client.execute(qasm=bell_state, shots=2048)
print(f"Job: {result.job_id}")
print(f"Counts: {result.counts}")
# List Azure Quantum providers
providers = client.list_providers("azure_quantum")
for p in providers:
print(f" {p.name}: {p.num_qubits} qubits")
# Execute on specific backend
result = client.execute_on_backend(
qasm=bell_state,
backend="ionq.simulator",
supplier="azure_quantum",
shots=1024
)
print(f"IonQ result: {result.counts}")
Β© 2024-2026 SoftQuantus innovative OΓ. All Rights Reserved.