Metadata-Version: 2.4
Name: parityos-tket
Version: 0.1.0
Summary: Tket extension for ParityOS
Project-URL: Homepage, https://parityqc.com/
Author-email: ParityQC <parityos@parityqc.com>
License-Expression: BSD-3-Clause
License-File: LICENSE.txt
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Typing :: Typed
Requires-Python: >=3.11
Requires-Dist: attrs
Requires-Dist: parityos>=3.0.0
Requires-Dist: pytket<3.0,>=2.0
Description-Content-Type: text/markdown

# ParityOS Tket

ParityOS extension adding an interface to [tket](https://docs.quantinuum.com/tket/). 

## Installation

It is recommended to install this package in a separate Python virtual environment. For example:

```shell
# To create a standard Python virtual environment:
python -m venv my_new_venv && source my_new_venv/bin/activate
# Alternatively, to create a Anaconda/Miniconda environment:
conda create --name my_new_conda_env python=<version> && conda activate my_new_conda_env
# or a pyenv environment
pyenv virtualenv <version> my_new_venv && pyenv activate my_new_venv
# or a uv managed environment
uv venv -p <version>
```
where `<version>` is a python version and one of `[3.11, 3.12, 3.13]`.

After activating the virtual environment, install via your favorite package manager, e.g.:

```shell
# using pip
pip install parityos-tket
# using uv
uv pip install parityos-tket
```

## Exporter

`parityos-tket` offers an exporter of ParityOS to tket quantum circuits.

```python
from parityos.bits import get_q
from parityos.operators.circuit import Circuit
from parityos.operators.controlled_operator import CNOT
from parityos.operators.elementary_operator import H, Z
from parityos.operators.rotation_operator import RX
from parityos_tket.exporter import export_parityos_to_pytket

# Create circuit qubits.
qubits = [get_q(name) for name in ("a", "b", "c")]

# Create the following circuit as sequence of gates, followed by a measurement of all qubits.
#     ┌───────┐┌───┐┌───┐   ┌─┐
# qa: ┤ Rx(2) ├┤ H ├┤ Z ├───┤M├
#     └───────┘├───┤└┬─┬┘   └╥┘
# qb: ─────────┤ X ├─┤M├─────╫─
#       ┌───┐  └─┬─┘ └╥┘ ┌─┐ ║ 
# qc: ──┤ H ├────■────╫──┤M├─╫─
#       └───┘         ║  └╥┘ ║ 
# c: 3/═══════════════╩═══╩══╩═
#                     1   2  0 
circuit = Circuit(
    [
        RX(qubits[0], 2),
        H(qubits[0]),
        H(qubits[2]),
        CNOT(qubits[2], qubits[1]),
        Z(qubits[0]),
    ]
).measure_all()

# Export to tket. 
tket_result = export_parityos_to_pytket(circuit)

# print converted circuit as sequence of commands
for cmd in tket_result.circuit.get_commands():
    print(cmd)
# Rx(2) q[0];
# H q[2];
# H q[0];
# CX q[2], q[1];
# Measure q[1] --> c[1];
# Measure q[2] --> c[2];
# Z q[0];
# Measure q[0] --> c[0];

print(tket_result.qubit_map)  # Maps ParityOS qubits to tket Qubit integer labels
# {Qubit(id='a'): 0, Qubit(id='b'): 1, Qubit(id='c'): 2}

print(tket_result.cbit_map)  # Maps ParityOS cbits to tket Clbit integer labels
# {Cbit(id=0): 0, Cbit(id=1): 1, Cbit(id=2): 2}
```

## License

This software package is made available under the 3-Clause BSD License. 
See `License.txt` for details.
