code: def pull_table(
      self,
      name: str,
      tag: str,
      parties: List[PartyMeta],
      table_metas: List[TableMeta] = None,
  ) -> List["KVTable"]:
      for party in parties:
          if (name, tag, party) in self._pull_history:
              raise ValueError(
                  f"pull table from {party} with duplicate name and tag: name={name}, tag={tag}"
              )
          self._pull_history.add((name, tag, party))
  
      tables = self._pull_table(
          name=name,
          tag=tag,
          parties=parties,
          table_metas=table_metas,
      )
      for table in tables:
          table.mask_federated_received()
      return tables
  
imports: import logging
  import typing
  from typing import List
  from fate.arch.trace import federation_push_table_trace, federation_pull_table_trace, federation_push_bytes_trace, federation_pull_bytes_trace
  from ._table_meta import TableMeta
  from ._type import PartyMeta
label_desc: Use image node_id 16 for calling the Federation obj's underlying member method code with example usage: obj.pull_table(name, tag, parties, table_metas) and returns: tables