docs: def matrix_to_euler(rotmat):
      '''Inverse of euler_to_matrix().'''
      if not isinstance(rotmat, np.matrixlib.defmatrix.matrix):
          # As this calculation relies on np.matrix algebra - convert array to
          # matrix
          rotmat = np.matrix(rotmat)
  
      def cvec(x, y, z):
          return np.matrix([[x, y, z]]).T
      ex = cvec(1., 0., 0.)
      ez = cvec(0., 0., 1.)
      exs = rotmat.T * ex
      ezs = rotmat.T * ez
      enodes = np.cross(ez.T, ezs.T).T
      if np.linalg.norm(enodes) < 1e-10:
          enodes = exs
      enodess = rotmat * enodes
      cos_alpha = float((ez.T * ezs))
      if cos_alpha > 1.:
          cos_alpha = 1.
      if cos_alpha < -1.:
          cos_alpha = -1.
      alpha = acos(cos_alpha)
      beta = np.mod(atan2(enodes[1, 0], enodes[0, 0]), pi * 2.)
      gamma = np.mod(-atan2(enodess[1, 0], enodess[0, 0]), pi * 2.)
      return unique_euler(alpha, beta, gamma)