code: def cythonize_extensions(top_path, config):
      """Check that a recent Cython is available and cythonize extensions"""
      _check_cython_version()
      from Cython.Build import cythonize
  
      # Fast fail before cythonization if compiler fails compiling basic test
      # code even without OpenMP
      basic_check_build()
  
      # check simple compilation with OpenMP. If it fails scikit-learn will be
      # built without OpenMP and the test test_openmp_supported in the test suite
      # will fail.
      # `check_openmp_support` compiles a small test program to see if the
      # compilers are properly configured to build with OpenMP. This is expensive
      # and we only want to call this function once.
      # The result of this check is cached as a private attribute on the sklearn
      # module (only at build-time) to be used twice:
      # - First to set the value of SKLEARN_OPENMP_PARALLELISM_ENABLED, the
      #   cython build-time variable passed to the cythonize() call.
      # - Then in the build_ext subclass defined in the top-level setup.py file
      #   to actually build the compiled extensions with OpenMP flags if needed.
  
      n_jobs = 1
      with contextlib.suppress(ImportError):
          import joblib
  
          if LooseVersion(joblib.__version__) > LooseVersion("0.13.0"):
              # earlier joblib versions don't account for CPU affinity
              # constraints, and may over-estimate the number of available
              # CPU particularly in CI (cf loky#114)
              n_jobs = joblib.cpu_count()
  
      config.ext_modules = cythonize(
          config.ext_modules,
          nthreads=n_jobs,
          compiler_directives={"language_level": 3},
      )
  
file_path: pmdarima/pmdarima/_build_utils/__init__.py
imports: from numpy.distutils.system_info import get_info
  from distutils.version import LooseVersion
  import os
  import contextlib
  from .pre_build_helpers import basic_check_build
label_desc: Use image node_id 3 for calling a global function with example usage: cythonize_extensions(top_path, config) without return types