<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 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)