code: def check_similar_hists(
      hist_list, check_type: bool = True, assert_type=used_hist_types
  ) -> bool:
      """Check consistent list of input histograms
  
      Check that type and dimension of all histograms in input list are the same.
  
      :param list hist_list: list of input histogram objects to check on consistency
      :param bool check_type: if true, also check type consistency of histograms (besides n-dim and datatype).
      :return: bool indicating if lists are similar
      """
      if len(hist_list) < 1:
          return True
      for hist in hist_list:
          if not isinstance(hist, assert_type):
              raise TypeError(
                  f"Input histogram type {type(hist)} not of {assert_type}."
              )
      # perform similarity checks on:
      # - number of dimensions
      # - histogram type
      # - datatypes
      # - Bin attributes
      # - SparselyBin attributes
      # - all above for sub-histograms in case of n-dim > 1
  
      # Check generic attributes - filled histograms only
      n_d = [hist.n_dim for hist in hist_list]
      if n_d.count(n_d[0]) != len(n_d):
          warnings.warn(
              "Input histograms have inconsistent dimensions."
          )
          return False
      dts = [hist.datatype for hist in hist_list]
      if dts.count(dts[0]) != len(dts):
          warnings.warn(
              f"Input histograms have inconsistent datatypes: {dts}"
          )
          return False
      # Check generic attributes
      if check_type:
          # E.g. histogrammar.specialized.CategorizeHistogramMethods and
          # histogrammar.primitives.categorize.Categorize are both of type hg.Categorize
          # Make this consistent first.
          types = [get_contentType(hist) for hist in hist_list]
          if types.count(types[0]) != len(types):
              warnings.warn(
                  f"Input histograms have inconsistent class types: {types}"
              )
              return False
  
      # Check Bin attributes
      if isinstance(hist_list[0], histogrammar.Bin):
          nums = [hist.num for hist in hist_list]
          if nums.count(nums[0]) != len(nums):
              warnings.warn(
                  f"Input Bin histograms have inconsistent num attributes: {nums}"
              )
              return False
          lows = [hist.low for hist in hist_list]
          if lows.count(lows[0]) != len(lows):
              warnings.warn(
                  f"Input Bin histograms have inconsistent low attributes: {lows}"
              )
              return False
          highs = [hist.high for hist in hist_list]
          if highs.count(highs[0]) != len(highs):
              warnings.warn(
                  f"Input histograms have inconsistent high attributes: {highs}"
              )
              return False
  
      # Check SparselyBin attributes
      if isinstance(hist_list[0], histogrammar.SparselyBin):
          origins = [hist.origin for hist in hist_list]
          if origins.count(origins[0]) != len(origins):
              warnings.warn(
                  f"Input SparselyBin histograms have inconsistent origin attributes: {origins}"
              )
              return False
          bws = [hist.binWidth for hist in hist_list]
          if bws.count(bws[0]) != len(bws):
              warnings.warn(
                  f"Input SparselyBin histograms have inconsistent binWidth attributes: {bws}"
              )
              return False
  
      # Check sub-histogram attributes
      if n_d[0] > 1:
          sub_hist_list = []
          # Categorize and SparselyBin
          if hasattr(hist_list[0], "bins"):
              for hist in hist_list:
                  kys = list(hist.bins.keys())
                  if len(kys) > 0:
                      sub_hist_list.append(hist.bins[kys[0]])
          # Bin
          elif hasattr(hist_list[0], "values"):
              for hist in hist_list:
                  if hist.num > 0:
                      sub_hist_list.append(hist.values[0])
          # iterate down
          if not check_similar_hists(sub_hist_list):
              return False
  
      return True
  
imports: from __future__ import annotations
  import warnings
  import histogrammar
  import numpy
  from histogrammar.util import get_hist_props
  from popmon.hist.hist_utils import get_bin_centers, is_numeric
  from popmon.stats.numpy import quantile
label_desc: Use image node_id 12 for calling a global function with example usage: check_similar_hists(hist_list, check_type, assert_type) and returns: True, True, False, False, False, False, False, False, False, False, False