code: def _upload_data_audit_artifacts(self, name):
      # type: (str) -> ()
      logger = self._task.get_logger()
      pd_artifact = self._artifacts_container.get(name)
      pd_metadata = self._artifacts_container.get_metadata(name)
  
      # remove from artifacts watch list
      if name in self._unregister_request:
          try:
              self._unregister_request.remove(name)
          except KeyError:
              pass
          self._artifacts_container.unregister_artifact(name)
  
      if pd_artifact is None:
          return
  
      override_filename_ext_in_uri = self._save_format
      override_filename_in_uri = name
      local_csv = self._push_temp_file(
          prefix=quote(name, safe="") + ".",
          suffix=override_filename_ext_in_uri,
      )
      local_csv = Path(local_csv)
      self._store_compressed_pd_csv(
          pd_artifact, local_csv.as_posix(), index=False
      )
      current_sha2, file_sha2 = sha256sum(
          local_csv.as_posix(),
          skip_header=32,
          block_size=Artifacts._hash_block_size,
      )
      if name in self._last_artifacts_upload:
          previous_sha2 = self._last_artifacts_upload[name]
          if previous_sha2 == current_sha2:
              # nothing to do, we can skip the upload
              # noinspection PyBroadException
              try:
                  self._delete_temp_file(local_csv)
              except Exception:
                  pass
              return
      self._last_artifacts_upload[name] = current_sha2
  
      # If old clearml-server, upload as debug image
      if not Session.check_min_api_version("2.3"):
          logger.report_image(
              title="artifacts",
              series=name,
              local_path=local_csv.as_posix(),
              delete_after_upload=True,
              iteration=self._task.get_last_iteration(),
              max_image_history=2,
          )
          return
  
      # Find our artifact
      artifact = None
      for an_artifact in self._task_artifact_list:
          if an_artifact.key == name:
              artifact = an_artifact
              break
  
      file_size = local_csv.stat().st_size
  
      # upload file
      uri = self._upload_local_file(
          local_csv,
          name,
          delete_after_upload=True,
          override_filename=override_filename_in_uri,
          override_filename_ext=override_filename_ext_in_uri,
      )
  
      # update task artifacts
      with self._task_edit_lock:
          if not artifact:
              artifact = tasks.Artifact(
                  key=name, type=self._pd_artifact_type
              )
          artifact_type_data = tasks.ArtifactTypeData()
  
          artifact_type_data.data_hash = current_sha2
          artifact_type_data.content_type = "text/csv"
          artifact_type_data.preview = (
              str(pd_artifact.__repr__())
              + "\n\n"
              + self._get_statistics({name: pd_artifact})
          )
  
          artifact.type_data = artifact_type_data
          artifact.uri = uri
          artifact.content_size = file_size
          artifact.hash = file_sha2
          artifact.timestamp = int(time())
          artifact.display_data = (
              [(str(k), str(v)) for k, v in pd_metadata.items()]
              if pd_metadata
              else None
          )
  
          self._add_artifact(artifact)
  
imports: import gzip
  import io
  import json
  import yaml
  import mimetypes
  import os
  import pickle
  from six.moves.urllib.parse import quote
  from copy import deepcopy
  from datetime import datetime
  from multiprocessing.pool import ThreadPool
  from tempfile import mkdtemp, mkstemp
  from threading import Thread
  from time import time
  from zipfile import ZipFile, ZIP_DEFLATED
  import six
  from PIL import Image
  from pathlib2 import Path
  from six.moves.urllib.parse import urlparse
  from typing import Dict, Union, Optional, Any, Sequence, Callable
  from ..backend_api import Session
  from ..backend_api.services import tasks
  from ..backend_interface.metrics.events import UploadEvent
  from ..debugging.log import LoggerRoot
  from ..storage.helper import remote_driver_schemes
  from ..storage.util import sha256sum, format_size, get_common_path
  from ..utilities.process.mp import SafeEvent, ForkSafeRLock
  from ..utilities.proxy_object import LazyEvalWrapper
label_desc: Use image node_id 12 for calling the Artifacts obj's underlying member method code with example usage: obj._upload_data_audit_artifacts(name) without return types