def METHOD_NAME(
    a_inv: types.Float, u: types.Float
) -> types.Float:
  """Returns `w` such that `inverse(a + u.T.dot(u)) = a_inv + w`.
  Makes use of the Woodbury matrix identity. See
  https://en.wikipedia.org/wiki/Woodbury_matrix_identity.
  **NOTE**: This implementation assumes that a_inv is symmetric. Since it's too
  expensive to check symmetricity, the function silently outputs a wrong answer
  in case `a` is not symmetric.
  Args:
    a_inv: an invertible SYMMETRIC `Tensor` of shape `[m, m]`.
    u: a `Tensor` of shape `[n, m]`.
  Returns:
    A `Tensor` `w` of shape `[m, m]` such that
    `inverse(a + u.T.dot(u)) = a_inv + w`.
  Raises:
    ValueError: if `a_inv` is not square or `a_inv` and `u` have incompatible
    shapes.
  """
  _check_shapes(a_inv, u)
  u_x_a_inv = tf.matmul(u, a_inv)
  capacitance = tf.eye(tf.shape(u)[0], dtype=u.dtype) + tf.matmul(
      u_x_a_inv, u, transpose_b=True
  )
  return -1.0 * tf.matmul(
      u_x_a_inv, tf.linalg.solve(capacitance, u_x_a_inv), transpose_a=True
  )