def __call__(
        self,
        f: Callable[..., Any],
        X: Iterable[Any],
    ) -> list[Any] | Generator[Any, Any, None]:
        """
        Execute function f on each element of X in parallel using joblib.
        
        Parameters
        ----------
        f : callable
            Function to apply to each element
        X : iterable
            Iterable of inputs to process
            
        Returns
        -------
        list or generator
            Results from parallel execution, type depends on return_as parameter
        """
        with self.joblib.Parallel(
            n_jobs=self.n_jobs,
            backend=self.backend,
            return_as=self.return_as,
            verbose=self.verbose,
            timeout=self.timeout,
            pre_dispatch=self.pre_dispatch,
            batch_size=self.batch_size,
            temp_folder=self.temp_folder,
            max_nbytes=self.max_nbytes,
            mmap_mode=self.mmap_mode,
            prefer=self.prefer,
            require=self.require,
        ) as parallel:
            return parallel(self.joblib.delayed(f)(x) for x in X)

        Execute function f on each element of X in parallel using joblib.
        
        Parameters
        ----------
        f : callable
            Function to apply to each element
        X : iterable
            Iterable of inputs to process
            
        Returns
        -------
        list or generator
            Results from parallel execution, type depends on return_as parameter
        
pymoo/parallelization/joblib.py