class_docstr: A Profiler class that allows code profiling.
  
  Attributes
  ----------
      print_stats (bool, optional): prints profiling statistics.
      viz (bool, optional): visualizes the results using `snakeviz`.
  
      Bonus args and kwargs are passed to cProfile.Profile __init__
  
  Example
  -------
      with Profiler(print_stats=False, viz=True):
          fn(x, y)
code: def __enter__(self, *args, **kwargs):
      self.pr = super().__enter__(*args, **kwargs)
  
      return self.pr
  
file_path: ivy/ivy/utils/profiler.py
imports: import cProfile
  import pstats
  import subprocess
  import logging
  from tempfile import NamedTemporaryFile
  from importlib.util import find_spec
label_desc: Use image node_id 2 for calling the Profiler obj's underlying member method code with example usage: obj.__enter__() and returns: self