class_docstr: Class for Riemannian and pseudo-Riemannian metrics.
  
  The associated Levi-Civita connection on the tangent bundle.
class_docstr_tok: ["Class","for","Riemannian","and","pseudo-Riemannian","metrics",".","The","associated","Levi-Civita","connection","on","the","tangent","bundle","."]
docstr: Normalize the basis with respect to the metric.
  
  This corresponds to a renormalization of each basis vector.
  
  Parameters
  ----------
  basis : array-like, shape=[dim, dim]
      Matrix of a metric.
  base_point
  
  Returns
  -------
  basis : array-like, shape=[dim, n, n]
      Normal basis.
docstr_tok: ["Normalize","the","basis","with","respect","to","the","metric",".","This","corresponds","to","a","renormalization","of","each","basis","vector",".","Parameters","--","--","--","--","--","basis",":","array-like",",","shape=","[","dim",",","dim","]","Matrix","of","a","metric",".","base_point","Returns","--","--","--","-","basis",":","array-like",",","shape=","[","dim",",","n",",","n","]","Normal","basis","."]
code: def normal_basis(self, basis, base_point=None):
      """Normalize the basis with respect to the metric.
  
      This corresponds to a renormalization of each basis vector.
  
      Parameters
      ----------
      basis : array-like, shape=[dim, dim]
          Matrix of a metric.
      base_point
  
      Returns
      -------
      basis : array-like, shape=[dim, n, n]
          Normal basis.
      """
      norms = self.squared_norm(basis, base_point)
  
      return gs.einsum("i, ikl->ikl", 1.0 / gs.sqrt(norms), basis)
  
imports: from abc import ABC
  import joblib
  import geomstats.backend
  import geomstats.geometry
  from geomstats.geometry.connection import Connection
  from geomstats.vectorization import check_is_batch
label_desc: Use image node_id 21 for calling the RiemannianMetric obj's underlying member method code with example usage: obj.normal_basis(basis, base_point) and returns: gs