class_docstr: A class for managing Neptune experiment.
  
  Each time User creates new experiment instance of this class is created.
  It lets you manage experiment, :meth:`~neptune.experiments.Experiment.log_metric`,
  :meth:`~neptune.experiments.Experiment.log_text`,
  :meth:`~neptune.experiments.Experiment.log_image`,
  :meth:`~neptune.experiments.Experiment.set_property`,
  and much more.
  
  
  Args:
      backend (:obj:`neptune.ApiClient`): A ApiClient object
      project (:obj:`neptune.Project`): The project this experiment belongs to
      _id (:obj:`str`): Experiment id
      internal_id (:obj:`str`): internal ID
  
  Example:
      Assuming that `project` is an instance of :class:`~neptune.projects.Project`.
  
      .. code:: python3
  
          experiment = project.create_experiment()
  
  Warning:
      User should never create instances of this class manually.
      Always use: :meth:`~neptune.projects.Project.create_experiment`.
class_docstr_tok: ["A","class","for","managing","Neptune","experiment",".","Each","time","User","creates","new","experiment","instance","of","this","class","is","created",".","It","lets","you","manage","experiment",",",":","meth",":","`","~neptune.experiments.Experiment.log_metric","`",",",":","meth",":","`","~neptune.experiments.Experiment.log_text","`",",",":","meth",":","`","~neptune.experiments.Experiment.log_image","`",",",":","meth",":","`","~neptune.experiments.Experiment.set_property","`",",","and","much","more",".","Args",":","backend","(",":","obj",":","`","neptune.ApiClient","`",")",":","A","ApiClient","object","project","(",":","obj",":","`","neptune.Project","`",")",":","The","project","this","experiment","belongs","to","_id","(",":","obj",":","`","str","`",")",":","Experiment","id","internal_id","(",":","obj",":","`","str","`",")",":","internal","ID","Example",":","Assuming","that","`","project","`","is","an","instance","of",":","class",":","`","~neptune.projects.Project","`",".","..","code",":",":","python3","experiment","=","project.create_experiment","(",")","Warning",":","User","should","never","create","instances","of","this","class","manually",".","Always","use",":",":","meth",":","`","~neptune.projects.Project.create_experiment","`","."]
docstr: Save an artifact (file) in experiment storage.
  
  Args:
      artifact (:obj:`str` or :obj:`IO object`):
          A path to the file in local filesystem or IO object. It can be open
          file descriptor or in-memory buffer like `io.StringIO` or `io.BytesIO`.
      destination (:obj:`str`, optional, default is ``None``):
          A destination path.
          If ``None`` is passed, an artifact file name will be used.
  
  Note:
      If you use in-memory buffers like `io.StringIO` or `io.BytesIO`, remember that in typical case when you
      write to such a buffer, it's current position is set to the end of the stream, so in order to read it's
      content, you need to move back it's position to the beginning.
      We recommend to call seek(0) on the in-memory buffers before passing it to Neptune.
      Additionally, if you provide `io.StringIO`, it will be encoded in 'utf-8' before sent to Neptune.
  
  Raises:
      `FileNotFound`: When ``artifact`` file was not found.
      `StorageLimitReached`: When storage limit in the project has been reached.
  
  Example:
      Assuming that `experiment` is an instance of :class:`~neptune.experiments.Experiment`:
  
      .. code:: python3
  
          # simple use
          experiment.log_artifact('images/wrong_prediction_1.png')
  
          # save file in other directory
          experiment.log_artifact('images/wrong_prediction_1.png', 'validation/images/wrong_prediction_1.png')
  
          # save file under different name
          experiment.log_artifact('images/wrong_prediction_1.png', 'images/my_image_1.png')
docstr_tok: ["Save","an","artifact","(","file",")","in","experiment","storage",".","Args",":","artifact","(",":","obj",":","`","str","`","or",":","obj",":","`","IO","object","`",")",":","A","path","to","the","file","in","local","filesystem","or","IO","object",".","It","can","be","open","file","descriptor","or","in-memory","buffer","like","`","io.StringIO","`","or","`","io.BytesIO","`",".","destination","(",":","obj",":","`","str","`",",","optional",",","default","is","``","None","``",")",":","A","destination","path",".","If","``","None","``","is","passed",",","an","artifact","file","name","will","be","used",".","Note",":","If","you","use","in-memory","buffers","like","`","io.StringIO","`","or","`","io.BytesIO","`",",","remember","that","in","typical","case","when","you","write","to","such","a","buffer",",","it","'s","current","position","is","set","to","the","end","of","the","stream",",","so","in","order","to","read","it's","content",",","you","need","to","move","back","it","'s","position","to","the","beginning",".","We","recommend","to","call","seek","(","0",")","on","the","in-memory","buffers","before","passing","it","to","Neptune",".","Additionally",",","if","you","provide","`","io.StringIO","`",",","it","will","be","encoded","in","'utf-8","'","before","sent","to","Neptune",".","Raises",":","`","FileNotFound","`",":","When","``","artifact","``","file","was","not","found",".","`","StorageLimitReached","`",":","When","storage","limit","in","the","project","has","been","reached",".","Example",":","Assuming","that","`","experiment","`","is","an","instance","of",":","class",":","`","~neptune.experiments.Experiment","`",":","..","code",":",":","python3","#","simple","use","experiment.log_artifact","(","'images\/wrong_prediction_1.png","'",")","#","save","file","in","other","directory","experiment.log_artifact","(","'images\/wrong_prediction_1.png","'",",","'validation\/images\/wrong_prediction_1.png","'",")","#","save","file","under","different","name","experiment.log_artifact","(","'images\/wrong_prediction_1.png","'",",","'images\/my_image_1.png","'",")"]
code: def log_artifact(self, artifact, destination=None):
      """Save an artifact (file) in experiment storage.
  
      Args:
          artifact (:obj:`str` or :obj:`IO object`):
              A path to the file in local filesystem or IO object. It can be open
              file descriptor or in-memory buffer like `io.StringIO` or `io.BytesIO`.
          destination (:obj:`str`, optional, default is ``None``):
              A destination path.
              If ``None`` is passed, an artifact file name will be used.
  
      Note:
          If you use in-memory buffers like `io.StringIO` or `io.BytesIO`, remember that in typical case when you
          write to such a buffer, it's current position is set to the end of the stream, so in order to read it's
          content, you need to move back it's position to the beginning.
          We recommend to call seek(0) on the in-memory buffers before passing it to Neptune.
          Additionally, if you provide `io.StringIO`, it will be encoded in 'utf-8' before sent to Neptune.
  
      Raises:
          `FileNotFound`: When ``artifact`` file was not found.
          `StorageLimitReached`: When storage limit in the project has been reached.
  
      Example:
          Assuming that `experiment` is an instance of :class:`~neptune.experiments.Experiment`:
  
          .. code:: python3
  
              # simple use
              experiment.log_artifact('images/wrong_prediction_1.png')
  
              # save file in other directory
              experiment.log_artifact('images/wrong_prediction_1.png', 'validation/images/wrong_prediction_1.png')
  
              # save file under different name
              experiment.log_artifact('images/wrong_prediction_1.png', 'images/my_image_1.png')
      """
      self._backend.log_artifact(self, artifact, destination)
  
imports: import base64
  import logging
  import traceback
  import pandas
  import six
  from pandas.errors import EmptyDataError
  from neptune.common.experiments import LegacyExperiment
  from neptune.common.utils import align_channels_on_x, is_float, is_nan_or_inf
  from neptune.legacy.api_exceptions import ChannelDoesNotExist, ExperimentAlreadyFinished
  from neptune.legacy.exceptions import InvalidChannelValue, NeptuneIncorrectImportException, NoChannelValue
  from neptune.legacy.internal.channels.channels import ChannelNamespace, ChannelType, ChannelValue
  from neptune.legacy.internal.channels.channels_values_sender import ChannelsValuesSender
  from neptune.legacy.internal.execution.execution_context import ExecutionContext
  from neptune.legacy.internal.utils.deprecation import legacy_client_deprecation
  from neptune.legacy.internal.utils.image import get_image_content
label_desc: Use image node_id 26 for calling the Experiment obj's underlying member method code with example usage: obj.log_artifact(artifact, destination) without return types