original_docstring: Mutates population at frequency of mutation_rate
  
          Args:
              population (np.ndarray): the population to mutate. Shape is n_individuals x n_chromosomes.
              mutation_rate (float): decimal value from 0 to 1, default .05
              **kwargs: Keyword arguments for plugins (other than default)
  
          Returns:
              np.ndarray: same shape and dtype as population
  
          
docstring: Mutates population at frequency of mutation_rate
docstring_tokens: Mutates population at frequency of mutation_rate
code: def mutate(self, 
                 *,
                 population: np.ndarray = None,
                 mutation_rate: float = None,
                 **kwargs) -> np.ndarray:
          """Mutates population at frequency of mutation_rate
  
          Args:
              population (np.ndarray): the population to mutate. Shape is n_individuals x n_chromosomes.
              mutation_rate (float): decimal value from 0 to 1, default .05
              **kwargs: Keyword arguments for plugins (other than default)
  
          Returns:
              np.ndarray: same shape and dtype as population
  
          """
          logging.debug('{} {} {} {}'.format(population, mutation_rate))
  
          # combine keyword arguments with **kwargs
          params = locals().copy()
          params.pop('self', None)
          kwargs = params.pop('kwargs')
  
          # if there is a driver, then use it and run once
          if mgr := self.driver_managers.get('mutate'):
              return mgr.driver.mutate(**params, **kwargs)
  
          # otherwise, mutate with first valid plugin
          for ext in self.extension_managers['mutate'].extensions:
              try:
                  return ext.obj.mutate(**params, **kwargs)
              except:
                  continue
code_tokens: def mutate ( self , * , population : np . ndarray = None , mutation_rate : float = None , ** kwargs ) -> np . ndarray : logging . debug ( '{} {} {} {}' . format ( population , mutation_rate ) ) params = locals ( ) . copy ( ) params . pop ( 'self' , None ) kwargs = params . pop ( 'kwargs' ) if mgr := self . driver_managers . get ( 'mutate' ) : return mgr . driver . mutate ( ** params , ** kwargs ) for ext in self . extension_managers [ 'mutate' ] . extensions : try : return ext . obj . mutate ( ** params , ** kwargs ) except : continue
short_docstring: Mutates population at frequency of mutation_rate
short_docstring_tokens: Mutates population at frequency of mutation_rate
comment: """Mutates population at frequency of mutation_rate
  
          Args:
              population (np.ndarray): the population to mutate. Shape is n_individuals x n_chromosomes.
              mutation_rate (float): decimal value from 0 to 1, default .05
              **kwargs: Keyword arguments for plugins (other than default)
  
          Returns:
              np.ndarray: same shape and dtype as population
  
          """$SEP$# combine keyword arguments with **kwargs
  $SEP$# if there is a driver, then use it and run once
  $SEP$# otherwise, mutate with first valid plugin
  