Lift a region that overlaps the genomic occurrence of the retrotransposon
    to consensus sequence co-ordinates. Use only the coordinates of the
    occurrence and the consensus match (i.e. ignore a full alignment, even
    if one is present). If the genomic size of the match is the same as the
    size of the match in the consensus sequence then it is assumed no indels
    are present in either sequence, otherwise indels are assumed to exist
    uniformly distributed along the sequences to make their lengths match.

    :param intersect_region: a region that intersects this occurrence.
    :return: list of GenomicInterval objects. This is a list because a genomic
             deletion of part of the retrotransposon can fragment the
             intersecting region and result in more than one returned interval.

def liftover_coordinates(self, intersecting_region):
    """
    Lift a region that overlaps the genomic occurrence of the retrotransposon
    to consensus sequence co-ordinates. Use only the coordinates of the
    occurrence and the consensus match (i.e. ignore a full alignment, even
    if one is present). If the genomic size of the match is the same as the
    size of the match in the consensus sequence then it is assumed no indels
    are present in either sequence, otherwise indels are assumed to exist
    uniformly distributed along the sequences to make their lengths match.

    :param intersect_region: a region that intersects this occurrence.
    :return: list of GenomicInterval objects. This is a list because a genomic
             deletion of part of the retrotransposon can fragment the
             intersecting region and result in more than one returned interval.
    """
    # a little sanity check here to make sure intersecting_region really does..
    if not self.intersects(intersecting_region):
      raise RetrotransposonError("trying to lift " + str(intersecting_region) +
                                 " from genomic to transposon coordinates " +
                                 "in " + str(self) + ", but it doesn't " +
                                 "intersect!")

    consensus_match_length = self.consensus_end - self.consensus_start
    size_dif = consensus_match_length - len(self)

    if size_dif == 0:
      # put this in a list, even though we know we're getting only one
      # interval, to make the return type consistent
      return [self.__liftover_coordinates_size_match(intersecting_region)]
    else:
      return self.__liftover_coordinates_genomic_indels(intersecting_region)