cirq.bidiagonalize_unitary_with_special_orthogonals

cirq.bidiagonalize_unitary_with_special_orthogonals(mat: numpy.ndarray, tolerance: cirq.linalg.tolerance.Tolerance = Tolerance(rtol=1e-05, atol=1e-08, equal_nan=False)) → 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.
  • tolerance – Numeric error thresholds.
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).
  • ArithmeticError – Failed to meet specified tolerance.