class_docstr: This AST visitor is used to find dependencies of a JITFunction. This can
  be used to invalidate a JITFunction's hash when its source code -- or
  that of its dependencies -- changes.
class_docstr_tok: ["This","AST","visitor","is","used","to","find","dependencies","of","a","JITFunction",".","This","can","be","used","to","invalidate","a","JITFunction","'s","hash","when","its","source","code","--","or","that","of","its","dependencies","--","changes","."]
code: def visit_Call(self, node):
      func = self.visit(node.func)
      if func is None:
          return
      if inspect.isbuiltin(func):
          return
      if func.__module__ and (
          func.__module__.startswith(TRITON_MODULE)
      ):
          return
      assert isinstance(
          func, JITFunction
      ), f'Function "{func.__name__}" is being called from a Triton function but is not a Triton function itself. Decorate it with @triton.jit to fix this'
      func_cache_key = func.cache_key
      noinline = str(getattr(func, "noinline", False))
      self.ret = (self.ret + func_cache_key + noinline).encode("utf-8")
      self.ret = hashlib.sha1(self.ret).hexdigest()
  
imports: from __future__ import annotations, division
  import ast
  import hashlib
  import inspect
  import os
  import textwrap
  from collections import defaultdict, namedtuple
  from functools import cached_property
  from typing import Callable, Generic, Iterable, List, Optional, TypeVar, Union, cast, overload
  from ..runtime.driver import driver
label_desc: Use image node_id 4 for calling the DependenciesFinder obj's underlying member method code with example usage: obj.visit_Call(node) without return types