docs: def keplerian_sheared_field_locations(ax, kbos, date, ras, decs, names, elongation=False, plot=False):
      """
      Shift fields from the discovery set to the requested date by the average motion of L7 kbos in the discovery field.
      :param ras:
      :param decs:
      :param plot:
      :param ax:
      :param kbos: precomputed at the discovery date for that block. e.g. Oct new moon for 13B
      :param date:
      :param names:
      :param elongation:
      """
      seps = {'dra': 0., 'ddec': 0.}
      for kbo in kbos:
          ra = kbo.ra
          dec = kbo.dec
          kbo.compute(date)
          seps['dra'] += kbo.ra - ra
          seps['ddec'] += kbo.dec - dec
  
      seps['dra'] /= float(len(kbos))
      seps['ddec'] /= float(len(kbos))
  
      print date, seps, len(kbos)
  
      for idx in range(len(ras)):
          name = names[idx]
          ra = ras[idx] + seps['dra']
          dec = decs[idx] + seps['ddec']
          if plot:
              ax.add_artist(Rectangle(xy=(math.degrees(ra) - camera_dimen / 2.0, math.degrees(dec) - camera_dimen / 2.0),
                                      height=camera_dimen,
                                      width=camera_dimen,
                                      edgecolor='b',
                                      facecolor='b',
                                      lw=0.5, fill=True, alpha=0.2))
          if elongation:
              # For each field centre, plot the elongation onto the field at that date.
              elong = field_elongation(ephem.degrees(ra), ephem.degrees(dec), date)
              ax.annotate(name, (math.degrees(ra) + camera_dimen / 2., math.degrees(dec)), size=3)
              ax.annotate("%0.1f" % elong, (math.degrees(ra) + camera_dimen / 4., math.degrees(dec) - camera_dimen / 4.),
                          size=5)
  
      return ax