cirq.bidiagonalize_real_matrix_pair_with_symmetric_products(mat1: numpy.ndarray, mat2: numpy.ndarray, *, rtol: float = 1e-05, atol: float = 1e-08, check_preconditions: bool = True) → Tuple[numpy.ndarray, numpy.ndarray][source]

Finds orthogonal matrices that diagonalize both mat1 and mat2.

Requires mat1 and mat2 to be real.
Requires mat1.T @ mat2 to be symmetric.
Requires mat1 @ mat2.T to be symmetric.
  • mat1 – One of the real matrices.

  • mat2 – The other real matrix.

  • rtol – Relative numeric error threshold.

  • atol – Absolute numeric error threshold.

  • check_preconditions – If set, verifies that the inputs are real, and that mat1.T @ mat2 and mat1 @ mat2.T are both symmetric. Defaults to set.


A tuple (L, R) of two orthogonal matrices, such that both L @ mat1 @ R and L @ mat2 @ R are diagonal matrices.


ValueError – Matrices don’t meet preconditions (e.g. not real).