Circuit Ansatz

One might wish to provide a completely custom circuit, and use it as an InQuanto ansatz (e.g. in order to use it in InQuanto Algorithms). This is possible by simply passing a pytket Circuit object to a CircuitAnsatz constructor.

For example, for minimal basis H2 , one could recover the FCI energy with the following custom circuit:

from pytket import circuit
from sympy import Symbol
from math import pi

circ = circuit.Circuit(4)
circ.X(0)
circ.X(1)
circ.CX(0, 1)
circ.CX(0, 2)
circ.CX(0, 3)
circ.V(0)

# Add custom block, of redefined Rz
theta = Symbol('\theta')
subcirc = circuit.Circuit(1)
subcirc.Rz(theta+pi, 0)
R = circuit.CustomGateDef.define("R", subcirc, [theta])
theta_index = circuit.fresh_symbol(r't_0')
circ.add_custom_gate(R, [theta_index], [0])

circ.Vdg(0)
circ.CX(0, 3)
circ.CX(0, 2)
circ.CX(0, 1)
circ.V(0); circ.V(1); circ.V(2); circ.V(3)
circ.S(0); circ.S(1); circ.S(2); circ.S(3)
circ.H(0); circ.H(1); circ.H(2); circ.H(3)
circ.S(0); circ.S(1); circ.S(2); circ.S(3)

from inquanto.ansatzes import CircuitAnsatz

my_ansatz = CircuitAnsatz(circ)