code: def proposers_to_proposals_list(
      proposers_list: List[Proposer], search_space: List[ShardingOption]
  ) -> List[List[ShardingOption]]:
      """
      only works for static_feedback proposers (the path of proposals to check is independent of the performance of the proposals)
      """
  
      proposals_list = []
  
      proposal_cache: Set[Tuple[int, ...]] = set()
  
      for proposer in proposers_list:
          proposer.load(search_space=search_space)
  
      for proposer in proposers_list:
          proposal = proposer.propose()
  
          while proposal:
              proposal_key = tuple(sorted(map(hash, proposal)))
              proposer.feedback(partitionable=True)
              if proposal_key in proposal_cache:
                  proposal = proposer.propose()
                  continue
  
              proposals_list.append(proposal)
              proposal_cache.add(proposal_key)
              proposal = proposer.propose()
  
      return proposals_list
  
imports: import copy
  import itertools
  import logging
  from decimal import Decimal
  from typing import cast, Dict, List, Optional, Set, Tuple, Union
  import torch
  from torchrec.distributed.embedding_types import EmbeddingComputeKernel
  from torchrec.distributed.planner.types import Enumerator, Perf, Proposer, ShardingOption, Topology
  from torchrec.distributed.planner.utils import BinarySearchPredicate, bytes_to_gb, prod
label_desc: Use image node_id 2 for calling a global function with example usage: proposers_to_proposals_list(proposers_list, search_space) and returns: proposals_list