Source code for wavefunction_analysis.spins.circuit

from wavefunction_analysis import itertools
from wavefunction_analysis.spins import cirq, cirq_google

from cirq.contrib.svg import SVGCircuit

[docs] def create_qubits_2d(nrow, ncol): """Initialize qubits in a 2D grid.""" return [[cirq.GridQubit(r, c) for c in range(ncol)] for r in range(nrow)]
[docs] def create_circuit(qubits, gamma=None, beta=None, **kwargs): """ Create a quantum circuit with Hadamard gates on each qubit for equal superposition as real initial state. gamma: 𝛾 symbol holder as a parameter for U(gamma, C) operator beta: ß symbol holder as a parameter for U(beta, B) operator h: 2D array of magnetic field values return: cirq.Circuit object """ circuit = cirq.Circuit(cirq.H.on_each(qubits)) if gamma: # U(gamma, C) operator h = kwargs['h_field'] circuit.append(gamma_layer(qubits, gamma, h)) if beta: # U(beta, B) operator circuit.append(beta_layer(qubits, beta), strategy=cirq.InsertStrategy.NEW_THEN_INLINE) return circuit
[docs] def gamma_layer(qubits, gamma, h): """Define the gamma layer of the circuit.""" nrow, ncol = len(qubits), len(qubits[0]) for (r, c) in itertools.product(range(nrow), range(ncol)): if r < nrow - 1: yield cirq.ZZ(qubits[r][c], qubits[r+1][c]) ** gamma if c < ncol - 1: yield cirq.ZZ(qubits[r][c], qubits[r][c+1]) ** gamma yield cirq.Z(qubits[r][c]) ** (gamma * h[r,c])
[docs] def beta_layer(qubits, beta): """Define the beta layer of the circuit.""" nrow, ncol = len(qubits), len(qubits[0]) for (r, c) in itertools.product(range(nrow), range(ncol)): yield cirq.X(qubits[r][c]) ** beta
if __name__ == '__main__': circuit = cirq.Circuit() q0 = cirq.GridQubit.square(5) print('q0:', q0) circuit.append(cirq.H(q) for q in q0) print(circuit)