docs: def print_csm_info(fname):
      """
      Parse the composite source model without instantiating the sources and
      prints information about its composition and the full logic tree
      """
      oqparam = readinput.get_oqparam(fname)
      csm = readinput.get_composite_source_model(oqparam, in_memory=False)
      print(csm.info)
      print('See http://docs.openquake.org/oq-engine/stable/'
            'effective-realizations.html for an explanation')
      rlzs_assoc = csm.info.get_rlzs_assoc()
      print(rlzs_assoc)
      dupl = [(srcs[0]['id'], len(srcs)) for srcs in csm.check_dupl_sources()]
      if dupl:
          print(rst_table(dupl, ['source_id', 'multiplicity']))
      tot, pairs = get_pickled_sizes(rlzs_assoc)
      print(rst_table(pairs, ['attribute', 'nbytes']))