cirq.bidiagonalize_unitary_with_special_orthogonals

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

Finds orthogonal matrices L, R such that L @ matrix @ R is diagonal.

Parameters
  • mat – A unitary matrix.

  • rtol – Relative numeric error threshold.

  • atol – Absolute numeric error threshold.

  • check_preconditions – If set, verifies that the input is a unitary matrix (to the given tolerances). Defaults to set.

Returns

A triplet (L, d, R) such that L @ mat @ R = diag(d). Both L and R will be orthogonal matrices with determinant equal to 1.

Raises

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