aegis_sim.parameterization.default_parameters

   1from aegis_sim.parameterization.parameter import Parameter
   2
   3
   4def get_default_parameters():
   5    return {p.key: p.default for p in DEFAULT_PARAMETERS.values()}
   6
   7
   8def get_species_parameters(SPECIES_PRESET):
   9    return {p.key: p.presets[SPECIES_PRESET] for p in DEFAULT_PARAMETERS.values() if SPECIES_PRESET in p.presets}
  10
  11
  12# TODO test these
  13# TODO value interpolation between ages?
  14# TODO report invalid values
  15
  16PRESET_INFO = {
  17    "human": "One cycle corresponds to 2 years.",
  18    "mouse": "One cycle corresponds to one month. Source: https://genomics.senescence.info/species/entry.php?species=Mus_musculus",
  19    "killifish": "One cycle corresponds to one week.",
  20    "yeast": "",
  21    "arabidopsis": "",
  22    "worm": "One cycle corresponds to one day. Up to 300 eggs in optimal conditions.",
  23    "fruitfly": "One cycle corresponds to one day. Up to 100 eggs per day.",
  24}
  25
  26# You need the `key` attribute so you can find the param (in a list, you cannot)
  27DEFAULT_PARAMETERS = {
  28    #
  29    #
  30    # RECORDING
  31    "LOGGING_RATE": Parameter(
  32        key="LOGGING_RATE",
  33        name="",
  34        domain="recording",
  35        default=100,
  36        info="Frequency of logging (in steps)",
  37        info_extended="Log files contain information on simulation execution; e.g. errors and speed. 0 for no logging.",
  38        dtype=int,
  39        drange="[0, inf)",
  40        inrange=lambda x: x >= 0,
  41        evalrange=[1, 10000],
  42    ),
  43    "TICKER_RATE": Parameter(
  44        key="TICKER_RATE",
  45        name="",
  46        domain="recording",
  47        default=1,
  48        info="Frequency of ticking (in seconds)",
  49        info_extended="Ticker files contain information on simulation status; e.g. running or finished. Once the simulation is finished, it stops updating the ticker file which indicates the time at which the simulation stopped.",
  50        dtype=float,
  51        drange="[0, inf)",
  52        inrange=lambda x: x >= 0,
  53        evalrange=[1, 10000],
  54        show_in_gui=False,
  55    ),
  56    "PICKLE_RATE": Parameter(
  57        key="PICKLE_RATE",
  58        name="",
  59        domain="recording",
  60        default=10000,
  61        info="Frequency of pickling (in steps)",
  62        info_extended="0 for no pickles",
  63        dtype=int,
  64        drange="[0, inf)",
  65        inrange=lambda x: x >= 0,
  66        serverrange=lambda x: x >= 1000 or x == 0,
  67        serverrange_info="0 or [1000, inf)",
  68        evalrange=[1, 100000],
  69    ),
  70    "SNAPSHOT_RATE": Parameter(
  71        key="SNAPSHOT_RATE",
  72        name="",
  73        domain="recording",
  74        default=10000,
  75        info="Frequency of recording snapshots (in steps)",
  76        info_extended="0 for no snapshots",
  77        dtype=int,
  78        drange="[0, inf)",
  79        inrange=lambda x: x >= 0,
  80        serverrange=lambda x: x >= 1000 or x == 0,
  81        serverrange_info="0 or [1000, inf)",
  82        evalrange=[1, 10000],
  83    ),
  84    "SNAPSHOT_FINAL_COUNT": Parameter(
  85        key="SNAPSHOT_FINAL_COUNT",
  86        name="",
  87        domain="recording",
  88        default=60,
  89        info="Number of subsequent snapshots taken at the end of the simulation (in steps)",
  90        info_extended="0 for no snapshots",
  91        dtype=int,
  92        drange="[0, inf)",
  93        inrange=lambda x: x >= 0,
  94        serverrange=lambda x: 0 <= x <= 60,
  95        serverrange_info="[0, 60]",
  96        evalrange=[1, 10],
  97    ),
  98    "INTERVAL_RATE": Parameter(
  99        key="INTERVAL_RATE",
 100        name="",
 101        domain="recording",
 102        default=1000,
 103        info="Frequency of recording interval data (in steps)",
 104        info_extended="0 for no gui records",
 105        dtype=int,
 106        drange="[0, inf)",
 107        inrange=lambda x: x >= 0,
 108        evalrange=[1, 10000],
 109        serverrange=lambda x: x >= 100,
 110        serverrange_info="[100, inf)",
 111    ),
 112    "TE_RATE": Parameter(
 113        key="TE_RATE",
 114        name="",
 115        domain="recording",
 116        default=10000,
 117        info="Frequency of starting TE cohorts (in steps)",
 118        dtype=int,
 119        drange="[0, inf)",
 120        inrange=lambda x: x >= 0,
 121        evalrange=[1, 10000],
 122        serverrange=lambda x: x >= 100,
 123        serverrange_info="[100, inf)",
 124    ),
 125    "TE_DURATION": Parameter(
 126        key="TE_DURATION",
 127        name="",
 128        domain="recording",
 129        default=500,
 130        info="Length of tracking TE cohorts (in steps)",
 131        dtype=int,
 132        drange="[0, inf)",
 133        inrange=lambda x: x >= 0,
 134        evalrange=[1, 10000],
 135    ),
 136    "POPGENSTATS_RATE": Parameter(
 137        key="POPGENSTATS_RATE",
 138        name="",
 139        domain="recording",
 140        default=1000,
 141        info="Frequency of recording population genetic statistics (in steps)",
 142        info_extended="0 for no recording",
 143        dtype=int,
 144        drange="[0, inf)",
 145        inrange=lambda x: x >= 0,
 146        serverrange=lambda x: x >= 100 or x == 0,
 147        serverrange_info="0 or [100, inf)",
 148        evalrange=[1, 10000],
 149    ),
 150    "POPGENSTATS_SAMPLE_SIZE": Parameter(
 151        key="POPGENSTATS_SAMPLE_SIZE",
 152        name="",
 153        domain="recording",
 154        default=100,
 155        info="Number of individuals to use when calculating population genetic statistics",
 156        dtype=int,
 157        drange="{0, [3, inf)}",
 158        inrange=lambda x: x == 0 or x >= 3,
 159    ),
 160    "NOTES": Parameter(
 161        key="NOTES",
 162        name="",
 163        domain="recording",
 164        default=[],
 165        info="",
 166        dtype=list,
 167        drange="",
 168    ),
 169    #
 170    #
 171    # STARVATION
 172    # "STARVATION_RESPONSE": Parameter(
 173    #     key="STARVATION_RESPONSE",
 174    #     name="",
 175    #     domain="starvation",
 176    #     default="worsening_proportional",
 177    #     info="Mechanism for determining who dies under overcrowding conditions",
 178    #     info_extended="The possible modes can differ in the age distribution of mortality and/or the number of individuals removed.",
 179    #     dtype=str,
 180    #     drange="{gradual, cliff, treadmill_random, treadmill_zoomer, treadmill_boomer, treadmill_boomer_soft, treadmill_zoomer_soft, worsening_proportional}",
 181    #     inrange=lambda x: x
 182    #     in (
 183    #         "gradual",
 184    #         # "cliff",
 185    #         "treadmill_random",
 186    #         "treadmill_zoomer",
 187    #         "treadmill_boomer",
 188    #         "treadmill_boomer_soft",
 189    #         "treadmill_zoomer_soft",
 190    #         "worsening_proportional",
 191    #     ),
 192    #     evalrange=[
 193    #         "gradual",
 194    #         # "cliff",
 195    #         "treadmill_random",
 196    #         "treadmill_zoomer",
 197    #         "treadmill_boomer",
 198    #         "treadmill_boomer_soft",
 199    #         "treadmill_zoomer_soft",
 200    #         "worsening_proportional",
 201    #     ],
 202    # ),
 203    "STARVATION_MORTALITY_FACTOR": Parameter(
 204        key="STARVATION_MORTALITY_FACTOR",
 205        name="",
 206        domain="starvation",
 207        default=None,  # recommended values are None or 0.01
 208        info="Factor that affects the magnitude of starvation mortality. Higher number means higher sensitivity to starvation.",
 209        info_extended="When None, mortality will depend on the resource deficit. When input is a real number, it is the mortality experienced under starvation.",
 210        dtype=float,
 211        drange="(0,inf)",
 212        inrange=lambda x: x is None or x > 0,
 213        evalrange=[None, 0.005, 0.01, 0.05, 0.1, 0.2],
 214    ),
 215    "STARVATION_MORTALITY_MAXIMUM": Parameter(
 216        key="STARVATION_MORTALITY_MAXIMUM",
 217        name="",
 218        domain="starvation",
 219        default=0.5,
 220        info="",
 221        info_extended="",
 222        dtype=float,
 223        drange="(0,1)",
 224        inrange=lambda x: 0 < x < 1,
 225        evalrange=[0.5, 0.75, 0.9],
 226    ),
 227    #
 228    #
 229    # RESOURCES
 230    "RESOURCE_INITIAL_AMOUNT": Parameter(
 231        key="RESOURCE_INITIAL_AMOUNT",
 232        name="",
 233        domain="resources",
 234        default=500,
 235        info="Amount of resources available at the beginning of the simulation",
 236        dtype=float,
 237        drange="[1,inf)",
 238        inrange=lambda x: x >= 1,
 239    ),
 240    "RESOURCE_MAXIMUM_AMOUNT": Parameter(
 241        key="RESOURCE_MAXIMUM_AMOUNT",
 242        name="",
 243        domain="resources",
 244        default=5000,
 245        info="Maximum amount of resources that can be accumulated",
 246        info_extended="When None, no maximum exists.",
 247        dtype=float,
 248        drange="{None, [1,inf)}",
 249        inrange=lambda x: x is None or (x >= 1),
 250    ),
 251    "RESOURCE_ADDITIVE_GROWTH": Parameter(
 252        key="RESOURCE_ADDITIVE_GROWTH",
 253        name="",
 254        domain="resources",
 255        default=500,
 256        info="Absolute value by which the amount of resources increases each step",
 257        info_extended="new_resource_amount = old_resource_amount * RESOURCE_MULTIPLICATIVE_GROWTH + RESOURCE_ADDITIVE_GROWTH",
 258        dtype=float,
 259        drange="[1,inf)",
 260        inrange=lambda x: x >= 1,
 261    ),
 262    "RESOURCE_MULTIPLICATIVE_GROWTH": Parameter(
 263        key="RESOURCE_MULTIPLICATIVE_GROWTH",
 264        name="",
 265        domain="resources",
 266        default=0,
 267        info="Factor by which (+1) the amount of remaining resources are multiplied each step",
 268        info_extended="new_resource_amount = old_resource_amount * (1 + RESOURCE_MULTIPLICATIVE_GROWTH) + RESOURCE_ADDITIVE_GROWTH",
 269        dtype=float,
 270        drange="[0,inf)",
 271        inrange=lambda x: x >= 0,
 272        evalrange=[0.01, 0.02, 0.05, 0.1],
 273    ),
 274    #
 275    #
 276    # REPRODUCTION
 277    "INCUBATION_PERIOD": Parameter(
 278        key="INCUBATION_PERIOD",
 279        name="",
 280        domain="reproduction",
 281        default=0,
 282        info="Time between fertilization and hatching (in steps)",
 283        info_extended="0 if egg period is skipped, -1 if hatching occurs only once no living individuals are around.",
 284        dtype=int,
 285        drange="[-1, inf)",
 286        inrange=lambda x: x >= -1,
 287        presets={},
 288    ),
 289    "MATURATION_AGE": Parameter(
 290        key="MATURATION_AGE",
 291        name="",
 292        domain="reproduction",
 293        default=10,
 294        info="Minimum age at which an individual can reproduce",
 295        info_extended="",
 296        dtype=int,
 297        drange="[1, inf)",
 298        inrange=lambda x: x >= 1,
 299        evalrange=[0, 50],
 300        presets={
 301            "mouse": 1,  # 1 cycle .. 1 month
 302        },
 303    ),
 304    "REPRODUCTION_ENDPOINT": Parameter(
 305        key="REPRODUCTION_ENDPOINT",
 306        name="",
 307        domain="reproduction",
 308        default=0,
 309        info="Minimum age at which an individual can no longer reproduce",
 310        info_extended="When set to 0, there is no loss of fertility.",
 311        dtype=int,
 312        drange="[0, inf)",
 313        inrange=lambda x: x >= 0,
 314        presets={
 315            "human": 50,
 316        },
 317    ),
 318    "MAX_OFFSPRING_NUMBER": Parameter(
 319        key="MAX_OFFSPRING_NUMBER",
 320        name="",
 321        domain="reproduction",
 322        default=1,
 323        info="Maximum number of offspring that an individual can produce each step.",
 324        info_extended="Also known as clutch size, litter size or brood size, depending on the species.",
 325        dtype=int,
 326        drange="[1, inf)",
 327        inrange=lambda x: x >= 1,
 328        presets={},
 329        serverrange=lambda x: x <= 5,
 330        serverrange_info="[1,5]",
 331    ),
 332    "REPRODUCTION_MODE": Parameter(
 333        key="REPRODUCTION_MODE",
 334        name="",
 335        domain="reproduction",
 336        default="sexual",
 337        info="Mode of reproduction",
 338        info_extended="",
 339        dtype=str,
 340        drange="{sexual, asexual}",
 341        inrange=lambda x: x in ("sexual", "asexual"),
 342        presets={
 343            "yeast": "asexual",
 344        },
 345    ),
 346    "REPRODUCTION_REGULATION": Parameter(
 347        key="REPRODUCTION_REGULATION",
 348        name="",
 349        domain="reproduction",
 350        default=False,
 351        info="Density effects on reproduction. When True, no overshooting can occur.",
 352        info_extended="",
 353        dtype=bool,
 354        drange="",
 355    ),
 356    "RECOMBINATION_RATE": Parameter(
 357        key="RECOMBINATION_RATE",
 358        name="",
 359        domain="reproduction",
 360        default=0.1,
 361        info="Probability of recombination occuring between two adjacent sites",
 362        info_extended="If set to 0, there is no recombination.",
 363        dtype=float,
 364        drange="[0, inf)",
 365        inrange=lambda x: x >= 0,
 366        evalrange=[0, 1],
 367        presets={
 368            "yeast": 0,
 369        },
 370    ),
 371    "MUTATION_RATIO": Parameter(
 372        key="MUTATION_RATIO",
 373        name="",
 374        domain="reproduction",
 375        default=0.1,
 376        info="Ratio of 0->1 mutations to 1->0 mutations",
 377        dtype=float,
 378        drange="[0, inf)",
 379        inrange=lambda x: x >= 0,
 380    ),
 381    "MUTATION_AGE_MULTIPLIER": Parameter(
 382        key="MUTATION_AGE_MULTIPLIER",
 383        name="",
 384        domain="reproduction",
 385        default=0,
 386        info="Modifier of germline mutation rate",
 387        info_extended="final germline mutation rate = intrinsic mutation rate + (1 * age * MUTATION_AGE_MULTIPLIER)",
 388        dtype=float,
 389        drange="[0, inf)",
 390        inrange=lambda x: x >= 0,
 391    ),
 392    #
 393    #
 394    # GENETICS
 395    "DOMINANCE_FACTOR": Parameter(
 396        key="DOMINANCE_FACTOR",
 397        name="",
 398        domain="genetics",
 399        default=0.8,
 400        info="Inheritance patterns for non-haploid genomes",
 401        info_extended="0 for recessive, 0.5 for true additive, 0-1 for partial dominant, 1 for dominant, 1+ for overdominant",
 402        dtype=float,
 403        drange="[0, inf)",
 404        inrange=lambda x: x >= 0,
 405    ),
 406    "SMOOTHING_FACTOR": Parameter(
 407        key="SMOOTHING_FACTOR",
 408        name="",
 409        domain="genetics",
 410        default=0,
 411        info="Gaussian sigma factor for smoothing of phenotypes",
 412        info_extended="0 for no smoothing",
 413        dtype=float,
 414        drange="[0, inf)",
 415        inrange=lambda x: x >= 0,
 416    ),
 417    "PLOIDY": Parameter(
 418        key="PLOIDY",
 419        name="",
 420        domain="genetics",
 421        default=2,
 422        info="Number of complete sets of chromosomes",
 423        info_extended="If reproduction is sexual, ploidy can only be 2.",
 424        dtype=int,
 425        drange="[1, 4]",
 426        inrange=lambda x: x in (1, 2, 3, 4),
 427    ),
 428    "GENARCH_TYPE": Parameter(
 429        key="GENARCH_TYPE",
 430        name="",
 431        domain="genetics",
 432        default="composite",
 433        info="Modifying or composite architecture",
 434        info_extended="",
 435        dtype=str,
 436        drange="{composite, modifying}",
 437        inrange=lambda x: x in ("composite", "modifying"),
 438    ),
 439    "G_surv_lo": Parameter(
 440        key="G_surv_lo",
 441        name="",
 442        domain="genetics",
 443        default=0,
 444        info="Minimum survival rate",
 445        dtype=float,
 446        drange="",
 447    ),
 448    "G_surv_hi": Parameter(
 449        key="G_surv_hi",
 450        name="",
 451        domain="genetics",
 452        default=1,
 453        info="Maximum survival rate",
 454        dtype=float,
 455        drange="",
 456    ),
 457    "G_repr_lo": Parameter(
 458        key="G_repr_lo",
 459        name="",
 460        domain="genetics",
 461        default=0,
 462        info="Minimum intrinsic fertility",
 463        dtype=float,
 464        drange="",
 465    ),
 466    "G_repr_hi": Parameter(
 467        key="G_repr_hi",
 468        name="",
 469        domain="genetics",
 470        default=0.5,
 471        info="Maximum intrinsic fertility",
 472        dtype=float,
 473        drange="",
 474        evalrange=[0.5, 1],
 475        # presets={
 476        #     "mouse": 1,  # 3.5; litter size of 7; 5.4 litters per year; https://genomics.senescence.info/species/entry.php?species=Mus_musculus
 477        #     "human": 1,  # litter size of 1,
 478        #     "mouse": 1,  # 5.5; litter size of 5-6
 479        #     "killifish": 1,  # 50; 1x-1xx eggs, depending on species
 480        #     "yeast": 1,
 481        #     "athaliana": 1,  # 1xx seeds per plant
 482        #     "worm": 1,  # up to 300 eggs in optimal conditions
 483        #     "fruitfly": 1,  # 100; up to 100 eggs per day in optimal conditions
 484        # },
 485    ),
 486    "G_neut_lo": Parameter(
 487        key="G_neut_lo",
 488        name="",
 489        domain="genetics",
 490        default=0,
 491        info="",
 492        dtype=float,
 493        drange="",
 494    ),
 495    "G_neut_hi": Parameter(
 496        key="G_neut_hi",
 497        name="",
 498        domain="genetics",
 499        default=1,
 500        info="",
 501        dtype=float,
 502        drange="",
 503    ),
 504    "G_muta_lo": Parameter(
 505        key="G_muta_lo",
 506        name="",
 507        domain="genetics",
 508        default=0,
 509        info="Minumum intrinsic mutation rate",
 510        dtype=float,
 511        drange="",
 512    ),
 513    "G_muta_hi": Parameter(
 514        key="G_muta_hi",
 515        name="",
 516        domain="genetics",
 517        default=1,
 518        info="Maximum intrinsic mutation rate",
 519        dtype=float,
 520        drange="",
 521    ),
 522    "G_grow_lo": Parameter(
 523        key="G_grow_lo",
 524        name="",
 525        domain="genetics",
 526        default=0,
 527        info="Minimum intrinsic growth rate",
 528        dtype=float,
 529        drange="",
 530    ),
 531    "G_grow_hi": Parameter(
 532        key="G_grow_hi",
 533        name="",
 534        domain="genetics",
 535        default=1,
 536        info="Maximum intrinsic growth rate",
 537        dtype=float,
 538        drange="",
 539    ),
 540    #
 541    #
 542    # ENVIRONMENTAL DRIFT
 543    "ENVDRIFT_RATE": Parameter(
 544        key="ENVDRIFT_RATE",
 545        name="",
 546        domain="environmental drift",
 547        default=0,
 548        info="Frequency of modification to the fitness landscape (in steps)",
 549        dtype=int,
 550        drange="[0, inf)",
 551        inrange=lambda x: x >= 0,
 552    ),
 553    #
 554    #
 555    # ABIOTIC
 556    "ABIOTIC_HAZARD_AMPLITUDE": Parameter(
 557        key="ABIOTIC_HAZARD_AMPLITUDE",
 558        name="",
 559        domain="abiotic",
 560        default=0,
 561        info="Maximum abiotic hazard",
 562        dtype=float,
 563        drange="[0, inf)",
 564        inrange=lambda x: x >= 0,
 565    ),
 566    "ABIOTIC_HAZARD_PERIOD": Parameter(
 567        key="ABIOTIC_HAZARD_PERIOD",
 568        name="",
 569        domain="abiotic",
 570        default=1,
 571        info="Period of wave form of abiotic hazard (in steps)",
 572        dtype=float,
 573        drange="[1, inf)",
 574        inrange=lambda x: x >= 1,
 575    ),
 576    "ABIOTIC_HAZARD_OFFSET": Parameter(
 577        key="ABIOTIC_HAZARD_OFFSET",
 578        name="",
 579        domain="abiotic",
 580        default=0,
 581        info="Constant, time-independent abiotic hazard",
 582        info_extended=r"e.g. 0.01 means that abiotic mortality is increased by 1% each step",
 583        dtype=float,
 584        drange="[0, inf)",
 585        inrange=lambda x: x >= 0,
 586    ),
 587    "ABIOTIC_HAZARD_SHAPE": Parameter(
 588        key="ABIOTIC_HAZARD_SHAPE",
 589        name="",
 590        domain="abiotic",
 591        default="sinusoidal",
 592        info="Wave form of abiotic hazard",
 593        dtype=str,
 594        drange="{sinusoidal, flat, triangle, square, sawtooth, ramp, instant, instant_fatal}",
 595        inrange=lambda x: x
 596        in {"sinusoidal", "flat", "triangle", "square", "sawtooth", "ramp", "instant", "instant_fatal"},
 597    ),
 598    #
 599    #
 600    # INFECTION
 601    "BACKGROUND_INFECTIVITY": Parameter(
 602        key="BACKGROUND_INFECTIVITY",
 603        name="",
 604        domain="infection",
 605        default=0,
 606        info="Tendency to acquire infection from the environment",
 607        info_extended="Probability independent of the infection prevalence in the population; thus constant.",
 608        dtype=float,
 609        drange="[0, inf)",
 610        inrange=lambda x: x >= 0,
 611    ),
 612    "TRANSMISSIBILITY": Parameter(
 613        key="TRANSMISSIBILITY",
 614        name="",
 615        domain="infection",
 616        default=0,
 617        info="Tendency to acquire infection from other infected individuals",
 618        info_extended="Probability dependent on the infection prevalence in the population; thus variable.",
 619        dtype=float,
 620        drange="[0, inf)",
 621        inrange=lambda x: x >= 0,
 622    ),
 623    "RECOVERY_RATE": Parameter(
 624        key="RECOVERY_RATE",
 625        name="",
 626        domain="infection",
 627        info="Tendency to transition from infected to healthy status",
 628        default=0,
 629        dtype=float,
 630        drange="[0, inf)",
 631        inrange=lambda x: x >= 0,
 632    ),
 633    "FATALITY_RATE": Parameter(
 634        key="FATALITY_RATE",
 635        name="",
 636        domain="infection",
 637        info="Tendency to transition from infected to dead status",
 638        default=0,
 639        dtype=float,
 640        drange="[0, inf)",
 641        inrange=lambda x: x >= 0,
 642    ),
 643    #
 644    #
 645    # PREDATION
 646    "PREDATION_RATE": Parameter(
 647        key="PREDATION_RATE",
 648        name="",
 649        domain="predation",
 650        default=0,
 651        info="Vulnerability to predators",
 652        info_extended="Probability to die when number of predators is equal to number of prey. Probability changes logistically with the number of prey.",
 653        dtype=float,
 654        drange="[0, inf)",
 655        inrange=lambda x: x >= 0,
 656    ),
 657    "PREDATOR_GROWTH": Parameter(
 658        key="PREDATOR_GROWTH",
 659        name="",
 660        domain="predation",
 661        default=0,
 662        info="Intrinsic growth rate of predators",
 663        info_extended="Growth of the predator population is logistic.",
 664        dtype=float,
 665        drange="[0, inf)",
 666        inrange=lambda x: x >= 0,
 667    ),
 668    #
 669    #
 670    # GENETIC ARCHITECTURE (COMPOSITE)
 671    "BITS_PER_LOCUS": Parameter(
 672        key="BITS_PER_LOCUS",
 673        name="",
 674        domain="composite genetic architecture",
 675        default=8,
 676        info="Number of bits that each locus has",
 677        dtype=int,
 678        drange="[1, inf)",
 679        inrange=lambda x: x >= 1,
 680        serverrange=lambda x: x <= 10,
 681        serverrange_info="[1,10]",
 682        evalrange=[1, 100],
 683    ),
 684    # "DIFFUSION_FACTOR": Parameter(
 685    #     key="DIFFUSION_FACTOR",
 686    #     name="",
 687    #     domain="composite genetic architecture",
 688    #     default=1,
 689    #     info="Window for moving average",
 690    #     info_extended="When 1, all variants affect one age and trait only. When 1+, they also affect adjacent ages.",
 691    #     dtype=int,
 692    #     drange="[1, inf)",
 693    #     inrange=lambda x: x >= 1,
 694    #     serverrange=lambda x: x <= 10,
 695    #     serverrange_info="[1,10]",
 696    #
 697    # evalrange=[1, 50],
 698    # ),
 699    "G_surv_evolvable": Parameter(
 700        key="G_surv_evolvable",
 701        name="",
 702        domain="composite genetic architecture",
 703        default=True,
 704        info="Is survival an evolvable trait?",
 705        dtype=bool,
 706        drange="",
 707        inrange=lambda x: True,
 708    ),
 709    "G_surv_agespecific": Parameter(
 710        key="G_surv_agespecific",
 711        name="",
 712        domain="composite genetic architecture",
 713        default=True,
 714        info="Is survival age-specific?",
 715        dtype=bool,
 716        drange="",
 717        inrange=lambda x: True,
 718    ),
 719    "G_surv_interpreter": Parameter(
 720        key="G_surv_interpreter",
 721        name="",
 722        domain="composite genetic architecture",
 723        default="binary",
 724        info="",
 725        dtype=str,
 726        drange="",
 727    ),
 728    "G_surv_initgeno": Parameter(
 729        key="G_surv_initgeno",
 730        name="",
 731        domain="composite genetic architecture",
 732        default=1,
 733        info="Initial survival rate",
 734        dtype=float,
 735        drange="",
 736    ),
 737    "G_repr_evolvable": Parameter(
 738        key="G_repr_evolvable",
 739        name="",
 740        domain="composite genetic architecture",
 741        default=True,
 742        info="Is fertility an evolvable trait?",
 743        dtype=bool,
 744        drange="",
 745    ),
 746    "G_repr_agespecific": Parameter(
 747        key="G_repr_agespecific",
 748        name="",
 749        domain="composite genetic architecture",
 750        default=True,
 751        info="Is fertility age-specific?",
 752        dtype=bool,
 753        drange="",
 754    ),
 755    "G_repr_interpreter": Parameter(
 756        key="G_repr_interpreter",
 757        name="",
 758        domain="composite genetic architecture",
 759        default="binary",
 760        info="",
 761        dtype=str,
 762        drange="",
 763    ),
 764    "G_repr_initgeno": Parameter(
 765        key="G_repr_initgeno",
 766        name="",
 767        domain="composite genetic architecture",
 768        default=1,
 769        info="Initial fertility rate",
 770        dtype=float,
 771        drange="",
 772    ),
 773    "G_neut_evolvable": Parameter(
 774        key="G_neut_evolvable",
 775        name="",
 776        domain="composite genetic architecture",
 777        default=False,
 778        info="",
 779        dtype=bool,
 780        drange="",
 781    ),
 782    "G_neut_agespecific": Parameter(
 783        key="G_neut_agespecific",
 784        name="",
 785        domain="composite genetic architecture",
 786        default=False,
 787        info="",
 788        dtype=bool,
 789        drange="",
 790    ),
 791    "G_neut_interpreter": Parameter(
 792        key="G_neut_interpreter",
 793        name="",
 794        domain="composite genetic architecture",
 795        default="binary",
 796        info="",
 797        dtype=str,
 798        drange="",
 799    ),
 800    "G_neut_initgeno": Parameter(
 801        key="G_neut_initgeno",
 802        name="",
 803        domain="composite genetic architecture",
 804        default=1,
 805        info="",
 806        dtype=float,
 807        drange="",
 808    ),
 809    "G_muta_evolvable": Parameter(
 810        key="G_muta_evolvable",
 811        name="",
 812        domain="composite genetic architecture",
 813        default=False,
 814        info="",
 815        dtype=bool,
 816        drange="",
 817    ),
 818    "G_muta_agespecific": Parameter(
 819        key="G_muta_agespecific",
 820        name="",
 821        domain="composite genetic architecture",
 822        default=False,
 823        info="",
 824        dtype=bool,
 825        drange="",
 826    ),
 827    "G_muta_interpreter": Parameter(
 828        key="G_muta_interpreter",
 829        name="",
 830        domain="composite genetic architecture",
 831        default="binary",
 832        info="",
 833        dtype=str,
 834        drange="",
 835    ),
 836    "G_muta_initgeno": Parameter(
 837        key="G_muta_initgeno",
 838        name="",
 839        domain="composite genetic architecture",
 840        default=1,
 841        info="Initial mutation rate",
 842        dtype=float,
 843        drange="",
 844    ),
 845    "G_grow_evolvable": Parameter(
 846        key="G_grow_evolvable",
 847        name="",
 848        domain="composite genetic architecture",
 849        default=False,
 850        info="",
 851        dtype=bool,
 852        drange="",
 853    ),
 854    "G_grow_agespecific": Parameter(
 855        key="G_grow_agespecific",
 856        name="",
 857        domain="composite genetic architecture",
 858        default=False,
 859        info="",
 860        dtype=bool,
 861        drange="",
 862    ),
 863    "G_grow_interpreter": Parameter(
 864        key="G_grow_interpreter",
 865        name="",
 866        domain="composite genetic architecture",
 867        default="binary",
 868        info="",
 869        dtype=str,
 870        drange="",
 871    ),
 872    "G_grow_initgeno": Parameter(
 873        key="G_grow_initgeno",
 874        name="",
 875        domain="composite genetic architecture",
 876        default=0.5,
 877        info="",
 878        dtype=float,
 879        drange="",
 880    ),
 881    "THRESHOLD": Parameter(
 882        key="THRESHOLD",
 883        name="",
 884        domain="composite genetic architecture",
 885        default=None,  # 3
 886        info="",
 887        dtype=int,
 888        drange="",
 889    ),
 890    #
 891    #
 892    # GENETIC ARCHITECTURE (modifying)
 893    "MODIF_GENOME_SIZE": Parameter(
 894        key="MODIF_GENOME_SIZE",
 895        name="",
 896        domain="modifying genetic architecture",
 897        default=200,
 898        info="Size of the genome under the modifying architecture",
 899        dtype=int,
 900        drange="[1,inf)",
 901        inrange=lambda x: x >= 1,
 902        show_in_gui=True,
 903    ),
 904    "PHENOMAP_SPECS": Parameter(
 905        key="PHENOMAP_SPECS",
 906        name="",
 907        domain="modifying genetic architecture",
 908        default=[],
 909        info="",
 910        dtype=list,
 911        drange="",
 912        show_in_gui=False,
 913    ),
 914    "PHENOMAP": Parameter(
 915        # TODO is this still needed
 916        key="PHENOMAP",
 917        name="",
 918        domain="modifying genetic architecture",
 919        default={},
 920        info="",
 921        dtype=dict,
 922        drange="",
 923        show_in_gui=False,
 924    ),
 925    "G_grow_initpheno": Parameter(
 926        key="G_grow_initpheno",
 927        name="",
 928        domain="modifying genetic architecture",
 929        default=0.5,
 930        info="",
 931        dtype=float,
 932        drange="",
 933    ),
 934    "G_muta_initpheno": Parameter(
 935        key="G_muta_initpheno",
 936        name="",
 937        domain="modifying genetic architecture",
 938        default=0.001,
 939        info="Initial mutation rate",
 940        dtype=float,
 941        drange="",
 942    ),
 943    "G_surv_initpheno": Parameter(
 944        key="G_surv_initpheno",
 945        name="",
 946        domain="modifying genetic architecture",
 947        default=0.95,
 948        info="Initial survival rate",
 949        dtype=float,
 950        drange="",
 951    ),
 952    "G_repr_initpheno": Parameter(
 953        key="G_repr_initpheno",
 954        name="",
 955        domain="modifying genetic architecture",
 956        default=0.75,
 957        info="Initial fertility rate",
 958        dtype=float,
 959        drange="",
 960    ),
 961    "G_neut_initpheno": Parameter(
 962        key="G_neut_initpheno",
 963        name="",
 964        domain="modifying genetic architecture",
 965        default=0.5,
 966        info="",
 967        dtype=float,
 968        drange="",
 969    ),
 970    #
 971    #
 972    # OTHER
 973    "SPECIES_PRESET": Parameter(
 974        key="SPECIES_PRESET",
 975        name="",
 976        domain="other",
 977        default=None,
 978        info="",
 979        dtype=str,
 980        drange="None or [" + ",".join(PRESET_INFO.keys()) + "]",
 981        inrange=lambda x: x in PRESET_INFO.keys() or x is None,
 982        show_in_docs=False,
 983        show_in_gui=False,
 984    ),
 985    #
 986    #
 987    # TIME SCALES
 988    "STEPS_PER_SIMULATION": Parameter(
 989        key="STEPS_PER_SIMULATION",
 990        name="",
 991        domain="other",
 992        default=100000,
 993        info="Number of steps for the simulation to execute",
 994        dtype=int,
 995        drange="[1, inf)",
 996        inrange=lambda x: x >= 1,
 997        serverrange=lambda x: x <= 100000,
 998        serverrange_info="[1,100000]",
 999        evalrange=[1, 10000000],
1000    ),
1001    "AGE_LIMIT": Parameter(
1002        key="AGE_LIMIT",
1003        name="",
1004        domain="other",
1005        default=50,
1006        info="Maximum achievable lifespan (in steps)",
1007        info_extended="Maximum evolved lifespan is lower than the technically restricted, maximum achievable lifespan.",
1008        dtype=int,
1009        drange="[1, inf)",
1010        inrange=lambda x: x >= 1,
1011        serverrange=lambda x: x <= 100,
1012        serverrange_info="[1,100]",
1013        evalrange=[15, 100],
1014    ),
1015    "CARRYING_CAPACITY_EGGS": Parameter(
1016        key="CARRYING_CAPACITY_EGGS",
1017        name="",
1018        domain="other",
1019        default=500,
1020        info="Maximum number of eggs that the environment can sustain",
1021        info_extended="Once the number of eggs exceeds the carrying capacity of eggs, newly laid eggs replace previously laid eggs.",
1022        dtype=int,
1023        drange="[1, inf)",
1024        inrange=lambda x: x >= 1,
1025        serverrange=lambda x: x <= 10000,
1026        serverrange_info="[1,10000]",
1027        evalrange=[1, 1000000],
1028        previous_keys=["CARRYING_CAPACITY_EGGS"],
1029    ),
1030    "INITIAL_POPULATION_SIZE": Parameter(
1031        key="INITIAL_POPULATION_SIZE",
1032        name="",
1033        domain="other",
1034        default=1000,
1035        info="Number of individuals generated at the beginning of the simulation",
1036        info_extended="",
1037        dtype=int,
1038        drange="[1, inf)",
1039        inrange=lambda x: x >= 1,
1040        serverrange=lambda x: x <= 1000 and x >= 1,
1041        serverrange_info="[1,1000]",
1042    ),
1043    "FRAILTY_MODIFIER": Parameter(
1044        key="FRAILTY_MODIFIER",
1045        name="",
1046        domain="other",
1047        default=0,
1048        info="Age-dependent modifier of mortality",
1049        dtype=float,
1050        drange="[0, inf)",
1051        inrange=lambda x: x >= 0,
1052        evalrange=[0, 0.5, 1, 2],
1053    ),
1054    "MORTALITY_ORDER": Parameter(
1055        key="MORTALITY_ORDER",
1056        name="",
1057        domain="other",
1058        default=["intrinsic", "abiotic", "infection", "predation", "starvation"],
1059        info="Order in which mortality sources are computed",
1060        dtype=list,
1061        drange=None,
1062        inrange=lambda order: all(
1063            source in ["intrinsic", "abiotic", "infection", "predation", "starvation"] for source in order
1064        ),
1065        show_in_gui=False,
1066    ),
1067    #
1068    #
1069    # TECHNICAL
1070    "MUTATION_METHOD": Parameter(
1071        key="MUTATION_METHOD",
1072        name="",
1073        domain="technical",
1074        default="by_bit",
1075        info="Vectorized or non-vectorized method of calculating incidence of new mutations",
1076        info_extended="Mutate by XOR with a randomized bit matrix ('by_bit') or generate random indices to mutate ('by_index')",
1077        dtype=str,
1078        drange="{by_bit, by_index}",
1079        inrange=lambda x: x in ("by_bit", "by_index"),
1080    ),
1081    "RANDOM_SEED": Parameter(
1082        key="RANDOM_SEED",
1083        name="",
1084        domain="technical",
1085        default=None,
1086        info="Number used as seed for pseudorandom number generator",
1087        info_extended="If nothing is given, a random integer will be used as the seed; otherwise the given integer will be used as the seed",
1088        dtype=int,
1089        drange="{None, (-inf, inf)}",
1090        inrange=lambda x: True,
1091    ),
1092    "PHENOMAP_METHOD": Parameter(
1093        key="PHENOMAP_METHOD",
1094        name="",
1095        domain="technical",
1096        default="by_loop",
1097        info="Non-vectorized, vectorized and blank method of calculating phenotypes from genotypes",
1098        info_extended="Blank method disables pleiotropy.",
1099        dtype=str,
1100        drange="{by_loop, by_dot, by_dummy}",
1101        inrange=lambda x: x in ("by_loop", "by_dot", "by_dummy"),
1102    ),
1103}
def get_default_parameters():
5def get_default_parameters():
6    return {p.key: p.default for p in DEFAULT_PARAMETERS.values()}
def get_species_parameters(SPECIES_PRESET):
 9def get_species_parameters(SPECIES_PRESET):
10    return {p.key: p.presets[SPECIES_PRESET] for p in DEFAULT_PARAMETERS.values() if SPECIES_PRESET in p.presets}
PRESET_INFO = {'human': 'One cycle corresponds to 2 years.', 'mouse': 'One cycle corresponds to one month. Source: https://genomics.senescence.info/species/entry.php?species=Mus_musculus', 'killifish': 'One cycle corresponds to one week.', 'yeast': '', 'arabidopsis': '', 'worm': 'One cycle corresponds to one day. Up to 300 eggs in optimal conditions.', 'fruitfly': 'One cycle corresponds to one day. Up to 100 eggs per day.'}
DEFAULT_PARAMETERS = {'LOGGING_RATE': <aegis_sim.parameterization.parameter.Parameter object>, 'TICKER_RATE': <aegis_sim.parameterization.parameter.Parameter object>, 'PICKLE_RATE': <aegis_sim.parameterization.parameter.Parameter object>, 'SNAPSHOT_RATE': <aegis_sim.parameterization.parameter.Parameter object>, 'SNAPSHOT_FINAL_COUNT': <aegis_sim.parameterization.parameter.Parameter object>, 'INTERVAL_RATE': <aegis_sim.parameterization.parameter.Parameter object>, 'TE_RATE': <aegis_sim.parameterization.parameter.Parameter object>, 'TE_DURATION': <aegis_sim.parameterization.parameter.Parameter object>, 'POPGENSTATS_RATE': <aegis_sim.parameterization.parameter.Parameter object>, 'POPGENSTATS_SAMPLE_SIZE': <aegis_sim.parameterization.parameter.Parameter object>, 'NOTES': <aegis_sim.parameterization.parameter.Parameter object>, 'STARVATION_MORTALITY_FACTOR': <aegis_sim.parameterization.parameter.Parameter object>, 'STARVATION_MORTALITY_MAXIMUM': <aegis_sim.parameterization.parameter.Parameter object>, 'RESOURCE_INITIAL_AMOUNT': <aegis_sim.parameterization.parameter.Parameter object>, 'RESOURCE_MAXIMUM_AMOUNT': <aegis_sim.parameterization.parameter.Parameter object>, 'RESOURCE_ADDITIVE_GROWTH': <aegis_sim.parameterization.parameter.Parameter object>, 'RESOURCE_MULTIPLICATIVE_GROWTH': <aegis_sim.parameterization.parameter.Parameter object>, 'INCUBATION_PERIOD': <aegis_sim.parameterization.parameter.Parameter object>, 'MATURATION_AGE': <aegis_sim.parameterization.parameter.Parameter object>, 'REPRODUCTION_ENDPOINT': <aegis_sim.parameterization.parameter.Parameter object>, 'MAX_OFFSPRING_NUMBER': <aegis_sim.parameterization.parameter.Parameter object>, 'REPRODUCTION_MODE': <aegis_sim.parameterization.parameter.Parameter object>, 'REPRODUCTION_REGULATION': <aegis_sim.parameterization.parameter.Parameter object>, 'RECOMBINATION_RATE': <aegis_sim.parameterization.parameter.Parameter object>, 'MUTATION_RATIO': <aegis_sim.parameterization.parameter.Parameter object>, 'MUTATION_AGE_MULTIPLIER': <aegis_sim.parameterization.parameter.Parameter object>, 'DOMINANCE_FACTOR': <aegis_sim.parameterization.parameter.Parameter object>, 'SMOOTHING_FACTOR': <aegis_sim.parameterization.parameter.Parameter object>, 'PLOIDY': <aegis_sim.parameterization.parameter.Parameter object>, 'GENARCH_TYPE': <aegis_sim.parameterization.parameter.Parameter object>, 'G_surv_lo': <aegis_sim.parameterization.parameter.Parameter object>, 'G_surv_hi': <aegis_sim.parameterization.parameter.Parameter object>, 'G_repr_lo': <aegis_sim.parameterization.parameter.Parameter object>, 'G_repr_hi': <aegis_sim.parameterization.parameter.Parameter object>, 'G_neut_lo': <aegis_sim.parameterization.parameter.Parameter object>, 'G_neut_hi': <aegis_sim.parameterization.parameter.Parameter object>, 'G_muta_lo': <aegis_sim.parameterization.parameter.Parameter object>, 'G_muta_hi': <aegis_sim.parameterization.parameter.Parameter object>, 'G_grow_lo': <aegis_sim.parameterization.parameter.Parameter object>, 'G_grow_hi': <aegis_sim.parameterization.parameter.Parameter object>, 'ENVDRIFT_RATE': <aegis_sim.parameterization.parameter.Parameter object>, 'ABIOTIC_HAZARD_AMPLITUDE': <aegis_sim.parameterization.parameter.Parameter object>, 'ABIOTIC_HAZARD_PERIOD': <aegis_sim.parameterization.parameter.Parameter object>, 'ABIOTIC_HAZARD_OFFSET': <aegis_sim.parameterization.parameter.Parameter object>, 'ABIOTIC_HAZARD_SHAPE': <aegis_sim.parameterization.parameter.Parameter object>, 'BACKGROUND_INFECTIVITY': <aegis_sim.parameterization.parameter.Parameter object>, 'TRANSMISSIBILITY': <aegis_sim.parameterization.parameter.Parameter object>, 'RECOVERY_RATE': <aegis_sim.parameterization.parameter.Parameter object>, 'FATALITY_RATE': <aegis_sim.parameterization.parameter.Parameter object>, 'PREDATION_RATE': <aegis_sim.parameterization.parameter.Parameter object>, 'PREDATOR_GROWTH': <aegis_sim.parameterization.parameter.Parameter object>, 'BITS_PER_LOCUS': <aegis_sim.parameterization.parameter.Parameter object>, 'G_surv_evolvable': <aegis_sim.parameterization.parameter.Parameter object>, 'G_surv_agespecific': <aegis_sim.parameterization.parameter.Parameter object>, 'G_surv_interpreter': <aegis_sim.parameterization.parameter.Parameter object>, 'G_surv_initgeno': <aegis_sim.parameterization.parameter.Parameter object>, 'G_repr_evolvable': <aegis_sim.parameterization.parameter.Parameter object>, 'G_repr_agespecific': <aegis_sim.parameterization.parameter.Parameter object>, 'G_repr_interpreter': <aegis_sim.parameterization.parameter.Parameter object>, 'G_repr_initgeno': <aegis_sim.parameterization.parameter.Parameter object>, 'G_neut_evolvable': <aegis_sim.parameterization.parameter.Parameter object>, 'G_neut_agespecific': <aegis_sim.parameterization.parameter.Parameter object>, 'G_neut_interpreter': <aegis_sim.parameterization.parameter.Parameter object>, 'G_neut_initgeno': <aegis_sim.parameterization.parameter.Parameter object>, 'G_muta_evolvable': <aegis_sim.parameterization.parameter.Parameter object>, 'G_muta_agespecific': <aegis_sim.parameterization.parameter.Parameter object>, 'G_muta_interpreter': <aegis_sim.parameterization.parameter.Parameter object>, 'G_muta_initgeno': <aegis_sim.parameterization.parameter.Parameter object>, 'G_grow_evolvable': <aegis_sim.parameterization.parameter.Parameter object>, 'G_grow_agespecific': <aegis_sim.parameterization.parameter.Parameter object>, 'G_grow_interpreter': <aegis_sim.parameterization.parameter.Parameter object>, 'G_grow_initgeno': <aegis_sim.parameterization.parameter.Parameter object>, 'THRESHOLD': <aegis_sim.parameterization.parameter.Parameter object>, 'MODIF_GENOME_SIZE': <aegis_sim.parameterization.parameter.Parameter object>, 'PHENOMAP_SPECS': <aegis_sim.parameterization.parameter.Parameter object>, 'PHENOMAP': <aegis_sim.parameterization.parameter.Parameter object>, 'G_grow_initpheno': <aegis_sim.parameterization.parameter.Parameter object>, 'G_muta_initpheno': <aegis_sim.parameterization.parameter.Parameter object>, 'G_surv_initpheno': <aegis_sim.parameterization.parameter.Parameter object>, 'G_repr_initpheno': <aegis_sim.parameterization.parameter.Parameter object>, 'G_neut_initpheno': <aegis_sim.parameterization.parameter.Parameter object>, 'SPECIES_PRESET': <aegis_sim.parameterization.parameter.Parameter object>, 'STEPS_PER_SIMULATION': <aegis_sim.parameterization.parameter.Parameter object>, 'AGE_LIMIT': <aegis_sim.parameterization.parameter.Parameter object>, 'CARRYING_CAPACITY_EGGS': <aegis_sim.parameterization.parameter.Parameter object>, 'INITIAL_POPULATION_SIZE': <aegis_sim.parameterization.parameter.Parameter object>, 'FRAILTY_MODIFIER': <aegis_sim.parameterization.parameter.Parameter object>, 'MORTALITY_ORDER': <aegis_sim.parameterization.parameter.Parameter object>, 'MUTATION_METHOD': <aegis_sim.parameterization.parameter.Parameter object>, 'RANDOM_SEED': <aegis_sim.parameterization.parameter.Parameter object>, 'PHENOMAP_METHOD': <aegis_sim.parameterization.parameter.Parameter object>}