docs: def _constrain_pan(self):
          """Constrain bounding box."""
          if self.xmin is not None and self.xmax is not None:
              p0 = self.xmin + 1. / self._zoom[0]
              p1 = self.xmax - 1. / self._zoom[0]
              p0, p1 = min(p0, p1), max(p0, p1)
              self._pan[0] = np.clip(self._pan[0], p0, p1)
  
          if self.ymin is not None and self.ymax is not None:
              p0 = self.ymin + 1. / self._zoom[1]
              p1 = self.ymax - 1. / self._zoom[1]
              p0, p1 = min(p0, p1), max(p0, p1)
              self._pan[1] = np.clip(self._pan[1], p0, p1)