evolib 0.2.0b2.dev3__tar.gz → 0.2.0b2.dev4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (460) hide show
  1. {evolib-0.2.0b2.dev3/evolib.egg-info → evolib-0.2.0b2.dev4}/PKG-INFO +1 -1
  2. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/individual.py +39 -7
  3. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/population.py +37 -21
  4. evolib-0.2.0b2.dev4/evolib/interfaces/enum_helpers.py +31 -0
  5. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/operators/evonet_structural_mutation.py +2 -14
  6. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/operators/reproduction.py +7 -8
  7. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/operators/selection.py +14 -17
  8. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/operators/strategy.py +10 -10
  9. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/evonet.py +8 -6
  10. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4/evolib.egg-info}/PKG-INFO +1 -1
  11. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib.egg-info/SOURCES.txt +1 -1
  12. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/07_evonet/04_recurrent_bitseq.py +64 -23
  13. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/pyproject.toml +1 -1
  14. evolib-0.2.0b2.dev3/evolib/utils/copy_indiv.py +0 -20
  15. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/LICENSE +0 -0
  16. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/MANIFEST.in +0 -0
  17. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/README.md +0 -0
  18. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/docs/api_core_individual.rst +0 -0
  19. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/docs/api_core_population.rst +0 -0
  20. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/docs/api_operators_crossover.rst +0 -0
  21. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/docs/api_operators_evonet_structural_mutation.rst +0 -0
  22. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/docs/api_operators_mutation.rst +0 -0
  23. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/docs/api_operators_replacement.rst +0 -0
  24. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/docs/api_operators_reproduction.rst +0 -0
  25. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/docs/api_operators_selection.rst +0 -0
  26. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/docs/api_operators_strategy.rst +0 -0
  27. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/docs/api_public_api.rst +0 -0
  28. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/docs/api_representation_evonet.rst +0 -0
  29. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/docs/api_representation_netvector.rst +0 -0
  30. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/docs/api_representation_vector.rst +0 -0
  31. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/docs/api_utils_benchmarks.rst +0 -0
  32. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/docs/api_utils_history_logger.rst +0 -0
  33. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/docs/api_utils_loss_functions.rst +0 -0
  34. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/docs/api_utils_plotting.rst +0 -0
  35. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/docs/conf.py +0 -0
  36. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/docs/config_guide.md +0 -0
  37. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/docs/config_parameter.md +0 -0
  38. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/docs/getting_started.md +0 -0
  39. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/docs/index.md +0 -0
  40. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/PIL/__init__.py +0 -0
  41. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/__init__.py +0 -0
  42. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
  43. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/annotated_types/__init__.py +0 -0
  44. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/asyncio/__init__.py +0 -0
  45. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/collections/__init__.py +0 -0
  46. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/concurrent/__init__.py +0 -0
  47. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
  48. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/ctypes/__init__.py +0 -0
  49. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/cycler/__init__.py +0 -0
  50. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/email/__init__.py +0 -0
  51. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/evolib/__init__.py +0 -0
  52. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/evolib/config/__init__.py +0 -0
  53. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
  54. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
  55. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/evolib/initializers/__init__.py +0 -0
  56. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
  57. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
  58. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/evolib/registry/__init__.py +0 -0
  59. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/evolib/representation/__init__.py +0 -0
  60. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
  61. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/html/__init__.py +0 -0
  62. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/importlib/__init__.py +0 -0
  63. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
  64. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
  65. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/jinja2/__init__.py +0 -0
  66. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/json/__init__.py +0 -0
  67. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/logging/__init__.py +0 -0
  68. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/markdown_it/__init__.py +0 -0
  69. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/markdown_it/common/__init__.py +0 -0
  70. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/markdown_it/helpers/__init__.py +0 -0
  71. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/markdown_it/presets/__init__.py +0 -0
  72. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/markdown_it/rules_block/__init__.py +0 -0
  73. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/markdown_it/rules_core/__init__.py +0 -0
  74. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/markdown_it/rules_inline/__init__.py +0 -0
  75. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
  76. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
  77. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
  78. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
  79. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
  80. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
  81. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
  82. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
  83. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/mdurl/__init__.py +0 -0
  84. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
  85. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/numpy/__init__.py +0 -0
  86. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
  87. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
  88. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
  89. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
  90. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
  91. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
  92. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
  93. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
  94. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
  95. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
  96. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
  97. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
  98. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
  99. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
  100. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
  101. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
  102. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
  103. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
  104. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/os/__init__.py +0 -0
  105. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/packaging/__init__.py +0 -0
  106. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/pydantic/__init__.py +0 -0
  107. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/pydantic/_internal/__init__.py +0 -0
  108. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/pydantic/deprecated/__init__.py +0 -0
  109. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/pydantic/plugin/__init__.py +0 -0
  110. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/pydantic/v1/__init__.py +0 -0
  111. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/pydantic_core/__init__.py +0 -0
  112. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
  113. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
  114. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
  115. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/rich/__init__.py +0 -0
  116. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/sys/__init__.py +0 -0
  117. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/typing_inspection/__init__.py +0 -0
  118. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/unittest/__init__.py +0 -0
  119. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/urllib/__init__.py +0 -0
  120. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/xml/__init__.py +0 -0
  121. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
  122. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
  123. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
  124. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/yaml/__init__.py +0 -0
  125. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/zipfile/__init__.py +0 -0
  126. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
  127. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/3.12/zoneinfo/__init__.py +0 -0
  128. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/.mypy_cache/__init__.py +0 -0
  129. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/__init__.py +0 -0
  130. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/__pycache__/__init__.py +0 -0
  131. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/api.py +0 -0
  132. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/config/__init__.py +0 -0
  133. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/config/__pycache__/__init__.py +0 -0
  134. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/config/base_component_config.py +0 -0
  135. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/config/component_registry.py +0 -0
  136. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/config/evonet_component_config.py +0 -0
  137. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/config/schema.py +0 -0
  138. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/config/vector_component_config.py +0 -0
  139. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/PIL/__init__.py +0 -0
  140. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/__init__.py +0 -0
  141. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
  142. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/asyncio/__init__.py +0 -0
  143. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/collections/__init__.py +0 -0
  144. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/concurrent/__init__.py +0 -0
  145. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
  146. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/ctypes/__init__.py +0 -0
  147. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/cycler/__init__.py +0 -0
  148. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/email/__init__.py +0 -0
  149. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/evolib/__init__.py +0 -0
  150. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
  151. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
  152. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
  153. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
  154. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
  155. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/html/__init__.py +0 -0
  156. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/importlib/__init__.py +0 -0
  157. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
  158. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
  159. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/jinja2/__init__.py +0 -0
  160. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/json/__init__.py +0 -0
  161. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/logging/__init__.py +0 -0
  162. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
  163. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
  164. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
  165. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
  166. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
  167. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
  168. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
  169. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
  170. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
  171. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/numpy/__init__.py +0 -0
  172. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
  173. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
  174. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
  175. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
  176. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
  177. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
  178. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
  179. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
  180. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
  181. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
  182. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
  183. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
  184. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
  185. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
  186. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
  187. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
  188. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
  189. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
  190. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/os/__init__.py +0 -0
  191. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/packaging/__init__.py +0 -0
  192. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
  193. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
  194. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
  195. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/sys/__init__.py +0 -0
  196. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/unittest/__init__.py +0 -0
  197. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/urllib/__init__.py +0 -0
  198. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/xml/__init__.py +0 -0
  199. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
  200. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
  201. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
  202. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/yaml/__init__.py +0 -0
  203. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/zipfile/__init__.py +0 -0
  204. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
  205. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/.mypy_cache/__init__.py +0 -0
  206. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/README.md +0 -0
  207. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/__init__.py +0 -0
  208. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/core/__pycache__/__init__.py +0 -0
  209. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/globals/README.md +0 -0
  210. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/globals/__init__.py +0 -0
  211. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/globals/__pycache__/__init__.py +0 -0
  212. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/globals/numeric.py +0 -0
  213. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/PIL/__init__.py +0 -0
  214. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/__init__.py +0 -0
  215. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
  216. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/asyncio/__init__.py +0 -0
  217. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/collections/__init__.py +0 -0
  218. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/concurrent/__init__.py +0 -0
  219. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
  220. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/ctypes/__init__.py +0 -0
  221. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/cycler/__init__.py +0 -0
  222. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/email/__init__.py +0 -0
  223. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/evolib/__init__.py +0 -0
  224. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
  225. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
  226. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/evolib/initializers/__init__.py +0 -0
  227. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
  228. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
  229. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
  230. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/html/__init__.py +0 -0
  231. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/importlib/__init__.py +0 -0
  232. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
  233. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
  234. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/jinja2/__init__.py +0 -0
  235. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/json/__init__.py +0 -0
  236. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/logging/__init__.py +0 -0
  237. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
  238. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
  239. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
  240. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
  241. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
  242. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
  243. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
  244. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
  245. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
  246. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/__init__.py +0 -0
  247. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
  248. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
  249. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
  250. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
  251. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
  252. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
  253. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
  254. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
  255. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
  256. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
  257. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
  258. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
  259. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
  260. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
  261. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
  262. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
  263. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
  264. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
  265. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/os/__init__.py +0 -0
  266. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/packaging/__init__.py +0 -0
  267. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
  268. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
  269. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
  270. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/sys/__init__.py +0 -0
  271. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/unittest/__init__.py +0 -0
  272. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/urllib/__init__.py +0 -0
  273. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/xml/__init__.py +0 -0
  274. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
  275. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
  276. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
  277. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/yaml/__init__.py +0 -0
  278. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/zipfile/__init__.py +0 -0
  279. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
  280. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/.mypy_cache/__init__.py +0 -0
  281. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/__init__.py +0 -0
  282. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/__pycache__/__init__.py +0 -0
  283. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/evonet_initializers.py +0 -0
  284. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/net_initializers.py +0 -0
  285. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/registry.py +0 -0
  286. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/initializers/vector_initializers.py +0 -0
  287. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/interfaces/__init__.py +0 -0
  288. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/interfaces/__pycache__/__init__.py +0 -0
  289. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/interfaces/enums.py +0 -0
  290. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/interfaces/structs.py +0 -0
  291. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/interfaces/types.py +0 -0
  292. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/io/checkpoint.py +0 -0
  293. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/io/serialization.py +0 -0
  294. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/operators/README.md +0 -0
  295. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/operators/__init__.py +0 -0
  296. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/operators/__pycache__/__init__.py +0 -0
  297. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/operators/crossover.py +0 -0
  298. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/operators/mutation.py +0 -0
  299. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/operators/replacement.py +0 -0
  300. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/registry/__init__.py +0 -0
  301. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/registry/__pycache__/__init__.py +0 -0
  302. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/registry/replacement_registry.py +0 -0
  303. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/registry/selection_registry.py +0 -0
  304. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/registry/strategy_registry.py +0 -0
  305. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/PIL/__init__.py +0 -0
  306. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/__init__.py +0 -0
  307. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
  308. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/annotated_types/__init__.py +0 -0
  309. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/asyncio/__init__.py +0 -0
  310. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/collections/__init__.py +0 -0
  311. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/concurrent/__init__.py +0 -0
  312. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
  313. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/ctypes/__init__.py +0 -0
  314. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/cycler/__init__.py +0 -0
  315. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/email/__init__.py +0 -0
  316. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/evolib/__init__.py +0 -0
  317. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/evolib/config/__init__.py +0 -0
  318. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
  319. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
  320. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/evolib/initializers/__init__.py +0 -0
  321. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
  322. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
  323. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/evolib/registry/__init__.py +0 -0
  324. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/evolib/representation/__init__.py +0 -0
  325. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
  326. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/html/__init__.py +0 -0
  327. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/importlib/__init__.py +0 -0
  328. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
  329. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
  330. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/jinja2/__init__.py +0 -0
  331. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/json/__init__.py +0 -0
  332. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/logging/__init__.py +0 -0
  333. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/markdown_it/__init__.py +0 -0
  334. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/markdown_it/common/__init__.py +0 -0
  335. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/markdown_it/helpers/__init__.py +0 -0
  336. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/markdown_it/presets/__init__.py +0 -0
  337. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/markdown_it/rules_block/__init__.py +0 -0
  338. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/markdown_it/rules_core/__init__.py +0 -0
  339. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/markdown_it/rules_inline/__init__.py +0 -0
  340. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
  341. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
  342. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
  343. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
  344. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
  345. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
  346. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
  347. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
  348. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/mdurl/__init__.py +0 -0
  349. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
  350. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/numpy/__init__.py +0 -0
  351. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
  352. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
  353. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
  354. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
  355. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
  356. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
  357. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
  358. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
  359. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
  360. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
  361. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
  362. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
  363. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
  364. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
  365. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
  366. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
  367. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
  368. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
  369. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/os/__init__.py +0 -0
  370. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/packaging/__init__.py +0 -0
  371. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/pydantic/__init__.py +0 -0
  372. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/pydantic/_internal/__init__.py +0 -0
  373. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/pydantic/deprecated/__init__.py +0 -0
  374. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/pydantic/plugin/__init__.py +0 -0
  375. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/pydantic/v1/__init__.py +0 -0
  376. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/pydantic_core/__init__.py +0 -0
  377. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
  378. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
  379. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
  380. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/rich/__init__.py +0 -0
  381. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/sys/__init__.py +0 -0
  382. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/typing_inspection/__init__.py +0 -0
  383. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/unittest/__init__.py +0 -0
  384. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/urllib/__init__.py +0 -0
  385. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/xml/__init__.py +0 -0
  386. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
  387. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
  388. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
  389. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/yaml/__init__.py +0 -0
  390. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/zipfile/__init__.py +0 -0
  391. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
  392. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/3.12/zoneinfo/__init__.py +0 -0
  393. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/.mypy_cache/__init__.py +0 -0
  394. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/__init__.py +0 -0
  395. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/__pycache__/__init__.py +0 -0
  396. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/_apply_config_mapping.py +0 -0
  397. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/base.py +0 -0
  398. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/composite.py +0 -0
  399. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/evo_params.py +0 -0
  400. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/netvector.py +0 -0
  401. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/representation/vector.py +0 -0
  402. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/utils/README.md +0 -0
  403. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/utils/__init__.py +0 -0
  404. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/utils/__pycache__/__init__.py +0 -0
  405. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/utils/benchmarks.py +0 -0
  406. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/utils/config_loader.py +0 -0
  407. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/utils/fitness.py +0 -0
  408. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/utils/history_logger.py +0 -0
  409. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/utils/loss_functions.py +0 -0
  410. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/utils/plotting.py +0 -0
  411. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/utils/random.py +0 -0
  412. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib/utils/registry.py +0 -0
  413. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib.egg-info/dependency_links.txt +0 -0
  414. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib.egg-info/requires.txt +0 -0
  415. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/evolib.egg-info/top_level.txt +0 -0
  416. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/01_basic_usage/01_getting_started.py +0 -0
  417. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/01_basic_usage/02_mutation.py +0 -0
  418. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/01_basic_usage/03_population_mutation.py +0 -0
  419. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/01_basic_usage/04_fitness.py +0 -0
  420. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/02_strategies/01_step_by_step_evolution.py +0 -0
  421. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/02_strategies/02_mu_lambda_step.py +0 -0
  422. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/02_strategies/03_mu_lambda.py +0 -0
  423. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/02_strategies/04_flexible.py +0 -0
  424. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/03_comparisons/01_history.py +0 -0
  425. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/03_comparisons/02_plotting.py +0 -0
  426. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/03_comparisons/03_compare_runs.py +0 -0
  427. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/03_comparisons/04_exponential_decay_vs_static.py +0 -0
  428. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/03_comparisons/05_adaptive_global_vs_static.py +0 -0
  429. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/03_comparisons/06_adaptive_individual_vs_static.py +0 -0
  430. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/03_comparisons/07_selection_comparison.py +0 -0
  431. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/03_comparisons/08_selection_pressure.py +0 -0
  432. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/03_comparisons/09_selection_vs_mutation_pressure.py +0 -0
  433. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/03_comparisons/10_selection_stochastic_vs_deterministic.py +0 -0
  434. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/03_comparisons/11_crossover_comparison.py +0 -0
  435. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/04_function_approximation/01_polynomial_sine.py +0 -0
  436. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/04_function_approximation/02_sine_point_approximation.py +0 -0
  437. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/04_function_approximation/03_approximation_with_noise.py +0 -0
  438. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/05_advanced_topics/01_fitness_landscape_exploration.py +0 -0
  439. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/05_advanced_topics/02_rosenbrock_surface_path.py +0 -0
  440. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/05_advanced_topics/03_vector_control.py +0 -0
  441. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/05_advanced_topics/04_vector_control_with_obstacles.py +0 -0
  442. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/05_advanced_topics/05_piecewise_linear_xsys.py +0 -0
  443. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/05_advanced_topics/06_evolving_mutation_strength_as_a_module.py +0 -0
  444. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/06_netvector/01_netvector_sine_approximation.py +0 -0
  445. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/06_netvector/02_netvector_modulated_output.py +0 -0
  446. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/06_netvector/03_netvector_gain_and_bias.py +0 -0
  447. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/07_evonet/01_sine_approximation.py +0 -0
  448. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/07_evonet/02_image_approximation.py +0 -0
  449. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/07_evonet/03_structural_xor.py +0 -0
  450. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/examples/07_evonet/resize_all_images.py +0 -0
  451. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/setup.cfg +0 -0
  452. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/tests/test_benchmarks.py +0 -0
  453. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/tests/test_config_loader.py +0 -0
  454. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/tests/test_elitism_preserves_best_fitness.py +0 -0
  455. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/tests/test_evonet_vector_io.py +0 -0
  456. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/tests/test_initializer_evonet.py +0 -0
  457. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/tests/test_initializer_net.py +0 -0
  458. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/tests/test_mutation.py +0 -0
  459. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/tests/test_population.py +0 -0
  460. {evolib-0.2.0b2.dev3 → evolib-0.2.0b2.dev4}/tests/test_selection.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: evolib
3
- Version: 0.2.0b2.dev3
3
+ Version: 0.2.0b2.dev4
4
4
  Summary: A modular framework for evolutionary strategies and neuroevolution.
5
5
  Author-email: EvoLib <evolib@dismail.de>
6
6
  License: MIT License
@@ -21,6 +21,7 @@ Classes:
21
21
 
22
22
  from copy import deepcopy
23
23
  from typing import Any, Dict, Optional
24
+ from uuid import uuid4
24
25
 
25
26
  from evolib.interfaces.enums import Origin
26
27
 
@@ -60,6 +61,7 @@ class Indiv:
60
61
  extra_metrics: dict[str, float]
61
62
 
62
63
  __slots__ = (
64
+ "id",
63
65
  "para",
64
66
  "fitness",
65
67
  "is_evaluated",
@@ -71,7 +73,8 @@ class Indiv:
71
73
  "is_elite",
72
74
  )
73
75
 
74
- def __init__(self, para: Any = None):
76
+ def __init__(self, para: Any | None = None):
77
+ self.id: str = str(uuid4())
75
78
  self.para = para
76
79
  self.fitness = None
77
80
  self.is_evaluated = False
@@ -160,14 +163,43 @@ class Indiv:
160
163
  """Return True if the individual is an offspring."""
161
164
  return self.origin == Origin.OFFSPRING
162
165
 
163
- def copy(self) -> "Indiv":
166
+ def copy(
167
+ self,
168
+ *,
169
+ reset_id: bool = True,
170
+ reset_fitness: bool = False,
171
+ reset_age: bool = False,
172
+ reset_evaluation: bool = False,
173
+ reset_origin: bool = False,
174
+ ) -> "Indiv":
164
175
  """
165
- Create a copy of the individual.
176
+ Create a copy of the individual, with optional resets.
166
177
 
167
- This method can be overridden in subclasses to implement
168
- optimized or custom copy behavior.
178
+ Args:
179
+ reset_id (bool): If True (default), assign a new unique ID to the copy.
180
+ reset_fitness (bool): If True, set fitness to None in the copy.
181
+ reset_age (bool): If True, set age to 0 in the copy.
182
+ reset_evaluation (bool): If True, set is_evaluated = False in the copy.
183
+ reset_origin (bool): If True, set origin = Origin.OFFSPRING
184
+ and parent_idx = None in the copy.
169
185
 
170
186
  Returns:
171
- Indiv: A copy of this individual.
187
+ Indiv: A (possibly reset) copy of this individual.
172
188
  """
173
- return deepcopy(self)
189
+ new_indiv: Indiv = deepcopy(self)
190
+
191
+ if reset_id:
192
+ new_indiv.id = str(uuid4())
193
+ if reset_fitness:
194
+ new_indiv.fitness = None
195
+ if reset_age:
196
+ new_indiv.age = 0
197
+ if reset_evaluation:
198
+ new_indiv.is_evaluated = False
199
+ if reset_origin:
200
+ from evolib.interfaces.enums import Origin
201
+
202
+ new_indiv.origin = Origin.OFFSPRING
203
+ new_indiv.parent_idx = None
204
+
205
+ return new_indiv
@@ -208,6 +208,10 @@ class Pop:
208
208
  para = init_fn(self)
209
209
  self.add_indiv(Indiv(para=para))
210
210
 
211
+ # initialize adaptive parameters for initial parents
212
+ if self.indivs:
213
+ self.update_parameters(self.indivs)
214
+
211
215
  def set_fitness_function(self, func: FitnessFunction) -> None:
212
216
  """
213
217
  Sets the fitness function to be used for evaluating individuals.
@@ -567,7 +571,7 @@ class Pop:
567
571
 
568
572
  self.history_logger.reset()
569
573
 
570
- def update_parameters(self) -> None:
574
+ def update_parameters(self, indivs: list[Indiv]) -> None:
571
575
  """
572
576
  Update all strategy-dependent parameters for the current generation.
573
577
 
@@ -577,43 +581,54 @@ class Pop:
577
581
  ValueError or AttributeError if the population or its individuals
578
582
  are invalid.
579
583
  """
580
- self.update_mutation_parameters()
581
- self.update_crossover_parameters()
584
+ self.update_mutation_parameters(indivs)
585
+ self.update_crossover_parameters(indivs)
582
586
 
583
- def update_mutation_parameters(self) -> None:
587
+ def update_mutation_parameters(self, indivs: list[Indiv]) -> None:
584
588
  """
585
- Triggers per-generation mutation parameter updates for all individuals in the
586
- population via their `para` objects.
589
+ Update mutation-related parameters for a given set of individuals via their
590
+ `para` objects.
587
591
 
588
- This ensures that all individuals – including parents – are updated consistently
589
- based on current generation number.
592
+ Typical usage:
593
+ - During population initialization: called once on all parents to ensure
594
+ they start with valid adaptive parameters.
595
+ - During evolution: called on offspring *before* mutation, so that new
596
+ individuals use up-to-date parameters (e.g. annealing schedules).
590
597
 
591
- Uses a polymorphic call to `para.update_mutation_parameters()`, preserving
592
- encapsulation.
598
+ Notes:
599
+ - Parents are not updated in every generation. They keep the parameters
600
+ assigned at initialization, ensuring selection acts on stable values.
601
+ - Offspring are updated once per generation, prior to mutation.
593
602
  """
594
- for indiv in self.indivs:
603
+
604
+ for indiv in indivs:
605
+ assert indiv.para is not None
595
606
  indiv.para.update_mutation_parameters(
596
607
  self.generation_num, self.max_generations, self.diversity_ema
597
608
  )
598
609
 
599
- def update_crossover_parameters(self) -> None:
610
+ def update_crossover_parameters(self, indivs: list[Indiv]) -> None:
600
611
  """
601
- Triggers per-generation update of crossover parameters for all individuals.
612
+ Update crossover-related parameters for a given set of individuals.
602
613
 
603
- Applies strategy-dependent crossover control (e.g. exponential decay or
604
- adaptive global), using generation number and population diversity.
614
+ Typical usage:
615
+ - During population initialization: called once on all parents to ensure
616
+ they start with valid crossover parameters.
617
+ - During evolution: called on offspring *before* crossover, so that new
618
+ individuals use up-to-date parameters (e.g. annealing schedules or
619
+ adaptive rates).
605
620
 
606
- Raises:
607
- ValueError: If population is uninitialized or empty.
608
- AttributeError: If an individual lacks a valid 'para' object with method
609
- 'update_crossover_parameters'.
621
+ Notes:
622
+ - Parents are not updated in every generation. They keep the parameters
623
+ assigned at initialization, ensuring selection acts on stable values.
624
+ - Offspring are updated once per generation, prior to crossover.
610
625
  """
611
- if not self.indivs:
626
+ if not indivs:
612
627
  raise ValueError(
613
628
  "Population is empty – cannot update crossover parameters."
614
629
  )
615
630
 
616
- for indiv in self.indivs:
631
+ for indiv in indivs:
617
632
  if not hasattr(indiv, "para") or not hasattr(
618
633
  indiv.para, "update_crossover_parameters"
619
634
  ):
@@ -622,6 +637,7 @@ class Pop:
622
637
  "with 'update_crossover_parameters' method."
623
638
  )
624
639
 
640
+ assert indiv.para is not None
625
641
  indiv.para.update_crossover_parameters(
626
642
  self.generation_num,
627
643
  self.max_generations,
@@ -0,0 +1,31 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ from typing import Optional, Set
4
+
5
+ from evonet.enums import RecurrentKind
6
+
7
+
8
+ def resolve_recurrent_kinds(preset: Optional[str]) -> Set[RecurrentKind]:
9
+ """
10
+ Map a preset string to the corresponding set of recurrent connection types.
11
+
12
+ Parameters
13
+ ----------
14
+ preset : Optional[str]
15
+ One of: "none", "direct", "local", "all", or None.
16
+
17
+ Returns
18
+ -------
19
+ Set[RecurrentKind]
20
+ A set of recurrent kinds to use.
21
+ """
22
+ if preset is None or preset == "none":
23
+ return set()
24
+ elif preset == "direct":
25
+ return {RecurrentKind.DIRECT}
26
+ elif preset == "local":
27
+ return {RecurrentKind.DIRECT, RecurrentKind.LATERAL}
28
+ elif preset == "all":
29
+ return {RecurrentKind.DIRECT, RecurrentKind.LATERAL, RecurrentKind.INDIRECT}
30
+ else:
31
+ raise ValueError(f"Unknown recurrent preset: {preset}")
@@ -2,7 +2,7 @@
2
2
 
3
3
  import numpy as np
4
4
  from evonet.core import Nnet
5
- from evonet.enums import NeuronRole, RecurrentKind
5
+ from evonet.enums import NeuronRole
6
6
  from evonet.mutation import (
7
7
  add_random_connection,
8
8
  add_random_neuron,
@@ -12,19 +12,7 @@ from evonet.mutation import (
12
12
  )
13
13
 
14
14
  from evolib.config.base_component_config import StructuralMutationConfig
15
-
16
-
17
- def resolve_recurrent_kinds(preset: str | None) -> set[RecurrentKind]:
18
- if preset == "none" or preset is None:
19
- return set()
20
- elif preset == "direct":
21
- return {RecurrentKind.DIRECT}
22
- elif preset == "local":
23
- return {RecurrentKind.DIRECT, RecurrentKind.LATERAL}
24
- elif preset == "all":
25
- return {RecurrentKind.DIRECT, RecurrentKind.LATERAL, RecurrentKind.INDIRECT}
26
- else:
27
- raise ValueError(f"Unknown recurrent preset: {preset}")
15
+ from evolib.interfaces.enum_helpers import resolve_recurrent_kinds
28
16
 
29
17
 
30
18
  def mutate_structure(net: Nnet, cfg: StructuralMutationConfig) -> None:
@@ -4,9 +4,6 @@ from typing import Any, List
4
4
 
5
5
  import numpy as np
6
6
 
7
- from evolib.interfaces.enums import Origin
8
- from evolib.utils.copy_indiv import copy_indiv
9
-
10
7
 
11
8
  def generate_cloned_offspring(parents: List[Any], lambda_: int) -> List[Any]:
12
9
  """
@@ -37,11 +34,13 @@ def generate_cloned_offspring(parents: List[Any], lambda_: int) -> List[Any]:
37
34
 
38
35
  for idx in parent_indices:
39
36
  parent = parents[idx]
40
- child = copy_indiv(parent)
41
- child.age = 0
42
- child.fitness = None
43
- child.is_evaluated = False
44
- child.origin = Origin.OFFSPRING
37
+ child = parent.copy(
38
+ reset_id=True,
39
+ reset_fitness=True,
40
+ reset_age=True,
41
+ reset_evaluation=True,
42
+ reset_origin=True,
43
+ )
45
44
  child.parent_idx = idx
46
45
  offspring.append(child)
47
46
 
@@ -12,10 +12,9 @@ Included methods:
12
12
  - Truncation Selection
13
13
 
14
14
  All methods operate on a population of individuals with assigned fitness values and
15
- return deep copies of selected parents.
15
+ return copies of selected parents.
16
16
  """
17
17
 
18
- import copy
19
18
  import random
20
19
  from typing import TYPE_CHECKING, Any, List, Optional
21
20
 
@@ -124,7 +123,7 @@ def selection_tournament(
124
123
  )
125
124
 
126
125
  # Kopie des besten Individuums hinzufuegen
127
- selected_parents.append(copy.deepcopy(pop.indivs[best_idx]))
126
+ selected_parents.append(pop.indivs[best_idx].copy())
128
127
 
129
128
  # Entfernen, falls gewuenscht
130
129
  if remove_selected:
@@ -159,7 +158,7 @@ def selection_rank_based(
159
158
  Default: False (minimization).
160
159
 
161
160
  Returns:
162
- List[Any]: List of selected individuals (deep copies).
161
+ List[Any]: List of selected individuals (copies).
163
162
 
164
163
  Raises:
165
164
  ValueError: If parameters are invalid (e.g., empty population,
@@ -181,8 +180,6 @@ def selection_rank_based(
181
180
  if mode == "exponential" and exp_base is None:
182
181
  raise ValueError("exp_base must be set when using exponential rank selection.")
183
182
 
184
- exp_base = 1.0
185
-
186
183
  fitnesses = [indiv.fitness for indiv in pop.indivs]
187
184
  if any(f is None or np.isnan(f) for f in fitnesses):
188
185
  raise TypeError("All fitness values must be valid (not None or NaN)")
@@ -222,7 +219,7 @@ def selection_rank_based(
222
219
  # Select an individual based on rank probability
223
220
  list_index = np.random.choice(population_size, p=probabilities)
224
221
  selected_idx = available_indices[list_index]
225
- selected_parents.append(copy.deepcopy(pop.indivs[selected_idx]))
222
+ selected_parents.append(pop.indivs[selected_idx].copy())
226
223
 
227
224
  # Optionally remove selected individual
228
225
  if remove_selected:
@@ -260,13 +257,13 @@ def selection_random(pop: "Pop", remove_selected: bool = False) -> List[Indiv]:
260
257
 
261
258
  # Randomly select individual from the population
262
259
  selected_parent = random.choice(available_indivs)
263
- parent = copy.deepcopy(selected_parent)
260
+ parent = selected_parent.copy()
264
261
 
265
262
  # Append the best individual to offspring
266
263
  selected_parents.append(parent)
267
264
 
268
265
  if remove_selected:
269
- available_indivs.remove(parent)
266
+ available_indivs.remove(selected_parent)
270
267
 
271
268
  return selected_parents
272
269
 
@@ -282,7 +279,7 @@ def selection_roulette(
282
279
  fitness_maximization (bool): If True, higher fitness is better.
283
280
 
284
281
  Returns:
285
- List[Any]: List of selected individuals (deep copies).
282
+ List[Any]: List of selected individuals (copies).
286
283
  """
287
284
  if not pop.indivs:
288
285
  raise ValueError("Population is empty")
@@ -302,7 +299,7 @@ def selection_roulette(
302
299
  probabilities = fitnesses / total_fitness
303
300
  indices = np.random.choice(len(pop.indivs), size=num_parents, p=probabilities)
304
301
 
305
- return [copy.deepcopy(pop.indivs[i]) for i in indices]
302
+ return [pop.indivs[i].copy() for i in indices]
306
303
 
307
304
 
308
305
  def selection_sus(
@@ -316,7 +313,7 @@ def selection_sus(
316
313
  fitness_maximization (bool): If True, higher fitness is better.
317
314
 
318
315
  Returns:
319
- List[Any]: Selected individuals (deep copies).
316
+ List[Any]: Selected individuals (copies).
320
317
  """
321
318
  if not pop.indivs:
322
319
  raise ValueError("Population is empty")
@@ -345,7 +342,7 @@ def selection_sus(
345
342
  for p in pointers:
346
343
  while p > cumulative[i]:
347
344
  i += 1
348
- selected.append(copy.deepcopy(pop.indivs[i]))
345
+ selected.append(pop.indivs[i].copy())
349
346
 
350
347
  return selected
351
348
 
@@ -365,7 +362,7 @@ def selection_boltzmann(
365
362
  fitness_maximization (bool): If True, higher fitness is better.
366
363
 
367
364
  Returns:
368
- List[Any]: Selected individuals (deep copies).
365
+ List[Any]: Selected individuals (copies).
369
366
  """
370
367
  if not pop.indivs:
371
368
  raise ValueError("Population is empty")
@@ -388,7 +385,7 @@ def selection_boltzmann(
388
385
  probabilities = exp_values / np.sum(exp_values)
389
386
 
390
387
  indices = np.random.choice(len(pop.indivs), size=num_parents, p=probabilities)
391
- return [copy.deepcopy(pop.indivs[i]) for i in indices]
388
+ return [pop.indivs[i].copy() for i in indices]
392
389
 
393
390
 
394
391
  def selection_truncation(
@@ -402,7 +399,7 @@ def selection_truncation(
402
399
  fitness_maximization (bool): If True, selects best fitness; else lowest.
403
400
 
404
401
  Returns:
405
- List[Any]: Selected individuals (deep copies).
402
+ List[Any]: Selected individuals (copies).
406
403
  """
407
404
 
408
405
  if not pop.indivs:
@@ -419,4 +416,4 @@ def selection_truncation(
419
416
  sorted_indices = sorted_indices[::-1]
420
417
 
421
418
  selected_indices = sorted_indices[:num_parents]
422
- return [copy.deepcopy(pop.indivs[i]) for i in selected_indices]
419
+ return [pop.indivs[i].copy() for i in selected_indices]
@@ -47,12 +47,12 @@ def evolve_mu_plus_lambda(pop: "Pop") -> None:
47
47
  # Age all current individuals
48
48
  pop.age_indivs()
49
49
 
50
- # Update mutation/crossover parameters
51
- pop.update_parameters()
52
-
53
50
  # CREATE OFFSPRING
54
51
  offspring = generate_cloned_offspring(pop.indivs, pop.offspring_pool_size)
55
52
 
53
+ # Update mutation/crossover parameters
54
+ pop.update_parameters(offspring)
55
+
56
56
  # Crossover
57
57
  crossover_offspring(pop, offspring)
58
58
 
@@ -90,12 +90,12 @@ def evolve_mu_comma_lambda(pop: "Pop") -> None:
90
90
 
91
91
  pop.evaluate_fitness()
92
92
 
93
- # Update mutation/crossover parameters
94
- pop.update_parameters()
95
-
96
93
  # CREATE OFFSPRING
97
94
  offspring = generate_cloned_offspring(pop.indivs, pop.offspring_pool_size)
98
95
 
96
+ # Update mutation/crossover parameters
97
+ pop.update_parameters(offspring)
98
+
99
99
  # Crossover
100
100
  crossover_offspring(pop, offspring)
101
101
 
@@ -164,7 +164,7 @@ def evolve_steady_state(pop: "Pop") -> None:
164
164
  offspring = generate_cloned_offspring(parents, pop.lambda_)
165
165
 
166
166
  # Update mutation/crossover parameters
167
- pop.update_parameters()
167
+ pop.update_parameters(offspring)
168
168
 
169
169
  # Crossover
170
170
  crossover_offspring(pop, offspring)
@@ -226,12 +226,12 @@ def evolve_flexible(pop: "Pop") -> None:
226
226
  # Reproduction
227
227
  offspring = generate_cloned_offspring(parents, pop.lambda_)
228
228
 
229
+ # Mutation & Crossover Parameters
230
+ pop.update_parameters(offspring)
231
+
229
232
  # Crossover
230
233
  crossover_offspring(pop, offspring)
231
234
 
232
- # Mutation & Crossover Parameters
233
- pop.update_parameters()
234
-
235
235
  # Mutation
236
236
  mutate_offspring(pop, offspring)
237
237
 
@@ -17,12 +17,10 @@ from evonet.mutation import mutate_activations, mutate_bias, mutate_weight
17
17
 
18
18
  from evolib.config.base_component_config import StructuralMutationConfig
19
19
  from evolib.config.evonet_component_config import EvoNetComponentConfig
20
+ from evolib.interfaces.enum_helpers import resolve_recurrent_kinds
20
21
  from evolib.interfaces.enums import MutationStrategy
21
22
  from evolib.interfaces.types import ModuleConfig
22
- from evolib.operators.evonet_structural_mutation import (
23
- mutate_structure,
24
- resolve_recurrent_kinds,
25
- )
23
+ from evolib.operators.evonet_structural_mutation import mutate_structure
26
24
  from evolib.operators.mutation import (
27
25
  adapt_mutation_probability_by_diversity,
28
26
  adapt_mutation_strength,
@@ -317,7 +315,8 @@ class EvoNet(ParaBase):
317
315
  )
318
316
 
319
317
  # Perform adaptive update
320
- ep.mutation_strength = adapt_mutation_strength(ep, self.weight_bounds)
318
+ bounds = (ep.min_mutation_strength, ep.max_mutation_strength)
319
+ ep.mutation_strength = adapt_mutation_strength(ep, bounds)
321
320
 
322
321
  # If Bias-Override exists
323
322
  if self.bias_evo_params is not None:
@@ -366,7 +365,10 @@ class EvoNet(ParaBase):
366
365
  bep.mutation_strength = np.random.uniform(
367
366
  bep.min_mutation_strength, bep.max_mutation_strength
368
367
  )
369
- bep.mutation_strength = adapt_mutation_strength(bep, self.bias_bounds)
368
+
369
+ # Perform adaptive update
370
+ bounds = (bep.min_mutation_strength, bep.max_mutation_strength)
371
+ bep.mutation_strength = adapt_mutation_strength(bep, bounds)
370
372
 
371
373
  def get_vector(self) -> np.ndarray:
372
374
  """Return a flat vector containing all weights and biases."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: evolib
3
- Version: 0.2.0b2.dev3
3
+ Version: 0.2.0b2.dev4
4
4
  Summary: A modular framework for evolutionary strategies and neuroevolution.
5
5
  Author-email: EvoLib <evolib@dismail.de>
6
6
  License: MIT License
@@ -280,6 +280,7 @@ evolib/initializers/.mypy_cache/3.12/zipfile/__init__.py
280
280
  evolib/initializers/.mypy_cache/3.12/zipfile/_path/__init__.py
281
281
  evolib/initializers/__pycache__/__init__.py
282
282
  evolib/interfaces/__init__.py
283
+ evolib/interfaces/enum_helpers.py
283
284
  evolib/interfaces/enums.py
284
285
  evolib/interfaces/structs.py
285
286
  evolib/interfaces/types.py
@@ -403,7 +404,6 @@ evolib/utils/README.md
403
404
  evolib/utils/__init__.py
404
405
  evolib/utils/benchmarks.py
405
406
  evolib/utils/config_loader.py
406
- evolib/utils/copy_indiv.py
407
407
  evolib/utils/fitness.py
408
408
  evolib/utils/history_logger.py
409
409
  evolib/utils/loss_functions.py
@@ -3,9 +3,12 @@ Example: Recurrent Bit Sequence Prediction
3
3
 
4
4
  This example demonstrates how an EvoNet with recurrent connections
5
5
  can be evolved to predict the next bit in a fixed binary sequence.
6
- A warm-up phase is used to let the network state settle before
7
- fitness is measured. Visualization combines a raster plot of
8
- input/target/prediction bits with a line plot of prediction quality.
6
+
7
+ Key details:
8
+ - The bit sequence is repeated twice.
9
+ - The first pass is used as a warm-up so the recurrent state can settle.
10
+ - Fitness and accuracy are evaluated only on the second pass.
11
+ - Visualization shows input, target, and predictions for the evaluated phase.
9
12
  """
10
13
 
11
14
  from evolib import Population, Individual, plot_bit_prediction
@@ -14,8 +17,8 @@ from evolib.representation.evonet import EvoNet
14
17
  FRAME_FOLDER = "04_frames"
15
18
  CONFIG_FILE = "configs/04_recurrent_bitseq.yaml"
16
19
 
17
- #input_seq = [0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1] * 4
18
- #target_seq = [1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0] * 4
20
+ SEQ_LENGTH = 31
21
+ warmup_steps = SEQ_LENGTH
19
22
 
20
23
  def lfsr_sequence(length: int, seed: int = 0b10011, taps=(5, 2)) -> list[int]:
21
24
  """
@@ -45,55 +48,93 @@ def lfsr_sequence(length: int, seed: int = 0b10011, taps=(5, 2)) -> list[int]:
45
48
  bit = state & 1
46
49
  seq.append(bit)
47
50
  # compute feedback from taps
48
- fb = 0
51
+ fb = 1
49
52
  for t in taps:
50
53
  fb ^= (state >> (t - 1)) & 1
51
54
  state = (state >> 1) | (fb << (n - 1))
52
55
  return seq
53
56
 
54
57
 
55
- input_seq = lfsr_sequence(44)
56
- target_seq = input_seq[1:] + [input_seq[0]] # nächstes Bit als Ziel
57
- warmup_steps = 5
58
-
59
-
60
58
  def fitness_bitseq(indiv: Individual) -> float:
61
59
  """
62
60
  Evaluate how well the EvoNet predicts the next bit in a fixed sequence.
63
- Errors from the first `warmup_steps` are ignored to allow network state to settle.
61
+ Returns mean squared error (to minimize).
62
+ Additionally logs classification accuracy in indiv.extra_metrics.
64
63
  """
65
64
  net: EvoNet = indiv.para["brain"].net
66
65
  net.reset(full=True)
67
66
 
68
67
  total_error = 0.0
68
+ correct = 0
69
+ count = 0
70
+
71
+
69
72
  for t in range(len(input_seq)):
70
73
  output = net.calc([input_seq[t]])[0]
71
74
  if t >= warmup_steps:
72
- error = output - target_seq[t]
75
+ target = target_seq[t]
76
+ # --- MSE ---
77
+ error = output - target
73
78
  total_error += error**2
74
79
 
75
- return total_error / (len(input_seq) - warmup_steps)
80
+ # --- Accuracy ---
81
+ pred_bit = 1 if output > 0.5 else 0
82
+ if pred_bit == target:
83
+ correct += 1
84
+ count += 1
85
+
86
+ mse = total_error / count
87
+ acc = correct / count if count > 0 else 0.0
88
+
89
+ # Log extra metrics
90
+ indiv.extra_metrics = {"accuracy": acc, "mse": mse}
91
+
92
+ return mse + (1-acc) / 4
76
93
 
77
94
 
78
95
  def save_plot(pop: Population) -> None:
79
- """
80
- Save visualization of the best individual's predictions
81
- at the current generation.
82
- """
83
96
  best = pop.best()
84
- y_preds = [best.para["brain"].net.calc([bit])[0] for bit in input_seq]
97
+ net = best.para["brain"].net
98
+ net.reset(full=True)
99
+
100
+ print(
101
+ f"id: {best.id[:6]} "
102
+ f"ms: {best.para["brain"].evo_params.mutation_strength} "
103
+ f"mse: {best.extra_metrics.get("mse", best.fitness):.5} "
104
+ f"acc: {best.extra_metrics.get("accuracy", 0.0):.3%}")
105
+
106
+ # Warmup
107
+ for bit in input_seq[:SEQ_LENGTH]:
108
+ net.calc([bit])
109
+
110
+ # Prediction
111
+ y_preds = [net.calc([bit])[0] for bit in input_seq[SEQ_LENGTH:]]
112
+
113
+ true_bits = target_seq[SEQ_LENGTH:]
114
+ input_bits = input_seq[SEQ_LENGTH:]
115
+
116
+ acc = best.extra_metrics.get("accuracy", 0.0)
117
+ mse = best.extra_metrics.get("mse", best.fitness)
85
118
 
86
119
  plot_bit_prediction(
87
- true_bits=target_seq,
120
+ true_bits=true_bits,
88
121
  pred_values=y_preds,
89
- input_bits=input_seq,
90
- title=f"Bit Prediction (gen={pop.generation_num}, MSE={best.fitness:.4f})",
122
+ input_bits=input_bits,
123
+ title=(
124
+ f"Bit Prediction (gen={pop.generation_num}, "
125
+ f"MSE={mse:.5f}, Acc={acc:.3%})"
126
+ ),
91
127
  save_path=f"{FRAME_FOLDER}/gen_{pop.generation_num:03d}.png",
92
128
  )
93
-
129
+
130
+ best = pop.best()
94
131
  best.para["brain"].net.print_graph("test.png",fillcolors_on=True)
95
132
 
96
133
 
134
+ input_seq = lfsr_sequence(SEQ_LENGTH) * 2
135
+ target_seq = input_seq[1:] + [input_seq[0]]
136
+
137
+
97
138
  if __name__ == "__main__":
98
139
  pop = Population(CONFIG_FILE, fitness_function=fitness_bitseq)
99
140
  pop.run(verbosity=1, on_generation_end=save_plot)
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "evolib"
7
- version = "0.2.0b2.dev3"
7
+ version = "0.2.0b2.dev4"
8
8
  description = "A modular framework for evolutionary strategies and neuroevolution."
9
9
  authors = [
10
10
  { name = "EvoLib", email = "evolib@dismail.de" }