If this sequence is the prefix of another sequence, combine
        them into a single VariantSequence object. If the other sequence
        is contained in this one, then add its reads to this VariantSequence.
        Also tries to flip the order (e.g. this sequence is a suffix or
        this sequence is a subsequence). If sequences can't be combined
        then returns None.

def combine(self, other_sequence):
        """
        If this sequence is the prefix of another sequence, combine
        them into a single VariantSequence object. If the other sequence
        is contained in this one, then add its reads to this VariantSequence.
        Also tries to flip the order (e.g. this sequence is a suffix or
        this sequence is a subsequence). If sequences can't be combined
        then returns None.
        """
        if other_sequence.alt != self.alt:
            logger.warn(
                "Cannot combine %s and %s with mismatching alt sequences",
                self,
                other_sequence)
            return None
        elif self.contains(other_sequence):
            return self.add_reads(other_sequence.reads)
        elif other_sequence.contains(self):
            return other_sequence.add_reads(self.reads)
        elif self.left_overlaps(other_sequence):
            # If sequences are like AABC and ABCC
            return VariantSequence(
                prefix=self.prefix,
                alt=self.alt,
                suffix=other_sequence.suffix,
                reads=self.reads.union(other_sequence.reads))
        elif other_sequence.left_overlaps(self):
            return VariantSequence(
                prefix=other_sequence.prefix,
                alt=self.alt,
                suffix=self.suffix,
                reads=self.reads.union(other_sequence.reads))
        else:
            # sequences don't overlap
            return None