code: def iter_params_for_processing(invocation_order, declaration_order):
      
      def sort_key(item):
          try:
              idx = invocation_order.index(item)
          except ValueError:
              idx = float('inf')
          return (not item.is_eager, idx)
  
      return sorted(declaration_order, key=sort_key)
docs: Given a sequence of parameters in the order as should be considered
      for processing and an iterable of parameters that exist, this returns
      a list in the correct order as they should be processed.