Skip to content

Commit b2a5a33

Browse files
committed
Native support for sx and csx gates in qasm and qiskit
1 parent de762f3 commit b2a5a33

File tree

1 file changed

+10
-46
lines changed

1 file changed

+10
-46
lines changed

lib/quantum-circuit.js

Lines changed: 10 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -325,18 +325,10 @@ var QuantumCircuit = function(numQubits) {
325325
[["-1/sqrt(2)", "0"],["1/sqrt(2)", "0"]]]
326326
},
327327
qasm: {
328-
replacement: [
329-
{ name: "h", params: { }},
330-
{ name: "rx", params: { theta: "-1*pi/2" }},
331-
{ name: "u1", params: { lambda: "-1*pi/2" }}
332-
]
328+
name: "sx"
333329
},
334330
qiskit: {
335-
replacement: [
336-
{ name: "h", params: { }},
337-
{ name: "rx", params: { theta: "-1*pi/2" }},
338-
{ name: "u1", params: { lambda: "-1*pi/2" }}
339-
]
331+
name: "sx"
340332
},
341333
braket: {
342334
name: "v"
@@ -1413,42 +1405,10 @@ var QuantumCircuit = function(numQubits) {
14131405
defgate: "DEFGATE csrn:\n 1, 0, 0, 0\n 0, 1, 0, 0\n 0, 0, 0.5+0.5i, 0.5-0.5i\n 0, 0, 0.5-0.5i, 0.5+0.5i"
14141406
},
14151407
qasm: {
1416-
equivalent: [
1417-
{ name: "rz", params: { phi: "-1*pi/4"}, wires: [0] },
1418-
{ name: "rx", params: { theta: "pi/2"}, wires: [0] },
1419-
{ name: "rz", params: { phi: "-1*pi/2"}, wires: [1] },
1420-
{ name: "rx", params: { theta: "pi/2"}, wires: [1] },
1421-
{ name: "rz", params: { phi: "3*pi/4"}, wires: [1] },
1422-
{ name: "rx", params: { theta: "pi"}, wires: [1] },
1423-
{ name: "cz", wires: [0, 1] },
1424-
{ name: "rx", params: { theta: "pi/2"}, wires: [0] },
1425-
{ name: "rz", params: { phi: "pi/4"}, wires: [0] },
1426-
{ name: "rx", params: { theta: "-1*pi/2"}, wires: [0] },
1427-
{ name: "cz", wires: [0, 1] },
1428-
{ name: "rx", params: { theta: "-1*pi/2"}, wires: [0] },
1429-
{ name: "rz", params: { phi: "pi/2"}, wires: [0] },
1430-
{ name: "rx", params: { theta: "-1*pi/2"}, wires: [1] },
1431-
{ name: "rz", params: { phi: "-1*pi/2"}, wires: [1] }
1432-
]
1408+
name: "csx"
14331409
},
14341410
qiskit: {
1435-
equivalent: [
1436-
{ name: "rz", params: { phi: "-1*pi/4"}, wires: [0] },
1437-
{ name: "rx", params: { theta: "pi/2"}, wires: [0] },
1438-
{ name: "rz", params: { phi: "-1*pi/2"}, wires: [1] },
1439-
{ name: "rx", params: { theta: "pi/2"}, wires: [1] },
1440-
{ name: "rz", params: { phi: "3*pi/4"}, wires: [1] },
1441-
{ name: "rx", params: { theta: "pi"}, wires: [1] },
1442-
{ name: "cz", wires: [0, 1] },
1443-
{ name: "rx", params: { theta: "pi/2"}, wires: [0] },
1444-
{ name: "rz", params: { phi: "pi/4"}, wires: [0] },
1445-
{ name: "rx", params: { theta: "-1*pi/2"}, wires: [0] },
1446-
{ name: "cz", wires: [0, 1] },
1447-
{ name: "rx", params: { theta: "-1*pi/2"}, wires: [0] },
1448-
{ name: "rz", params: { phi: "pi/2"}, wires: [0] },
1449-
{ name: "rx", params: { theta: "-1*pi/2"}, wires: [1] },
1450-
{ name: "rz", params: { phi: "-1*pi/2"}, wires: [1] }
1451-
]
1411+
name: "csx"
14521412
},
14531413
pyquil: {
14541414
name: "csrn",
@@ -7979,11 +7939,14 @@ QuantumCircuit.prototype.exportToQASM = function(options, exportAsGateName, circ
79797939
var qasmEquivalent = null;
79807940

79817941
if(gate && gate.connector == 0) {
7942+
var qasmName = gate.name;
79827943
if(!compatibilityMode) {
79837944
var gateDef = circuit.getGateDef(gate.name);
79847945
if(gateDef){
79857946
if(gateDef.exportInfo){
7986-
if(gateDef.exportInfo.qasm && gateDef.exportInfo.qasm.replacement) {
7947+
if(gateDef.exportInfo.qasm && gateDef.exportInfo.qasm.name) {
7948+
qasmName = gateDef.exportInfo.qasm.name;
7949+
} else if(gateDef.exportInfo.qasm && gateDef.exportInfo.qasm.replacement) {
79877950
qasmReplacement = gateDef.exportInfo.qasm.replacement;
79887951
qasmReplacement.map(function(replacement){
79897952
var replacementCircuit = new QuantumCircuit();
@@ -8061,7 +8024,8 @@ QuantumCircuit.prototype.exportToQASM = function(options, exportAsGateName, circ
80618024
}
80628025

80638026
if((!qasmReplacement && !qasmEquivalent) || compatibilityMode) {
8064-
var gateName = gate.name;
8027+
var gateName = compatibilityMode ? gate.name : qasmName;
8028+
80658029
var gateParams = gate.options && gate.options.params ? gate.options.params : {};
80668030
qasm += gateName;
80678031
if(gateParams) {

0 commit comments

Comments
 (0)