class_docstr: Class for the Siegel metric.
class_docstr_tok: ["Class","for","the","Siegel","metric","."]
docstr: Compute the Siegel inner-product.
  
  Compute the inner-product of tangent_vec_a and tangent_vec_b
  at point base_point using the Siegel Riemannian metric.
  The expression of the inner product between the vectors `v` and `w`
  at point `O` is :math:`<v, w>_{O}
  = 1/2 * trace((I - O O^{H})^{-1} v (I - O^{H} O)^{-1} w^{H})
  + 1/2 * trace((I - O O^{H})^{-1} w (I - O^{H} O)^{-1} v^{H})
  = Re(trace((I - O O^{H})^{-1} v (I - O^{H} O)^{-1} w^{H}))`
  where H denotes the conjugate transpose operator.
  
  Parameters
  ----------
  tangent_vec_a : array-like, shape=[..., n, n]
      Tangent vector at base point.
  tangent_vec_b : array-like, shape=[..., n, n]
      Tangent vector at base point.
  base_point : array-like, shape=[..., n, n]
      Base point.
  
  Returns
  -------
  inner_product : array-like, shape=[...,]
      Inner-product.
docstr_tok: ["Compute","the","Siegel","inner-product",".","Compute","the","inner-product","of","tangent_vec_a","and","tangent_vec_b","at","point","base_point","using","the","Siegel","Riemannian","metric",".","The","expression","of","the","inner","product","between","the","vectors","`","v","`","and","`","w","`","at","point","`","O","`","is",":","math",":","`","<","v",",","w",">","_","{","O","}","=","1\/2","*","trace","(","(","I","-","O","O^","{","H","}",")","^","{","-1","}","v","(","I","-","O^","{","H","}","O",")","^","{","-1","}","w^","{","H","}",")","+","1\/2","*","trace","(","(","I","-","O","O^","{","H","}",")","^","{","-1","}","w","(","I","-","O^","{","H","}","O",")","^","{","-1","}","v^","{","H","}",")","=","Re","(","trace","(","(","I","-","O","O^","{","H","}",")","^","{","-1","}","v","(","I","-","O^","{","H","}","O",")","^","{","-1","}","w^","{","H","}",")",")","`","where","H","denotes","the","conjugate","transpose","operator",".","Parameters","--","--","--","--","--","tangent_vec_a",":","array-like",",","shape=","[","...",",","n",",","n","]","Tangent","vector","at","base","point",".","tangent_vec_b",":","array-like",",","shape=","[","...",",","n",",","n","]","Tangent","vector","at","base","point",".","base_point",":","array-like",",","shape=","[","...",",","n",",","n","]","Base","point",".","Returns","--","--","--","-","inner_product",":","array-like",",","shape=","[","...",",","]","Inner-product","."]
code: def inner_product(self, tangent_vec_a, tangent_vec_b, base_point):
      """Compute the Siegel inner-product.
  
      Compute the inner-product of tangent_vec_a and tangent_vec_b
      at point base_point using the Siegel Riemannian metric.
      The expression of the inner product between the vectors `v` and `w`
      at point `O` is :math:`<v, w>_{O}
      = 1/2 * trace((I - O O^{H})^{-1} v (I - O^{H} O)^{-1} w^{H})
      + 1/2 * trace((I - O O^{H})^{-1} w (I - O^{H} O)^{-1} v^{H})
      = Re(trace((I - O O^{H})^{-1} v (I - O^{H} O)^{-1} w^{H}))`
      where H denotes the conjugate transpose operator.
  
      Parameters
      ----------
      tangent_vec_a : array-like, shape=[..., n, n]
          Tangent vector at base point.
      tangent_vec_b : array-like, shape=[..., n, n]
          Tangent vector at base point.
      base_point : array-like, shape=[..., n, n]
          Base point.
  
      Returns
      -------
      inner_product : array-like, shape=[...,]
          Inner-product.
      """
      identity = _create_identity_mat(
          base_point.shape, dtype=base_point.dtype
      )
  
      base_point_transconj = ComplexMatrices.transconjugate(base_point)
      tangent_vec_b_transconj = ComplexMatrices.transconjugate(
          tangent_vec_b
      )
  
      aux_1 = gs.matmul(base_point, base_point_transconj)
  
      aux_2 = gs.matmul(base_point_transconj, base_point)
  
      aux_3 = identity - aux_1
  
      aux_4 = identity - aux_2
  
      inv_aux_3 = powermh(aux_3, -1)
  
      inv_aux_4 = powermh(aux_4, -1)
  
      aux_a = gs.matmul(inv_aux_3, tangent_vec_a)
      aux_b = gs.matmul(inv_aux_4, tangent_vec_b_transconj)
      trace = Matrices.trace_product(aux_a, aux_b)
  
      return gs.real(trace)
  
imports: import geomstats.backend
  from geomstats.geometry.base import ComplexVectorSpaceOpenSet
  from geomstats.geometry.complex_matrices import ComplexMatrices
  from geomstats.geometry.complex_riemannian_metric import ComplexRiemannianMetric
  from geomstats.geometry.hermitian_matrices import expmh, powermh
  from geomstats.geometry.matrices import Matrices
label_desc: Use image node_id 1 for calling the SiegelMetric obj's underlying member method code with example usage: obj.inner_product(tangent_vec_a, tangent_vec_b, base_point) and returns: gs