code: def info(cls, obj, ansi=False, backend='matplotlib', visualization=True,
               pattern=None, elements=[]):
          
          cls.elements = elements
          ansi_escape = re.compile(r'\x1b[^m]*m')
  
          isclass = isinstance(obj, type)
          name = obj.__name__ if isclass  else obj.__class__.__name__
          backend_registry = cls.store.registry.get(backend, {})
          plot_class = backend_registry.get(obj if isclass else type(obj), None)
          # Special case to handle PlotSelectors
          if hasattr(plot_class, 'plot_classes'):
              plot_class =  list(plot_class.plot_classes.values())[0]
  
  
          if visualization is False or plot_class is None:
              if pattern is not None:
                  obj = ParamFilter(obj, ParamFilter.regexp_filter(pattern))
                  if len(obj.params()) <=1:
                      return ('No %r parameters found matching specified pattern %r'
                              % (name, pattern))
              info = param.ipython.ParamPager()(obj)
              if ansi is False:
                  info = ansi_escape.sub('', info)
              return cls.highlight(pattern, info)
  
          heading = name if isclass else '{name}: {group} {label}'.format(name=name,
                                                                          group=obj.group,
                                                                          label=obj.label)
          prefix = heading
          lines = [prefix, cls.object_info(obj, name, backend=backend, ansi=ansi)]
  
          if not isclass:
              lines += ['', cls.target_info(obj, ansi=ansi)]
          if plot_class is not None:
              lines += ['', cls.options_info(plot_class, ansi, pattern=pattern)]
          return "\n".join(lines)
docs: Show information about an object in the given category. ANSI
          color codes may be enabled or disabled.