diff --git a/pygsti/circuits/circuit.py b/pygsti/circuits/circuit.py index 25cbdd923..39725a231 100644 --- a/pygsti/circuits/circuit.py +++ b/pygsti/circuits/circuit.py @@ -4250,6 +4250,9 @@ def convert_to_openqasm(self, num_qubits=None, # Include a delay instruction openqasm += 'opaque delay(t) q;\n\n' + # Add a template for ECR commands that we will replace/remove later + openqasm += "ECRPLACEHOLDER" + openqasm += 'qreg q[{0}];\n'.format(str(num_qubits)) # openqasm += 'creg cr[{0}];\n'.format(str(num_qubits)) openqasm += 'creg cr[{0}];\n'.format(str(num_qubits + num_IMs)) @@ -4349,6 +4352,13 @@ def convert_to_openqasm(self, num_qubits=None, # openqasm += "measure q[{0}] -> cr[{1}];\n".format(str(qubit_conversion[q]), str(qubit_conversion[q])) openqasm += "measure q[{0}] -> cr[{1}];\n".format(str(qubit_conversion[q]), str(num_IMs_used + qubit_conversion[q])) + + # Replace ECR placeholder + ecr_replace_str = "" + if 'ecr' in openqasm: + ecr_replace_str = "gate rzx(param0) q0,q1 { h q1; cx q0,q1; rz(param0) q1; cx q0,q1; h q1; }\n" + ecr_replace_str += "gate ecr q0,q1 { rzx(pi/4) q0,q1; x q0; rzx(-pi/4) q0,q1; }\n\n" + openqasm = openqasm.replace("ECRPLACEHOLDER", ecr_replace_str) return openqasm diff --git a/pygsti/tools/internalgates.py b/pygsti/tools/internalgates.py index ec4a92f0d..5af7e0574 100644 --- a/pygsti/tools/internalgates.py +++ b/pygsti/tools/internalgates.py @@ -729,6 +729,8 @@ def standard_gatenames_openqasm_conversions(version='u3'): std_gatenames_to_qasm['Gc22'] = ['u3(1.570796326794897, 1.570796326794897, 1.570796326794897)'] # [1,1,1]*pi/2 std_gatenames_to_qasm['Gc23'] = ['u3(0, 0, 4.71238898038469)'] # [0, 0, 3] * pi/2 (this is Gzmpi2 / Gpdag) + std_gatenames_to_qasm['Gecr'] = ['ecr'] + std_gatenames_to_argmap = {} std_gatenames_to_argmap['Gzr'] = lambda gatearg: ['u3(0, 0, ' + str(gatearg[0]) + ')'] std_gatenames_to_argmap['Gczr'] = lambda gatearg: ['crz(' + str(gatearg[0]) + ')'] @@ -782,6 +784,8 @@ def standard_gatenames_openqasm_conversions(version='u3'): std_gatenames_to_qasm['Gt'] = ['rz(0.7853981633974485)'] std_gatenames_to_qasm['Gtdag'] = ['rz(5.497787143782138)'] + std_gatenames_to_qasm['Gecr'] = ['ecr'] + std_gatenames_to_argmap = {} std_gatenames_to_argmap['Gzr'] = lambda gatearg: ['rz(' + str(gatearg[0]) + ')'] std_gatenames_to_argmap['Gczr'] = lambda gatearg: ['crz(' + str(gatearg[0]) + ')']