code: def assign(self, value: ArtifactVal, *, wait: bool = False):
      self._check_feature()
      # this function should be used only with ArtifactVal
      if not isinstance(value, ArtifactVal):
          raise TypeError(
              "Value of unsupported type {}".format(type(value))
          )
  
      with self._container.lock():
          self._enqueue_operation(
              AssignArtifact(self._path, value.hash), wait=wait
          )
  
file_path: neptune-client/src/neptune/attributes/atoms/artifact.py
imports: import pathlib
  import typing
  from neptune.attributes.atoms.atom import Atom
  from neptune.internal.artifacts.types import ArtifactDriver, ArtifactDriversMap, ArtifactFileData
  from neptune.internal.backends.api_model import OptionalFeatures
  from neptune.internal.operation import AssignArtifact, TrackFilesToArtifact
  from neptune.types.atoms.artifact import Artifact
label_desc: Use image node_id 2 for calling the Artifact obj's underlying member method code with example usage: obj.assign(value) without return types