code: def set_mutation_type(self, mut_type=''):
          
          if mut_type:
              # user specifies a mutation type
              self.mutation_type = mut_type
          else:
              # mutation type is taken from object attributes
              if not self.is_valid:
                  # does not correctly fall into a category
                  self.mutation_type = 'not valid'
              elif self.unknown_effect:
                  self.mutation_type = 'unknown effect'
              elif self.is_no_protein:
                  self.mutation_type = 'no protein'
              elif self.is_missing_info:
                  # mutation has a ?
                  self.mutation_type = 'missing'
              else:
                  # valid mutation type to be counted
                  if self.is_lost_stop:
                      self.mutation_type = 'Nonstop_Mutation'
                  elif self.is_lost_start:
                      self.mutation_type = 'Translation_Start_Site'
                  elif self.is_synonymous:
                      # synonymous must go before missense since mutations
                      # can be categorized as synonymous and missense. Although
                      # in reality such cases are actually synonymous and not
                      # missense mutations.
                      self.mutation_type = 'Silent'
                  elif self.is_missense:
                      self.mutation_type = 'Missense_Mutation'
                  elif self.is_indel:
                      self.mutation_type = 'In_Frame_Indel'
                  elif self.is_nonsense_mutation:
                      self.mutation_type = 'Nonsense_Mutation'
                  elif self.is_frame_shift:
                      self.mutation_type = 'Frame_Shift_Indel'
docs: Sets the mutation type attribute to a single label based on
          attribute flags.
  
          Kwargs:
              mut_type (str): value to set self.mut_type