docs: def verify_axis_labels(self, expected, actual, source_name):
          """Verify that axis labels for a given source are as expected.
  
          Parameters
          ----------
          expected : tuple
              A tuple of strings representing the expected axis labels.
          actual : tuple or None
              A tuple of strings representing the actual axis labels, or
              `None` if they could not be determined.
          source_name : str
              The name of the source being checked. Used for caching the
              results of checks so that the check is only performed once.
  
          Notes
          -----
          Logs a warning in case of `actual=None`, raises an error on
          other mismatches.
  
          """
          if not getattr(self, '_checked_axis_labels', False):
              self._checked_axis_labels = defaultdict(bool)
          if not self._checked_axis_labels[source_name]:
              if actual is None:
                  log.warning("%s instance could not verify (missing) axis "
                              "expected %s, got None",
                              self.__class__.__name__, expected)
              else:
                  if expected != actual:
                      raise AxisLabelsMismatchError("{} expected axis labels "
                                                    "{}, got {} instead".format(
                                                        self.__class__.__name__,
                                                        expected, actual))
              self._checked_axis_labels[source_name] = True