class_docstr: FATECommunicator is a wrapper around the FATE communicator.
class_docstr_tok: ["FATECommunicator","is","a","wrapper","around","the","FATE","communicator","."]
code: def initialize(cls, ctx: Context, init_ttp):
      rank = ctx.local.rank
      rank_to_party = {p.rank: p.party for p in ctx.parties}
      world_size = len(rank_to_party)
      namespace_tensor = ctx.namespace.sub_ns("mpc_tensor")
      namespace_obj = ctx.namespace.sub_ns("mpc_obj")
      main_group = CommunicateGroup(
          ranks=list(range(world_size)),
          namespace_tensor=namespace_tensor,
          namespace_obj=namespace_obj,
      )
      cls.instance = Communicator(
          ctx,
          main_group,
          rank_to_party,
          rank,
          world_size,
      )
  
imports: import functools
  import logging
  import sys
  import timeit
  from concurrent.futures import ThreadPoolExecutor
  import torch
  from torch.distributed import ReduceOp
  from torch.distributed import ReduceOp
  from fate.arch.context import Context, NS, Parties
  from fate.arch import trace
  from typing import List
label_desc: Use image node_id 8 for calling the Communicator obj's underlying member method code with example usage: obj.initialize(cls, ctx, init_ttp) without return types