code: def compile(source, name):
      
      cache = os.path.join(pycbc._cache_dir_path, name)
      hash_file = cache + ".hash"
      lib_file = cache + ".so"
      obj_file = cache + ".o"
  
      try:
          if int(open(hash_file, "r").read()) == hash(source):
              return lib_file
          raise ValueError
      except:
          pass
  
      src_file = cache + ".cu"
      fsrc = open(src_file, "w")
      fsrc.write(source)
      fsrc.close()
  
      cmd = ["nvcc", "-ccbin", "g++", "-dc", "-m64",
             "--compiler-options", "'-fPIC'",
             "-o", obj_file,
             "-c", src_file]
      print(" ".join(cmd))
      subprocess.check_call(cmd)
  
      cmd = ["nvcc", "-shared", "-ccbin", "g++", "-m64",
         "-o", lib_file, obj_file, "-lcufft_static", "-lculibos"]
      print(" ".join(cmd))
  
      subprocess.check_call(cmd)
  
      hash_file = cache + ".hash"
      fhash = open(hash_file, "w")
      fhash.write(str(hash(source)))
      return lib_file
docs: Compile the string source code into a shared object linked against
      the static version of cufft for callback support.