class_docstr: EXPERIMENTAL This class is used to adapt (inverse) mass matrix and provide useful
  methods to calculate algebraic terms which involves the mass matrix.
  
  The mass matrix will have arrowhead structure, with the head including all
  dense sites specified in the argument `full_mass` of the HMC/NUTS kernels.
  
  :param float init_scale: initial scale to construct the initial mass matrix.
class_docstr_tok: ["EXPERIMENTAL","This","class","is","used","to","adapt","(","inverse",")","mass","matrix","and","provide","useful","methods","to","calculate","algebraic","terms","which","involves","the","mass","matrix",".","The","mass","matrix","will","have","arrowhead","structure",",","with","the","head","including","all","dense","sites","specified","in","the","argument","`","full_mass","`","of","the","HMC\/NUTS","kernels",".",":","param","float","init_scale",":","initial","scale","to","construct","the","initial","mass","matrix","."]
code: def inverse_mass_matrix(self):
      # NB: this computation is O(N^2 x head_size)
      # however, HMC/NUTS kernel does not require us computing inverse_mass_matrix;
      # so all linear algebra cost in HMC/NUTS is still O(N x head_size^2);
      # we still expose this property for testing and for backward compatibility
      inverse_mass_matrix = {}
      for (
          site_names,
          sqrt_inverse,
      ) in self._mass_matrix_sqrt_inverse.items():
          inverse_mass_matrix[site_names] = triu_gram(sqrt_inverse)
      return inverse_mass_matrix
  
imports: import math
  from collections import namedtuple
  import torch
  import pyro
  from pyro.ops.arrowhead import SymmArrowhead, sqrt, triu_gram, triu_inverse, triu_matvecmul
  from pyro.ops.dual_averaging import DualAveraging
  from pyro.ops.welford import WelfordArrowheadCovariance, WelfordCovariance
label_desc: Use image node_id 3 for calling the ArrowheadMassMatrix obj's underlying member method code with example usage: obj.inverse_mass_matrix() and returns: inverse_mass_matrix