def operations(self, qubits: Sequence[cirq.Qid]) -> cirq.OP_TREE:
        """Produce the operations of the ansatz circuit."""

        for i in range(self.iterations):

            # Apply one- and two-body interactions with a swap network that
            # reverses the order of the modes
            def one_and_two_body_interaction(p, q, a, b) -> cirq.OP_TREE:
                th_symbol = LetterWithSubscripts('Th', i)
                tv_symbol = LetterWithSubscripts('Tv', i)
                v_symbol = LetterWithSubscripts('V', i)
                if _is_horizontal_edge(
                        p, q, self.x_dim, self.y_dim, self.periodic):
                    yield cirq.ISwapPowGate(exponent=-th_symbol).on(a, b)
                if _is_vertical_edge(
                        p, q, self.x_dim, self.y_dim, self.periodic):
                    yield cirq.ISwapPowGate(exponent=-tv_symbol).on(a, b)
                if _are_same_site_opposite_spin(p, q, self.x_dim*self.y_dim):
                    yield cirq.CZPowGate(exponent=v_symbol).on(a, b)
            yield swap_network(
                    qubits, one_and_two_body_interaction, fermionic=True)
            qubits = qubits[::-1]

            # Apply one- and two-body interactions again. This time, reorder
            # them so that the entire iteration is symmetric
            def one_and_two_body_interaction_reversed_order(p, q, a, b
                    ) -> cirq.OP_TREE:
                th_symbol = LetterWithSubscripts('Th', i)
                tv_symbol = LetterWithSubscripts('Tv', i)
                v_symbol = LetterWithSubscripts('V', i)
                if _are_same_site_opposite_spin(p, q, self.x_dim*self.y_dim):
                    yield cirq.CZPowGate(exponent=v_symbol).on(a, b)
                if _is_vertical_edge(
                        p, q, self.x_dim, self.y_dim, self.periodic):
                    yield cirq.ISwapPowGate(exponent=-tv_symbol).on(a, b)
                if _is_horizontal_edge(
                        p, q, self.x_dim, self.y_dim, self.periodic):
                    yield cirq.ISwapPowGate(exponent=-th_symbol).on(a, b)
            yield swap_network(
                    qubits, one_and_two_body_interaction_reversed_order,
                    fermionic=True, offset=True)
            qubits = qubits[::-1]