docs: def bounding_boxes(self):
          """
          A list of minimal bounding boxes (`~photutils.BoundingBox`), one
          for each position, enclosing the exact elliptical apertures.
          """
  
          cos_theta = np.cos(self.theta)
          sin_theta = np.sin(self.theta)
          ax = self.a_out * cos_theta
          ay = self.a_out * sin_theta
          bx = self.b_out * -sin_theta
          by = self.b_out * cos_theta
          dx = np.sqrt(ax*ax + bx*bx)
          dy = np.sqrt(ay*ay + by*by)
  
          xmin = self.positions[:, 0] - dx
          xmax = self.positions[:, 0] + dx
          ymin = self.positions[:, 1] - dy
          ymax = self.positions[:, 1] + dy
  
          return [BoundingBox._from_float(x0, x1, y0, y1)
                  for x0, x1, y0, y1 in zip(xmin, xmax, ymin, ymax)]