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: The goal of this function is to allow user to call experiment.log_* with any of:
      - single parameter treated as y value
      - both parameters (named/unnamed)
      - single named y parameter
  If intended X-coordinate is provided, it is validated to be a float value
docstr_tok: ["The","goal","of","this","function","is","to","allow","user","to","call","experiment.log_","*","with","any","of",":","-","single","parameter","treated","as","y","value","-","both","parameters","(","named\/unnamed",")","-","single","named","y","parameter","If","intended","X-coordinate","is","provided",",","it","is","validated","to","be","a","float","value"]
code: def _get_valid_x_y(x, y):
      """
      The goal of this function is to allow user to call experiment.log_* with any of:
          - single parameter treated as y value
          - both parameters (named/unnamed)
          - single named y parameter
      If intended X-coordinate is provided, it is validated to be a float value
      """
      if x is None and y is None:
          raise NoChannelValue()
  
      if x is None and y is not None:
          return None, y
  
      if x is not None and y is None:
          return None, x
  
      if x is not None and y is not None:
          if not is_float(x):
              raise InvalidChannelValue(
                  expected_type="float", actual_type=type(x).__name__
              )
          return x, y
  
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 47 for calling the Experiment obj's underlying member method code with example usage: obj._get_valid_x_y(x, y) and returns: None,  y, None,  x, x,  y