Skip to content

Latest commit

 

History

History
198 lines (151 loc) · 3.96 KB

File metadata and controls

198 lines (151 loc) · 3.96 KB

Managing Quantum Computing Tasks

This guide covers how to submit and manage quantum computing tasks.

Available Tools

Tool Description
sample_tool Execute quantum circuit sampling
estimate_tool Execute expectation estimation
batch_sample_tool Batch sampling with multiple circuits
batch_estimate_tool Batch estimation with multiple circuits
get_task_status_tool Check task status
get_task_results_tool Retrieve task results
cancel_task_tool Cancel a running task
list_my_tasks_tool List recent tasks

Sampling Tasks

Sampling executes a quantum circuit multiple times and returns measurement outcomes.

Basic Sampling

circuit = """QINIT 2
CREG 2
H q[0]
CNOT q[0],q[1]
MEASURE q[0],c[0]
MEASURE q[1],c[1]"""

result = await sample_tool(
    circuit=circuit,
    device_id="20",
    shots=1000
)

task_id = result["task_id"]

Batch Sampling

Submit multiple circuits at once:

circuits = [
    "QINIT 2\nCREG 2\nH q[0]\nCNOT q[0],q[1]\nMEASURE q[0],c[0]\nMEASURE q[1],c[1]",
    "QINIT 2\nCREG 2\nX q[0]\nCNOT q[0],q[1]\nMEASURE q[0],c[0]\nMEASURE q[1],c[1]"
]

result = await batch_sample_tool(
    circuits=circuits,
    device_id="20",
    shots=1000
)

Estimation Tasks

Estimation computes the expectation value of an observable.

Basic Estimation

# Circuit WITHOUT measurements
circuit = """QINIT 2
CREG 2
H q[0]
CNOT q[0],q[1]"""

# Observable as dictionary
observable = {"Z0 Z1": 1.0}

result = await estimate_tool(
    circuit=circuit,
    observable=observable,
    device_id="20"
)

Batch Estimation

Multiple circuits with one observable:

circuits = [
    "QINIT 2\nCREG 2\nH q[0]\nCNOT q[0],q[1]",
    "QINIT 2\nCREG 2\nX q[0]\nCNOT q[0],q[1]"
]

result = await batch_estimate_tool(
    circuits=circuits,
    observable={"Z0 Z1": 1.0},
    device_id="20"
)

Task Status

Checking Status

status = await get_task_status_tool(task_id="task_12345")

print(f"Status: {status['task_status']}")
print(f"Progress: {status.get('progress', 'unknown')}")

Task Status Values

Status Description
PENDING Waiting in queue
RUNNING Currently executing
DONE Completed successfully
FAILED Execution failed
CANCELLED Cancelled by user

Retrieving Results

# First check if done
status = await get_task_status_tool(task_id)

if status["task_status"] == "DONE":
    results = await get_task_results_tool(task_id)
    
    # For sampling tasks
    for outcome in results["results"]:
        print(f"Outcome: {outcome['key']}")
        print(f"Probability: {outcome['value']}")

Sampling Results Format

{
  "status": "success",
  "task_id": "task_12345",
  "task_status": "DONE",
  "results": [
    {
      "key": ["0x0", "0x1", "0x2", "0x3"],
      "value": [0.002, 0.036, 0.044, 0.918]
    }
  ]
}

Cancelling Tasks

result = await cancel_task_tool(task_id="task_12345")

if result["status"] == "success":
    print("Task cancelled successfully")

Listing Tasks

tasks = await list_my_tasks_tool(limit=10)

for task in tasks["tasks"]:
    print(f"Task: {task['task_id']}")
    print(f"Status: {task['status']}")
    print(f"Created: {task['creation_date']}")

Complete Workflow

# 1. Submit task
result = await sample_tool(
    circuit=circuit,
    device_id="20",
    shots=1000
)
task_id = result["task_id"]
print(f"Submitted: {task_id}")

# 2. Poll for completion
import asyncio
while True:
    status = await get_task_status_tool(task_id)
    print(f"Status: {status['task_status']}")
    
    if status["task_status"] == "DONE":
        break
    elif status["task_status"] == "FAILED":
        print("Task failed!")
        break
    
    await asyncio.sleep(5)  # Wait before polling again

# 3. Get results
results = await get_task_results_tool(task_id)
print(f"Results: {results['results']}")