Extract meta data from pre-tokenized maf i-line and populate sequence.

  i -- always come after s lines, and contain information about the context of
       the sequence. Five fields are given, not counting the 'i'
          * source sequence (must match s line before this)
          * left status (see below)
          * left count; num of bases in source sequence between start of the
            block and end of previous block (0 if this is the first)
          * right status (see below)
          * right count; num of bases in source after end of this block before
            start of next
       status (left/right) is a single char and can be:
          * C -- the sequence before or after is contiguous with this block.
          * I -- there are bases between the bases in this block and the one
                 before or after it.
          * N -- this is the first sequence from this src chrom or scaffold.
          * n -- this is the first sequence from this src chrom or scaffold but
                 it is bridged by another alignment from a different chrom or
                 scaffold.
          * M -- there is missing data before or after this block (Ns in the
                 sequence).
          * T -- the sequence in this block has been used before in a previous
                 block (likely a tandem duplication)

def __annotate_sequence_with_context(seq, i_line_parts):
  """Extract meta data from pre-tokenized maf i-line and populate sequence.

  i -- always come after s lines, and contain information about the context of
       the sequence. Five fields are given, not counting the 'i'
          * source sequence (must match s line before this)
          * left status (see below)
          * left count; num of bases in source sequence between start of the
            block and end of previous block (0 if this is the first)
          * right status (see below)
          * right count; num of bases in source after end of this block before
            start of next
       status (left/right) is a single char and can be:
          * C -- the sequence before or after is contiguous with this block.
          * I -- there are bases between the bases in this block and the one
                 before or after it.
          * N -- this is the first sequence from this src chrom or scaffold.
          * n -- this is the first sequence from this src chrom or scaffold but
                 it is bridged by another alignment from a different chrom or
                 scaffold.
          * M -- there is missing data before or after this block (Ns in the
                 sequence).
          * T -- the sequence in this block has been used before in a previous
                 block (likely a tandem duplication)
  """
  if i_line_parts[1] != seq.name:
    raise MAFError("Trying to populate meta data for sequence " + seq.name +
                   " with i-line information for " +
                   str(i_line_parts[1]) + "; maflormed MAF file?")
  if len(i_line_parts) != 6:
    raise MAFError("i-line with " + str(len(i_line_parts)) + "; expected 6.")
  seq.meta_data[LEFT_STATUS_KEY] = i_line_parts[2]
  seq.meta_data[LEFT_COUNT_KEY] = int(i_line_parts[3])
  seq.meta_data[RIGHT_STATUS_KEY] = i_line_parts[4]
  seq.meta_data[RIGHT_COUNT_KEY] = int(i_line_parts[5])