code: def secure_aggregate(
      self,
      ctx: Context,
      array: typing.List[numpy.ndarray],
      weight: typing.Optional[int] = None,
  ):
      if self._is_mock:
          ctx.arbiter.put(
              self._get_name(self._send_name), (array, weight)
          )
          return ctx.arbiter.get(self._get_name(self._recv_name))
      else:
          mixed = self._get_mixer().mix(array, weight)
          ctx.arbiter.put(
              self._get_name(self._send_name), (mixed, weight)
          )
          return ctx.arbiter.get(self._get_name(self._recv_name))
  
file_path: FATE/python/fate/arch/protocol/secure_aggregation/_secure_aggregation.py
imports: import typing
  import numpy
  from fate.arch import Context
  from fate.arch.protocol.diffie_hellman import DiffieHellman
  from fate_utils.secure_aggregation_helper import MixAggregate, RandomMix
label_desc: Use image node_id 4 for calling the SecureAggregatorClient obj's underlying member method code with example usage: obj.secure_aggregate(ctx, array, weight) and returns: ctx, ctx