code: def test_mpfuture_bidirectional():
      evt = mp.Event()
      future_from_main = hivemind.MPFuture()
  
      def _future_creator():
          future_from_fork = hivemind.MPFuture()
          future_from_main.set_result(("abc", future_from_fork))
  
          if future_from_fork.result() == [
              "we",
              "need",
              "to",
              "go",
              "deeper",
          ]:
              evt.set()
  
      p = mp.Process(target=_future_creator)
      p.start()
  
      out = future_from_main.result()
      assert isinstance(out[1], hivemind.MPFuture)
      out[1].set_result(["we", "need", "to", "go", "deeper"])
  
      p.join()
      assert evt.is_set()
  
imports: import asyncio
  import concurrent.futures
  import multiprocessing
  import random
  import time
  from concurrent.futures import ThreadPoolExecutor
  import numpy
  import pytest
  import torch
  import hivemind
  from hivemind.compression import deserialize_torch_tensor, serialize_torch_tensor
  from hivemind.proto.runtime_pb2 import CompressionType
  from hivemind.utils import BatchTensorDescriptor, DHTExpiration, HeapEntry, MSGPackSerializer, ValueWithExpiration
  from hivemind.utils.asyncio import achain, aenumerate, aiter_with_timeout, amap_in_executor, anext, as_aiter, asingle, attach_event_on_finished, azip, cancel_and_wait, enter_asynchronously
  from hivemind.utils.mpfuture import InvalidStateError
  from hivemind.utils.performance_ema import PerformanceEMA
label_desc: Use image node_id 5 for calling a global function with example usage: test_mpfuture_bidirectional() without return types