Skip to content

Commit 72ca63b

Browse files
author
pablolh
committed
Cap number of significant digits in writer
Fix integration test accordingly
1 parent 2445937 commit 72ca63b

File tree

2 files changed

+39
-29
lines changed

2 files changed

+39
-29
lines changed

opensquirrel/Writer.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,22 @@
33

44

55
class Writer:
6+
NUMBER_OF_SIGNIFICANT_DIGITS = 8
7+
68
def __init__(self, gates):
79
self.gates = gates
810

11+
@classmethod
12+
def _format_arg(cls, squirrelAST, arg, t: ArgType):
13+
if t == ArgType.QUBIT:
14+
return f"{squirrelAST.qubitRegisterName}[{arg}]"
15+
if t == ArgType.INT:
16+
return f"{int(arg)}"
17+
if t == ArgType.FLOAT:
18+
return f"{float(arg):.{Writer.NUMBER_OF_SIGNIFICANT_DIGITS}}"
19+
20+
assert False, "Unknown argument type"
21+
922
def process(self, squirrelAST):
1023
output = ""
1124
output += f"""version 3.0\n\nqubit[{squirrelAST.nQubits}] {squirrelAST.qubitRegisterName}\n\n"""
@@ -21,10 +34,7 @@ def process(self, squirrelAST):
2134
gateName, gateArgs = operation
2235
signature = querySignature(self.gates, gateName)
2336

24-
args = [
25-
f"{squirrelAST.qubitRegisterName}[{arg}]" if t == ArgType.QUBIT else f"{arg}"
26-
for arg, t in zip(gateArgs, signature)
27-
]
37+
args = [Writer._format_arg(squirrelAST, arg, t) for arg, t in zip(gateArgs, signature)]
2838

2939
output += f"{gateName} {', '.join(args)}\n"
3040

test/test_integration.py

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -48,26 +48,26 @@ def test_simple(self):
4848
4949
qubit[3] qreg
5050
51-
rz qreg[0], 3.141592653589793
51+
rz qreg[0], 3.1415927
5252
x90 qreg[0]
53-
rz qreg[0], 1.9115926535897927
53+
rz qreg[0], 1.9115927
5454
x90 qreg[0]
55-
rz qreg[1], 3.141592653589793
55+
rz qreg[1], 3.1415927
5656
x90 qreg[1]
57-
rz qreg[1], 2.37238898038469
57+
rz qreg[1], 2.372389
5858
x90 qreg[1]
59-
rz qreg[1], 3.141592653589793
59+
rz qreg[1], 3.1415927
6060
cz qreg[0], qreg[1]
61-
rz qreg[1], 3.141592653589793
61+
rz qreg[1], 3.1415927
6262
x90 qreg[1]
63-
rz qreg[1], 1.57238898038469
63+
rz qreg[1], 1.572389
6464
x90 qreg[1]
65-
rz qreg[1], 3.141592653589793
66-
rz qreg[0], 1.5707963267948966
65+
rz qreg[1], 3.1415927
66+
rz qreg[0], 1.5707963
6767
x90 qreg[0]
68-
rz qreg[0], 0.8415926535897933
68+
rz qreg[0], 0.84159265
6969
x90 qreg[0]
70-
rz qreg[0], 1.5707963267948966
70+
rz qreg[0], 1.5707963
7171
""",
7272
)
7373

@@ -91,15 +91,15 @@ def test_qi(self):
9191
H q[2]
9292
H q[1]
9393
H q[0]
94-
RZ q[0], 1.5707963267949
94+
RZ q[0], 1.5707963
9595
RY q[0], -0.2
9696
cnot q[1], q[0]
9797
RZ q[0], 1.5789
9898
cnot q[1], q[0]
9999
cnot q[1], q[2]
100-
RZ q[1], 2.5707963267949
100+
RZ q[1], 2.5707963
101101
cr q[2], q[3], 2.123
102-
RY q[1], -1.5707963267949
102+
RY q[1], -1.5707963
103103
104104
""",
105105
)
@@ -112,30 +112,30 @@ def test_qi(self):
112112
qubit[4] q
113113
114114
x90 q[1]
115-
rz q[1], 1.5707963267948966
115+
rz q[1], 1.5707963
116116
x90 q[1]
117-
rz q[0], -0.20000000000000018
117+
rz q[0], -0.2
118118
x90 q[0]
119-
rz q[0], 1.5707963267948957
119+
rz q[0], 1.5707963
120120
x90 q[0]
121-
rz q[0], 1.5707963267949
121+
rz q[0], 1.5707963
122122
cnot q[1], q[0]
123-
rz q[0], -2.352142653589793
123+
rz q[0], -2.3521427
124124
x90 q[0]
125-
rz q[0], 3.141592653589793
125+
rz q[0], 3.1415927
126126
x90 q[0]
127-
rz q[0], 0.7894500000000004
127+
rz q[0], 0.78945
128128
cnot q[1], q[0]
129129
x90 q[2]
130-
rz q[2], 1.5707963267948966
130+
rz q[2], 1.5707963
131131
x90 q[2]
132132
cnot q[1], q[2]
133133
cr q[2], q[3], 2.123
134-
rz q[1], 2.5707963267949
134+
rz q[1], 2.5707963
135135
x90 q[1]
136-
rz q[1], 1.570796326794893
136+
rz q[1], 1.5707964
137137
x90 q[1]
138-
rz q[1], 3.141592653589793
138+
rz q[1], 3.1415927
139139
"""
140140

141141
self.assertEqual(output, expected)

0 commit comments

Comments
 (0)