Closed AdrianPerezSalinas closed 2 years ago
Could you provide the cirq
circuit? I want to reproduce the error.
HI, please find the code below. It is self contained, only the openfermion and cirq libraries are needed
import cirq
import openfermion
from openfermion import FermionOperator
import numpy as np
from qibo.models import Circuit as qibo_Circuit
def hopping_hor_hex(n_hex_x, n_hex_y):
hopping_h = FermionOperator()
num_sites = (n_hex_y+1)*(4*n_hex_x+4)-4
jmax = (n_hex_y+1)*(2*n_hex_x+2)-2-1
for j in range(jmax):
# skips vertical links
if np.mod(j+2, 2*n_hex_x+2) != 0:
i_up = 2*j
i_down = 2*j+1
hopping_h += (
FermionOperator( ((i_up, 1), (i_up+2, 0)) )
+ FermionOperator( ((i_up+2, 1), (i_up, 0)) )
+ FermionOperator( ((i_down, 1), (i_down+2, 0)) )
+ FermionOperator( ((i_down+2, 1), (i_down, 0)) ) )
return hopping_h
def hopping_ver_hex(n_hex_x, n_hex_y):
hopping_v = FermionOperator()
i_up_1 = 0
i_up_2 = 2*(4*n_hex_x+2)-1
i_down_1 = i_up_1 + 1
i_down_2 = i_up_2 - 1
for j in range(n_hex_y*(n_hex_x+1)):
hopping_v += (
FermionOperator( ((i_up_1, 1), (i_up_2, 0)) )
+ FermionOperator( ((i_up_2, 1), (i_up_1, 0)) )
+ FermionOperator( ((i_down_1, 1), (i_down_2, 0)) )
+ FermionOperator( ((i_down_2, 1), (i_down_1, 0)) ) )
if i_up_2-i_up_1 == 3:
i_up_1 += 4
i_up_2 += 2*(4*n_hex_x+2)
else:
i_up_1 += 4
i_up_2 -= 4
i_down_1 = i_up_1 + 1
i_down_2 = i_up_2 - 1
return hopping_v
def hopping_hex(n_hex_x, n_hex_y, t):
H_tb = t * (hopping_hor_hex(n_hex_x, n_hex_y) + hopping_ver_hex(n_hex_x, n_hex_y))
return H_tb
H_tb = hopping_hex(1, 1, 1)
ham = openfermion.get_quadratic_hamiltonian(H_tb)
circuit_ground = cirq.Circuit(
openfermion.prepare_gaussian_state(cirq.LineQubit.range(openfermion.count_qubits(ham)), ham))
qasm_circuit = circuit_ground.to_qasm()
adiabatic_circuit = qibo_Circuit.from_qasm(qasm_circuit)
I can reproduce the error with Cirq v0.13.1 and OpenFermion v1.3.0. The problem disappears with Cirq v0.11.1 and OpeFermion v1.1.0. Let's inspect the openQASM circuits generated by your code snippet:
If you take a look at the diff between the two circuits:
You can see that there are different gates, in particular rz(pi*-0.5)
becomes sdg
, which I guess is S^dagger.
Such gate is not supported by Qibo.
Do you know if sdg
is a standard openQASM gate (then we should add it to Qibo, I guess)?
Actually, it seems like sdg
is indeed a standard oepnQASM gate
https://github.com/Qiskit/openqasm/blob/2.0/examples/qelib1.inc
@stavros11 shall we add it to Qibo?
When translating a circuit from the
cirq
library to Qibo via a QASM module, I find this errorand the full message is
The error appears when the code is run on python3.8, but not on python3.6, which surprises me since 3.6 was already deprecated from qibo
Is this a big problem?