Circulant

Propagators for circulant operators, which arise in translation-invariant systems. Used in QWOA for constrained combinatorial optimisation problems.

Propagator Class

class quop_mpi.propagator.circulant.unitary(*args, **kwargs)

Bases: Unitary

Operators

Pre-defined operator functions for circulant propagators.

Predefined Operator Functions for quop_mpi.propagator.circulant.unitary.

An Operator Function for 'circulant' unitary instances returns a local_i sized partition of the operator eigenvalues with global index offset local_i_offset.

Return Format

The Operator Function must return:

eigenvaluesndarray[float64]

A 1-D real array of size local_i containing the eigenvalues of the circulant operator for global indices local_i_offset to local_i_offset + local_i - 1.

Circulant matrices are diagonalized by the Discrete Fourier Transform (DFT), so the eigenvalues are simply the DFT of the first row (or column) of the matrix.

Propagation Method

The circulant propagator computes \(e^{-itH}|\psi\rangle\) using FFT:

  1. Forward FFT transforms the state to the eigenbasis

  2. Multiply by \(e^{-it\lambda_k}\) where \(\lambda_k\) are eigenvalues

  3. Inverse FFT transforms back to the computational basis

This is efficient because circulant matrices are diagonalized by the DFT. The implementation uses FFTW with MPI for parallel execution.

quop_mpi.propagator.circulant.operator.complete(system_size: int) np.ndarray[np.float64]

Return a placeholder array for a complete circulant graph.

For a complete graph, eigenvalue computation is handled internally by the propagator, so this function returns an empty array as a signal.

An Operator Function associated with quop_mpi.propagator.circulant.unitary.

Parameters:
system_sizeint

the size of the simulated QVA

Returns:
ndarray[float64]

1-D array with a single element (placeholder for complete graph)

quop_mpi.propagator.circulant.operator.graph(system_size: int, i: int = 1) np.ndarray[np.float64]

Generate the eigenvalues of the i-th symmetric circulant graph with edge weightings 1.

An Operator Function associated with quop_mpi.propagator.circulant.unitary.

Parameters:
system_sizeint

the size of the simulated QVA

iint, optional

index of the graph (ordered by vertex degree), 1 corresponds to a cycle graph and system_size // 2 or greater to a complete graph, by default 1

Returns:
ndarray[float64]

1-D real array of system_size eigenvalues, or a single-element placeholder array if i >= system_size // 2 (complete graph)