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]
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.