code: def epcr_primers(self, primerfile):
          
          logging.info('Populating primer dictionaries')
          for record in SeqIO.parse(primerfile, 'fasta'):
              # from https://stackoverflow.com/a/27552377 - find any degenerate bases in the primer sequence, and
              # create all possibilities as a list
              degenerates = Seq.IUPAC.IUPACData.ambiguous_dna_values
              primerlist = list(map(''.join, product(*map(degenerates.get, str(record.seq).upper()))))
              # As the record.id is being updated in the loop below, set the name of the primer here so that will
              # be able to be recalled when setting the new record.ids
              primername = record.id
              # Iterate through all the possible primers created from any degenerate bases
              for primer in primerlist:
                  # Split the base name of the target from the direction
                  # e.g. vtx1a-F1 is split in vtx1a and F1
                  basename, direction = primername.split('-')
                  # Populate the dictionaries of forward and reverse primers based on the direction determined above
                  if direction.startswith('F'):
                      # Attempt to add the current primer sequence to the dictionary
                      try:
                          self.forward_dict[basename].append(primer)
                      # On a key error, initialise the list of primers
                      except KeyError:
                          self.forward_dict[basename] = list()
                          self.forward_dict[basename].append(primer)
                  else:
                      try:
                          self.reverse_dict[basename].append(primer)
                      except KeyError:
                          self.reverse_dict[basename] = list()
                          self.reverse_dict[basename].append(primer)
docs: Read in the primer file, and create a properly formatted output file that takes any degenerate bases
          into account