class_docstr: : A matplotlib converter class.  Provides matplotlib conversion
       functionality for string data values.
  
  Valid units for string are:
  - 'indexed' : Values are indexed as they are specified for plotting.
  - 'sorted'  : Values are sorted alphanumerically.
  - 'inverted' : Values are inverted so that the first value is on top.
  - 'sorted-inverted' :  A combination of 'sorted' and 'inverted'
docstr: : Convert value using unit to a float.  If value is a sequence, return
  the converted sequence.
  
  = INPUT VARIABLES
  - axis    The axis using this converter.
  - value   The value or list of values that need to be converted.
  - unit    The units to use for a axis with Epoch data.
  
  = RETURN VALUE
  - Returns the value parameter converted to floats.
code: def convert(value, unit, axis):
      """: Convert value using unit to a float.  If value is a sequence, return
      the converted sequence.
  
      = INPUT VARIABLES
      - axis    The axis using this converter.
      - value   The value or list of values that need to be converted.
      - unit    The units to use for a axis with Epoch data.
  
      = RETURN VALUE
      - Returns the value parameter converted to floats.
      """
  
      if units.ConversionInterface.is_numlike(value):
          return value
  
      if value == []:
          return []
  
      # we delay loading to make matplotlib happy
      ax = axis.axes
      if axis is ax.get_xaxis():
          isXAxis = True
      else:
          isXAxis = False
  
      axis.get_major_ticks()
      ticks = axis.get_ticklocs()
      labels = axis.get_ticklabels()
  
      labels = [l.get_text() for l in labels if l.get_text()]
  
      if not labels:
          ticks = []
          labels = []
  
      if not iterable(value):
          value = [value]
  
      newValues = []
      for v in value:
          if (v not in labels) and (v not in newValues):
              newValues.append(v)
  
      for v in newValues:
          if labels:
              labels.append(v)
          else:
              labels = [v]
  
      # DISABLED: This is disabled because matplotlib bar plots do not
      # DISABLED: recalculate the unit conversion of the data values
      # DISABLED: this is due to design and is not really a bug.
      # DISABLED: If this gets changed, then we can activate the following
      # DISABLED: block of code.  Note that this works for line plots.
      # DISABLED if ( unit ):
      # DISABLED    if ( unit.find( "sorted" ) > -1 ):
      # DISABLED       labels.sort()
      # DISABLED    if ( unit.find( "inverted" ) > -1 ):
      # DISABLED       labels = labels[ ::-1 ]
  
      # add padding (so they do not appear on the axes themselves)
      labels = [""] + labels + [""]
      ticks = list(xrange(len(labels)))
      ticks[0] = 0.5
      ticks[-1] = ticks[-1] - 0.5
  
      axis.set_ticks(ticks)
      axis.set_ticklabels(labels)
      # we have to do the following lines to make ax.autoscale_view work
      loc = axis.get_major_locator()
      loc.set_bounds(ticks[0], ticks[-1])
  
      if isXAxis:
          ax.set_xlim(ticks[0], ticks[-1])
      else:
          ax.set_ylim(ticks[0], ticks[-1])
  
      result = []
      for v in value:
          # If v is not in labels then something went wrong with adding new
          # labels to the list of old labels.
          errmsg = "This is due to a logic error in the StrConverter class.  "
          errmsg += (
              "Please report this error and its message in bugzilla."
          )
          assert v in labels, errmsg
          result.append(ticks[labels.index(v)])
  
      ax.viewLim.ignore(-1)
      return result
  
file_path: catboost/contrib/python/matplotlib/py2/matplotlib/testing/jpl_units/StrConverter.py
imports: from __future__ import absolute_import, division, print_function, unicode_literals
  import six
  from six.moves import xrange
  import matplotlib.units
  from matplotlib.cbook import iterable
label_desc: Use image node_id 2 for calling the StrConverter obj's underlying member method code with example usage: obj.convert(value, unit, axis) and returns: result, value, list