docs: def reset_datasec(cutout, datasec, naxis1, naxis2):
      """
      reset the datasec to account for a possible cutout.
  
      @param cutout:
      @param datasec:
      @param naxis1: size of the original image in the 'x' direction
      @param naxis2: size of the oringal image in the 'y' direction
      @return:
      """
  
      if cutout is None or cutout == "[*,*]":
          return datasec
      try:
          datasec = datasec_to_list(datasec)
      except:
          return datasec
  
      # check for '-*' in the cutout string and replace is naxis:1
      cutout = cutout.replace(" ", "")
      cutout = cutout.replace("[-*,", "{}:1,".format(naxis1))
      cutout = cutout.replace(",-*]", ",{}:1]".format(naxis2))
      cutout = cutout.replace("[*,", "[1:{},".format(naxis1))
      cutout = cutout.replace(",*]", ",1:{}]".format(naxis1))
  
      try:
          cutout = [int(x) for x in re.findall(r"([-+]?[*\d]+?)[:,\]]+", cutout)]
      except:
          logger.debug("Failed to processes the cutout pattern: {}".format(cutout))
          return datasec
  
      if len(cutout) == 5:
          # cutout likely starts with extension, remove
          cutout = cutout[1:]
  
      # -ve integer offsets indicate offset from the end of array.
      for idx in [0, 1]:
          if cutout[idx] < 0:
              cutout[idx] = naxis1 - cutout[idx] + 1
      for idx in [2, 3]:
          if cutout[idx] < 0:
              cutout[idx] = naxis2 - cutout[idx] + 1
  
      flip = cutout[0] > cutout[1]
      flop = cutout[2] > cutout[3]
  
      logger.debug("Working with cutout: {}".format(cutout))
  
      if flip:
          cutout = [naxis1 - cutout[0] + 1, naxis1 - cutout[1] + 1, cutout[2], cutout[3]]
          datasec = [naxis1 - datasec[1] + 1, naxis1 - datasec[0] + 1, datasec[2], datasec[3]]
  
      if flop:
          cutout = [cutout[0], cutout[1], naxis2 - cutout[2] + 1, naxis2 - cutout[3] + 1]
          datasec = [datasec[0], datasec[1], naxis2 - datasec[3] + 1, naxis2 - datasec[2] + 1]
  
      datasec = [max(datasec[0] - cutout[0] + 1, 1),
                 min(datasec[1] - cutout[0] + 1, naxis1),
                 max(datasec[2] - cutout[2] + 1, 1),
                 min(datasec[3] - cutout[2] + 1, naxis2)]
  
      return "[{}:{},{}:{}]".format(datasec[0], datasec[1], datasec[2], datasec[3])