class_docstr: An Axis class for the 3D plots.
code: def _draw_offset_text(
      self,
      renderer,
      edgep1,
      edgep2,
      labeldeltas,
      centers,
      highs,
      pep,
      dx,
      dy,
  ):
      # Get general axis information:
      info = self._axinfo
      index = info["i"]
      juggled = info["juggled"]
      tickdir = info["tickdir"]
  
      # Which of the two edge points do we want to
      # use for locating the offset text?
      if juggled[2] == 2:
          outeredgep = edgep1
          outerindex = 0
      else:
          outeredgep = edgep2
          outerindex = 1
  
      pos = _move_from_center(
          outeredgep, centers, labeldeltas, self._axmask()
      )
      olx, oly, olz = proj3d.proj_transform(*pos, self.axes.M)
      self.offsetText.set_text(self.major.formatter.get_offset())
      self.offsetText.set_position((olx, oly))
      angle = art3d._norm_text_angle(np.rad2deg(np.arctan2(dy, dx)))
      self.offsetText.set_rotation(angle)
      # Must set rotation mode to "anchor" so that
      # the alignment point is used as the "fulcrum" for rotation.
      self.offsetText.set_rotation_mode("anchor")
  
      # ----------------------------------------------------------------------
      # Note: the following statement for determining the proper alignment of
      # the offset text. This was determined entirely by trial-and-error
      # and should not be in any way considered as "the way".  There are
      # still some edge cases where alignment is not quite right, but this
      # seems to be more of a geometry issue (in other words, I might be
      # using the wrong reference points).
      #
      # (TT, FF, TF, FT) are the shorthand for the tuple of
      #   (centpt[tickdir] <= pep[tickdir, outerindex],
      #    centpt[index] <= pep[index, outerindex])
      #
      # Three-letters (e.g., TFT, FTT) are short-hand for the array of bools
      # from the variable 'highs'.
      # ---------------------------------------------------------------------
      centpt = proj3d.proj_transform(*centers, self.axes.M)
      if centpt[tickdir] > pep[tickdir, outerindex]:
          # if FT and if highs has an even number of Trues
          if (
              centpt[index] <= pep[index, outerindex]
              and np.count_nonzero(highs) % 2 == 0
          ):
              # Usually, this means align right, except for the FTT case,
              # in which offset for axis 1 and 2 are aligned left.
              if highs.tolist() == [False, True, True] and index in (
                  1,
                  2,
              ):
                  align = "left"
              else:
                  align = "right"
          else:
              # The FF case
              align = "left"
      else:
          # if TF and if highs has an even number of Trues
          if (
              centpt[index] > pep[index, outerindex]
              and np.count_nonzero(highs) % 2 == 0
          ):
              # Usually mean align left, except if it is axis 2
              align = "right" if index == 2 else "left"
          else:
              # The TT case
              align = "right"
  
      self.offsetText.set_va("center")
      self.offsetText.set_ha(align)
      self.offsetText.draw(renderer)
  
imports: import inspect
  import numpy
  import matplotlib
  from matplotlib import _api, artist, lines, axis, patches, transforms, colors
  from .None import art3d, proj3d
label_desc: Use image node_id 23 for calling the Axis obj's underlying member method code with example usage: obj._draw_offset_text(renderer, edgep1, edgep2, labeldeltas, centers, highs, pep, dx, dy) without return types