code: def evaluate_cuda_setup():
      cuda_setup = CUDASetup.get_instance()
      if (
          "BITSANDBYTES_NOWELCOME" not in os.environ
          or str(os.environ["BITSANDBYTES_NOWELCOME"]) == "0"
      ):
          cuda_setup.add_log_entry("")
          cuda_setup.add_log_entry("=" * 35 + "BUG REPORT" + "=" * 35)
          cuda_setup.add_log_entry(
              (
                  "Welcome to bitsandbytes. For bug reports, please run\n\npython -m bitsandbytes\n\n"
              ),
              (
                  "and submit this information together with your error trace to: https://github.com/TimDettmers/bitsandbytes/issues"
              ),
          )
          cuda_setup.add_log_entry("=" * 80)
      if not torch.cuda.is_available():
          return "libbitsandbytes_cpu.so", None, None, None
  
      cudart_path = determine_cuda_runtime_lib_path()
      ccs = get_compute_capabilities()
      ccs.sort()
      cc = ccs[-1]  # we take the highest capability
      cuda_version_string = get_cuda_version()
  
      cuda_setup.add_log_entry(
          f"CUDA SETUP: PyTorch settings found: CUDA_VERSION={cuda_version_string}, Highest Compute Capability: {cc}."
      )
      cuda_setup.add_log_entry(
          f"CUDA SETUP: To manually override the PyTorch CUDA version please see:"
          "https://github.com/TimDettmers/bitsandbytes/blob/main/how_to_use_nonpytorch_cuda.md"
      )
  
      # 7.5 is the minimum CC vor cublaslt
      has_cublaslt = is_cublasLt_compatible(cc)
  
      # TODO:
      # (1) CUDA missing cases (no CUDA installed by CUDA driver (nvidia-smi accessible)
      # (2) Multiple CUDA versions installed
  
      # we use ls -l instead of nvcc to determine the cuda version
      # since most installations will have the libcudart.so installed, but not the compiler
  
      if has_cublaslt:
          binary_name = f"libbitsandbytes_cuda{cuda_version_string}.so"
      else:
          "if not has_cublaslt (CC < 7.5), then we have to choose  _nocublaslt.so"
          binary_name = (
              f"libbitsandbytes_cuda{cuda_version_string}_nocublaslt.so"
          )
  
      return binary_name, cudart_path, cc, cuda_version_string
  
imports: import ctypes
  import os
  import errno
  import torch
  from warnings import warn
  from itertools import product
  from pathlib import Path
  from typing import Set, Union
  from .env_vars import get_potentially_lib_path_containing_env_vars
label_desc: Use image node_id 11 for calling a global function with example usage: evaluate_cuda_setup() and returns: binary_name,  cudart_path,  cc,  cuda_version_string, str,  None,  None,  None