tfq.datasets.xxz_chain

1D XXZ model quantum data set.

Used in the notebooks

Used in the tutorials

\[ H = \sum_{i} \sigma_i^x \sigma_{i+1}^x + \sigma_i^y \sigma_{i+1}^y + \Delta\sigma_i^z \sigma_{i+1}^z \]

Contains 76 circuit parameterizations corresponding to the ground states of the 1D XXZ chain for g in [0.3,1.8]. This dataset contains 76 datapoints. Each datapoint is represented by a circuit (cirq.Circuit), a label (Python float) a Hamiltonian (cirq.PauliSum) and some additional metadata. Each Hamiltonian in a datapoint is a 1D XXZ chain with boundary condition boundary_condition on qubits whos order parameter dictates the value of label. The circuit in a datapoint prepares (an approximation to) the ground state of the Hamiltonian in the datapoint.

Example usage:

qbs = cirq.GridQubit.rect(4, 1)
circuits, labels, pauli_sums, addinfo  =
    tfq.datasets.xxz_chain(qbs, "closed")

You can print the available order parameters

[info.g for info in addinfo]
[0.30, 0.32, 0.34, ... ,1.76, 1.78, 1.8]

and the circuit corresponding to the ground state for a certain order parameter

print(circuits[10])
                       ┌──────────────────┐   ┌──────────────────┐
(0, 0): ───X───H───@─────────────ZZ─────────────────────YY────────── ...
                                                      
(1, 0): ───X───────X────ZZ───────┼─────────────YY───────┼─────────── ...
                                                     
(2, 0): ───X───H───@────ZZ^-0.922┼─────────────YY^-0.915┼─────────── ...
                                                      
(3, 0): ───X───────X─────────────ZZ^-0.922──────────────YY^-0.915─── ...
                       └──────────────────┘   └──────────────────┘

The labels indicate the phase of the system

>>> labels[10]
0

Additionally, you can obtain the cirq.PauliSum representation of the Hamiltonian

print(pauli_sums[10])
0.400*Z((0, 0))*Z((1, 0))+0.400*Z((1, 0))*Z((2, 0))+ ...
+1.000*Y((0, 0))*Y((3, 0))+1.000*X((0, 0))*X((3, 0))

The fourth output, addinfo, contains additional information about each instance of the system (see tfq.datasets.spin_system.SpinSystem ).

For instance, you can print the ground state obtained from exact diagonalization

addinfo[10].gs
[-8.69032854e-18-6.58023246e-20j  4.54546402e-17+3.08736567e-17j
 -9.51026525e-18+2.42638062e-17j  4.52284042e-02+3.18111120e-01j

  4.52284042e-02+3.18111120e-01j -6.57974275e-18-3.84526414e-17j
 -1.60673943e-17+5.79767820e-17j  2.86193021e-17-5.06694574e-17j]

with corresponding ground state energy

addinfo[10].gs_energy
-6.744562646538039

You can also inspect the parameters

addinfo[10].params
{'theta_0': 1.0780547, 'theta_1': 0.99271035, 'theta_2': 1.0854135, ...

and change them to experiment with different parameter values by using the unresolved variational circuit returned by xxzchain

>>> new_params = {}
... for symbol_name, value in addinfo[10].params.items():
...    new_params[symbol_name] = 0.5 * value
>>> new_params
{'theta_0': 0.5390273332595825, 'theta_1': 0.49635517597198486, ...
>>> new_circuit = cirq.resolve_parameters(addinfo[10].var_circuit,
... new_params)
>>> print(new_circuit)
                       ┌──────────────────┐   ┌──────────────────┐
(0, 0): ───X───H───@─────────────ZZ─────────────────────YY────────── ...
                                                      
(1, 0): ───X───────X────ZZ───────┼─────────────YY───────┼─────────── ...
                                                     
(2, 0): ───X───H───@────ZZ^(7/13)┼─────────────YY^0.543 ┼─────────── ...
                                                      
(3, 0): ───X───────X─────────────ZZ^(7/13)──────────────YY^0.543 ─── ...
                       └──────────────────┘   └──────────────────┘
Args:
    qubits: Python `lst` of `cirq.GridQubit`s. Supported number of spins
        are [4, 8, 12, 16].
    boundary_condition: Python `str` indicating the boundary condition
        of the chain. Supported boundary conditions are ["closed"].
    data_dir: Optional Python `str` location where to store the data on
        disk. Defaults to `/tmp/.keras`.
Returns:
    A Python `lst` cirq.Circuit of depth len(qubits) / 2 with resolved
        parameters.
    A Python `lst` of labels, 0, for the critical metallic phase
        (`Delta<=1`) and 1 for the insulating phase (`Delta>1`).
    A Python `lst` of `cirq.PauliSum`s.
    A Python `lst` of `namedtuple` instances containing the following
        fields:
    - `g`: Numpy `float` order parameter.
    - `gs`: Complex `np.ndarray` ground state wave function from
        exact diagonalization.
    - `gs_energy`: Numpy `float` ground state energy from exact
        diagonalization.
    - `res_energy`: Python `float` residual between the circuit energy
        and the exact energy from exact diagonalization.
    - `fidelity`: Python `float` overlap between the circuit state
        and the exact ground state from exact diagonalization.
    - `params`: Dict with Python `str` keys and Numpy`float` values.
        Contains \\(M         imes P \\) parameters. Here \\(M\\) is the number of
        parameters per circuit layer and \\(P\\) the circuit depth.
    - `var_circuit`: Variational `cirq.Circuit` quantum circuit with
        unresolved Sympy parameters.