Extract a subsequence from this sequence using coordinates that are
    relative to the start (relative position 1) and end coordinates of the
    sequence. For example:

      46  --> A--CTGC-TAGC-GATCGACT <--  62      subsequence(2,7) == CTGC-T

    :param start:      the index marking the start (inclusive) of the
                       subsequence. This is a one-based index, and is in the
                       coordinate space of the sequence (i.e. from 1 to N,
                       where N is the number of non-gap nucleotides in the
                       sequence)
    :param end:        the index marking the end (exclusive) of the
                       subsequence. This is a one-based index, and is in the
                       coordinate space of the sequence (i.e. from 1 to N,
                       where N is the number of non-gap nucleotides in the
                       sequence)

    :return: a new sequence object that represents the subsequence
    :rasie SequenceError: if the start coordinate is less than 1 or the end
                          coordinate is greater than the ungapped length of
                          this sequence.

def relative_subsequence(self, start, end):
    """
    Extract a subsequence from this sequence using coordinates that are
    relative to the start (relative position 1) and end coordinates of the
    sequence. For example:

      46  --> A--CTGC-TAGC-GATCGACT <--  62      subsequence(2,7) == CTGC-T

    :param start:      the index marking the start (inclusive) of the
                       subsequence. This is a one-based index, and is in the
                       coordinate space of the sequence (i.e. from 1 to N,
                       where N is the number of non-gap nucleotides in the
                       sequence)
    :param end:        the index marking the end (exclusive) of the
                       subsequence. This is a one-based index, and is in the
                       coordinate space of the sequence (i.e. from 1 to N,
                       where N is the number of non-gap nucleotides in the
                       sequence)

    :return: a new sequence object that represents the subsequence
    :rasie SequenceError: if the start coordinate is less than 1 or the end
                          coordinate is greater than the ungapped length of
                          this sequence.
    """
    if start < 1:
      raise SequenceError("invalid start coordinate for subsequence: " +
                          str(start))
    if end > self.ungapped_len:
      raise SequenceError("invalid end coordinate for subsequence: " +
                          str(end) + " greater than number of non-gap " +
                          "nucleotides in sequence (" + self.ungapped_len +
                          ")")
    raise SequenceError("method not implemented")