code: def push_table(
      self,
      table: "KVTable",
      name: str,
      tag: str,
      parties: List[PartyMeta],
  ):
      for party in parties:
          if (name, tag, party) in self._push_history:
              raise ValueError(
                  f"push table to {parties} with duplicate name and tag: name={name}, tag={tag}"
              )
          self._push_history.add((name, tag, party))
  
      self._push_table(
          table=table,
          name=name,
          tag=tag,
          parties=parties,
      )
  
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 14 for calling the Federation obj's underlying member method code with example usage: obj.push_table(table, name, tag, parties) without return types