Skip to content

Commit c5d51d6

Browse files
authored
minor fixup spex backend (#381)
* import error in spex backend * spex-backend: error in hadamard compiling * test_gradients: samplers/simulators missmatch
1 parent ef2e2df commit c5d51d6

File tree

2 files changed

+25
-11
lines changed

2 files changed

+25
-11
lines changed

src/tequila/simulators/simulator_spex.py

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
from tequila.wavefunction.qubit_wavefunction import QubitWaveFunction
33
from tequila.utils import TequilaException
44
from tequila.hamiltonian import PauliString
5-
from tequila.circuit._gates_impl import ExponentialPauliGateImpl, QGateImpl, RotationGateImpl, QubitHamiltonian, QubitExcitationImpl
5+
from tequila.circuit._gates_impl import ExponentialPauliGateImpl, QGateImpl, RotationGateImpl, QubitHamiltonian
6+
from tequila.circuit.gates import QubitExcitationImpl
67
from tequila import BitNumbering
78

89

@@ -218,15 +219,28 @@ def add_basic_gate(self, gate, circuit, *args, **kwargs):
218219
self.add_basic_gate(sub_gate, circuit, *args, **kwargs)
219220

220221
elif isinstance(gate, QGateImpl):
221-
# Convert standard gates to Pauli rotations
222-
for ps in gate.make_generator(include_controls=True).paulistrings:
223-
angle = numpy.pi * ps.coeff
224-
if self.angle_threshold is not None and abs(angle) < self.angle_threshold:
225-
continue
226-
exp_term = spex_tequila.ExpPauliTerm()
227-
exp_term.pauli_map = dict(ps.items())
228-
exp_term.angle = angle
229-
circuit.append(exp_term)
222+
if gate.name.lower() in ["x","y","z"]:
223+
# Convert standard gates to Pauli rotations
224+
for ps in gate.make_generator(include_controls=True).paulistrings:
225+
angle = numpy.pi * ps.coeff
226+
if self.angle_threshold is not None and abs(angle) < self.angle_threshold:
227+
continue
228+
exp_term = spex_tequila.ExpPauliTerm()
229+
exp_term.pauli_map = dict(ps.items())
230+
exp_term.angle = angle
231+
circuit.append(exp_term)
232+
elif gate.name.lower() in ["h", "hadamard"]:
233+
assert len(gate.target)==1
234+
target = gate.target[0]
235+
for ps in ["-0.25*Y({q})", "Z({q})", "0.25*Y({q})"]:
236+
ps = QubitHamiltonian(ps.format(q=gate.target[0])).paulistrings[0]
237+
angle = numpy.pi * ps.coeff
238+
exp_term = spex_tequila.ExpPauliTerm()
239+
exp_term.pauli_map = dict(ps.items())
240+
exp_term.angle = angle
241+
circuit.append(exp_term)
242+
else:
243+
raise TequilaSpexException("{} not supported. Only x,y,z,h".format(gate.name.lower()))
230244

231245
else:
232246
raise TequilaSpexException(f"Unsupported gate object type: {type(gate)}. "

tests/test_gradient.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ def test_gradient_UY_HX(simulator, angle_value, controlled, assume_real, silent=
9292
print("cos(angle)=", numpy.cos(angle()))
9393

9494

95-
@pytest.mark.parametrize("simulator", simulators)
95+
@pytest.mark.parametrize("simulator", samplers)
9696
@pytest.mark.parametrize("controlled", [False, True])
9797
@pytest.mark.parametrize("assume_real", [False, True])
9898
@pytest.mark.parametrize("angle_value", numpy.random.uniform(0.0, 2.0 * numpy.pi, 1))

0 commit comments

Comments
 (0)