Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release/1.22 #43

Merged
merged 8 commits into from
Nov 24, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,12 @@ updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
interval: "daily"
- package-ecosystem: pip
directory: "/"
schedule:
interval: "daily"
groups:
python-packages:
patterns:
- "*"
14 changes: 10 additions & 4 deletions .github/workflows/docs/build-docs
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,11 @@ import sys

DOCS_DIR = Path(sys.argv[0]).absolute().parent
MODULES_DIR = DOCS_DIR.parent.parent.parent
PYTKET_DOCS_LINK = "https://cqcl.github.io/tket/pytket/api/index.html"
PYTKET_EX_DOCS_LINK = "https://cqcl.github.io/pytket-extensions/api/index.html"
TKET_EXAMPLES_LINK = "https://tket.quantinuum.com/examples/"
TKET_MANUAL_LINK = "https://tket.quantinuum.com/user-manual/"
TKET_WEBSITE_LINK = "https://tket.quantinuum.com/"
PYTKET_DOCS_LINK = "https://tket.quantinuum.com/api-docs/"
PYTKET_EX_DOCS_LINK = "https://tket.quantinuum.com/api-docs/extensions.html"
PYTKET_PYQUIL_PYPI_LINK = "https://pypi.org/project/pytket-pyquil/"
PYTKET_PYQUIL_GITHUB = "https://github.com/CQCL/pytket-pyquil"
MODULE = "pyquil"
Expand Down Expand Up @@ -49,10 +52,13 @@ def build_module_docs():
with open(mod_docs / "intro.txt", "r") as f:
content = f.readlines()
content.append(
"\n.. toctree::\n\t:caption: More documentation:\n\t:maxdepth: 1\n\n"
"\n.. toctree::\n\t:caption: pytket documentation:\n\t:maxdepth: 1\n\n"
)
content.append(f"\tpytket <{PYTKET_DOCS_LINK}>\n")
content.append(f"\tpytket API docs <{PYTKET_DOCS_LINK}>\n")
content.append(f"\tpytket extensions <{PYTKET_EX_DOCS_LINK}>\n")
content.append(f"\tManual <{TKET_MANUAL_LINK}>\n")
content.append(f"\tExample notebooks <{TKET_EXAMPLES_LINK}>\n")
content.append(f"\tTKET website <{TKET_WEBSITE_LINK}>\n")
content.append(
"\n.. toctree::\n\t:caption: Links:\n\t:maxdepth: 1\n\n"
)
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@

# -- Extension configuration -------------------------------------------------

pytketdoc_base = "https://cqcl.github.io/tket/pytket/api/"
pytketdoc_base = "https://tket.quantinuum.com/api-docs/"

intersphinx_mapping = {
"https://docs.python.org/3/": None,
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/docs/intro.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@ platforms. Each extension adds either new methods to the ``pytket`` package to
convert between circuit representations, or new backends to which ``pytket``
circuits can be submitted.

.. _pytket: https://cqcl.github.io/tket/pytket/api/
.. _pytket: https://tket.quantinuum.com/api-docs/
.. _Quantinuum: https://www.quantinuum.com/
13 changes: 5 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,7 @@
# Pytket Extensions

This repository contains the pytket-pyquil extension, using Quantinuum's
[pytket](https://cqcl.github.io/tket/pytket/api/index.html) quantum SDK.

# pytket-pyquil

[Pytket](https://cqcl.github.io/tket/pytket/api/index.html) is a python module for interfacing
with tket, a quantum computing toolkit and optimisation compiler developed by Quantinuum.
[Pytket](https://tket.quantinuum.com/api-docs/index.html) is a python module for interfacing
with tket, a quantum computing toolkit and optimising compiler developed by Quantinuum.

`pytket-pyquil` is an extension to `pytket` that allows `pytket` circuits to be
run on Rigetti backends and simulators, as well as conversion to and from pyQuil
Expand All @@ -17,7 +12,9 @@ representations.
`pytket-pyquil` is available for Python 3.9, 3.10 and 3.11, on Linux, MacOS
and Windows. To install, run:

```pip install pytket-pyquil```
```shell
pip install pytket-pyquil
```

This will install `pytket` if it isn't already installed, and add new classes
and methods into the `pytket.extensions` namespace.
Expand Down
2 changes: 1 addition & 1 deletion _metadata.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
__extension_version__ = "0.30.0"
__extension_version__ = "0.31.0"
__extension_name__ = "pytket-pyquil"
6 changes: 6 additions & 0 deletions docs/changelog.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
Changelog
~~~~~~~~~

0.31.0 (November 2023)
----------------------

* Updated pytket version requirement to 1.22.
* add pyquil.gates.XY to the native gateset

0.30.0 (October 2023)
---------------------

Expand Down
9 changes: 8 additions & 1 deletion pytket/extensions/pyquil/backends/forest.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,14 @@ class ForestBackend(Backend):
_supports_counts = True
_supports_contextual_optimisation = True
_persistent_handles = True
_GATE_SET = {OpType.CZ, OpType.Rx, OpType.Rz, OpType.Measure, OpType.Barrier}
_GATE_SET = {
OpType.CZ,
OpType.Rx,
OpType.Rz,
OpType.Measure,
OpType.Barrier,
OpType.ISWAP,
}

def __init__(self, qc: QuantumComputer):
"""Backend for running circuits with the Rigetti QVM.
Expand Down
4 changes: 2 additions & 2 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
author_email="[email protected]",
python_requires=">=3.8",
project_urls={
"Documentation": "https://cqcl.github.io/pytket-pyquil/api/index.html",
"Documentation": "https://tket.quantinuum.com/extensions/pytket-pyquil/api/index.html",
"Source": "https://github.com/CQCL/pytket-pyquil",
"Tracker": "https://github.com/CQCL/pytket-pyquil/issues",
},
Expand All @@ -44,7 +44,7 @@
packages=find_namespace_packages(include=["pytket.*"]),
include_package_data=True,
install_requires=[
"pytket ~= 1.21",
"pytket ~= 1.22",
"pyquil ~= 3.5",
"typing-extensions ~= 4.2",
],
Expand Down
2 changes: 2 additions & 0 deletions tests/pyquil_convert_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
CPHASE,
SWAP,
MEASURE,
XY,
)
from pyquil.quilbase import Measurement
from sympy import pi, Symbol
Expand Down Expand Up @@ -78,6 +79,7 @@ def get_test_program(measure: bool = False) -> Program:
p += CCNOT(0, 1, 2)
p += CPHASE(PI / 4, 2, 1)
p += SWAP(0, 3)
p += XY(PI / 3, 2, 1)
if measure:
ro = p.declare("ro", "BIT", 4)
p += MEASURE(0, ro[0])
Expand Down
54 changes: 54 additions & 0 deletions tests/qvm_backend_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -390,6 +390,60 @@ def test_shots_bits_edgecases(qvm: None, quilc: None) -> None:
assert res.get_counts() == correct_counts


@pytest.mark.skipif(
skip_qvm_tests, reason="Can only run Rigetti QVM if docker is installed"
)
def test_gateset(qvm: None, quilc: None) -> None:
qc = get_qc("9q-square", as_qvm=True)
forest_backend = ForestBackend(qc)
a = [Qubit("node", i) for i in range(6)]

c = Circuit(0, 6)
for q in a:
c.add_qubit(q)
c.ISWAP(1, a[5], a[4])
c.ISWAP(2, a[5], a[4])
c.ISWAP(3, a[5], a[4])

c.measure_all()

h = forest_backend.process_circuit(c, 10)
res = forest_backend.get_result(h)

correct_shots = np.zeros((10, 6), dtype=int) # type: ignore
correct_counts = Counter({(0,) * 6: 10})

assert np.array_equal(res.get_shots(), correct_shots)
assert res.get_shots().shape == (10, 6)
assert res.get_counts() == correct_counts


@pytest.mark.skipif(
skip_qvm_tests, reason="Can only run Rigetti QVM if docker is installed"
)
def test_gateset_ii(qvm: None, quilc: None) -> None:
qc = get_qc("9q-square", as_qvm=True)
forest_backend = ForestBackend(qc)

a = [Qubit("node", i) for i in range(6)]
c = Circuit(0, 6)
for q in a:
c.add_qubit(q)
c.Rx(1.0, a[5])
c.ISWAP(0.5, a[5], a[4])
c.Rx(1.0, a[4])
c.ISWAP(0.5, a[5], a[4])
c.measure_all()

h = forest_backend.process_circuit(c, 10)
res = forest_backend.get_result(h)

assert res.get_shots().shape == (10, 6)
assert (
res.get_counts()[(0, 0, 0, 0, 0, 0)] + res.get_counts()[(0, 0, 0, 0, 1, 1)]
) == 10


@pytest.mark.skipif(
skip_qvm_tests, reason="Can only run Rigetti QVM if docker is installed"
)
Expand Down
2 changes: 1 addition & 1 deletion tests/test-requirements.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
pytest
pytest-timeout ~= 1.4.2
pytest-timeout ~= 2.2.0
hypothesis
requests_mock
docker