class_docstr: Logs debug information during attacking process.
class_docstr_tok: ["Logs","debug","information","during","attacking","process","."]
docstr: Log info and save image in the preset directory, based on the :instance.
  
  :param instance: DebugInfo object.
  :param adv_object: Object that will be printed out.
  :param image: Image to save.
docstr_tok: ["Log","info","and","save","image","in","the","preset","directory",",","based","on","the",":","instance",".",":","param","instance",":","DebugInfo","object",".",":","param","adv_object",":","Object","that","will","be","printed","out",".",":","param","image",":","Image","to","save","."]
code: def report(
      instance: "DebugInfo",
      adv_object: AdversarialObject,
      image: np.ndarray,
  ) -> None:
      """
      Log info and save image in the preset directory, based on the :instance.
  
      :param instance: DebugInfo object.
      :param adv_object: Object that will be printed out.
      :param image: Image to save.
      """
      if instance.logger is not None:
          instance.log(adv_object)
      if instance.artifacts_directory is not None:
          instance.save_image(image)
  
imports: from abc import ABC, abstractmethod
  from logging import Logger
  from pathlib import Path
  import string
  from typing import Any, Callable, List, Tuple, Union
  import numpy
label_desc: Use image node_id 4 for calling the DebugInfo obj's underlying member method code with example usage: obj.report(instance, adv_object, image) without return types