Metadata-Version: 2.5
Name: quri-parts-quantinuum
Version: 0.28.0
Summary: A plugin to use Quantinuum with QURI Parts
Project-URL: Repository, https://github.com/QunaSys/quri-sdk
Project-URL: Documentation, https://quri-parts.qunasys.com
Author-email: QURI Parts Authors <support@qunasys.com>
License-Expression: Apache-2.0
License-File: LICENSE
License-File: NOTICE
Keywords: quantum,quantum computing
Classifier: Topic :: Scientific/Engineering :: Physics
Classifier: Typing :: Typed
Requires-Python: <4.0,>=3.10
Requires-Dist: numpy>=1.22.0
Requires-Dist: quri-parts-circuit
Requires-Dist: typing-extensions<5.0.0,>=4.1.1
Provides-Extra: nexus
Requires-Dist: pytket<3.0,>=2.3.1; extra == 'nexus'
Requires-Dist: qnexus<1.0,>=0.51.0; extra == 'nexus'
Requires-Dist: quri-parts-core; extra == 'nexus'
Requires-Dist: quri-parts-tket; extra == 'nexus'
Description-Content-Type: text/markdown

# QURI Parts Quantinuum

QURI Parts Quantinuum is a support library for using Quantinuum with QURI Parts.

It provides

- `quri_parts.quantinuum.circuit`: Quantinuum native gates (`U1q`, `ZZ`, `RZZ`) and transpilers to the Quantinuum gate set.
- `quri_parts.quantinuum.backend`: `QuantinuumSamplingBackend`, a `SamplingBackend` that submits circuits to Quantinuum systems (H-Series), their emulators and Nexus-hosted simulators through [Quantinuum Nexus](https://docs.quantinuum.com/nexus/).

## Documentation

[QURI Parts Documentation](https://quri-parts.qunasys.com)

## Installation

```
pip install quri-parts-quantinuum
```

To submit jobs through Quantinuum Nexus, install the `nexus` extra:

```
pip install "quri-parts-quantinuum[nexus]"
```

## Usage

```python
import qnexus as qnx
from quri_parts.circuit import QuantumCircuit
from quri_parts.quantinuum.backend import QuantinuumSamplingBackend

qnx.login()  # once per machine: opens a browser, tokens are stored in ~/.qnx/auth

circuit = QuantumCircuit(2)
circuit.add_H_gate(0)
circuit.add_CNOT_gate(0, 1)

backend = QuantinuumSamplingBackend("H2-1E")  # emulator; "H2-1" is the device
job = backend.sample(circuit, shots=1000)
print(job.result().counts)
```

Which device names your account can use depends on its plan. `qnexus` lists them, and `sample()` checks the name against that list before submitting:

```python
from qnexus.models import IssuerEnum

qnx.devices.get_all(issuers=[IssuerEnum.QUANTINUUM]).df()
```

Any Nexus backend config can be passed instead of a device name, e.g. `QuantinuumSamplingBackend(backend_config=qnx.AerConfig())` for a Nexus-hosted simulator.

Requests with more than 10,000 shots (the per-item limit of Quantinuum-hosted devices) are split into several job items of one Nexus job and the counts are merged; `max_shots` changes the chunk size.

Quantinuum Helios is not supported yet: its Nexus endpoints accept only QIR or HUGR programs, so Helios device names and `qnx.HeliosConfig` are rejected with a `ValueError`.

## License

Apache License 2.0
