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 block structure, which can be specified by
  using the method :meth:`configure` with the corresponding structured
  `mass_matrix_shape` arg.
  
  :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","block","structure",",","which","can","be","specified","by","using","the","method",":","meth",":","`","configure","`","with","the","corresponding","structured","`","mass_matrix_shape","`","arg",".",":","param","float","init_scale",":","initial","scale","to","construct","the","initial","mass","matrix","."]
code: def __init__(self, init_scale=1.0):
      # TODO: we might allow users specify the initial mass matrix in the constructor.
      self._init_scale = init_scale
      self._adapt_scheme = {}
      self._inverse_mass_matrix = {}
      # NB: those sqrt matrices are upper triangular
      self._mass_matrix_sqrt = {}
      self._mass_matrix_sqrt_inverse = {}
      self._mass_matrix_size = {}
  
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 1 to create a new BlockMassMatrix object  with example: obj = BlockMassMatrix(init_scale)