code: def node_info(cls_or_slf, node, attrpath, attrpaths, siblings, level, value_dims):
          
          opts = None
          if hasattr(node, 'children'):
              (lvl, lines) = (level, [(level, cls_or_slf.component_type(node))])
              opts = cls_or_slf.option_info(node)
          elif hasattr(node, 'main'):
              (lvl, lines) = cls_or_slf.adjointlayout_info(node, siblings, level, value_dims)
          elif getattr(node, '_deep_indexable', False):
              (lvl, lines) = cls_or_slf.ndmapping_info(node, siblings, level, value_dims)
          elif hasattr(node, 'unit_format'):
              (lvl, lines) = level, [(level, repr(node))]
          else:
              (lvl, lines) = cls_or_slf.element_info(node, siblings, level, value_dims)
              opts = cls_or_slf.option_info(node)
  
          # The attribute indexing path acts as a prefix (if applicable)
          if attrpath is not None:
              padding = cls_or_slf.padding(attrpaths)
              (fst_lvl, fst_line) = lines[0]
              line = '.'+attrpath.ljust(padding) +' ' + fst_line
              lines[0] = (fst_lvl, line)
          else:
              fst_lvl = level
  
          if cls_or_slf.show_options and opts and opts.kwargs:
              lines += [(fst_lvl, l) for l in cls_or_slf.format_options(opts)]
          return (lvl, lines)
docs: Given a node, return relevant information.