code: def findepochrange(epochs, starttime=None, endtime=None):  # @NoSelf
          
          if (isinstance(epochs, float) or isinstance(epochs, np.float64)):
              return CDFepoch.epochrange_epoch(epochs, starttime, endtime)
          elif (isinstance(epochs, int) or isinstance(epochs, np.int64)):
              return CDFepoch.epochrange_tt2000(epochs, starttime, endtime)
          elif isinstance(epochs, (complex, np.complex128)):
              return CDFepoch.epochrange_epoch16(epochs, starttime, endtime)
          elif isinstance(epochs, (list, tuple, np.ndarray)):
              if (isinstance(epochs[0], float) or
                      isinstance(epochs[0], np.float64)):
                  return CDFepoch.epochrange_epoch(epochs, starttime, endtime)
              elif (isinstance(epochs[0], int) or
                    isinstance(epochs[0], np.int64)):
                  return CDFepoch.epochrange_tt2000(epochs, starttime, endtime)
              elif (isinstance(epochs[0], complex) or
                    isinstance(epochs[0], np.complex128)):
                  return CDFepoch.epochrange_epoch16(epochs, starttime, endtime)
              else:
                  print('Bad input')
                  return None
          else:
              print('Bad input')
              return None
docs: Finds the record range within the start and end time from values
          of a CDF epoch data type. It returns a list of record numbers.
          If the start time is not provided, then it is
          assumed to be the minimum possible value. If the end time is not
          provided, then the maximum possible value is assumed. The epoch is
          assumed to be in the chronological order. The start and end times
          should have the proper number of date/time components, corresponding
          to the epoch's data type.
  
          The start/end times should be in either be in epoch units, or in the list
          format described in "compute_epoch/epoch16/tt2000" section.