evolib 0.2.0b2.dev5__tar.gz → 0.2.0b2.dev7__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 (468) hide show
  1. {evolib-0.2.0b2.dev5/evolib.egg-info → evolib-0.2.0b2.dev7}/PKG-INFO +3 -3
  2. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/README.md +2 -2
  3. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/api.py +4 -0
  4. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/config/schema.py +29 -0
  5. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/individual.py +3 -0
  6. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/population.py +29 -12
  7. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/evonet_initializers.py +50 -1
  8. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/registry.py +2 -0
  9. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/io/checkpoint.py +8 -0
  10. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/utils/benchmarks.py +99 -1
  11. evolib-0.2.0b2.dev7/evolib/utils/parallel.py +100 -0
  12. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7/evolib.egg-info}/PKG-INFO +3 -3
  13. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib.egg-info/SOURCES.txt +8 -1
  14. evolib-0.2.0b2.dev7/examples/07_evonet/00_identity_test.py +63 -0
  15. evolib-0.2.0b2.dev7/examples/07_evonet/05_recurrent_timeseries.py +176 -0
  16. evolib-0.2.0b2.dev7/examples/07_evonet/06_recurrent_indicator.py +198 -0
  17. evolib-0.2.0b2.dev7/examples/07_evonet/06_recurrent_indicator_01.py +181 -0
  18. evolib-0.2.0b2.dev7/examples/07_evonet/06_recurrent_indicator_02.py +198 -0
  19. evolib-0.2.0b2.dev7/examples/07_evonet/06_recurrent_trading.py +241 -0
  20. evolib-0.2.0b2.dev7/examples/07_evonet/07_recurrent_trading_01.py +232 -0
  21. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/pyproject.toml +1 -1
  22. evolib-0.2.0b2.dev5/examples/07_evonet/resize_all_images.py +0 -28
  23. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/LICENSE +0 -0
  24. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/MANIFEST.in +0 -0
  25. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/docs/api_core_individual.rst +0 -0
  26. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/docs/api_core_population.rst +0 -0
  27. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/docs/api_operators_crossover.rst +0 -0
  28. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/docs/api_operators_evonet_structural_mutation.rst +0 -0
  29. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/docs/api_operators_mutation.rst +0 -0
  30. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/docs/api_operators_replacement.rst +0 -0
  31. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/docs/api_operators_reproduction.rst +0 -0
  32. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/docs/api_operators_selection.rst +0 -0
  33. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/docs/api_operators_strategy.rst +0 -0
  34. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/docs/api_public_api.rst +0 -0
  35. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/docs/api_representation_evonet.rst +0 -0
  36. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/docs/api_representation_netvector.rst +0 -0
  37. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/docs/api_representation_vector.rst +0 -0
  38. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/docs/api_utils_benchmarks.rst +0 -0
  39. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/docs/api_utils_history_logger.rst +0 -0
  40. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/docs/api_utils_loss_functions.rst +0 -0
  41. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/docs/api_utils_plotting.rst +0 -0
  42. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/docs/conf.py +0 -0
  43. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/docs/config_guide.md +0 -0
  44. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/docs/config_parameter.md +0 -0
  45. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/docs/getting_started.md +0 -0
  46. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/docs/index.md +0 -0
  47. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/PIL/__init__.py +0 -0
  48. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/__init__.py +0 -0
  49. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
  50. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/annotated_types/__init__.py +0 -0
  51. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/asyncio/__init__.py +0 -0
  52. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/collections/__init__.py +0 -0
  53. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/concurrent/__init__.py +0 -0
  54. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
  55. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/ctypes/__init__.py +0 -0
  56. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/cycler/__init__.py +0 -0
  57. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/email/__init__.py +0 -0
  58. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/evolib/__init__.py +0 -0
  59. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/evolib/config/__init__.py +0 -0
  60. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
  61. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
  62. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/evolib/initializers/__init__.py +0 -0
  63. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
  64. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
  65. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/evolib/registry/__init__.py +0 -0
  66. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/evolib/representation/__init__.py +0 -0
  67. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
  68. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/html/__init__.py +0 -0
  69. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/importlib/__init__.py +0 -0
  70. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
  71. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
  72. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/jinja2/__init__.py +0 -0
  73. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/json/__init__.py +0 -0
  74. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/logging/__init__.py +0 -0
  75. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/markdown_it/__init__.py +0 -0
  76. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/markdown_it/common/__init__.py +0 -0
  77. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/markdown_it/helpers/__init__.py +0 -0
  78. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/markdown_it/presets/__init__.py +0 -0
  79. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/markdown_it/rules_block/__init__.py +0 -0
  80. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/markdown_it/rules_core/__init__.py +0 -0
  81. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/markdown_it/rules_inline/__init__.py +0 -0
  82. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
  83. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
  84. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
  85. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
  86. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
  87. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
  88. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
  89. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
  90. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/mdurl/__init__.py +0 -0
  91. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
  92. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/numpy/__init__.py +0 -0
  93. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
  94. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
  95. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
  96. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
  97. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
  98. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
  99. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
  100. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
  101. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
  102. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
  103. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
  104. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
  105. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
  106. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
  107. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
  108. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
  109. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
  110. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
  111. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/os/__init__.py +0 -0
  112. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/packaging/__init__.py +0 -0
  113. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/pydantic/__init__.py +0 -0
  114. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/pydantic/_internal/__init__.py +0 -0
  115. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/pydantic/deprecated/__init__.py +0 -0
  116. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/pydantic/plugin/__init__.py +0 -0
  117. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/pydantic/v1/__init__.py +0 -0
  118. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/pydantic_core/__init__.py +0 -0
  119. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
  120. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
  121. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
  122. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/rich/__init__.py +0 -0
  123. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/sys/__init__.py +0 -0
  124. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/typing_inspection/__init__.py +0 -0
  125. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/unittest/__init__.py +0 -0
  126. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/urllib/__init__.py +0 -0
  127. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/xml/__init__.py +0 -0
  128. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
  129. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
  130. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
  131. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/yaml/__init__.py +0 -0
  132. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/zipfile/__init__.py +0 -0
  133. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
  134. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/3.12/zoneinfo/__init__.py +0 -0
  135. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/.mypy_cache/__init__.py +0 -0
  136. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/__init__.py +0 -0
  137. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/__pycache__/__init__.py +0 -0
  138. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/config/__init__.py +0 -0
  139. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/config/__pycache__/__init__.py +0 -0
  140. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/config/base_component_config.py +0 -0
  141. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/config/component_registry.py +0 -0
  142. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/config/evonet_component_config.py +0 -0
  143. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/config/vector_component_config.py +0 -0
  144. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/PIL/__init__.py +0 -0
  145. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/__init__.py +0 -0
  146. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
  147. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/asyncio/__init__.py +0 -0
  148. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/collections/__init__.py +0 -0
  149. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/concurrent/__init__.py +0 -0
  150. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
  151. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/ctypes/__init__.py +0 -0
  152. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/cycler/__init__.py +0 -0
  153. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/email/__init__.py +0 -0
  154. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/evolib/__init__.py +0 -0
  155. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
  156. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
  157. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
  158. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
  159. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
  160. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/html/__init__.py +0 -0
  161. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/importlib/__init__.py +0 -0
  162. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
  163. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
  164. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/jinja2/__init__.py +0 -0
  165. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/json/__init__.py +0 -0
  166. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/logging/__init__.py +0 -0
  167. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
  168. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
  169. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
  170. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
  171. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
  172. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
  173. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
  174. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
  175. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
  176. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/numpy/__init__.py +0 -0
  177. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
  178. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
  179. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
  180. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
  181. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
  182. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
  183. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
  184. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
  185. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
  186. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
  187. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
  188. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
  189. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
  190. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
  191. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
  192. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
  193. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
  194. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
  195. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/os/__init__.py +0 -0
  196. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/packaging/__init__.py +0 -0
  197. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
  198. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
  199. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
  200. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/sys/__init__.py +0 -0
  201. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/unittest/__init__.py +0 -0
  202. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/urllib/__init__.py +0 -0
  203. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/xml/__init__.py +0 -0
  204. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
  205. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
  206. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
  207. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/yaml/__init__.py +0 -0
  208. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/zipfile/__init__.py +0 -0
  209. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
  210. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/.mypy_cache/__init__.py +0 -0
  211. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/README.md +0 -0
  212. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/__init__.py +0 -0
  213. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/core/__pycache__/__init__.py +0 -0
  214. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/globals/README.md +0 -0
  215. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/globals/__init__.py +0 -0
  216. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/globals/__pycache__/__init__.py +0 -0
  217. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/globals/numeric.py +0 -0
  218. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/PIL/__init__.py +0 -0
  219. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/__init__.py +0 -0
  220. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
  221. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/asyncio/__init__.py +0 -0
  222. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/collections/__init__.py +0 -0
  223. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/concurrent/__init__.py +0 -0
  224. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
  225. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/ctypes/__init__.py +0 -0
  226. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/cycler/__init__.py +0 -0
  227. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/email/__init__.py +0 -0
  228. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/evolib/__init__.py +0 -0
  229. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
  230. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
  231. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/evolib/initializers/__init__.py +0 -0
  232. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
  233. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
  234. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
  235. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/html/__init__.py +0 -0
  236. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/importlib/__init__.py +0 -0
  237. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
  238. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
  239. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/jinja2/__init__.py +0 -0
  240. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/json/__init__.py +0 -0
  241. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/logging/__init__.py +0 -0
  242. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
  243. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
  244. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
  245. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
  246. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
  247. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
  248. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
  249. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
  250. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
  251. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/numpy/__init__.py +0 -0
  252. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
  253. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
  254. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
  255. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
  256. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
  257. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
  258. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
  259. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
  260. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
  261. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
  262. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
  263. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
  264. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
  265. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
  266. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
  267. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
  268. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
  269. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
  270. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/os/__init__.py +0 -0
  271. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/packaging/__init__.py +0 -0
  272. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
  273. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
  274. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
  275. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/sys/__init__.py +0 -0
  276. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/unittest/__init__.py +0 -0
  277. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/urllib/__init__.py +0 -0
  278. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/xml/__init__.py +0 -0
  279. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
  280. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
  281. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
  282. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/yaml/__init__.py +0 -0
  283. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/zipfile/__init__.py +0 -0
  284. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
  285. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/.mypy_cache/__init__.py +0 -0
  286. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/__init__.py +0 -0
  287. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/__pycache__/__init__.py +0 -0
  288. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/net_initializers.py +0 -0
  289. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/initializers/vector_initializers.py +0 -0
  290. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/interfaces/__init__.py +0 -0
  291. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/interfaces/__pycache__/__init__.py +0 -0
  292. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/interfaces/enum_helpers.py +0 -0
  293. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/interfaces/enums.py +0 -0
  294. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/interfaces/structs.py +0 -0
  295. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/interfaces/types.py +0 -0
  296. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/io/serialization.py +0 -0
  297. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/operators/README.md +0 -0
  298. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/operators/__init__.py +0 -0
  299. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/operators/__pycache__/__init__.py +0 -0
  300. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/operators/crossover.py +0 -0
  301. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/operators/evonet_structural_mutation.py +0 -0
  302. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/operators/mutation.py +0 -0
  303. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/operators/replacement.py +0 -0
  304. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/operators/reproduction.py +0 -0
  305. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/operators/selection.py +0 -0
  306. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/operators/strategy.py +0 -0
  307. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/registry/__init__.py +0 -0
  308. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/registry/__pycache__/__init__.py +0 -0
  309. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/registry/replacement_registry.py +0 -0
  310. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/registry/selection_registry.py +0 -0
  311. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/registry/strategy_registry.py +0 -0
  312. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/PIL/__init__.py +0 -0
  313. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/__init__.py +0 -0
  314. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
  315. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/annotated_types/__init__.py +0 -0
  316. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/asyncio/__init__.py +0 -0
  317. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/collections/__init__.py +0 -0
  318. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/concurrent/__init__.py +0 -0
  319. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
  320. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/ctypes/__init__.py +0 -0
  321. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/cycler/__init__.py +0 -0
  322. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/email/__init__.py +0 -0
  323. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/evolib/__init__.py +0 -0
  324. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/evolib/config/__init__.py +0 -0
  325. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
  326. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
  327. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/evolib/initializers/__init__.py +0 -0
  328. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
  329. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
  330. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/evolib/registry/__init__.py +0 -0
  331. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/evolib/representation/__init__.py +0 -0
  332. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
  333. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/html/__init__.py +0 -0
  334. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/importlib/__init__.py +0 -0
  335. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
  336. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
  337. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/jinja2/__init__.py +0 -0
  338. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/json/__init__.py +0 -0
  339. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/logging/__init__.py +0 -0
  340. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/markdown_it/__init__.py +0 -0
  341. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/markdown_it/common/__init__.py +0 -0
  342. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/markdown_it/helpers/__init__.py +0 -0
  343. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/markdown_it/presets/__init__.py +0 -0
  344. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/markdown_it/rules_block/__init__.py +0 -0
  345. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/markdown_it/rules_core/__init__.py +0 -0
  346. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/markdown_it/rules_inline/__init__.py +0 -0
  347. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
  348. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
  349. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
  350. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
  351. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
  352. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
  353. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
  354. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
  355. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/mdurl/__init__.py +0 -0
  356. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
  357. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/numpy/__init__.py +0 -0
  358. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
  359. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
  360. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
  361. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
  362. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
  363. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
  364. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
  365. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
  366. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
  367. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
  368. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
  369. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
  370. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
  371. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
  372. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
  373. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
  374. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
  375. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
  376. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/os/__init__.py +0 -0
  377. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/packaging/__init__.py +0 -0
  378. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/pydantic/__init__.py +0 -0
  379. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/pydantic/_internal/__init__.py +0 -0
  380. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/pydantic/deprecated/__init__.py +0 -0
  381. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/pydantic/plugin/__init__.py +0 -0
  382. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/pydantic/v1/__init__.py +0 -0
  383. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/pydantic_core/__init__.py +0 -0
  384. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
  385. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
  386. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
  387. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/rich/__init__.py +0 -0
  388. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/sys/__init__.py +0 -0
  389. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/typing_inspection/__init__.py +0 -0
  390. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/unittest/__init__.py +0 -0
  391. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/urllib/__init__.py +0 -0
  392. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/xml/__init__.py +0 -0
  393. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
  394. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
  395. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
  396. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/yaml/__init__.py +0 -0
  397. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/zipfile/__init__.py +0 -0
  398. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
  399. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/3.12/zoneinfo/__init__.py +0 -0
  400. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/.mypy_cache/__init__.py +0 -0
  401. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/__init__.py +0 -0
  402. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/__pycache__/__init__.py +0 -0
  403. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/_apply_config_mapping.py +0 -0
  404. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/base.py +0 -0
  405. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/composite.py +0 -0
  406. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/dummy.py +0 -0
  407. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/evo_params.py +0 -0
  408. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/evonet.py +0 -0
  409. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/netvector.py +0 -0
  410. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/representation/vector.py +0 -0
  411. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/utils/README.md +0 -0
  412. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/utils/__init__.py +0 -0
  413. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/utils/__pycache__/__init__.py +0 -0
  414. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/utils/config_loader.py +0 -0
  415. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/utils/fitness.py +0 -0
  416. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/utils/history_logger.py +0 -0
  417. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/utils/loss_functions.py +0 -0
  418. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/utils/plotting.py +0 -0
  419. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/utils/random.py +0 -0
  420. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib/utils/registry.py +0 -0
  421. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib.egg-info/dependency_links.txt +0 -0
  422. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib.egg-info/requires.txt +0 -0
  423. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/evolib.egg-info/top_level.txt +0 -0
  424. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/01_basic_usage/01_getting_started.py +0 -0
  425. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/01_basic_usage/02_mutation.py +0 -0
  426. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/01_basic_usage/03_population_mutation.py +0 -0
  427. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/01_basic_usage/04_fitness.py +0 -0
  428. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/02_strategies/01_step_by_step_evolution.py +0 -0
  429. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/02_strategies/02_mu_lambda_step.py +0 -0
  430. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/02_strategies/03_mu_lambda.py +0 -0
  431. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/02_strategies/04_flexible.py +0 -0
  432. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/03_comparisons/01_history.py +0 -0
  433. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/03_comparisons/02_plotting.py +0 -0
  434. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/03_comparisons/03_compare_runs.py +0 -0
  435. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/03_comparisons/04_exponential_decay_vs_static.py +0 -0
  436. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/03_comparisons/05_adaptive_global_vs_static.py +0 -0
  437. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/03_comparisons/06_adaptive_individual_vs_static.py +0 -0
  438. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/03_comparisons/07_selection_comparison.py +0 -0
  439. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/03_comparisons/08_selection_pressure.py +0 -0
  440. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/03_comparisons/09_selection_vs_mutation_pressure.py +0 -0
  441. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/03_comparisons/10_selection_stochastic_vs_deterministic.py +0 -0
  442. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/03_comparisons/11_crossover_comparison.py +0 -0
  443. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/04_function_approximation/01_polynomial_sine.py +0 -0
  444. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/04_function_approximation/02_sine_point_approximation.py +0 -0
  445. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/04_function_approximation/03_approximation_with_noise.py +0 -0
  446. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/05_advanced_topics/01_fitness_landscape_exploration.py +0 -0
  447. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/05_advanced_topics/02_rosenbrock_surface_path.py +0 -0
  448. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/05_advanced_topics/03_vector_control.py +0 -0
  449. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/05_advanced_topics/04_vector_control_with_obstacles.py +0 -0
  450. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/05_advanced_topics/05_piecewise_linear_xsys.py +0 -0
  451. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/05_advanced_topics/06_evolving_mutation_strength_as_a_module.py +0 -0
  452. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/06_netvector/01_netvector_sine_approximation.py +0 -0
  453. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/06_netvector/02_netvector_modulated_output.py +0 -0
  454. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/06_netvector/03_netvector_gain_and_bias.py +0 -0
  455. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/07_evonet/01_sine_approximation.py +0 -0
  456. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/07_evonet/02_image_approximation.py +0 -0
  457. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/07_evonet/03_structural_xor.py +0 -0
  458. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/examples/07_evonet/04_recurrent_bit_prediction.py +0 -0
  459. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/setup.cfg +0 -0
  460. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/tests/test_benchmarks.py +0 -0
  461. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/tests/test_config_loader.py +0 -0
  462. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/tests/test_elitism_preserves_best_fitness.py +0 -0
  463. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/tests/test_evonet_vector_io.py +0 -0
  464. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/tests/test_initializer_evonet.py +0 -0
  465. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/tests/test_initializer_net.py +0 -0
  466. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/tests/test_mutation.py +0 -0
  467. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/tests/test_population.py +0 -0
  468. {evolib-0.2.0b2.dev5 → evolib-0.2.0b2.dev7}/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.dev5
3
+ Version: 0.2.0b2.dev7
4
4
  Summary: A modular framework for evolutionary strategies and neuroevolution.
5
5
  Author-email: EvoLib <evolib@dismail.de>
6
6
  License: MIT License
@@ -76,6 +76,7 @@ EvoLib is a lightweight and transparent framework for evolutionary computation,
76
76
  - **Modularity**: mutation, selection, crossover, and parameter representations can be freely combined.
77
77
  - **Educational value**: examples and a clean API make it practical for illustrating evolutionary concepts.
78
78
  - **Neuroevolution support**: structural mutations (adding/removing neurons and connections) and evolvable networks via EvoNet.
79
+ - **Parallel evaluation (optional)**: basic support for [Ray](https://www.ray.io/) to speed up fitness evaluations.
79
80
  - **Type-checked**: PEP8 compliant, and consistent code style.
80
81
 
81
82
 
@@ -251,10 +252,9 @@ For deeper exploration, see the [full examples directory](examples/)
251
252
  - [X] Composite Parameters (multi-module individuals)
252
253
  - [X] Neuroevolution
253
254
  - [X] Topological Evolution (neurons, edges)
254
- - [ ] Co-Evolution & Speciation Support
255
+ - [X] Ray Support for Parallel Evaluation (early prototypes)
255
256
  - [ ] Advanced Visualization
256
257
  - [ ] Game Environment Integration (pygame, PettingZoo - early prototypes)
257
- - [ ] Ray Support for Parallel Evaluation (early prototypes)
258
258
 
259
259
 
260
260
  ---
@@ -20,6 +20,7 @@ EvoLib is a lightweight and transparent framework for evolutionary computation,
20
20
  - **Modularity**: mutation, selection, crossover, and parameter representations can be freely combined.
21
21
  - **Educational value**: examples and a clean API make it practical for illustrating evolutionary concepts.
22
22
  - **Neuroevolution support**: structural mutations (adding/removing neurons and connections) and evolvable networks via EvoNet.
23
+ - **Parallel evaluation (optional)**: basic support for [Ray](https://www.ray.io/) to speed up fitness evaluations.
23
24
  - **Type-checked**: PEP8 compliant, and consistent code style.
24
25
 
25
26
 
@@ -195,10 +196,9 @@ For deeper exploration, see the [full examples directory](examples/)
195
196
  - [X] Composite Parameters (multi-module individuals)
196
197
  - [X] Neuroevolution
197
198
  - [X] Topological Evolution (neurons, edges)
198
- - [ ] Co-Evolution & Speciation Support
199
+ - [X] Ray Support for Parallel Evaluation (early prototypes)
199
200
  - [ ] Advanced Visualization
200
201
  - [ ] Game Environment Integration (pygame, PettingZoo - early prototypes)
201
- - [ ] Ray Support for Parallel Evaluation (early prototypes)
202
202
 
203
203
 
204
204
  ---
@@ -15,9 +15,11 @@ from evolib.utils.benchmarks import (
15
15
  ackley,
16
16
  ackley_2d,
17
17
  ackley_3d,
18
+ generate_timeseries,
18
19
  griewank,
19
20
  griewank_2d,
20
21
  griewank_3d,
22
+ lfsr_sequence,
21
23
  rastrigin,
22
24
  rastrigin_2d,
23
25
  rastrigin_3d,
@@ -90,6 +92,8 @@ __all__ = [
90
92
  "sphere_3d",
91
93
  "rosenbrock_3d",
92
94
  "schwefel_3d",
95
+ "lfsr_sequence",
96
+ "generate_timeseries",
93
97
  "save_checkpoint",
94
98
  "resume_from_checkpoint",
95
99
  "save_best_indiv",
@@ -88,6 +88,30 @@ class StoppingCriteria(BaseModel):
88
88
  )
89
89
 
90
90
 
91
+ class ParallelConfig(BaseModel):
92
+ """
93
+ Optional parallelization backend.
94
+
95
+ Controls whether fitness evaluation is run sequentially or distributed (currently
96
+ only Ray is supported).
97
+ """
98
+
99
+ backend: str = Field(
100
+ default="none",
101
+ description="Parallel backend to use: 'none' (default) or 'ray'.",
102
+ )
103
+ num_cpus: Optional[int] = Field(
104
+ default=None,
105
+ description="Number of CPUs to allocate (Ray only). "
106
+ "If None, Ray chooses automatically.",
107
+ )
108
+ address: Optional[str] = Field(
109
+ default=None,
110
+ description="Ray cluster address (e.g. 'auto' or '127.0.0.1:6379'). "
111
+ "If None, starts a local Ray instance.",
112
+ )
113
+
114
+
91
115
  class FullConfig(BaseModel):
92
116
  """
93
117
  Main configuration model for an evolutionary run.
@@ -141,6 +165,11 @@ class FullConfig(BaseModel):
141
165
  default=None, description="Survivor selection (replacement) configuration."
142
166
  )
143
167
 
168
+ # Optional parallelization backend
169
+ parallel: Optional[ParallelConfig] = Field(
170
+ default=None, description="Optional parallelization backend configuration."
171
+ )
172
+
144
173
  @model_validator(mode="before")
145
174
  @classmethod
146
175
  def resolve_component_configs(cls, data: dict[str, Any]) -> dict[str, Any]:
@@ -30,6 +30,9 @@ from evolib.representation.dummy import ParaDummy
30
30
  class Indiv:
31
31
  """Represents an individual in an evolutionary optimization algorithm."""
32
32
 
33
+ #: unique identifier (UUID)
34
+ id: str
35
+
33
36
  #: para (Any): Parameter values of the individual. Default: None.
34
37
  para: Any
35
38
 
@@ -49,6 +49,7 @@ from evolib.registry.selection_registry import build_selection_registry
49
49
  from evolib.registry.strategy_registry import strategy_registry
50
50
  from evolib.utils.config_loader import load_config
51
51
  from evolib.utils.history_logger import HistoryLogger
52
+ from evolib.utils.parallel import map_fitness
52
53
  from evolib.utils.random import set_random_seed
53
54
 
54
55
 
@@ -128,6 +129,16 @@ class Pop:
128
129
  self._replacement_registry = {}
129
130
  self._replacement_fn = None
130
131
 
132
+ # Parallel backend
133
+ if cfg.parallel:
134
+ self.parallel_backend = cfg.parallel.backend
135
+ self.parallel_num_cpus = cfg.parallel.num_cpus
136
+ self.parallel_address = cfg.parallel.address
137
+ else:
138
+ self.parallel_backend = "none"
139
+ self.parallel_num_cpus = None
140
+ self.parallel_address = None
141
+
131
142
  # Statistics
132
143
  self.history_logger = HistoryLogger(
133
144
  columns=[
@@ -242,21 +253,27 @@ class Pop:
242
253
  """Evaluate the fitness function for all individuals in the population."""
243
254
  if self.fitness_function is None:
244
255
  raise ValueError("No fitness function has been set.")
245
- for indiv in self.indivs:
246
- result = self.fitness_function(indiv)
247
- if result is not None:
248
- indiv.fitness = float(result)
249
- indiv.is_evaluated = True
256
+
257
+ map_fitness(
258
+ self.indivs,
259
+ self.fitness_function,
260
+ backend=self.parallel_backend,
261
+ num_cpus=self.parallel_num_cpus,
262
+ address=self.parallel_address,
263
+ )
250
264
 
251
265
  def evaluate_indivs(self, indivs: list[Indiv]) -> None:
252
266
  """Evaluate fitness for a custom list of individuals."""
253
267
  if self.fitness_function is None:
254
268
  raise ValueError("No fitness function has been set.")
255
- for indiv in indivs:
256
- result = self.fitness_function(indiv)
257
- if result is not None:
258
- indiv.fitness = float(result)
259
- indiv.is_evaluated = True
269
+
270
+ map_fitness(
271
+ indivs,
272
+ self.fitness_function,
273
+ backend=self.parallel_backend,
274
+ num_cpus=self.parallel_num_cpus,
275
+ address=self.parallel_address,
276
+ )
260
277
 
261
278
  def get_elites(self) -> list[Indiv]:
262
279
  """Return a list of elite individuals and set their is_elite flag."""
@@ -408,14 +425,14 @@ class Pop:
408
425
 
409
426
  self.indivs.sort(key=lambda indivs: indivs.fitness, reverse=reverse)
410
427
 
411
- def best(self, sort: bool = False) -> Indiv:
428
+ def best(self, sort: bool = True) -> Indiv:
412
429
  """
413
430
  Return the best individual (lowest fitness).
414
431
 
415
432
  Args:
416
433
  sort (bool): If True, sort the population before returning the best.
417
434
  If False, return first individual as-is.
418
- Default: False.
435
+ Default: True.
419
436
  """
420
437
 
421
438
  if not self.indivs:
@@ -8,7 +8,7 @@ initialized EvoNet instance.
8
8
 
9
9
  import numpy as np
10
10
  from evonet.activation import random_function_name
11
- from evonet.enums import NeuronRole
11
+ from evonet.enums import ConnectionType, NeuronRole
12
12
 
13
13
  from evolib.config.evonet_component_config import EvoNetComponentConfig
14
14
  from evolib.config.schema import FullConfig
@@ -142,3 +142,52 @@ def initializer_zero_evonet(config: FullConfig, module: str) -> EvoNet:
142
142
  para.net.set_weights(np.zeros(para.net.num_weights))
143
143
  para.net.set_biases(np.zeros(para.net.num_biases))
144
144
  return para
145
+
146
+
147
+ def initializer_identity_evonet(config: FullConfig, module: str) -> EvoNet:
148
+ """
149
+ Initialize EvoNet with damped self-recurrence and zeroed weights elsewhere.
150
+
151
+ - All feedforward weights are near-zero
152
+ - Self-recurrent connections get weight ~0.8 (memory)
153
+ - Biases are randomized slightly to break symmetry
154
+
155
+ This initializer encourages stable internal state retention from the start,
156
+ making recurrent behavior immediately available to evolution.
157
+
158
+ Args:
159
+ config (FullConfig): Full experiment configuration
160
+ module (str): Name of the EvoNet module in the config
161
+
162
+ Returns:
163
+ EvoNet: Initialized network with identity-style dynamics
164
+ """
165
+
166
+ SELF_LOOP_WEIGHT = 0.8
167
+ ALPHA = 0.01
168
+
169
+ para = EvoNet()
170
+ cfg = config.modules[module].model_copy(deep=True)
171
+ para.apply_config(cfg)
172
+
173
+ _build_architecture(para, cfg)
174
+
175
+ para.net.set_weights(np.zeros(para.net.num_weights))
176
+ para.net.set_biases(np.zeros(para.net.num_biases))
177
+
178
+ for neuron in para.net.get_all_neurons():
179
+ # Small random bias to break symmetry
180
+ neuron.bias = np.random.uniform(-ALPHA, ALPHA)
181
+ for connection in neuron.outgoing:
182
+ # Damped self-recurrence: acts like memory cell
183
+ if (
184
+ connection.type == ConnectionType.RECURRENT
185
+ and connection.source.id == connection.target.id
186
+ ):
187
+ connection.weight = SELF_LOOP_WEIGHT
188
+
189
+ # Small random feedforward weight to allow weak stimulus flow
190
+ if connection.type == ConnectionType.STANDARD:
191
+ connection.weight = np.random.uniform(-ALPHA, ALPHA)
192
+
193
+ return para
@@ -17,6 +17,7 @@ from evolib.config.schema import FullConfig
17
17
 
18
18
  # EvoNet-based initializer
19
19
  from evolib.initializers.evonet_initializers import (
20
+ initializer_identity_evonet,
20
21
  initializer_normal_evonet,
21
22
  initializer_random_evonet,
22
23
  initializer_zero_evonet,
@@ -51,6 +52,7 @@ INITIALIZER_REGISTRY: dict[str, InitializerFunction] = {
51
52
  "normal_evonet": initializer_normal_evonet,
52
53
  "random_evonet": initializer_random_evonet,
53
54
  "zero_evonet": initializer_zero_evonet,
55
+ "identity_evonet": initializer_identity_evonet,
54
56
  }
55
57
 
56
58
 
@@ -14,6 +14,7 @@ All files are stored in the 'checkpoints/' directory by default.
14
14
  from pathlib import Path
15
15
  from typing import Any, Optional, cast
16
16
 
17
+ from evolib.config.schema import FullConfig
17
18
  from evolib.core.individual import Indiv
18
19
  from evolib.core.population import Pop
19
20
  from evolib.initializers.registry import build_composite_initializer
@@ -24,6 +25,8 @@ from evolib.io.serialization import (
24
25
  save_indiv,
25
26
  save_population_pickle,
26
27
  )
28
+ from evolib.utils.config_loader import load_config
29
+ from evolib.utils.random import set_random_seed
27
30
 
28
31
  # Internal checkpoint directory
29
32
  _CHECKDIR = Path("checkpoints")
@@ -116,8 +119,13 @@ def resume_or_create(
116
119
  )
117
120
 
118
121
  if pop is not None:
122
+ print(f"[Resume] Loaded checkpoint for run_name={run_name}")
123
+ cfg: FullConfig = load_config(config_path)
124
+ random_seed = cfg.random_seed
125
+ set_random_seed(random_seed)
119
126
  return pop
120
127
 
128
+ print(f"[Create] New population for run_name={run_name}")
121
129
  return Pop(config_path=config_path, fitness_function=fitness_fn)
122
130
 
123
131
 
@@ -1,9 +1,107 @@
1
1
  # SPDX-License-Identifier: MIT
2
2
  """Common mathematical benchmark functions for optimization tasks."""
3
3
 
4
- from typing import Sequence
4
+ from typing import Literal, Sequence
5
5
 
6
6
  import numpy as np
7
+ from numpy.random import default_rng
8
+
9
+
10
+ def generate_timeseries(
11
+ length: int,
12
+ normalize: bool = True,
13
+ pattern: Literal[
14
+ "default", "trend_switch", "parabolic", "zigzag", "shock"
15
+ ] = "default",
16
+ seed: int | None = None,
17
+ ) -> np.ndarray:
18
+ """
19
+ Generate synthetic time series data for evolution or forecasting. Uses local RNG to
20
+ avoid modifying global numpy random state.
21
+
22
+ Args:
23
+ length (int): Number of time steps.
24
+ normalize (bool): Whether to scale the output to [-1, 1].
25
+ pattern (str): Pattern to generate:
26
+ - "default": Trend + Sinus + Noise
27
+ - "trend_switch": Linear trend up, then down
28
+ - "parabolic": Smooth U-shaped curve (trend reversal)
29
+ - "zigzag": Periodic linear up/down pattern
30
+ - "shock": Trend followed by sharp reversal
31
+
32
+ Returns:
33
+ np.ndarray: The generated time series.
34
+ """
35
+
36
+ if seed is not None:
37
+ rng = default_rng(seed)
38
+ else:
39
+ # Use global np.random set via config
40
+ rng = np.random.default_rng(np.random.randint(0, 2**32 - 1))
41
+
42
+ t = np.arange(length)
43
+
44
+ if pattern == "shock":
45
+ # Random switch point + optional shock slope variation
46
+ switch_point = rng.integers(length // 3, 2 * length // 3)
47
+ slope_up = rng.uniform(0.005, 0.015)
48
+ slope_down = rng.uniform(-0.015, -0.005)
49
+ shock = np.where(
50
+ t < switch_point, slope_up * t, slope_down * (t - switch_point)
51
+ )
52
+ phase = rng.uniform(0, 2 * np.pi)
53
+ seasonal = np.sin(t * 0.1 + phase)
54
+ noise = rng.normal(0.05, 0.1, size=length)
55
+ series = shock + seasonal + noise
56
+
57
+ elif pattern == "parabolic":
58
+ # Random shift of parabola + curvature
59
+ center = rng.integers(length // 3, 2 * length // 3)
60
+ curvature = rng.uniform(0.0002, 0.0004)
61
+ trend = -curvature * (t - center) ** 2 + 1.0
62
+ phase = rng.uniform(0, 2 * np.pi)
63
+ seasonal = 0.5 * np.sin(t * 0.1 + phase)
64
+ noise = rng.normal(0, 0.02, size=length)
65
+ series = trend + seasonal + noise
66
+
67
+ elif pattern == "zigzag":
68
+ # Random zigzag period and slope
69
+ period = rng.integers(20, 60)
70
+ slope = rng.uniform(0.008, 0.015)
71
+ trend = slope * ((t // period) % 2 * 2 - 1) * (t % period)
72
+ phase = rng.uniform(0, 2 * np.pi)
73
+ seasonal = 0.3 * np.sin(t * 0.2 + phase)
74
+ noise = rng.normal(0, 0.03, size=length)
75
+ series = trend + seasonal + noise
76
+
77
+ elif pattern == "trend_switch":
78
+ # Random trend_switch position + strength
79
+ trend_switch_pos = rng.integers(length // 3, 2 * length // 3)
80
+ trend_switch_strength = rng.uniform(-0.04, -0.02)
81
+ trend = 0.01 * t
82
+ trend_switch = np.where(
83
+ t > trend_switch_pos, trend_switch_strength * (t - trend_switch_pos), 0.0
84
+ )
85
+ phase = rng.uniform(0, 2 * np.pi)
86
+ seasonal = 0.5 * np.sin(t * 0.1 + phase)
87
+ noise = rng.normal(0, 0.04, size=length)
88
+ series = trend + trend_switch + seasonal + noise
89
+
90
+ else: # "default"
91
+ # Minor phase + trend variation
92
+ slope = rng.uniform(0.008, 0.012)
93
+ phase = rng.uniform(0, 2 * np.pi)
94
+ trend = slope * t
95
+ seasonal = np.sin(t * 0.1 + phase)
96
+ noise = rng.normal(0, 0.05, size=length)
97
+ series = trend + seasonal + noise
98
+
99
+ if normalize: # Normalize to [-1, 1]
100
+ min_val = np.min(series)
101
+ max_val = np.max(series)
102
+ series = 2 * (series - min_val) / (max_val - min_val) - 1
103
+
104
+ return series
7
105
 
8
106
 
9
107
  def lfsr_sequence(
@@ -0,0 +1,100 @@
1
+ # SPDX-License-Identifier: MIT
2
+ """
3
+ Parallelization helpers for EvoLib.
4
+
5
+ Currently supports optional Ray integration for fitness evaluation. Falls back to
6
+ sequential evaluation if Ray is not available or not requested.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ from typing import TYPE_CHECKING, Any, Callable, Optional
12
+
13
+ from evolib.core.individual import Indiv
14
+
15
+ if TYPE_CHECKING:
16
+ import ray
17
+ else:
18
+ try:
19
+ import ray
20
+ except ImportError:
21
+ ray = None # type: ignore[assignment]
22
+
23
+ # Global flag to avoid repeated init/shutdown
24
+ _ray_initialized = False
25
+
26
+
27
+ def _ensure_ray_initialized(
28
+ num_cpus: Optional[int] = None, address: Optional[str] = None
29
+ ) -> None:
30
+ """Initialize Ray once with given resources."""
31
+ global _ray_initialized
32
+
33
+ if ray is None:
34
+ raise RuntimeError("Ray is not installed. Install with `pip install ray`.")
35
+
36
+ if not _ray_initialized:
37
+ init_kwargs: dict[str, Any] = {}
38
+ if num_cpus is not None:
39
+ init_kwargs["num_cpus"] = num_cpus
40
+ if address is not None:
41
+ init_kwargs["address"] = address
42
+ ray.init(**init_kwargs)
43
+ _ray_initialized = True
44
+
45
+
46
+ def shutdown_ray() -> None:
47
+ """Shutdown Ray if it was started by EvoLib."""
48
+ global _ray_initialized
49
+ if ray is not None and _ray_initialized:
50
+ ray.shutdown()
51
+ _ray_initialized = False
52
+
53
+
54
+ def map_fitness(
55
+ indivs: list[Indiv],
56
+ fitness_fn: Callable[[Indiv], float | None],
57
+ *,
58
+ backend: str = "none",
59
+ num_cpus: Optional[int] = None,
60
+ address: Optional[str] = None,
61
+ ) -> None:
62
+ """
63
+ Evaluate a list of individuals using the chosen backend.
64
+
65
+ Args:
66
+ indivs: List of individuals to evaluate (modified in-place).
67
+ fitness_fn: Fitness function that assigns indiv.fitness.
68
+ backend: "none" (sequential) or "ray".
69
+ num_cpus: Number of CPUs for Ray (optional).
70
+ address: Ray cluster address (optional).
71
+ """
72
+
73
+ if backend != "ray":
74
+ # Sequential fallback
75
+ for indiv in indivs:
76
+ result = fitness_fn(indiv)
77
+ if result is not None:
78
+ indiv.fitness = float(result)
79
+ indiv.is_evaluated = True
80
+ return
81
+
82
+ # Ray backend
83
+ _ensure_ray_initialized(num_cpus=num_cpus, address=address)
84
+
85
+ @ray.remote
86
+ def _eval_remote(indiv: Indiv) -> Indiv:
87
+ result = fitness_fn(indiv)
88
+ if result is not None:
89
+ indiv.fitness = float(result)
90
+ indiv.is_evaluated = True
91
+ return indiv
92
+
93
+ futures = [_eval_remote.remote(ind) for ind in indivs]
94
+ results = ray.get(futures)
95
+
96
+ # Update original objects in-place
97
+ for orig, res in zip(indivs, results):
98
+ orig.fitness = res.fitness
99
+ orig.extra_metrics = getattr(res, "extra_metrics", {})
100
+ orig.is_evaluated = True
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: evolib
3
- Version: 0.2.0b2.dev5
3
+ Version: 0.2.0b2.dev7
4
4
  Summary: A modular framework for evolutionary strategies and neuroevolution.
5
5
  Author-email: EvoLib <evolib@dismail.de>
6
6
  License: MIT License
@@ -76,6 +76,7 @@ EvoLib is a lightweight and transparent framework for evolutionary computation,
76
76
  - **Modularity**: mutation, selection, crossover, and parameter representations can be freely combined.
77
77
  - **Educational value**: examples and a clean API make it practical for illustrating evolutionary concepts.
78
78
  - **Neuroevolution support**: structural mutations (adding/removing neurons and connections) and evolvable networks via EvoNet.
79
+ - **Parallel evaluation (optional)**: basic support for [Ray](https://www.ray.io/) to speed up fitness evaluations.
79
80
  - **Type-checked**: PEP8 compliant, and consistent code style.
80
81
 
81
82
 
@@ -251,10 +252,9 @@ For deeper exploration, see the [full examples directory](examples/)
251
252
  - [X] Composite Parameters (multi-module individuals)
252
253
  - [X] Neuroevolution
253
254
  - [X] Topological Evolution (neurons, edges)
254
- - [ ] Co-Evolution & Speciation Support
255
+ - [X] Ray Support for Parallel Evaluation (early prototypes)
255
256
  - [ ] Advanced Visualization
256
257
  - [ ] Game Environment Integration (pygame, PettingZoo - early prototypes)
257
- - [ ] Ray Support for Parallel Evaluation (early prototypes)
258
258
 
259
259
 
260
260
  ---
@@ -408,6 +408,7 @@ evolib/utils/config_loader.py
408
408
  evolib/utils/fitness.py
409
409
  evolib/utils/history_logger.py
410
410
  evolib/utils/loss_functions.py
411
+ evolib/utils/parallel.py
411
412
  evolib/utils/plotting.py
412
413
  evolib/utils/random.py
413
414
  evolib/utils/registry.py
@@ -443,11 +444,17 @@ examples/05_advanced_topics/06_evolving_mutation_strength_as_a_module.py
443
444
  examples/06_netvector/01_netvector_sine_approximation.py
444
445
  examples/06_netvector/02_netvector_modulated_output.py
445
446
  examples/06_netvector/03_netvector_gain_and_bias.py
447
+ examples/07_evonet/00_identity_test.py
446
448
  examples/07_evonet/01_sine_approximation.py
447
449
  examples/07_evonet/02_image_approximation.py
448
450
  examples/07_evonet/03_structural_xor.py
449
451
  examples/07_evonet/04_recurrent_bit_prediction.py
450
- examples/07_evonet/resize_all_images.py
452
+ examples/07_evonet/05_recurrent_timeseries.py
453
+ examples/07_evonet/06_recurrent_indicator.py
454
+ examples/07_evonet/06_recurrent_indicator_01.py
455
+ examples/07_evonet/06_recurrent_indicator_02.py
456
+ examples/07_evonet/06_recurrent_trading.py
457
+ examples/07_evonet/07_recurrent_trading_01.py
451
458
  tests/test_benchmarks.py
452
459
  tests/test_config_loader.py
453
460
  tests/test_elitism_preserves_best_fitness.py
@@ -0,0 +1,63 @@
1
+ import numpy as np
2
+ from evolib import Population, Individual, plot_approximation
3
+
4
+ # Fixed test sequence
5
+ SEQ_LEN = 100
6
+ WARMUP_STEPS = 0
7
+ CONFIG_FILE = "./configs/00_identity_test.yaml"
8
+ FRAME_FOLDER = "00_frames"
9
+
10
+ # Generate simple linear sequence
11
+ full_seq = np.linspace(-1.0, 1.0, SEQ_LEN)
12
+ input_seq = full_seq
13
+ target_seq = full_seq
14
+
15
+ # Fitness: MSE between predicted and actual (no shift)
16
+ def eval_identity_fitness(indiv: Individual) -> float:
17
+ net = indiv.para["brain"].net
18
+ net.reset(full=True)
19
+
20
+ preds = []
21
+ for i in range(WARMUP_STEPS, len(input_seq)):
22
+ y_pred = net.calc([input_seq[i]])[0]
23
+ preds.append(y_pred)
24
+
25
+ y_true = target_seq[WARMUP_STEPS:]
26
+ preds = np.array(preds)
27
+ mse = np.mean((preds - y_true) ** 2)
28
+
29
+ indiv.extra_metrics["mse"] = mse
30
+ indiv.fitness = mse # minimize error → maximize -mse
31
+ return indiv.fitness
32
+
33
+ # Plot best prediction
34
+ def plot_prediction(pop: Population) -> None:
35
+ best = pop.best()
36
+ net = best.para["brain"].net
37
+ net.reset(full=True)
38
+
39
+ preds = []
40
+ for i in range(WARMUP_STEPS, len(input_seq)):
41
+ y_pred = net.calc([input_seq[i]])[0]
42
+ preds.append(y_pred)
43
+
44
+ plot_approximation(
45
+ preds,
46
+ target_seq[WARMUP_STEPS:],
47
+ title=(
48
+ f"Identity Test: x[t] → x[t]\n"
49
+ f"gen={pop.generation_num}, MSE={best.extra_metrics['mse']:.6f}"
50
+ ),
51
+ pred_label="Prediction",
52
+ true_label="Target",
53
+ show=False,
54
+ show_grid=False,
55
+ save_path=f"{FRAME_FOLDER}/gen_{pop.generation_num:03d}.png",
56
+ )
57
+
58
+ def main():
59
+ pop = Population(CONFIG_FILE, fitness_function=eval_identity_fitness)
60
+ pop.run(verbosity=1, on_generation_end=plot_prediction)
61
+
62
+ if __name__ == "__main__":
63
+ main()