jet
jet copied to clipboard
Jet is a cross-platform library for simulating quantum circuits using tensor network contractions.
.. image:: https://raw.githubusercontent.com/XanaduAI/jet/main/docs/_static/jet_title.svg :alt: Jet :height: 65 :width: 100%
##################################################
.. image:: https://github.com/XanaduAI/jet/actions/workflows/tests.yml/badge.svg :alt: GitHub Actions :target: https://github.com/XanaduAI/jet/actions/workflows/tests.yml
.. image:: https://img.shields.io/badge/Docs-English-yellow.svg :alt: Documentation :target: https://quantum-jet.readthedocs.io
.. image:: https://img.shields.io/badge/C%2B%2B-17-blue.svg :alt: Standard :target: https://en.wikipedia.org/wiki/C%2B%2B17
.. image:: https://img.shields.io/badge/License-Apache%202.0-orange.svg :alt: License :target: https://www.apache.org/licenses/LICENSE-2.0
Jet <https://quantum-jet.readthedocs.io>_ is a cross-platform C++ and Python
library for simulating quantum circuits using tensor network contractions.
Features
-
Runs on a variety of systems, from single-board machines to massively parallel supercomputers.
-
Accelerates tensor contractions using a novel task-based parallelism approach.
-
Models quantum systems with an arbitrary number of basis states.
To get started with Jet, read one of our tutorial walkthroughs <https://quantum-jet.readthedocs.io/en/stable/use/introduction.html>__ or
browse the full API documentation <https://quantum-jet.readthedocs.io/en/stable/api/library_root.html>__.
Installation
C++ ^^^
The Jet C++ library requires Taskflow <https://github.com/taskflow/taskflow>_,
a BLAS library with a CBLAS interface, and a C++ compiler with C++17 support.
To use Jet, add #include <Jet.hpp> to the top of your header file and link
your program with the CBLAS library.
For example, assuming that the Taskflow headers can be found in your g++
include path and OpenBLAS is installed on your system, you can compile the
hellojet.cpp program below
.. code-block:: cpp
#include <array>
#include <complex>
#include <iostream>
#include <Jet.hpp>
int main(){
using Tensor = Jet::Tensor<std::complex<float>>;
Tensor lhs({"i", "j", "k"}, {2, 2, 2});
Tensor rhs({"j", "k", "l"}, {2, 2, 2});
lhs.FillRandom();
rhs.FillRandom();
Tensor res = Tensor::ContractTensors(lhs, rhs);
for (const auto &datum : res.GetData()) {
std::cout << datum << std::endl;
}
std::cout << "You have successfully used Jet version " << Jet::Version() << std::endl;
return 0;
}
by running
.. code-block:: bash
git clone https://github.com/XanaduAI/jet
g++ --std=c++17 -O3 -Ijet/include hellojet.cpp -lopenblas
The output of this program should resemble
.. code-block:: text
$ ./hellojet
(-0.936549,0.0678852)
(-0.0786964,-0.771624)
(2.98721,-0.657124)
(-1.90032,1.58051)
You have successfully used Jet version 0.2.1
For more detailed instructions, see the development guide <https://quantum-jet.readthedocs.io/en/stable/dev/guide.html>_.
Python ^^^^^^
The Jet Python package requires Python version 3.7 and above. Installation of Jet, as well as all dependencies, can be done using pip:
.. code-block:: bash
pip install quantum-jet
To build the Jet Python distribution locally, a BLAS library with a CBLAS interface and a C++ compiler with C++17 support is required. Simply run
.. code-block:: bash
make dist
pip install dist/*.whl
To verify that Jet is installed, you can run the hellojet.py program below
.. code-block:: python
import jet
lhs = jet.Tensor(["i", "j", "k"], [2, 2, 2])
rhs = jet.Tensor(["j", "k", "l"], [2, 2, 2])
lhs.fill_random()
rhs.fill_random()
res = jet.contract_tensors(lhs, rhs)
for datum in res.data:
print(f"{datum:.5f}")
print("You have successfully used Jet version", jet.version())
The output of this program should resemble
.. code-block:: text
$ python hellojet.py
1.96289+0.25257j
-0.16588-1.44652j
-1.43005+0.49516j
1.66881-1.67099j
You have successfully used Jet version 0.2.1
Contributing to Jet
We welcome new contributions - simply fork the Jet repository and make a
pull request <https://help.github.com/articles/about-pull-requests/>_
containing your contribution. All contributers to Jet will be listed as authors
on the releases. See our changelog <https://github.com/XanaduAI/jet/blob/main/.github/CHANGELOG.md>_ for more
details.
We also encourage bug reports, suggestions for new features and enhancements,
and even links to cool projects or applications built using Jet. Visit the
contributions page <https://github.com/XanaduAI/jet/blob/main/.github/CONTRIBUTING.md>_ to
learn more about sharing your ideas with the Jet team.
Support
- Source Code: https://github.com/XanaduAI/jet
- Issue Tracker: https://github.com/XanaduAI/jet/issues
If you are having issues, please let us know by posting the issue on our GitHub issue tracker.
Authors
Jet is the work of many contributors <https://github.com/XanaduAI/jet/graphs/contributors>_.
If you are doing research using Jet, please cite our paper:
Trevor Vincent, Lee J. O'Riordan, Mikhail Andrenkov, Jack Brown, Nathan Killoran, Haoyu Qi, and Ish Dhand. *Jet: Fast quantum circuit simulations with parallel task-based tensor-network contraction.* 2022. `Published in Quantum <https://doi.org/10.22331/q-2022-05-09-709>`_.
License
Jet is free and open source, released under the
Apache License, Version 2.0 <https://www.apache.org/licenses/LICENSE-2.0>_.
Jet contains a copy of
JSON for Modern C++ <https://github.com/nlohmann/json>_
from Niels Lohmann which is licenced under the
MIT License <https://opensource.org/licenses/MIT>_.