<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def sequence_mutation_summary(self, alignment_ids=None, alignment_type=None):
 """Summarize all mutations found in the sequence_alignments attribute. Returns 2 dictionaries, single_counter and fingerprint_counter. single_counter: Dictionary of ``{point mutation: list of genes/strains}`` Example:: { ('A', 24, 'V'):
 ['Strain1', 'Strain2', 'Strain4'], ('R', 33, 'T'):
 ['Strain2'] } Here, we report which genes/strains have the single point mutation. fingerprint_counter: Dictionary of ``{mutation group: list of genes/strains}`` Example:: { (('A', 24, 'V'), ('R', 33, 'T')):
 ['Strain2'], (('A', 24, 'V')):
 ['Strain1', 'Strain4'] } Here, we report which genes/strains have the specific combinations (or "fingerprints") of point mutations Args: alignment_ids (str, list):
 Specified alignment ID or IDs to use alignment_type (str):
 Specified alignment type contained in the ``annotation`` field of an alignment object, ``seqalign`` or ``structalign`` are the current types. Returns: dict, dict: single_counter, fingerprint_counter """

        if alignment_ids:
            ssbio.utils.force_list(alignment_ids)

        if len(self.sequence_alignments) == 0:
            log.error('{}: no sequence alignments'.format(self.id))
            return {}, {}

        fingerprint_counter = defaultdict(list)
        single_counter = defaultdict(list)

        for alignment in self.sequence_alignments:
            # Ignore alignments if a list of identifiers is provided
            if alignment_ids:
                if alignment.id not in alignment_ids:
                    continue
            # Ignore alignments if type is specified
            if alignment_type:
                if alignment.annotations['ssbio_type'] != alignment_type:
                    continue

            other_sequence = alignment.annotations['b_seq']
            mutations = alignment.annotations['mutations']

            if mutations:
                # Turn this list of mutations into a tuple so it can be a dictionary key
                mutations = tuple(tuple(x) for x in mutations)
                fingerprint_counter[mutations].append(other_sequence)

                for m in mutations:
                    single_counter[m].append(other_sequence)

        return dict(single_counter), dict(fingerprint_counter)