code: def complex_parallel(paral: Parallel, complex_iter):
      """complex_parallel.
      Find all the delayed function created by delayed in complex_iter, run them parallelly and then replace it with the result
  
      >>> from qlib.utils.paral import complex_parallel
      >>> from joblib import Parallel, delayed
      >>> complex_iter = {"a": delayed(sum)([1,2,3]), "b": [1, 2, delayed(sum)([10, 1])]}
      >>> complex_parallel(Parallel(), complex_iter)
      {'a': 6, 'b': [1, 2, 11]}
  
      Parameters
      ----------
      paral : Parallel
          paral
      complex_iter :
          NOTE: only list, tuple and dict will be explored!!!!
  
      Returns
      -------
      complex_iter whose delayed joblib tasks are replaced with its execution results.
      """
  
      complex_iter, dt_all = _replace_and_get_dt(complex_iter)
      for res, dt in zip(
          paral(dt.get_delayed_tuple() for dt in dt_all), dt_all
      ):
          dt.set_res(res)
      complex_iter = _recover_dt(complex_iter)
      return complex_iter
  
imports: from functools import partial
  from threading import Thread
  from typing import Callable, Text, Union
  from joblib import Parallel, delayed
  from joblib._parallel_backends import MultiprocessingBackend
  import pandas
  from queue import Queue
  import concurrent
  from qlib.config import C, QlibConfig
label_desc: Use image node_id 5 for calling a global function with example usage: complex_parallel(paral, complex_iter) and returns: complex_iter