docs: def evolve_genomes(rng, pop, params, recorder=None):
      """
      Evolve a population without tree sequence recordings.  In other words,
      complete genomes must be simulated and tracked.
  
      :param rng: random number generator
      :type rng: :class:`fwdpy11.GSLrng`
      :param pop: A population
      :type pop: :class:`fwdpy11.DiploidPopulation`
      :param params: simulation parameters
      :type params: :class:`fwdpy11.ModelParams`
      :param recorder: (None) A temporal sampler/data recorder.
      :type recorder: callable
  
      .. note::
          If recorder is None,
          then :class:`fwdpy11.RecordNothing` will be used.
  
      """
      import warnings
      # Test parameters while suppressing warnings
      with warnings.catch_warnings():
          warnings.simplefilter("ignore")
          # Will throw exception if anything is wrong:
          params.validate()
  
      from ._fwdpy11 import MutationRegions
      from ._fwdpy11 import evolve_without_tree_sequences
      from ._fwdpy11 import dispatch_create_GeneticMap
      pneutral = params.mutrate_n/(params.mutrate_n+params.mutrate_s)
      mm = MutationRegions.create(pneutral, params.nregions, params.sregions)
      rm = dispatch_create_GeneticMap(params.recrate, params.recregions)
  
      if recorder is None:
          from ._fwdpy11 import RecordNothing
          recorder = RecordNothing()
  
      evolve_without_tree_sequences(rng, pop, params.demography,
                                    params.mutrate_n, params.mutrate_s,
                                    params.recrate, mm, rm, params.gvalue,
                                    recorder, params.pself, params.prune_selected)