Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/CQCL/tket
Source code for the TKET quantum compiler, Python bindings and utilities
https://github.com/CQCL/tket
compiler quantum-computing
Last synced: about 2 months ago
JSON representation
Source code for the TKET quantum compiler, Python bindings and utilities
- Host: GitHub
- URL: https://github.com/CQCL/tket
- Owner: CQCL
- License: apache-2.0
- Created: 2021-09-13T12:46:23.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2024-10-29T11:17:25.000Z (about 2 months ago)
- Last Synced: 2024-10-29T11:54:11.502Z (about 2 months ago)
- Topics: compiler, quantum-computing
- Language: C++
- Homepage: https://docs.quantinuum.com/tket/
- Size: 663 MB
- Stars: 255
- Watchers: 20
- Forks: 48
- Open Issues: 98
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Citation: CITATION.cff
Awesome Lists containing this project
- quantum-awesome - https://github.com/CQCL/tket
README
# tket
[![Slack](https://img.shields.io/badge/Slack-4A154B?style=for-the-badge&logo=slack&logoColor=white)](https://tketusers.slack.com/join/shared_invite/zt-18qmsamj9-UqQFVdkRzxnXCcKtcarLRA#)
[![Stack Exchange](https://img.shields.io/badge/StackExchange-%23ffffff.svg?style=for-the-badge&logo=StackExchange)](https://quantumcomputing.stackexchange.com/tags/pytket)
[![PyPI version](https://badge.fury.io/py/pytket.svg)](https://badge.fury.io/py/pytket)## Introduction
TKET (pronounced "ticket") is a high-performance quantum compiler that can optimise circuits for a wide range of quantum computing architectures.
This repository contains the full source code for TKET and its python bindings.
The standard way of using TKET is via its pytket python API.
If you just want to use TKET via Python, the easiest way is to install pytket with
`pip`:```shell
pip install pytket
```As well as being an interface to the TKET compiler, pytket also provides an extensive API for other quantum computing tasks. These include constructing quantum circuits and handling the execution of experiments on devices and simulators.
## Documentation
The `tket` (C++) API documentation (generated with `doxygen`, and still rather
patchy) is available
[here](https://cqcl.github.io/tket/tket/api/index.html).The `pytket` (Python) API documentation is available
[here](https://docs.quantinuum.com/tket/api-docs).For getting started using pytket, check out the [user manual and notebook examples](https://docs.quantinuum.com/tket/user-guide/).
The source content for the manual and notebook examples can be found in the [pytket-docs repository](https://github.com/CQCL/pytket-docs).
## Extensions
In addition to the core pytket package there are pytket extension modules which allow pytket to interface with quantum devices and simulators. Some extensions also provide interoperability with other software libraries such as qiskit, cirq and pennylane.
For a list of available pytket extensions see the [extensions index page](https://docs.quantinuum.com/tket/api-docs/extensions).
These extensions are installed as separate python packages and the source code for each extension lives in its own github repository.
## How to build TKET and pytket
If you would like to build TKET yourself and help to improve it, read on!
The codebase is split into two main projects:
- [tket](tket): the core functionality of tket, optimised for execution speed
and implemented in C++.
- [pytket](pytket): the Python interface of tket. This consists of
binder modules to tket (written in C++ and making use of `pybind11` to link to the tket
shared library) and pure Python code that defines abstract interfaces
used by the extension modules such as the `Backend` and `BackendResult` classes,
as well as various other utilities.### Prerequisites
#### Build tools
The following compiler toolchains are used to build tket on the CI and are
therefore known to work:* Linux: gcc-13
* MacOS: apple-clang 15
* Windows: MSVC 19It is recommended that you use these versions to build locally, as code may
depend on the features they support. The compiler version can be controlled by
setting `CC` and `CXX` in your environment (e.g. `CC=gcc-11` and `CXX=g++-11`),
or on Debian-based Linux systems using `update-alternatives`.You should also have Python (3.10, 3.11, 3.12 or 3.13) and `pip` installed. We
use `cmake` and the package manager `conan` to build tket and pytket. The latter
can be installed with `pip`:```shell
pip install conan
```You will need at least cmake version 3.26, and conan version 2.
#### Set up `conan` profile
Generate a profile that matches your current machine, and add the required
remote where some dependencies are stored:```shell
conan profile detect
conan remote add tket-libs https://quantinuumsw.jfrog.io/artifactory/api/conan/tket1-libs --index 0
```#### Optional: use `ninja` and `ccache`
It is recommended that you also install `ninja` and `ccache` to speed up the
build process. For example with `apt` on Debian/Ubuntu:
```shell
apt install ninja-build ccache
```
Homebrew on MacOS/Linux:
```shell
brew install ninja ccache
```
Chocolatey on Windows:
```shell
choco install ninja ccache
```On MacOS/Linux:
- If installed, `ccache` is used automatically
- `ninja` must either be set as the default Cmake generator using the following command:
```shell
echo "tools.cmake.cmaketoolchain:generator = Ninja" >> $(conan config home)/global.conf
```
or be specified on a command-by-command basis by providing the argument
`-c tools.cmake.cmaketoolchain:generator=Ninja` to conanOn Windows:
- Set `ninja` as generator as described above (less reliable than the default `Visual Studio` generator)
- `ccache` will be used automatically *only* when using `Ninja` or `Makefile` as the Cmake generator. It can
also be used with `Visual Studio` generators by setting the environment
variable `TKET_VSGEN_CCACHE_EXE` to the path of the `ccache` executable. **Note: this
must be the path to the actual binary, not a symlink or shim (as used by Chocolatey)**. If using Chocolatey
to install `ccache`, you can find the path to the binary using `ccache --shimgen-help`### Building and testing the utility libraries
See the [README](libs/README.md) in the `libs` directory for instructions on
building and testing the utility libraries used by tket (for logging,
random-number generation and so on). This is not necessary if you just want to
build tket or pytket since the recipes or binaries will be automatically
downloaded from the above conan remote.### Building and testing the tket library
See the [README](tket/README.md) in the `tket` directory for instructions on
building and testing tket as a standalone C++ library.### Building and testing pytket
See the [README](pytket/README.md) in the `pytket` directory for instructions on
building and testing pytket.### Nix Support
Tket and pytket are available as a Nix flake, with support for Linux and Apple Silicon systems.
See the [README](nix-support/README.md) in the `nix-support` directory for instructions
on building and testing tket and pytket through Nix, and on how to use it within a Nix project.To launch into a tket environment, you can use
```
nix develop github:CQCL/tket
```We use Cachix to cache pre-built artifacts, which provides a faster install time for nix users.
To make use of this cache, enable our cachix substituter with `cachix use tket`, or enter a
tket nix environment from a trusted user and confirm the use of the tket.cachix.org substituter.