docs: def adaptive_filter(self, strategy, line):
          """
          Applying non-standart filters (e.g. adaptive selection)
  
          `strategy` may be one of following types:
  
          - string - find and use strategy with this name
          - dict - find and use strategy by field 'name' of this dict
            and use it with this dict as configuration
          - callable - use this callable as strategy with empty dict as cfg
            check :meth:`register_extra_filter` for documentation)
  
          `line` specifies the current (unfiltered) scanline as a sequence
          of bytes;
          """
          if isinstance(strategy, (basestring, bytes)):
              strategy = {'name': str(strategy)}
          if isinstance(strategy, dict):
              cfg = strategy
              strategy = Filter.adapt_methods.get(cfg['name'])
          else:
              cfg = {}
          if strategy is None:
              raise Error("Adaptive strategy not found")
          else:
              return strategy(line, cfg, self)