aegis_sim.submodels.genetics.architect
Abstract away genetic architecture.
1""" 2Abstract away genetic architecture. 3""" 4 5from aegis_sim.submodels.genetics.envdrift import Envdrift 6from aegis_sim.submodels.genetics.composite.architecture import CompositeArchitecture 7from aegis_sim.submodels.genetics.modifying.architecture import ModifyingArchitecture 8from aegis_sim.dataclasses.phenotypes import Phenotypes 9 10 11class Architect: 12 """Wrapper for a genetic architecture""" 13 14 def __init__(self, BITS_PER_LOCUS, PHENOMAP, AGE_LIMIT, THRESHOLD, ENVDRIFT_RATE, GENARCH_TYPE, MODIF_GENOME_SIZE): 15 16 assert GENARCH_TYPE in ("modifying", "composite") 17 18 if GENARCH_TYPE == "modifying": 19 assert ( 20 BITS_PER_LOCUS == 1 21 ), f"BITS_PER_LOCUS should be 1 if PHENOMAP is specified but it is set to {BITS_PER_LOCUS}" 22 architecture = ModifyingArchitecture( 23 PHENOMAP=PHENOMAP, 24 AGE_LIMIT=AGE_LIMIT, 25 MODIF_GENOME_SIZE=MODIF_GENOME_SIZE, 26 ) 27 28 elif GENARCH_TYPE == "composite": 29 architecture = CompositeArchitecture( 30 BITS_PER_LOCUS=BITS_PER_LOCUS, 31 AGE_LIMIT=AGE_LIMIT, 32 THRESHOLD=THRESHOLD, 33 ) 34 self.architecture = architecture 35 self.envdrift = Envdrift(ENVDRIFT_RATE=ENVDRIFT_RATE, genome_shape=self.architecture.get_shape()) 36 37 def __call__(self, genomes): 38 """Translate genomes into an array of phenotypes probabilities.""" 39 40 # Apply the envdrift 41 envgenomes = self.envdrift.call(genomes.get_array()) 42 assert envgenomes.shape == genomes.shape() # envgenome retains the same shape as genome array 43 44 pheno_array = self.architecture.compute(envgenomes) 45 assert len(pheno_array) == len(genomes) # no individuals are lost during the computation 46 47 smooth_pheno_array = Phenotypes.gaussian_smoothing(pheno_array) 48 phenotypes = Phenotypes(smooth_pheno_array) 49 50 return phenotypes
class
Architect:
12class Architect: 13 """Wrapper for a genetic architecture""" 14 15 def __init__(self, BITS_PER_LOCUS, PHENOMAP, AGE_LIMIT, THRESHOLD, ENVDRIFT_RATE, GENARCH_TYPE, MODIF_GENOME_SIZE): 16 17 assert GENARCH_TYPE in ("modifying", "composite") 18 19 if GENARCH_TYPE == "modifying": 20 assert ( 21 BITS_PER_LOCUS == 1 22 ), f"BITS_PER_LOCUS should be 1 if PHENOMAP is specified but it is set to {BITS_PER_LOCUS}" 23 architecture = ModifyingArchitecture( 24 PHENOMAP=PHENOMAP, 25 AGE_LIMIT=AGE_LIMIT, 26 MODIF_GENOME_SIZE=MODIF_GENOME_SIZE, 27 ) 28 29 elif GENARCH_TYPE == "composite": 30 architecture = CompositeArchitecture( 31 BITS_PER_LOCUS=BITS_PER_LOCUS, 32 AGE_LIMIT=AGE_LIMIT, 33 THRESHOLD=THRESHOLD, 34 ) 35 self.architecture = architecture 36 self.envdrift = Envdrift(ENVDRIFT_RATE=ENVDRIFT_RATE, genome_shape=self.architecture.get_shape()) 37 38 def __call__(self, genomes): 39 """Translate genomes into an array of phenotypes probabilities.""" 40 41 # Apply the envdrift 42 envgenomes = self.envdrift.call(genomes.get_array()) 43 assert envgenomes.shape == genomes.shape() # envgenome retains the same shape as genome array 44 45 pheno_array = self.architecture.compute(envgenomes) 46 assert len(pheno_array) == len(genomes) # no individuals are lost during the computation 47 48 smooth_pheno_array = Phenotypes.gaussian_smoothing(pheno_array) 49 phenotypes = Phenotypes(smooth_pheno_array) 50 51 return phenotypes
Wrapper for a genetic architecture
Architect( BITS_PER_LOCUS, PHENOMAP, AGE_LIMIT, THRESHOLD, ENVDRIFT_RATE, GENARCH_TYPE, MODIF_GENOME_SIZE)
15 def __init__(self, BITS_PER_LOCUS, PHENOMAP, AGE_LIMIT, THRESHOLD, ENVDRIFT_RATE, GENARCH_TYPE, MODIF_GENOME_SIZE): 16 17 assert GENARCH_TYPE in ("modifying", "composite") 18 19 if GENARCH_TYPE == "modifying": 20 assert ( 21 BITS_PER_LOCUS == 1 22 ), f"BITS_PER_LOCUS should be 1 if PHENOMAP is specified but it is set to {BITS_PER_LOCUS}" 23 architecture = ModifyingArchitecture( 24 PHENOMAP=PHENOMAP, 25 AGE_LIMIT=AGE_LIMIT, 26 MODIF_GENOME_SIZE=MODIF_GENOME_SIZE, 27 ) 28 29 elif GENARCH_TYPE == "composite": 30 architecture = CompositeArchitecture( 31 BITS_PER_LOCUS=BITS_PER_LOCUS, 32 AGE_LIMIT=AGE_LIMIT, 33 THRESHOLD=THRESHOLD, 34 ) 35 self.architecture = architecture 36 self.envdrift = Envdrift(ENVDRIFT_RATE=ENVDRIFT_RATE, genome_shape=self.architecture.get_shape())