aegis_sim.submodels.reproduction.pairing

 1import numpy as np
 2from aegis_sim import variables
 3from aegis_sim.dataclasses.genomes import Genomes
 4from aegis_sim import submodels
 5
 6
 7def pairing(genomes: Genomes, parental_sexes, ages, muta_prob):
 8    """Return assorted chromatids."""
 9
10    # Get pairs
11    males, females = submodels.matingmanager.pair_up_polygamously(parental_sexes)
12    assert len(males) == len(females)
13    n_pairs = len(males)
14
15    # Which gamete
16    male_genomes = genomes.get(individuals=males)
17    which_gamete = (variables.rng.random(n_pairs) < 0.5).astype(np.int32)
18    male_gametes = male_genomes[np.arange(n_pairs), which_gamete]
19
20    female_genomes = genomes.get(individuals=females)
21    which_gamete = (variables.rng.random(n_pairs) < 0.5).astype(np.int32)
22    female_gametes = female_genomes[np.arange(n_pairs), which_gamete]
23
24    # Unify gametes
25    gshape = genomes.shape()
26    children = np.empty(shape=(n_pairs, *gshape[1:]), dtype=np.bool_)
27    children[np.arange(n_pairs), 0] = male_gametes
28    children[np.arange(n_pairs), 1] = female_gametes
29
30    # TODO fix splitting of ages and muta_prob
31    return children, ages[females], muta_prob[females]
def pairing( genomes: aegis_sim.dataclasses.genomes.Genomes, parental_sexes, ages, muta_prob):
 8def pairing(genomes: Genomes, parental_sexes, ages, muta_prob):
 9    """Return assorted chromatids."""
10
11    # Get pairs
12    males, females = submodels.matingmanager.pair_up_polygamously(parental_sexes)
13    assert len(males) == len(females)
14    n_pairs = len(males)
15
16    # Which gamete
17    male_genomes = genomes.get(individuals=males)
18    which_gamete = (variables.rng.random(n_pairs) < 0.5).astype(np.int32)
19    male_gametes = male_genomes[np.arange(n_pairs), which_gamete]
20
21    female_genomes = genomes.get(individuals=females)
22    which_gamete = (variables.rng.random(n_pairs) < 0.5).astype(np.int32)
23    female_gametes = female_genomes[np.arange(n_pairs), which_gamete]
24
25    # Unify gametes
26    gshape = genomes.shape()
27    children = np.empty(shape=(n_pairs, *gshape[1:]), dtype=np.bool_)
28    children[np.arange(n_pairs), 0] = male_gametes
29    children[np.arange(n_pairs), 1] = female_gametes
30
31    # TODO fix splitting of ages and muta_prob
32    return children, ages[females], muta_prob[females]

Return assorted chromatids.