Exemplo n.º 1
0
 def _check_point_on_manifold(self, x, atol, rtol):
     x_t = utils.transposem(x)
     eigvals, _ = tf.linalg.eigh(x)
     is_symmetric = utils.allclose(x, x_t, atol, rtol)
     is_pos_vals = utils.allclose(eigvals, tf.abs(eigvals), atol, rtol)
     is_zero_vals = utils.allclose(eigvals, tf.zeros_like(eigvals), atol,
                                   rtol)
     return is_symmetric & is_pos_vals & tf.logical_not(is_zero_vals)
 def _check_point_on_manifold(self, x, atol, rtol):
     xtx = utils.transposem(x) @ x
     eye = tf.eye(
         tf.shape(xtx)[-1], batch_shape=tf.shape(xtx)[:-2], dtype=x.dtype
     )
     is_orth = utils.allclose(xtx, eye, atol, rtol)
     det = tf.linalg.det(x)
     is_unit_det = utils.allclose(det, tf.ones_like(det), atol, rtol)
     return is_orth & is_unit_det
Exemplo n.º 3
0
 def _check_point_on_manifold(self, x, atol, rtol):
     xtx = utils.transposem(x) @ x
     shape = xtx.shape.as_list()
     eye = tf.eye(shape[-1], batch_shape=shape[:-2])
     is_idempotent = utils.allclose(xtx, tf.cast(eye, x.dtype), atol, rtol)
     s = tf.linalg.svd(x, compute_uv=False)
     rank = tf.math.count_nonzero(s, axis=-1, dtype=tf.float32)
     k = tf.ones_like(rank) * int(x.shape[-1])
     is_col_rank = utils.allclose(rank, k, atol, rtol)
     return is_idempotent & is_col_rank
Exemplo n.º 4
0
 def _check_vector_on_tangent(self, x, u, atol, rtol):
     xtu = utils.transposem(x) @ u
     return utils.allclose(xtu, tf.zeros_like(xtu), atol, rtol)
Exemplo n.º 5
0
 def _check_vector_on_tangent(self, x, u, atol, rtol):
     u_t = utils.transposem(u)
     return utils.allclose(u, u_t, atol, rtol)
Exemplo n.º 6
0
 def _check_vector_on_tangent(self, x, u, atol, rtol):
     lower_triang = tf.linalg.band_part(x, -1, 0)
     return utils.allclose(x, lower_triang, atol, rtol)
Exemplo n.º 7
0
 def _check_point_on_manifold(self, x, atol, rtol):
     lower_triang = tf.linalg.band_part(x, -1, 0)
     is_lower_triang = utils.allclose(x, lower_triang, atol, rtol)
     diag = tf.linalg.diag_part(x)
     is_pos_diag = utils.allclose(diag, tf.abs(diag), atol, rtol)
     return is_lower_triang & is_pos_diag
Exemplo n.º 8
0
 def _check_vector_on_tangent(self, x, u, atol, rtol):
     inner = self.inner(x, x, u)
     rtol = 100 * utils.get_eps(x) if rtol is None else rtol
     return utils.allclose(inner, tf.zeros_like(inner), atol, rtol)
Exemplo n.º 9
0
 def _check_point_on_manifold(self, x, atol, rtol):
     x_sq = tf.square(x)
     quad_form = -x_sq[..., :1] + tf.reduce_sum(
         x_sq[..., 1:], axis=-1, keepdims=True)
     return utils.allclose(quad_form,
                           tf.ones_like(quad_form) * -self.k, atol, rtol)
Exemplo n.º 10
0
 def _check_vector_on_tangent(self, x, u, atol, rtol):
     diff = utils.transposem(u) + u
     return utils.allclose(diff, tf.zeros_like(diff), atol, rtol)
Exemplo n.º 11
0
 def _check_vector_on_tangent(self, x, u, atol, rtol):
     inner = self.inner(x, x, u, keepdims=True)
     return utils.allclose(inner, tf.zeros_like(inner), atol, rtol)
Exemplo n.º 12
0
 def _check_point_on_manifold(self, x, atol, rtol):
     norm = tf.linalg.norm(x, axis=-1)
     return utils.allclose(norm, tf.ones_like(norm), atol, rtol)
Exemplo n.º 13
0
 def _check_point_on_manifold(self, x, atol, rtol):
     xtx = utils.transposem(x) @ x
     eye = tf.eye(tf.shape(xtx)[-1],
                  batch_shape=tf.shape(xtx)[:-2],
                  dtype=xtx.dtype)
     return utils.allclose(xtx, eye, atol, rtol)