Metadata-Version: 2.4
Name: roro-quantum
Version: 0.4.1
Summary: RoRo Quantum SDK — run circuits on the RoRo quantum cloud with an API key
Author: RoRo Quantum
License: MIT
Project-URL: Homepage, https://roroquantum.com
Project-URL: Documentation, https://roroquantum.com/docs/
Project-URL: Source, https://roroquantum.com/docs/
Project-URL: Issues, https://console.roroquantum.com/support
Keywords: quantum,qiskit,quantum-computing,roro
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering :: Physics
Classifier: Typing :: Typed
Requires-Python: >=3.10
Description-Content-Type: text/markdown
Requires-Dist: httpx>=0.27
Provides-Extra: qiskit
Requires-Dist: qiskit>=1.0; extra == "qiskit"
Provides-Extra: qml
Requires-Dist: numpy>=1.24; extra == "qml"

# roro-quantum (Python SDK)

Run quantum circuits on the [RoRo Quantum](https://roroquantum.com) cloud with an API key.

```bash
pip install roro-quantum            # REST client
pip install "roro-quantum[qiskit]"  # + Qiskit BackendV2 provider
```

## Quickstart

```python
from roro import RoRoClient
from qiskit import QuantumCircuit

qc = QuantumCircuit(2)   # no explicit creg — measure_all() adds its own
qc.h(0); qc.cx(0, 1)
qc.measure_all()

roro = RoRoClient(api_key="qcs_live_…")
job = roro.submit_run("roro.sim.sv", shots=5000, circuit=qc, wait=True)
print(job["status"], job["counts"])   # completed {'00': ~2500, '11': ~2500}
```

You can also pass raw QASM 2.0 via `qasm=...` instead of `circuit=...`.

> Tip: don't call `measure_all()` on a circuit built as `QuantumCircuit(2, 2)` —
> Qiskit then appends a *second* classical register and your counts come back as
> 4-bit keys (`'0000'`, `'1100'`) instead of `'00'`/`'11'`.

`"roro.sim.sv"` is a **target id** — the `targetId` field of each `machines()`
entry. (On the wire `submit_run` sends it as `machineTargetId`; the API accepts
`targetId` as an alias.)

## Qiskit provider

```python
from qiskit import QuantumCircuit
from roro.provider import RoRoProvider

qc = QuantumCircuit(2)
qc.h(0); qc.cx(0, 1); qc.measure_all()

backend = RoRoProvider(api_key="qcs_live_…").get_backend("roro.sim.sv")
result = backend.run(qc, shots=5000).result()
print(result.get_counts())
```

## API

| Method | Description |
|--------|-------------|
| `RoRoClient(api_key, base_url=…)` | Create a client |
| `.machines()` | List available targets |
| `.submit_run(target, shots=1024, qasm=None, circuit=None)` | Submit a run |
| `.runs(limit=None, offset=None)` / `.run(id)` | List runs (newest first; paginate with `limit` 1–200 + `offset`, omit for full history) / fetch one |

Errors raise `roro.RoRoError` (with `.status`). Get your API key in the
[console](https://console.roroquantum.com). Full docs: <https://roroquantum.com/docs/>.
