code: def sort_by_dependencies(exts, retry=None):
      sorted_ext, features_from_sorted = [], set()
      pending = [(e, 0) for e in exts]
      retry = len(exts) * 100 if retry is None else retry
      while pending:
          ext, cnt = pending.pop(0)
          if not isinstance(ext, Extractor) and not issubclass(ext, Extractor):
              msg = "Only Extractor instances are allowed. Found {}."
              raise TypeError(msg.format(type(ext)))
          deps = ext.get_dependencies()
          if deps.difference(features_from_sorted):
              if cnt + 1 > retry:
                  msg = "Maximun retry ({}) to sort achieved from extractor {}."
                  raise RuntimeError(msg.format(retry, type(ext)))
              pending.append((ext, cnt + 1))
          else:
              sorted_ext.append(ext)
              features_from_sorted.update(ext.get_features())
      return tuple(sorted_ext)