code: def cythonize_if_unchanged(path, cython_file, gen_file, hashes):
      full_cython_path = os.path.join(path, cython_file)
      full_header_path = full_cython_path.replace(".pyx", ".pxd")
      full_gen_file_path = os.path.join(path, gen_file)
  
      current_hash = get_hash_tuple(
          full_header_path, full_cython_path, full_gen_file_path
      )
  
      if current_hash == hashes.get(clean_path(full_cython_path)):
          print("%s has not changed" % full_cython_path)
          return
  
      print("Processing %s" % full_cython_path)
      cythonize(full_cython_path, full_gen_file_path)
  
      # changed target file, recompute hash
      current_hash = get_hash_tuple(
          full_header_path, full_cython_path, full_gen_file_path
      )
  
      # Update the hashes dict with the new hash
      hashes[clean_path(full_cython_path)] = current_hash
  
file_path: pyflux/tools/cythonize.py
imports: from __future__ import division, print_function, absolute_import
  import os
  import re
  import sys
  import hashlib
  import subprocess
label_desc: Use image node_id 7 for calling a global function with example usage: cythonize_if_unchanged(path, cython_file, gen_file, hashes) without return types