Skip to content

Commit

Permalink
Merge branch 'main' of github.com:BQSKit/bqskit into justink/sub_state
Browse files Browse the repository at this point in the history
  • Loading branch information
jkalloor3 committed Aug 1, 2024
2 parents d5d4520 + c1629e7 commit ba7340c
Show file tree
Hide file tree
Showing 15 changed files with 346 additions and 19 deletions.
6 changes: 3 additions & 3 deletions bqskit/compiler/compile.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
from bqskit.passes.mapping.routing.pam import PAMRoutingPass
from bqskit.passes.mapping.routing.sabre import GeneralizedSabreRoutingPass
from bqskit.passes.mapping.setmodel import ExtractModelConnectivityPass
from bqskit.passes.mapping.setmodel import RestoreModelConnevtivityPass
from bqskit.passes.mapping.setmodel import RestoreModelConnectivityPass
from bqskit.passes.mapping.setmodel import SetModelPass
from bqskit.passes.mapping.topology import SubtopologySelectionPass
from bqskit.passes.mapping.verify import PAMVerificationSequence
Expand Down Expand Up @@ -1012,7 +1012,7 @@ def build_multi_qudit_retarget_workflow(
optimization_level,
synthesis_epsilon,
),
RestoreModelConnevtivityPass(),
RestoreModelConnectivityPass(),
],
AutoRebase2QuditGatePass(3, 5, synthesis_epsilon),
),
Expand Down Expand Up @@ -1257,7 +1257,7 @@ def build_seqpam_mapping_optimization_workflow(
PAMRoutingPass(),
post_pam_seq,
UnfoldPass(),
RestoreModelConnevtivityPass(),
RestoreModelConnectivityPass(),

LogPass('Recaching permutation-aware synthesis results.'),
SubtopologySelectionPass(block_size),
Expand Down
2 changes: 2 additions & 0 deletions bqskit/ir/gates/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
CXGate
CYGate
CZGate
ECRGate
HGate
IdentityGate
ISwapGate
Expand All @@ -37,6 +38,7 @@
ShiftGate
SqrtCNOTGate
SqrtISwapGate
SqrtTGate
SubSwapGate
SwapGate
SqrtXGate
Expand Down
4 changes: 4 additions & 0 deletions bqskit/ir/gates/constant/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
from bqskit.ir.gates.constant.cx import CXGate
from bqskit.ir.gates.constant.cy import CYGate
from bqskit.ir.gates.constant.cz import CZGate
from bqskit.ir.gates.constant.ecr import ECRGate
from bqskit.ir.gates.constant.h import HGate
from bqskit.ir.gates.constant.identity import IdentityGate
from bqskit.ir.gates.constant.iswap import ISwapGate
Expand All @@ -28,6 +29,7 @@
from bqskit.ir.gates.constant.shift import ShiftGate
from bqskit.ir.gates.constant.sqrtcnot import SqrtCNOTGate
from bqskit.ir.gates.constant.sqrtiswap import SqrtISwapGate
from bqskit.ir.gates.constant.sqrtt import SqrtTGate
from bqskit.ir.gates.constant.subswap import SubSwapGate
from bqskit.ir.gates.constant.swap import SwapGate
from bqskit.ir.gates.constant.sx import SqrtXGate
Expand Down Expand Up @@ -57,6 +59,7 @@
'CXGate',
'CYGate',
'CZGate',
'ECRGate',
'HGate',
'IdentityGate',
'ISwapGate',
Expand All @@ -71,6 +74,7 @@
'ShiftGate',
'SqrtCNOTGate',
'SqrtISwapGate',
'SqrtTGate',
'SubSwapGate',
'SwapGate',
'SqrtXGate',
Expand Down
50 changes: 50 additions & 0 deletions bqskit/ir/gates/constant/ecr.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
"""This module implements the ECRGate."""
from __future__ import annotations

import math

from bqskit.ir.gates.constantgate import ConstantGate
from bqskit.ir.gates.qubitgate import QubitGate
from bqskit.qis.unitary.unitarymatrix import UnitaryMatrix


class ECRGate(ConstantGate, QubitGate):
"""
The echoed cross-resonance gate (ECR).
The ECR gate is given by the following unitary:
.. math::
\\frac{1}{\\sqrt{2}}
\\begin{pmatrix}
0 & 1 & 0 & i \\\\
1 & 0 & -i & 0 \\\\
0 & i & 0 & 1 \\\\
-i & 0 & 1 & 0
\\end{pmatrix}
"""
_name = 'ecr'
_num_qudits = 2
_qasm_name = 'ecr'
_utry = UnitaryMatrix([
[0, 0, 1 * 1 / math.sqrt(2), 1j * 1 / math.sqrt(2)],
[0, 0, 1j * 1 / math.sqrt(2), 1 * 1 / math.sqrt(2)],
[1 * 1 / math.sqrt(2), -1j * 1 / math.sqrt(2), 0, 0],
[-1j * 1 / math.sqrt(2), 1 * 1 / math.sqrt(2), 0, 0],
])

def __init__(self) -> None:
pass

def get_qasm_gate_def(self) -> str:
qasm_rzx = (
'gate rzx(param0) q0,q1 {'
'h q1;'
'cx q0,q1;'
'rz(param0) q1;'
'cx q0,q1;'
'h q1; }'
)
qasm_ecr = 'gate ecr q0,q1 { rzx(pi/4) q0,q1; x q0; rzx(-pi/4) q0,q1; }'
return qasm_rzx + '\n' + qasm_ecr
30 changes: 30 additions & 0 deletions bqskit/ir/gates/constant/sqrtt.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
"""This module implements the SqrtTGate."""
from __future__ import annotations

import cmath

from bqskit.ir.gates.constantgate import ConstantGate
from bqskit.ir.gates.qubitgate import QubitGate
from bqskit.qis.unitary.unitarymatrix import UnitaryMatrix


class SqrtTGate(ConstantGate, QubitGate):
"""
The single-qubit square root T gate.
.. math::
\\begin{pmatrix}
1 & 0 \\\\
0 & e^{i\\frac{\\pi}{8}} \\\\
\\end{pmatrix}
"""

_num_qudits = 1
_qasm_name = 'st'
_utry = UnitaryMatrix(
[
[1, 0],
[0, cmath.exp(1j * cmath.pi / 8)],
],
)
16 changes: 8 additions & 8 deletions bqskit/ir/gates/parameterized/u8.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,12 +91,12 @@ def get_grad(self, params: RealVector = []) -> npt.NDArray[np.complex128]:
[ # wrt params[0]
[-s1 * c2 * p1, c1 * p3, -s1 * s2 * p4],
[
-c1 * c2 * c3 * p1 * p2 * m3, -s1 * \
c3 * p2, -c1 * s2 * c3 * p2 * m3 * p4,
-c1 * c2 * c3 * p1 * p2 * m3, -s1 * c3 * p2,
-c1 * s2 * c3 * p2 * m3 * p4,
],
[
-c1 * c2 * s3 * p1 * m3 * p5, -s1 * \
s3 * p5, -c1 * s2 * s3 * m3 * p4 * p5,
-c1 * c2 * s3 * p1 * m3 * p5, -s1 * s3 * p5,
-c1 * s2 * s3 * m3 * p4 * p5,
],
],

Expand Down Expand Up @@ -142,8 +142,8 @@ def get_grad(self, params: RealVector = []) -> npt.NDArray[np.complex128]:
[ # wrt params[4]
[0, 0, 0],
[
-1j * s1 * c2 * c3 * p1 * p2 * m3, 1j * c1 * \
c3 * p2, -1j * s1 * s2 * c3 * p2 * m3 * p4,
-1j * s1 * c2 * c3 * p1 * p2 * m3, 1j * c1 * c3 * p2,
-1j * s1 * s2 * c3 * p2 * m3 * p4,
],
[1j * s2 * c3 * m2 * m4, 0, -1j * c2 * c3 * m1 * m2],
],
Expand Down Expand Up @@ -178,8 +178,8 @@ def get_grad(self, params: RealVector = []) -> npt.NDArray[np.complex128]:
[0, 0, 0],
[-1j * s2 * s3 * m4 * m5, 0, 1j * c2 * s3 * m1 * m5],
[
-1j * s1 * c2 * s3 * p1 * m3 * p5, 1j * c1 * \
s3 * p5, -1j * s1 * s2 * s3 * m3 * p4 * p5,
-1j * s1 * c2 * s3 * p1 * m3 * p5, 1j * c1 * s3 * p5,
-1j * s1 * s2 * s3 * m3 * p4 * p5,
],
],
],
Expand Down
2 changes: 2 additions & 0 deletions bqskit/ir/lang/qasm2/visitor.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
from bqskit.ir.gates.constant.cx import CXGate
from bqskit.ir.gates.constant.cy import CYGate
from bqskit.ir.gates.constant.cz import CZGate
from bqskit.ir.gates.constant.ecr import ECRGate
from bqskit.ir.gates.constant.h import HGate
from bqskit.ir.gates.constant.identity import IdentityGate
from bqskit.ir.gates.constant.iswap import ISwapGate
Expand Down Expand Up @@ -221,6 +222,7 @@ def fill_gate_defs(self) -> None:
self.gate_defs['CX'] = GateDef('CX', 0, 2, CXGate())
self.gate_defs['cy'] = GateDef('cy', 0, 2, CYGate())
self.gate_defs['cz'] = GateDef('cz', 0, 2, CZGate())
self.gate_defs['ecr'] = GateDef('ecr', 0, 2, ECRGate())
self.gate_defs['h'] = GateDef('h', 0, 1, HGate())
self.gate_defs['id'] = GateDef('id', 0, 1, IdentityGate(1))
self.gate_defs['u0'] = GateDef('u0', 0, 1, IdentityGate(1))
Expand Down
8 changes: 5 additions & 3 deletions bqskit/passes/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@
PAMRoutingPass
EmbedAllPermutationsPass
ExtractModelConnectivityPass
RestoreModelConnevtivityPass
RestoreModelConnectivityPass
.. rubric:: PAM Verification Passes
Expand Down Expand Up @@ -234,11 +234,12 @@
from bqskit.passes.mapping.layout.pam import PAMLayoutPass
from bqskit.passes.mapping.layout.sabre import GeneralizedSabreLayoutPass
from bqskit.passes.mapping.placement.greedy import GreedyPlacementPass
from bqskit.passes.mapping.placement.static import StaticPlacementPass
from bqskit.passes.mapping.placement.trivial import TrivialPlacementPass
from bqskit.passes.mapping.routing.pam import PAMRoutingPass
from bqskit.passes.mapping.routing.sabre import GeneralizedSabreRoutingPass
from bqskit.passes.mapping.setmodel import ExtractModelConnectivityPass
from bqskit.passes.mapping.setmodel import RestoreModelConnevtivityPass
from bqskit.passes.mapping.setmodel import RestoreModelConnectivityPass
from bqskit.passes.mapping.setmodel import SetModelPass
from bqskit.passes.mapping.topology import SubtopologySelectionPass
from bqskit.passes.mapping.verify import CalculatePAMErrorsPass
Expand Down Expand Up @@ -364,6 +365,7 @@
'GeneralizedSabreLayoutPass',
'GreedyPlacementPass',
'TrivialPlacementPass',
'StaticPlacementPass',
'GeneralizedSabreRoutingPass',
'SetModelPass',
'U3Decomposition',
Expand Down Expand Up @@ -398,7 +400,7 @@
'GeneralSQDecomposition',
'StructureAnalysisPass',
'ExtractModelConnectivityPass',
'RestoreModelConnevtivityPass',
'RestoreModelConnectivityPass',
'TagPAMBlockDataPass',
'CalculatePAMErrorsPass',
'UnTagPAMBlockDataPass',
Expand Down
6 changes: 4 additions & 2 deletions bqskit/passes/mapping/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@
from bqskit.passes.mapping.layout.pam import PAMLayoutPass
from bqskit.passes.mapping.layout.sabre import GeneralizedSabreLayoutPass
from bqskit.passes.mapping.placement.greedy import GreedyPlacementPass
from bqskit.passes.mapping.placement.static import StaticPlacementPass
from bqskit.passes.mapping.placement.trivial import TrivialPlacementPass
from bqskit.passes.mapping.routing.pam import PAMRoutingPass
from bqskit.passes.mapping.routing.sabre import GeneralizedSabreRoutingPass
from bqskit.passes.mapping.setmodel import ExtractModelConnectivityPass
from bqskit.passes.mapping.setmodel import RestoreModelConnevtivityPass
from bqskit.passes.mapping.setmodel import RestoreModelConnectivityPass
from bqskit.passes.mapping.setmodel import SetModelPass
from bqskit.passes.mapping.topology import SubtopologySelectionPass
from bqskit.passes.mapping.verify import CalculatePAMErrorsPass
Expand All @@ -22,6 +23,7 @@
'GeneralizedSabreLayoutPass',
'GreedyPlacementPass',
'TrivialPlacementPass',
'StaticPlacementPass',
'GeneralizedSabreRoutingPass',
'SetModelPass',
'ApplyPlacement',
Expand All @@ -30,7 +32,7 @@
'EmbedAllPermutationsPass',
'SubtopologySelectionPass',
'ExtractModelConnectivityPass',
'RestoreModelConnevtivityPass',
'RestoreModelConnectivityPass',
'TagPAMBlockDataPass',
'CalculatePAMErrorsPass',
'UnTagPAMBlockDataPass',
Expand Down
3 changes: 2 additions & 1 deletion bqskit/passes/mapping/placement/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from __future__ import annotations

from bqskit.passes.mapping.placement.greedy import GreedyPlacementPass
from bqskit.passes.mapping.placement.static import StaticPlacementPass
from bqskit.passes.mapping.placement.trivial import TrivialPlacementPass

__all__ = ['GreedyPlacementPass', 'TrivialPlacementPass']
__all__ = ['GreedyPlacementPass', 'TrivialPlacementPass', 'StaticPlacementPass']
Loading

0 comments on commit ba7340c

Please sign in to comment.