code: def build(self, computing_session, t: FederationEngine, conf: dict):
      if t == FederationEngine.STANDALONE:
          return self.build_standalone(computing_session)
      elif t == FederationEngine.OSX:
          host = cfg.get_option(conf, "federation.osx.host")
          port = cfg.get_option(conf, "federation.osx.port")
          mode = FederationMode.from_str(
              cfg.get_option(
                  conf,
                  "federation.osx.mode",
                  FederationMode.MESSAGE_QUEUE,
              )
          )
          return self.build_osx(
              computing_session, host=host, port=port, mode=mode
          )
      elif t == FederationEngine.RABBITMQ:
          host = cfg.get_option(conf, "federation.rabbitmq.host")
          port = cfg.get_option(conf, "federation.rabbitmq.port")
          options = cfg.get_option(conf, "federation.rabbitmq")
          return self.build_rabbitmq(
              computing_session, host=host, port=port, options=options
          )
      elif t == FederationEngine.PULSAR:
          host = cfg.get_option(conf, "federation.pulsar.host")
          port = cfg.get_option(conf, "federation.pulsar.port")
          options = cfg.get_option(conf, "federation.pulsar")
          return self.build_pulsar(
              computing_session, host=host, port=port, options=options
          )
      else:
          raise ValueError(f"{t} not in {FederationEngine}")
  
file_path: FATE/python/fate/arch/federation/_builder.py
imports: import typing
  from enum import Enum
  from fate.arch.federation.api import PartyMeta
  from fate.arch.config import cfg
label_desc: Use image node_id 2 for calling the FederationBuilder obj's underlying member method code with example usage: obj.build(computing_session, t, conf) and returns: self, self, self, self