Skip to content

Commit

Permalink
Merge branch 'development' into feat-rust
Browse files Browse the repository at this point in the history
  • Loading branch information
ciaranra committed Nov 4, 2024
2 parents 4530b69 + 030ea68 commit 01ca058
Show file tree
Hide file tree
Showing 20 changed files with 708 additions and 4 deletions.
4 changes: 2 additions & 2 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@ repos:
- id: debug-statements

- repo: https://github.com/crate-ci/typos
rev: v1.26.0
rev: v1.27.0
hooks:
- id: typos
args: []

- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.6.9
rev: v0.7.2
hooks:
- id: ruff
args: [--fix, --exit-non-zero-on-fix]
Expand Down
30 changes: 30 additions & 0 deletions python/quantum-pecos/src/pecos/simulators/basic_sv/bindings.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,4 +69,34 @@
"SqrtZZ": two_q.SZZ,
"SZZdg": two_q.SZZdg,
"SWAP": two_q.SWAP,
# Additional Cliffords from `circuit_converters/std2chs.py`
"Q": one_q.SX,
"Qd": one_q.SXdg,
"R": one_q.SY,
"Rd": one_q.SYdg,
"S": one_q.SZ,
"Sd": one_q.SZdg,
"H1": one_q.H,
"H2": one_q.H2,
"H3": one_q.H3,
"H4": one_q.H4,
"H5": one_q.H5,
"H6": one_q.H6,
"H+z+x": one_q.H,
"H-z-x": one_q.H2,
"H+y-z": one_q.H3,
"H-y-z": one_q.H4,
"H-x+y": one_q.H5,
"H-x-y": one_q.H6,
"F1": one_q.F,
"F1d": one_q.Fdg,
"F2": one_q.F2,
"F2d": one_q.F2d,
"F3": one_q.F3,
"F3d": one_q.F3d,
"F4": one_q.F4,
"F4d": one_q.F4d,
"CNOT": two_q.CX,
"G": two_q.G,
"II": one_q.identity,
}
Original file line number Diff line number Diff line change
Expand Up @@ -329,3 +329,78 @@ def Tdg(state, qubit: int, **params: Any) -> None:
qubit: The index of the qubit where the gate is applied
"""
RZ(state, qubit, angles=(-math.pi / 4,))


# The definition of the extra Clifford gates added below come from
# circuit_converters/std2chs.py
def H2(state, qubit: int, **params: Any) -> None:
"""'H2': ('S', 'S', 'H', 'S', 'S')"""
Z(state, qubit)
H(state, qubit)
Z(state, qubit)


def H3(state, qubit: int, **params: Any) -> None:
"""'H3': ('H', 'S', 'S', 'H', 'S',)"""
X(state, qubit)
SZ(state, qubit)


def H4(state, qubit: int, **params: Any) -> None:
"""'H4': ('H', 'S', 'S', 'H', 'S', 'S', 'S',)"""
X(state, qubit)
SZdg(state, qubit)


def H5(state, qubit: int, **params: Any) -> None:
"""'H5': ('S', 'S', 'S', 'H', 'S')"""
SZdg(state, qubit)
H(state, qubit)
SZ(state, qubit)


def H6(state, qubit: int, **params: Any) -> None:
"""'H6': ('S', 'H', 'S', 'S', 'S',)"""
SZ(state, qubit)
H(state, qubit)
SZdg(state, qubit)


def F2(state, qubit: int, **params: Any) -> None:
"""'F2': ('S', 'S', 'H', 'S')"""
Z(state, qubit)
H(state, qubit)
SZ(state, qubit)


def F2d(state, qubit: int, **params: Any) -> None:
"""'F2d': ('S', 'S', 'S', 'H', 'S', 'S')"""
SZdg(state, qubit)
H(state, qubit)
Z(state, qubit)


def F3(state, qubit: int, **params: Any) -> None:
"""'F3': ('S', 'H', 'S', 'S')"""
SZ(state, qubit)
H(state, qubit)
Z(state, qubit)


def F3d(state, qubit: int, **params: Any) -> None:
"""'F3d': ('S', 'S', 'H', 'S', 'S', 'S')"""
Z(state, qubit)
H(state, qubit)
SZdg(state, qubit)


def F4(state, qubit: int, **params: Any) -> None:
"""'F4': ('H', 'S', 'S', 'S')"""
H(state, qubit)
SZdg(state, qubit)


def F4d(state, qubit: int, **params: Any) -> None:
"""'F4d': ('S', 'H')"""
SZ(state, qubit)
H(state, qubit)
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@

import numpy as np

from pecos.simulators.basic_sv.gates_one_qubit import H


def _apply_two_qubit_matrix(state, qubits: tuple[int, int], matrix: np.array) -> None:
"""
Expand Down Expand Up @@ -304,3 +306,13 @@ def SWAP(state, qubits: tuple[int, int], **params: Any) -> None:
],
)
_apply_two_qubit_matrix(state, qubits, matrix)


def G(state, qubits: tuple[int, int], **params: Any) -> None:
"""'G': (('I', 'H'), 'CNOT', ('H', 'H'), 'CNOT', ('I', 'H'))"""
H(state, qubits[1])
CX(state, qubits)
H(state, qubits[0])
H(state, qubits[1])
CX(state, qubits)
H(state, qubits[1])
30 changes: 30 additions & 0 deletions python/quantum-pecos/src/pecos/simulators/cointoss/bindings.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,4 +68,34 @@
"SqrtZZ": ignore_gate,
"SZZdg": ignore_gate,
"SWAP": ignore_gate,
# Additional Cliffords from `circuit_converters/std2chs.py`
"Q": ignore_gate,
"Qd": ignore_gate,
"R": ignore_gate,
"Rd": ignore_gate,
"S": ignore_gate,
"Sd": ignore_gate,
"H1": ignore_gate,
"H2": ignore_gate,
"H3": ignore_gate,
"H4": ignore_gate,
"H5": ignore_gate,
"H6": ignore_gate,
"H+z+x": ignore_gate,
"H-z-x": ignore_gate,
"H+y-z": ignore_gate,
"H-y-z": ignore_gate,
"H-x+y": ignore_gate,
"H-x-y": ignore_gate,
"F1": ignore_gate,
"F1d": ignore_gate,
"F2": ignore_gate,
"F2d": ignore_gate,
"F3": ignore_gate,
"F3d": ignore_gate,
"F4": ignore_gate,
"F4d": ignore_gate,
"CNOT": ignore_gate,
"G": ignore_gate,
"II": ignore_gate,
}
30 changes: 30 additions & 0 deletions python/quantum-pecos/src/pecos/simulators/custatevec/bindings.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,4 +71,34 @@
"SqrtZZ": two_q.SZZ,
"SZZdg": two_q.SZZdg,
"SWAP": two_q.SWAP,
# Additional Cliffords from `circuit_converters/std2chs.py`
"Q": one_q.SX,
"Qd": one_q.SXdg,
"R": one_q.SY,
"Rd": one_q.SYdg,
"S": one_q.SZ,
"Sd": one_q.SZdg,
"H1": one_q.H,
"H2": one_q.H2,
"H3": one_q.H3,
"H4": one_q.H4,
"H5": one_q.H5,
"H6": one_q.H6,
"H+z+x": one_q.H,
"H-z-x": one_q.H2,
"H+y-z": one_q.H3,
"H-y-z": one_q.H4,
"H-x+y": one_q.H5,
"H-x-y": one_q.H6,
"F1": one_q.F,
"F1d": one_q.Fdg,
"F2": one_q.F2,
"F2d": one_q.F2d,
"F3": one_q.F3,
"F3d": one_q.F3d,
"F4": one_q.F4,
"F4d": one_q.F4d,
"CNOT": two_q.CX,
"G": two_q.G,
"II": one_q.identity,
}
Original file line number Diff line number Diff line change
Expand Up @@ -356,3 +356,78 @@ def Tdg(state, qubit: int, **params: Any) -> None:
qubit: The index of the qubit where the gate is applied
"""
RZ(state, qubit, angles=(-math.pi / 4,))


# The definition of the extra Clifford gates added below come from
# circuit_converters/std2chs.py
def H2(state, qubit: int, **params: Any) -> None:
"""'H2': ('S', 'S', 'H', 'S', 'S')"""
Z(state, qubit)
H(state, qubit)
Z(state, qubit)


def H3(state, qubit: int, **params: Any) -> None:
"""'H3': ('H', 'S', 'S', 'H', 'S',)"""
X(state, qubit)
SZ(state, qubit)


def H4(state, qubit: int, **params: Any) -> None:
"""'H4': ('H', 'S', 'S', 'H', 'S', 'S', 'S',)"""
X(state, qubit)
SZdg(state, qubit)


def H5(state, qubit: int, **params: Any) -> None:
"""'H5': ('S', 'S', 'S', 'H', 'S')"""
SZdg(state, qubit)
H(state, qubit)
SZ(state, qubit)


def H6(state, qubit: int, **params: Any) -> None:
"""'H6': ('S', 'H', 'S', 'S', 'S',)"""
SZ(state, qubit)
H(state, qubit)
SZdg(state, qubit)


def F2(state, qubit: int, **params: Any) -> None:
"""'F2': ('S', 'S', 'H', 'S')"""
Z(state, qubit)
H(state, qubit)
SZ(state, qubit)


def F2d(state, qubit: int, **params: Any) -> None:
"""'F2d': ('S', 'S', 'S', 'H', 'S', 'S')"""
SZdg(state, qubit)
H(state, qubit)
Z(state, qubit)


def F3(state, qubit: int, **params: Any) -> None:
"""'F3': ('S', 'H', 'S', 'S')"""
SZ(state, qubit)
H(state, qubit)
Z(state, qubit)


def F3d(state, qubit: int, **params: Any) -> None:
"""'F3d': ('S', 'S', 'H', 'S', 'S', 'S')"""
Z(state, qubit)
H(state, qubit)
SZdg(state, qubit)


def F4(state, qubit: int, **params: Any) -> None:
"""'F4': ('H', 'S', 'S', 'S')"""
H(state, qubit)
SZdg(state, qubit)


def F4d(state, qubit: int, **params: Any) -> None:
"""'F4d': ('S', 'H')"""
SZ(state, qubit)
H(state, qubit)
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
import cupy as cp
from cuquantum import custatevec as cusv

from pecos.simulators.custatevec.gates_one_qubit import H


def _apply_controlled_matrix(
state,
Expand Down Expand Up @@ -411,3 +413,13 @@ def SWAP(state, qubits: tuple[int, int], **params: Any) -> None:
extra_workspace_size_in_bytes=0, # Let cuQuantum use the mempool we configured
)
state.stream.synchronize()


def G(state, qubits: tuple[int, int], **params: Any) -> None:
"""'G': (('I', 'H'), 'CNOT', ('H', 'H'), 'CNOT', ('I', 'H'))"""
H(state, qubits[1])
CX(state, qubits)
H(state, qubits[0])
H(state, qubits[1])
CX(state, qubits)
H(state, qubits[1])
30 changes: 30 additions & 0 deletions python/quantum-pecos/src/pecos/simulators/mps_pytket/bindings.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,4 +71,34 @@
"SqrtZZ": two_q.SZZ,
"SZZdg": two_q.SZZdg,
"SWAP": two_q.SWAP,
# Additional Cliffords from `circuit_converters/std2chs.py`
"Q": one_q.SX,
"Qd": one_q.SXdg,
"R": one_q.SY,
"Rd": one_q.SYdg,
"S": one_q.SZ,
"Sd": one_q.SZdg,
"H1": one_q.H,
"H2": one_q.H2,
"H3": one_q.H3,
"H4": one_q.H4,
"H5": one_q.H5,
"H6": one_q.H6,
"H+z+x": one_q.H,
"H-z-x": one_q.H2,
"H+y-z": one_q.H3,
"H-y-z": one_q.H4,
"H-x+y": one_q.H5,
"H-x-y": one_q.H6,
"F1": one_q.F,
"F1d": one_q.Fdg,
"F2": one_q.F2,
"F2d": one_q.F2d,
"F3": one_q.F3,
"F3d": one_q.F3d,
"F4": one_q.F4,
"F4d": one_q.F4d,
"CNOT": two_q.CX,
"G": two_q.G,
"II": one_q.identity,
}
Loading

0 comments on commit 01ca058

Please sign in to comment.