code: def visit_Call(self, node):
      p = ParseCall()
      p.visit(node.func)
      ast.NodeVisitor.generic_visit(self, node)
  
      if p.ls[-1] == "simplefilter" or p.ls[-1] == "filterwarnings":
          if node.args[0].s == "ignore":
              raise AssertionError(
                  "warnings should have an appropriate stacklevel; found in "
                  "{} on line {}".format(self.__filename, node.lineno)
              )
  
      if p.ls[-1] == "warn" and (
          len(p.ls) == 1 or p.ls[-2] == "warnings"
      ):
          if "testing/tests/test_warnings.py" == self.__filename:
              # This file
              return
  
          # See if stacklevel exists:
          if len(node.args) == 3:
              return
          args = {kw.arg for kw in node.keywords}
          if "stacklevel" in args:
              return
          raise AssertionError(
              "warnings should have an appropriate stacklevel; found in "
              "{} on line {}".format(self.__filename, node.lineno)
          )
  
file_path: catboost/contrib/python/numpy/py3/numpy/tests/test_warnings.py
imports: import pytest
  from pathlib import Path
  import sys
  import ast
  import tokenize
  import numpy
label_desc: Use image node_id 2 for calling the FindFuncs obj's underlying member method code with example usage: obj.visit_Call(node) without return types