Skip to content

Commit

Permalink
Merge pull request #43 from CQCL/release/1.22
Browse files Browse the repository at this point in the history
Release/1.22
  • Loading branch information
cqc-melf authored Nov 24, 2023
2 parents 7735aec + b93e1dc commit 52f7b03
Show file tree
Hide file tree
Showing 12 changed files with 100 additions and 20 deletions.
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="tket-support@cambridgequantum.com",
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

0 comments on commit 52f7b03

Please sign in to comment.