docs: def conditional(mean, covar, dims_in, dims_out, covariance_type='full'):
      """ Return a function f such that f(x) = p(dims_out | dims_in = x) (f actually returns the mean and covariance of the conditional distribution
      """
      in_in = covar[ix_(dims_in, dims_in)]
      in_out = covar[ix_(dims_in, dims_out)]
      out_in = covar[ix_(dims_out, dims_in)]
      out_out = covar[ix_(dims_out, dims_out)]
      in_in_inv = inv(in_in)
      out_in_dot_in_in_inv = out_in.dot(in_in_inv)
  
      cond_covar = out_out - out_in_dot_in_in_inv.dot(in_out)
      cond_mean = lambda x: mean[dims_out] + out_in_dot_in_in_inv.dot(x - mean[dims_in])
      return lambda x: [cond_mean(x), cond_covar]