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

[Prototype] Efficient Graph-based Decomposition with Dijkstra's Algorithm #6302

Draft
wants to merge 3 commits into
base: master
Choose a base branch
from
Draft
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
108 changes: 108 additions & 0 deletions decomposition_demo.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
#!/usr/bin/env python

Check notice on line 1 in decomposition_demo.py

View check run for this annotation

codefactor.io / CodeFactor

decomposition_demo.py#L1

Missing module docstring (missing-module-docstring)
# coding: utf-8

# In[1]:


import numpy as np
import pennylane as qml
from pennylane.ops.decompositions import DecompositionLibrary, DecompositionGraph


# In[2]:


library = DecompositionLibrary()


def crx_to_rx_cz(*params, wires=None):

Check notice on line 18 in decomposition_demo.py

View check run for this annotation

codefactor.io / CodeFactor

decomposition_demo.py#L18

Missing function or method docstring (missing-function-docstring)
return [
qml.RX(params[0] / 2, wires=wires[1]),
qml.CZ(wires=wires),
qml.RX(-params[0] / 2, wires=wires[1]),
qml.CZ(wires=wires),
]


library.register_static_decomposition(qml.CRX, crx_to_rx_cz)


def crx_to_rz_ry(*params, wires=None):

Check notice on line 30 in decomposition_demo.py

View check run for this annotation

codefactor.io / CodeFactor

decomposition_demo.py#L30

Missing function or method docstring (missing-function-docstring)
return [
qml.RZ(np.pi / 2, wires=wires[1]),
qml.RY(params[0] / 2, wires=wires[1]),
qml.CNOT(wires=wires),
qml.RY(-params[0] / 2, wires=wires[1]),
qml.CNOT(wires=wires),
qml.RZ(-np.pi / 2, wires=wires[1]),
]


library.register_static_decomposition(qml.CRX, crx_to_rz_ry)


def crx_to_h_crz(*params, wires=None):

Check notice on line 44 in decomposition_demo.py

View check run for this annotation

codefactor.io / CodeFactor

decomposition_demo.py#L44

Missing function or method docstring (missing-function-docstring)
return [
qml.Hadamard(wires=wires[1]),
qml.CRZ(params[0], wires=wires),
qml.Hadamard(wires=wires[1]),
]


library.register_static_decomposition(qml.CRX, crx_to_h_crz)


def crz_to_rz_cnot(*params, wires=None):

Check notice on line 55 in decomposition_demo.py

View check run for this annotation

codefactor.io / CodeFactor

decomposition_demo.py#L55

Missing function or method docstring (missing-function-docstring)
return [
qml.RZ(params[0] / 2, wires=wires[1]),
qml.CNOT(wires=wires),
qml.RZ(-params[0] / 2, wires=wires[1]),
qml.CNOT(wires=wires),
]


library.register_static_decomposition(qml.CRZ, crz_to_rz_cnot)


def hadamard_to_rx_rz(*params, wires=None):

Check notice on line 67 in decomposition_demo.py

View check run for this annotation

codefactor.io / CodeFactor

decomposition_demo.py#L67

Unused argument 'params' (unused-argument)

Check notice on line 67 in decomposition_demo.py

View check run for this annotation

codefactor.io / CodeFactor

decomposition_demo.py#L67

Missing function or method docstring (missing-function-docstring)
return [
qml.RZ(np.pi / 2, wires=wires),
qml.RX(np.pi / 2, wires=wires),
qml.RZ(np.pi / 2, wires=wires),
]


library.register_static_decomposition(qml.Hadamard, hadamard_to_rx_rz)


def cnot_to_cz_h(*params, wires=None):

Check notice on line 78 in decomposition_demo.py

View check run for this annotation

codefactor.io / CodeFactor

decomposition_demo.py#L78

Missing function or method docstring (missing-function-docstring)

Check notice on line 78 in decomposition_demo.py

View check run for this annotation

codefactor.io / CodeFactor

decomposition_demo.py#L78

Unused argument 'params' (unused-argument)
return [
qml.Hadamard(wires=wires[1]),
qml.CZ(wires=wires),
qml.Hadamard(wires=wires[1]),
]


library.register_static_decomposition(qml.CNOT, cnot_to_cz_h)


def cz_to_cnot_h(*params, wires=None):

Check notice on line 89 in decomposition_demo.py

View check run for this annotation

codefactor.io / CodeFactor

decomposition_demo.py#L89

Unused argument 'params' (unused-argument)

Check notice on line 89 in decomposition_demo.py

View check run for this annotation

codefactor.io / CodeFactor

decomposition_demo.py#L89

Missing function or method docstring (missing-function-docstring)
return [
qml.Hadamard(wires=wires[1]),
qml.CNOT(wires=wires),
qml.Hadamard(wires=wires[1]),
]


library.register_static_decomposition(qml.CZ, cz_to_cnot_h)


# In[6]:


circuit_operations = [qml.CRX(0.5, wires=[0, 1])]
supported_operations = {"RZ", "RX", "CZ", "Hadamard"}

graph = DecompositionGraph(circuit_operations, supported_operations, library)
graph.solve(lazy=False)
graph.decompose(circuit_operations[0])
Loading