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