code: def fullcomp(seq):
      
      ## this is surely not the most efficient...
      seq = seq.replace("A", 'u')\
               .replace('T', 'v')\
               .replace('C', 'p')\
               .replace('G', 'z')\
               .replace('u', 'T')\
               .replace('v', 'A')\
               .replace('p', 'G')\
               .replace('z', 'C')
  
      ## No complement for S & W b/c complements are S & W, respectively
      seq = seq.replace('R', 'u')\
               .replace('K', 'v')\
               .replace('Y', 'b')\
               .replace('M', 'o')\
               .replace('u', 'Y')\
               .replace('v', 'M')\
               .replace('b', 'R')\
               .replace('o', 'K')
  
      seq = seq.replace('r', 'u')\
               .replace('k', 'v')\
               .replace('y', 'b')\
               .replace('m', 'o')\
               .replace('u', 'y')\
               .replace('v', 'm')\
               .replace('b', 'r')\
               .replace('o', 'k')
      return seq
docs: returns complement of sequence including ambiguity characters,
      and saves lower case info for multiple hetero sequences