class_docstr: Custom build_ext action with bootstrapping.
  
  We need this in order to use numpy and Cython in this script without
  importing them at module level, because they may not be available at that time.
class_docstr_tok: ["Custom","build_ext","action","with","bootstrapping",".","We","need","this","in","order","to","use","numpy","and","Cython","in","this","script","without","importing","them","at","module","level",",","because","they","may","not","be","available","at","that","time","."]
code: def finalize_options(self):
      build_ext.finalize_options(self)
  
      import builtins
      import numpy
  
      #
      # Prevent numpy from thinking it is still in its setup process
      # http://stackoverflow.com/questions/19919905/how-to-bootstrap-numpy-installation-in-setup-py
      #
      # Newer numpy versions don't support this hack, nor do they need it.
      # https://github.com/pyvista/pyacvd/pull/23#issue-1298467701
      #
      try:
          builtins.__NUMPY_SETUP__ = False
      except Exception as ex:
          print(
              f"could not use __NUMPY_SETUP__ hack (numpy version: {numpy.__version__}): {ex}"
          )
  
      self.include_dirs.append(numpy.get_include())
  
      if need_cython():
          import Cython.Build
  
          Cython.Build.cythonize(
              list(make_c_ext(use_cython=True)), language_level=3
          )
          Cython.Build.cythonize(
              list(make_cpp_ext(use_cython=True)), language_level=3
          )
  
file_path: gensim/setup.py
imports: import itertools
  import os
  import platform
  import shutil
  import sys
  from collections import OrderedDict
  from setuptools import Extension, find_packages, setup, distutils
  from setuptools.command.build_ext import build_ext
label_desc: Use image node_id 1 for calling the CustomBuildExt obj's underlying member method code with example usage: obj.finalize_options() without return types