docs: def info(calculators, gsims, views, exports, extracts, parameters,
           report, input_file=''):
      """
      Give information. You can pass the name of an available calculator,
      a job.ini file, or a zip archive with the input files.
      """
      if calculators:
          for calc in sorted(base.calculators):
              print(calc)
      if gsims:
          for gs in gsim.get_available_gsims():
              print(gs)
      if views:
          for name in sorted(view):
              print(name)
      if exports:
          dic = groupby(export, operator.itemgetter(0),
                        lambda group: [r[1] for r in group])
          n = 0
          for exporter, formats in dic.items():
              print(exporter, formats)
              n += len(formats)
          print('There are %d exporters defined.' % n)
      if extracts:
          for key in extract:
              func = extract[key]
              if hasattr(func, '__wrapped__'):
                  fm = FunctionMaker(func.__wrapped__)
              else:
                  fm = FunctionMaker(func)
              print('%s(%s)%s' % (fm.name, fm.signature, fm.doc))
      if parameters:
          params = []
          for val in vars(OqParam).values():
              if hasattr(val, 'name'):
                  params.append(val)
          params.sort(key=lambda x: x.name)
          for param in params:
              print(param.name)
      if os.path.isdir(input_file) and report:
          with Monitor('info', measuremem=True) as mon:
              with mock.patch.object(logging.root, 'info'):  # reduce logging
                  do_build_reports(input_file)
          print(mon)
      elif input_file.endswith('.xml'):
          node = nrml.read(input_file)
          if node[0].tag.endswith('sourceModel'):
              if node['xmlns'].endswith('nrml/0.4'):
                  raise InvalidFile(
                      '%s is in NRML 0.4 format, please run the following '
                      'command:\noq upgrade_nrml %s' % (
                          input_file, os.path.dirname(input_file) or '.'))
              print(source_model_info([node[0]]))
          elif node[0].tag.endswith('logicTree'):
              nodes = [nrml.read(sm_path)[0]
                       for sm_path in logictree.collect_info(input_file).smpaths]
              print(source_model_info(nodes))
          else:
              print(node.to_str())
      elif input_file.endswith(('.ini', '.zip')):
          with Monitor('info', measuremem=True) as mon:
              if report:
                  print('Generated', reportwriter.build_report(input_file))
              else:
                  print_csm_info(input_file)
          if mon.duration > 1:
              print(mon)
      elif input_file:
          print("No info for '%s'" % input_file)