Skip to content

Commit ba7340c

Browse files
committed
Merge branch 'main' of github.com:BQSKit/bqskit into justink/sub_state
2 parents d5d4520 + c1629e7 commit ba7340c

File tree

15 files changed

+346
-19
lines changed

15 files changed

+346
-19
lines changed

bqskit/compiler/compile.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
from bqskit.passes.mapping.routing.pam import PAMRoutingPass
5353
from bqskit.passes.mapping.routing.sabre import GeneralizedSabreRoutingPass
5454
from bqskit.passes.mapping.setmodel import ExtractModelConnectivityPass
55-
from bqskit.passes.mapping.setmodel import RestoreModelConnevtivityPass
55+
from bqskit.passes.mapping.setmodel import RestoreModelConnectivityPass
5656
from bqskit.passes.mapping.setmodel import SetModelPass
5757
from bqskit.passes.mapping.topology import SubtopologySelectionPass
5858
from bqskit.passes.mapping.verify import PAMVerificationSequence
@@ -1012,7 +1012,7 @@ def build_multi_qudit_retarget_workflow(
10121012
optimization_level,
10131013
synthesis_epsilon,
10141014
),
1015-
RestoreModelConnevtivityPass(),
1015+
RestoreModelConnectivityPass(),
10161016
],
10171017
AutoRebase2QuditGatePass(3, 5, synthesis_epsilon),
10181018
),
@@ -1257,7 +1257,7 @@ def build_seqpam_mapping_optimization_workflow(
12571257
PAMRoutingPass(),
12581258
post_pam_seq,
12591259
UnfoldPass(),
1260-
RestoreModelConnevtivityPass(),
1260+
RestoreModelConnectivityPass(),
12611261

12621262
LogPass('Recaching permutation-aware synthesis results.'),
12631263
SubtopologySelectionPass(block_size),

bqskit/ir/gates/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
CXGate
2424
CYGate
2525
CZGate
26+
ECRGate
2627
HGate
2728
IdentityGate
2829
ISwapGate
@@ -37,6 +38,7 @@
3738
ShiftGate
3839
SqrtCNOTGate
3940
SqrtISwapGate
41+
SqrtTGate
4042
SubSwapGate
4143
SwapGate
4244
SqrtXGate

bqskit/ir/gates/constant/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from bqskit.ir.gates.constant.cx import CXGate
1515
from bqskit.ir.gates.constant.cy import CYGate
1616
from bqskit.ir.gates.constant.cz import CZGate
17+
from bqskit.ir.gates.constant.ecr import ECRGate
1718
from bqskit.ir.gates.constant.h import HGate
1819
from bqskit.ir.gates.constant.identity import IdentityGate
1920
from bqskit.ir.gates.constant.iswap import ISwapGate
@@ -28,6 +29,7 @@
2829
from bqskit.ir.gates.constant.shift import ShiftGate
2930
from bqskit.ir.gates.constant.sqrtcnot import SqrtCNOTGate
3031
from bqskit.ir.gates.constant.sqrtiswap import SqrtISwapGate
32+
from bqskit.ir.gates.constant.sqrtt import SqrtTGate
3133
from bqskit.ir.gates.constant.subswap import SubSwapGate
3234
from bqskit.ir.gates.constant.swap import SwapGate
3335
from bqskit.ir.gates.constant.sx import SqrtXGate
@@ -57,6 +59,7 @@
5759
'CXGate',
5860
'CYGate',
5961
'CZGate',
62+
'ECRGate',
6063
'HGate',
6164
'IdentityGate',
6265
'ISwapGate',
@@ -71,6 +74,7 @@
7174
'ShiftGate',
7275
'SqrtCNOTGate',
7376
'SqrtISwapGate',
77+
'SqrtTGate',
7478
'SubSwapGate',
7579
'SwapGate',
7680
'SqrtXGate',

bqskit/ir/gates/constant/ecr.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
"""This module implements the ECRGate."""
2+
from __future__ import annotations
3+
4+
import math
5+
6+
from bqskit.ir.gates.constantgate import ConstantGate
7+
from bqskit.ir.gates.qubitgate import QubitGate
8+
from bqskit.qis.unitary.unitarymatrix import UnitaryMatrix
9+
10+
11+
class ECRGate(ConstantGate, QubitGate):
12+
"""
13+
The echoed cross-resonance gate (ECR).
14+
15+
The ECR gate is given by the following unitary:
16+
17+
.. math::
18+
19+
\\frac{1}{\\sqrt{2}}
20+
\\begin{pmatrix}
21+
0 & 1 & 0 & i \\\\
22+
1 & 0 & -i & 0 \\\\
23+
0 & i & 0 & 1 \\\\
24+
-i & 0 & 1 & 0
25+
\\end{pmatrix}
26+
"""
27+
_name = 'ecr'
28+
_num_qudits = 2
29+
_qasm_name = 'ecr'
30+
_utry = UnitaryMatrix([
31+
[0, 0, 1 * 1 / math.sqrt(2), 1j * 1 / math.sqrt(2)],
32+
[0, 0, 1j * 1 / math.sqrt(2), 1 * 1 / math.sqrt(2)],
33+
[1 * 1 / math.sqrt(2), -1j * 1 / math.sqrt(2), 0, 0],
34+
[-1j * 1 / math.sqrt(2), 1 * 1 / math.sqrt(2), 0, 0],
35+
])
36+
37+
def __init__(self) -> None:
38+
pass
39+
40+
def get_qasm_gate_def(self) -> str:
41+
qasm_rzx = (
42+
'gate rzx(param0) q0,q1 {'
43+
'h q1;'
44+
'cx q0,q1;'
45+
'rz(param0) q1;'
46+
'cx q0,q1;'
47+
'h q1; }'
48+
)
49+
qasm_ecr = 'gate ecr q0,q1 { rzx(pi/4) q0,q1; x q0; rzx(-pi/4) q0,q1; }'
50+
return qasm_rzx + '\n' + qasm_ecr

bqskit/ir/gates/constant/sqrtt.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
"""This module implements the SqrtTGate."""
2+
from __future__ import annotations
3+
4+
import cmath
5+
6+
from bqskit.ir.gates.constantgate import ConstantGate
7+
from bqskit.ir.gates.qubitgate import QubitGate
8+
from bqskit.qis.unitary.unitarymatrix import UnitaryMatrix
9+
10+
11+
class SqrtTGate(ConstantGate, QubitGate):
12+
"""
13+
The single-qubit square root T gate.
14+
15+
.. math::
16+
17+
\\begin{pmatrix}
18+
1 & 0 \\\\
19+
0 & e^{i\\frac{\\pi}{8}} \\\\
20+
\\end{pmatrix}
21+
"""
22+
23+
_num_qudits = 1
24+
_qasm_name = 'st'
25+
_utry = UnitaryMatrix(
26+
[
27+
[1, 0],
28+
[0, cmath.exp(1j * cmath.pi / 8)],
29+
],
30+
)

bqskit/ir/gates/parameterized/u8.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -91,12 +91,12 @@ def get_grad(self, params: RealVector = []) -> npt.NDArray[np.complex128]:
9191
[ # wrt params[0]
9292
[-s1 * c2 * p1, c1 * p3, -s1 * s2 * p4],
9393
[
94-
-c1 * c2 * c3 * p1 * p2 * m3, -s1 * \
95-
c3 * p2, -c1 * s2 * c3 * p2 * m3 * p4,
94+
-c1 * c2 * c3 * p1 * p2 * m3, -s1 * c3 * p2,
95+
-c1 * s2 * c3 * p2 * m3 * p4,
9696
],
9797
[
98-
-c1 * c2 * s3 * p1 * m3 * p5, -s1 * \
99-
s3 * p5, -c1 * s2 * s3 * m3 * p4 * p5,
98+
-c1 * c2 * s3 * p1 * m3 * p5, -s1 * s3 * p5,
99+
-c1 * s2 * s3 * m3 * p4 * p5,
100100
],
101101
],
102102

@@ -142,8 +142,8 @@ def get_grad(self, params: RealVector = []) -> npt.NDArray[np.complex128]:
142142
[ # wrt params[4]
143143
[0, 0, 0],
144144
[
145-
-1j * s1 * c2 * c3 * p1 * p2 * m3, 1j * c1 * \
146-
c3 * p2, -1j * s1 * s2 * c3 * p2 * m3 * p4,
145+
-1j * s1 * c2 * c3 * p1 * p2 * m3, 1j * c1 * c3 * p2,
146+
-1j * s1 * s2 * c3 * p2 * m3 * p4,
147147
],
148148
[1j * s2 * c3 * m2 * m4, 0, -1j * c2 * c3 * m1 * m2],
149149
],
@@ -178,8 +178,8 @@ def get_grad(self, params: RealVector = []) -> npt.NDArray[np.complex128]:
178178
[0, 0, 0],
179179
[-1j * s2 * s3 * m4 * m5, 0, 1j * c2 * s3 * m1 * m5],
180180
[
181-
-1j * s1 * c2 * s3 * p1 * m3 * p5, 1j * c1 * \
182-
s3 * p5, -1j * s1 * s2 * s3 * m3 * p4 * p5,
181+
-1j * s1 * c2 * s3 * p1 * m3 * p5, 1j * c1 * s3 * p5,
182+
-1j * s1 * s2 * s3 * m3 * p4 * p5,
183183
],
184184
],
185185
],

bqskit/ir/lang/qasm2/visitor.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
from bqskit.ir.gates.constant.cx import CXGate
2929
from bqskit.ir.gates.constant.cy import CYGate
3030
from bqskit.ir.gates.constant.cz import CZGate
31+
from bqskit.ir.gates.constant.ecr import ECRGate
3132
from bqskit.ir.gates.constant.h import HGate
3233
from bqskit.ir.gates.constant.identity import IdentityGate
3334
from bqskit.ir.gates.constant.iswap import ISwapGate
@@ -221,6 +222,7 @@ def fill_gate_defs(self) -> None:
221222
self.gate_defs['CX'] = GateDef('CX', 0, 2, CXGate())
222223
self.gate_defs['cy'] = GateDef('cy', 0, 2, CYGate())
223224
self.gate_defs['cz'] = GateDef('cz', 0, 2, CZGate())
225+
self.gate_defs['ecr'] = GateDef('ecr', 0, 2, ECRGate())
224226
self.gate_defs['h'] = GateDef('h', 0, 1, HGate())
225227
self.gate_defs['id'] = GateDef('id', 0, 1, IdentityGate(1))
226228
self.gate_defs['u0'] = GateDef('u0', 0, 1, IdentityGate(1))

bqskit/passes/__init__.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@
129129
PAMRoutingPass
130130
EmbedAllPermutationsPass
131131
ExtractModelConnectivityPass
132-
RestoreModelConnevtivityPass
132+
RestoreModelConnectivityPass
133133
134134
135135
.. rubric:: PAM Verification Passes
@@ -234,11 +234,12 @@
234234
from bqskit.passes.mapping.layout.pam import PAMLayoutPass
235235
from bqskit.passes.mapping.layout.sabre import GeneralizedSabreLayoutPass
236236
from bqskit.passes.mapping.placement.greedy import GreedyPlacementPass
237+
from bqskit.passes.mapping.placement.static import StaticPlacementPass
237238
from bqskit.passes.mapping.placement.trivial import TrivialPlacementPass
238239
from bqskit.passes.mapping.routing.pam import PAMRoutingPass
239240
from bqskit.passes.mapping.routing.sabre import GeneralizedSabreRoutingPass
240241
from bqskit.passes.mapping.setmodel import ExtractModelConnectivityPass
241-
from bqskit.passes.mapping.setmodel import RestoreModelConnevtivityPass
242+
from bqskit.passes.mapping.setmodel import RestoreModelConnectivityPass
242243
from bqskit.passes.mapping.setmodel import SetModelPass
243244
from bqskit.passes.mapping.topology import SubtopologySelectionPass
244245
from bqskit.passes.mapping.verify import CalculatePAMErrorsPass
@@ -364,6 +365,7 @@
364365
'GeneralizedSabreLayoutPass',
365366
'GreedyPlacementPass',
366367
'TrivialPlacementPass',
368+
'StaticPlacementPass',
367369
'GeneralizedSabreRoutingPass',
368370
'SetModelPass',
369371
'U3Decomposition',
@@ -398,7 +400,7 @@
398400
'GeneralSQDecomposition',
399401
'StructureAnalysisPass',
400402
'ExtractModelConnectivityPass',
401-
'RestoreModelConnevtivityPass',
403+
'RestoreModelConnectivityPass',
402404
'TagPAMBlockDataPass',
403405
'CalculatePAMErrorsPass',
404406
'UnTagPAMBlockDataPass',

bqskit/passes/mapping/__init__.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@
66
from bqskit.passes.mapping.layout.pam import PAMLayoutPass
77
from bqskit.passes.mapping.layout.sabre import GeneralizedSabreLayoutPass
88
from bqskit.passes.mapping.placement.greedy import GreedyPlacementPass
9+
from bqskit.passes.mapping.placement.static import StaticPlacementPass
910
from bqskit.passes.mapping.placement.trivial import TrivialPlacementPass
1011
from bqskit.passes.mapping.routing.pam import PAMRoutingPass
1112
from bqskit.passes.mapping.routing.sabre import GeneralizedSabreRoutingPass
1213
from bqskit.passes.mapping.setmodel import ExtractModelConnectivityPass
13-
from bqskit.passes.mapping.setmodel import RestoreModelConnevtivityPass
14+
from bqskit.passes.mapping.setmodel import RestoreModelConnectivityPass
1415
from bqskit.passes.mapping.setmodel import SetModelPass
1516
from bqskit.passes.mapping.topology import SubtopologySelectionPass
1617
from bqskit.passes.mapping.verify import CalculatePAMErrorsPass
@@ -22,6 +23,7 @@
2223
'GeneralizedSabreLayoutPass',
2324
'GreedyPlacementPass',
2425
'TrivialPlacementPass',
26+
'StaticPlacementPass',
2527
'GeneralizedSabreRoutingPass',
2628
'SetModelPass',
2729
'ApplyPlacement',
@@ -30,7 +32,7 @@
3032
'EmbedAllPermutationsPass',
3133
'SubtopologySelectionPass',
3234
'ExtractModelConnectivityPass',
33-
'RestoreModelConnevtivityPass',
35+
'RestoreModelConnectivityPass',
3436
'TagPAMBlockDataPass',
3537
'CalculatePAMErrorsPass',
3638
'UnTagPAMBlockDataPass',

bqskit/passes/mapping/placement/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from __future__ import annotations
88

99
from bqskit.passes.mapping.placement.greedy import GreedyPlacementPass
10+
from bqskit.passes.mapping.placement.static import StaticPlacementPass
1011
from bqskit.passes.mapping.placement.trivial import TrivialPlacementPass
1112

12-
__all__ = ['GreedyPlacementPass', 'TrivialPlacementPass']
13+
__all__ = ['GreedyPlacementPass', 'TrivialPlacementPass', 'StaticPlacementPass']

0 commit comments

Comments
 (0)