evolib 0.2.0b2.dev7__tar.gz → 0.2.0b3.dev2__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 (473) hide show
  1. {evolib-0.2.0b2.dev7/evolib.egg-info → evolib-0.2.0b3.dev2}/PKG-INFO +28 -1
  2. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/README.md +23 -0
  3. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/config_guide.md +15 -0
  4. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/config_parameter.md +20 -0
  5. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/index.md +2 -1
  6. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/api.py +2 -0
  7. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/config/base_component_config.py +17 -2
  8. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/config/evonet_component_config.py +3 -1
  9. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/config/schema.py +30 -1
  10. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/config/vector_component_config.py +3 -1
  11. evolib-0.2.0b3.dev2/evolib/envs/gym_wrapper.py +159 -0
  12. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/io/checkpoint.py +8 -8
  13. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/evonet.py +2 -2
  14. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/utils/benchmarks.py +5 -4
  15. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/utils/plotting.py +2 -2
  16. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2/evolib.egg-info}/PKG-INFO +28 -1
  17. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib.egg-info/SOURCES.txt +6 -0
  18. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib.egg-info/requires.txt +4 -0
  19. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/07_evonet/02_image_approximation.py +1 -1
  20. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/07_evonet/04_recurrent_bit_prediction.py +1 -3
  21. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/07_evonet/05_recurrent_timeseries.py +78 -51
  22. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/07_evonet/06_recurrent_indicator.py +1 -1
  23. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/07_evonet/06_recurrent_trading.py +71 -20
  24. evolib-0.2.0b3.dev2/examples/08_gym/01_cartpole.py +32 -0
  25. evolib-0.2.0b3.dev2/examples/08_gym/01_frozen_lake.py +52 -0
  26. evolib-0.2.0b3.dev2/examples/08_gym/02_cliff_walking.py +51 -0
  27. evolib-0.2.0b3.dev2/examples/08_gym/02_lunar_lander.py +40 -0
  28. evolib-0.2.0b3.dev2/examples/08_gym/03_taxi.py +85 -0
  29. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/pyproject.toml +5 -1
  30. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/LICENSE +0 -0
  31. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/MANIFEST.in +0 -0
  32. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_core_individual.rst +0 -0
  33. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_core_population.rst +0 -0
  34. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_operators_crossover.rst +0 -0
  35. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_operators_evonet_structural_mutation.rst +0 -0
  36. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_operators_mutation.rst +0 -0
  37. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_operators_replacement.rst +0 -0
  38. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_operators_reproduction.rst +0 -0
  39. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_operators_selection.rst +0 -0
  40. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_operators_strategy.rst +0 -0
  41. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_public_api.rst +0 -0
  42. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_representation_evonet.rst +0 -0
  43. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_representation_netvector.rst +0 -0
  44. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_representation_vector.rst +0 -0
  45. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_utils_benchmarks.rst +0 -0
  46. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_utils_history_logger.rst +0 -0
  47. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_utils_loss_functions.rst +0 -0
  48. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_utils_plotting.rst +0 -0
  49. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/conf.py +0 -0
  50. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/getting_started.md +0 -0
  51. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/PIL/__init__.py +0 -0
  52. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/__init__.py +0 -0
  53. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
  54. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/annotated_types/__init__.py +0 -0
  55. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/asyncio/__init__.py +0 -0
  56. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/collections/__init__.py +0 -0
  57. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/concurrent/__init__.py +0 -0
  58. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
  59. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/ctypes/__init__.py +0 -0
  60. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/cycler/__init__.py +0 -0
  61. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/email/__init__.py +0 -0
  62. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/__init__.py +0 -0
  63. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/config/__init__.py +0 -0
  64. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
  65. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
  66. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/initializers/__init__.py +0 -0
  67. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
  68. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
  69. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/registry/__init__.py +0 -0
  70. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/representation/__init__.py +0 -0
  71. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
  72. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/html/__init__.py +0 -0
  73. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/importlib/__init__.py +0 -0
  74. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
  75. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
  76. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/jinja2/__init__.py +0 -0
  77. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/json/__init__.py +0 -0
  78. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/logging/__init__.py +0 -0
  79. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/markdown_it/__init__.py +0 -0
  80. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/markdown_it/common/__init__.py +0 -0
  81. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/markdown_it/helpers/__init__.py +0 -0
  82. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/markdown_it/presets/__init__.py +0 -0
  83. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/markdown_it/rules_block/__init__.py +0 -0
  84. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/markdown_it/rules_core/__init__.py +0 -0
  85. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/markdown_it/rules_inline/__init__.py +0 -0
  86. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
  87. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
  88. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
  89. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
  90. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
  91. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
  92. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
  93. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
  94. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/mdurl/__init__.py +0 -0
  95. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
  96. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/__init__.py +0 -0
  97. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
  98. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
  99. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
  100. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
  101. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
  102. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
  103. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
  104. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
  105. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
  106. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
  107. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
  108. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
  109. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
  110. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
  111. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
  112. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
  113. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
  114. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
  115. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/os/__init__.py +0 -0
  116. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/packaging/__init__.py +0 -0
  117. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pydantic/__init__.py +0 -0
  118. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pydantic/_internal/__init__.py +0 -0
  119. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pydantic/deprecated/__init__.py +0 -0
  120. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pydantic/plugin/__init__.py +0 -0
  121. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pydantic/v1/__init__.py +0 -0
  122. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pydantic_core/__init__.py +0 -0
  123. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
  124. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
  125. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
  126. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/rich/__init__.py +0 -0
  127. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/sys/__init__.py +0 -0
  128. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/typing_inspection/__init__.py +0 -0
  129. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/unittest/__init__.py +0 -0
  130. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/urllib/__init__.py +0 -0
  131. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/xml/__init__.py +0 -0
  132. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
  133. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
  134. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
  135. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/yaml/__init__.py +0 -0
  136. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/zipfile/__init__.py +0 -0
  137. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
  138. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/zoneinfo/__init__.py +0 -0
  139. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/__init__.py +0 -0
  140. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/__init__.py +0 -0
  141. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/__pycache__/__init__.py +0 -0
  142. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/config/__init__.py +0 -0
  143. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/config/__pycache__/__init__.py +0 -0
  144. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/config/component_registry.py +0 -0
  145. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/PIL/__init__.py +0 -0
  146. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/__init__.py +0 -0
  147. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
  148. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/asyncio/__init__.py +0 -0
  149. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/collections/__init__.py +0 -0
  150. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/concurrent/__init__.py +0 -0
  151. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
  152. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/ctypes/__init__.py +0 -0
  153. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/cycler/__init__.py +0 -0
  154. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/email/__init__.py +0 -0
  155. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/evolib/__init__.py +0 -0
  156. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
  157. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
  158. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
  159. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
  160. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
  161. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/html/__init__.py +0 -0
  162. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/importlib/__init__.py +0 -0
  163. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
  164. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
  165. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/jinja2/__init__.py +0 -0
  166. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/json/__init__.py +0 -0
  167. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/logging/__init__.py +0 -0
  168. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
  169. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
  170. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
  171. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
  172. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
  173. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
  174. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
  175. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
  176. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
  177. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/__init__.py +0 -0
  178. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
  179. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
  180. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
  181. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
  182. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
  183. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
  184. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
  185. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
  186. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
  187. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
  188. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
  189. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
  190. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
  191. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
  192. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
  193. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
  194. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
  195. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
  196. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/os/__init__.py +0 -0
  197. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/packaging/__init__.py +0 -0
  198. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
  199. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
  200. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
  201. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/sys/__init__.py +0 -0
  202. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/unittest/__init__.py +0 -0
  203. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/urllib/__init__.py +0 -0
  204. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/xml/__init__.py +0 -0
  205. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
  206. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
  207. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
  208. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/yaml/__init__.py +0 -0
  209. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/zipfile/__init__.py +0 -0
  210. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
  211. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/__init__.py +0 -0
  212. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/README.md +0 -0
  213. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/__init__.py +0 -0
  214. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/__pycache__/__init__.py +0 -0
  215. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/individual.py +0 -0
  216. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/population.py +0 -0
  217. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/globals/README.md +0 -0
  218. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/globals/__init__.py +0 -0
  219. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/globals/__pycache__/__init__.py +0 -0
  220. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/globals/numeric.py +0 -0
  221. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/PIL/__init__.py +0 -0
  222. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/__init__.py +0 -0
  223. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
  224. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/asyncio/__init__.py +0 -0
  225. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/collections/__init__.py +0 -0
  226. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/concurrent/__init__.py +0 -0
  227. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
  228. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/ctypes/__init__.py +0 -0
  229. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/cycler/__init__.py +0 -0
  230. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/email/__init__.py +0 -0
  231. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/evolib/__init__.py +0 -0
  232. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
  233. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
  234. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/evolib/initializers/__init__.py +0 -0
  235. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
  236. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
  237. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
  238. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/html/__init__.py +0 -0
  239. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/importlib/__init__.py +0 -0
  240. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
  241. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
  242. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/jinja2/__init__.py +0 -0
  243. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/json/__init__.py +0 -0
  244. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/logging/__init__.py +0 -0
  245. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
  246. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
  247. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
  248. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
  249. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
  250. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
  251. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
  252. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
  253. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
  254. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/__init__.py +0 -0
  255. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
  256. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
  257. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
  258. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
  259. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
  260. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
  261. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
  262. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
  263. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
  264. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
  265. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
  266. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
  267. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
  268. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
  269. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
  270. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
  271. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
  272. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
  273. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/os/__init__.py +0 -0
  274. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/packaging/__init__.py +0 -0
  275. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
  276. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
  277. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
  278. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/sys/__init__.py +0 -0
  279. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/unittest/__init__.py +0 -0
  280. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/urllib/__init__.py +0 -0
  281. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/xml/__init__.py +0 -0
  282. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
  283. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
  284. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
  285. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/yaml/__init__.py +0 -0
  286. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/zipfile/__init__.py +0 -0
  287. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
  288. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/__init__.py +0 -0
  289. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/__init__.py +0 -0
  290. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/__pycache__/__init__.py +0 -0
  291. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/evonet_initializers.py +0 -0
  292. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/net_initializers.py +0 -0
  293. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/registry.py +0 -0
  294. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/vector_initializers.py +0 -0
  295. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/interfaces/__init__.py +0 -0
  296. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/interfaces/__pycache__/__init__.py +0 -0
  297. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/interfaces/enum_helpers.py +0 -0
  298. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/interfaces/enums.py +0 -0
  299. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/interfaces/structs.py +0 -0
  300. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/interfaces/types.py +0 -0
  301. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/io/serialization.py +0 -0
  302. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/operators/README.md +0 -0
  303. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/operators/__init__.py +0 -0
  304. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/operators/__pycache__/__init__.py +0 -0
  305. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/operators/crossover.py +0 -0
  306. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/operators/evonet_structural_mutation.py +0 -0
  307. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/operators/mutation.py +0 -0
  308. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/operators/replacement.py +0 -0
  309. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/operators/reproduction.py +0 -0
  310. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/operators/selection.py +0 -0
  311. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/operators/strategy.py +0 -0
  312. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/registry/__init__.py +0 -0
  313. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/registry/__pycache__/__init__.py +0 -0
  314. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/registry/replacement_registry.py +0 -0
  315. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/registry/selection_registry.py +0 -0
  316. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/registry/strategy_registry.py +0 -0
  317. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/PIL/__init__.py +0 -0
  318. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/__init__.py +0 -0
  319. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
  320. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/annotated_types/__init__.py +0 -0
  321. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/asyncio/__init__.py +0 -0
  322. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/collections/__init__.py +0 -0
  323. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/concurrent/__init__.py +0 -0
  324. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
  325. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/ctypes/__init__.py +0 -0
  326. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/cycler/__init__.py +0 -0
  327. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/email/__init__.py +0 -0
  328. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/__init__.py +0 -0
  329. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/config/__init__.py +0 -0
  330. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
  331. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
  332. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/initializers/__init__.py +0 -0
  333. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
  334. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
  335. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/registry/__init__.py +0 -0
  336. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/representation/__init__.py +0 -0
  337. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
  338. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/html/__init__.py +0 -0
  339. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/importlib/__init__.py +0 -0
  340. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
  341. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
  342. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/jinja2/__init__.py +0 -0
  343. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/json/__init__.py +0 -0
  344. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/logging/__init__.py +0 -0
  345. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/markdown_it/__init__.py +0 -0
  346. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/markdown_it/common/__init__.py +0 -0
  347. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/markdown_it/helpers/__init__.py +0 -0
  348. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/markdown_it/presets/__init__.py +0 -0
  349. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/markdown_it/rules_block/__init__.py +0 -0
  350. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/markdown_it/rules_core/__init__.py +0 -0
  351. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/markdown_it/rules_inline/__init__.py +0 -0
  352. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
  353. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
  354. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
  355. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
  356. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
  357. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
  358. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
  359. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
  360. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/mdurl/__init__.py +0 -0
  361. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
  362. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/__init__.py +0 -0
  363. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
  364. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
  365. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
  366. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
  367. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
  368. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
  369. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
  370. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
  371. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
  372. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
  373. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
  374. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
  375. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
  376. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
  377. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
  378. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
  379. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
  380. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
  381. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/os/__init__.py +0 -0
  382. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/packaging/__init__.py +0 -0
  383. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pydantic/__init__.py +0 -0
  384. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pydantic/_internal/__init__.py +0 -0
  385. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pydantic/deprecated/__init__.py +0 -0
  386. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pydantic/plugin/__init__.py +0 -0
  387. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pydantic/v1/__init__.py +0 -0
  388. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pydantic_core/__init__.py +0 -0
  389. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
  390. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
  391. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
  392. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/rich/__init__.py +0 -0
  393. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/sys/__init__.py +0 -0
  394. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/typing_inspection/__init__.py +0 -0
  395. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/unittest/__init__.py +0 -0
  396. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/urllib/__init__.py +0 -0
  397. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/xml/__init__.py +0 -0
  398. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
  399. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
  400. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
  401. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/yaml/__init__.py +0 -0
  402. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/zipfile/__init__.py +0 -0
  403. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
  404. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/zoneinfo/__init__.py +0 -0
  405. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/__init__.py +0 -0
  406. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/__init__.py +0 -0
  407. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/__pycache__/__init__.py +0 -0
  408. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/_apply_config_mapping.py +0 -0
  409. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/base.py +0 -0
  410. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/composite.py +0 -0
  411. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/dummy.py +0 -0
  412. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/evo_params.py +0 -0
  413. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/netvector.py +0 -0
  414. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/vector.py +0 -0
  415. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/utils/README.md +0 -0
  416. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/utils/__init__.py +0 -0
  417. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/utils/__pycache__/__init__.py +0 -0
  418. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/utils/config_loader.py +0 -0
  419. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/utils/fitness.py +0 -0
  420. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/utils/history_logger.py +0 -0
  421. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/utils/loss_functions.py +0 -0
  422. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/utils/parallel.py +0 -0
  423. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/utils/random.py +0 -0
  424. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/utils/registry.py +0 -0
  425. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib.egg-info/dependency_links.txt +0 -0
  426. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib.egg-info/top_level.txt +0 -0
  427. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/01_basic_usage/01_getting_started.py +0 -0
  428. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/01_basic_usage/02_mutation.py +0 -0
  429. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/01_basic_usage/03_population_mutation.py +0 -0
  430. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/01_basic_usage/04_fitness.py +0 -0
  431. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/02_strategies/01_step_by_step_evolution.py +0 -0
  432. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/02_strategies/02_mu_lambda_step.py +0 -0
  433. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/02_strategies/03_mu_lambda.py +0 -0
  434. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/02_strategies/04_flexible.py +0 -0
  435. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/03_comparisons/01_history.py +0 -0
  436. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/03_comparisons/02_plotting.py +0 -0
  437. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/03_comparisons/03_compare_runs.py +0 -0
  438. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/03_comparisons/04_exponential_decay_vs_static.py +0 -0
  439. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/03_comparisons/05_adaptive_global_vs_static.py +0 -0
  440. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/03_comparisons/06_adaptive_individual_vs_static.py +0 -0
  441. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/03_comparisons/07_selection_comparison.py +0 -0
  442. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/03_comparisons/08_selection_pressure.py +0 -0
  443. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/03_comparisons/09_selection_vs_mutation_pressure.py +0 -0
  444. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/03_comparisons/10_selection_stochastic_vs_deterministic.py +0 -0
  445. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/03_comparisons/11_crossover_comparison.py +0 -0
  446. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/04_function_approximation/01_polynomial_sine.py +0 -0
  447. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/04_function_approximation/02_sine_point_approximation.py +0 -0
  448. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/04_function_approximation/03_approximation_with_noise.py +0 -0
  449. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/05_advanced_topics/01_fitness_landscape_exploration.py +0 -0
  450. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/05_advanced_topics/02_rosenbrock_surface_path.py +0 -0
  451. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/05_advanced_topics/03_vector_control.py +0 -0
  452. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/05_advanced_topics/04_vector_control_with_obstacles.py +0 -0
  453. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/05_advanced_topics/05_piecewise_linear_xsys.py +0 -0
  454. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/05_advanced_topics/06_evolving_mutation_strength_as_a_module.py +0 -0
  455. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/06_netvector/01_netvector_sine_approximation.py +0 -0
  456. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/06_netvector/02_netvector_modulated_output.py +0 -0
  457. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/06_netvector/03_netvector_gain_and_bias.py +0 -0
  458. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/07_evonet/00_identity_test.py +0 -0
  459. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/07_evonet/01_sine_approximation.py +0 -0
  460. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/07_evonet/03_structural_xor.py +0 -0
  461. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/07_evonet/06_recurrent_indicator_01.py +0 -0
  462. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/07_evonet/06_recurrent_indicator_02.py +0 -0
  463. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/07_evonet/07_recurrent_trading_01.py +0 -0
  464. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/setup.cfg +0 -0
  465. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/tests/test_benchmarks.py +0 -0
  466. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/tests/test_config_loader.py +0 -0
  467. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/tests/test_elitism_preserves_best_fitness.py +0 -0
  468. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/tests/test_evonet_vector_io.py +0 -0
  469. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/tests/test_initializer_evonet.py +0 -0
  470. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/tests/test_initializer_net.py +0 -0
  471. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/tests/test_mutation.py +0 -0
  472. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/tests/test_population.py +0 -0
  473. {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/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.dev7
3
+ Version: 0.2.0b3.dev2
4
4
  Summary: A modular framework for evolutionary strategies and neuroevolution.
5
5
  Author-email: EvoLib <evolib@dismail.de>
6
6
  License: MIT License
@@ -45,6 +45,10 @@ Requires-Dist: matplotlib>=3.10
45
45
  Provides-Extra: dev
46
46
  Requires-Dist: mypy; extra == "dev"
47
47
  Requires-Dist: types-PyYAML; extra == "dev"
48
+ Requires-Dist: ray; extra == "dev"
49
+ Requires-Dist: gymnasium; extra == "dev"
50
+ Requires-Dist: imageio; extra == "dev"
51
+ Requires-Dist: Box2D; extra == "dev"
48
52
  Provides-Extra: docs
49
53
  Requires-Dist: sphinx; extra == "docs"
50
54
  Requires-Dist: sphinx-rtd-theme; extra == "docs"
@@ -76,6 +80,7 @@ EvoLib is a lightweight and transparent framework for evolutionary computation,
76
80
  - **Modularity**: mutation, selection, crossover, and parameter representations can be freely combined.
77
81
  - **Educational value**: examples and a clean API make it practical for illustrating evolutionary concepts.
78
82
  - **Neuroevolution support**: structural mutations (adding/removing neurons and connections) and evolvable networks via EvoNet.
83
+ - **Gymnasium integration**: run standard RL benchmarks (e.g. CartPole, LunarLander) via a simple wrapper.
79
84
  - **Parallel evaluation (optional)**: basic support for [Ray](https://www.ray.io/) to speed up fitness evaluations.
80
85
  - **Type-checked**: PEP8 compliant, and consistent code style.
81
86
 
@@ -206,6 +211,27 @@ It can be applied to:
206
211
 
207
212
  ---
208
213
 
214
+ ### Gymnasium Integration
215
+
216
+ EvoLib provides a lightweight wrapper for [Gymnasium](https://gymnasium.farama.org/) environments.
217
+ This allows you to evaluate evolutionary agents directly on well-known RL benchmarks such as **CartPole**, **LunarLander**, or **Pendulum**.
218
+
219
+ - **Headless evaluation**: returns total episode reward as fitness.
220
+ - **Visualization**: render episodes and save them as GIFs.
221
+ - **Discrete & continuous action spaces** are both supported.
222
+
223
+ 👉 Example: [`examples/01_cartpole.py`](examples/01_cartpole.py)
224
+
225
+ ```python
226
+ from evolibs.gym_wrapper import GymEnv
227
+
228
+ env = GymEnv("CartPole-v1", max_steps=500)
229
+ fitness = env.evaluate(indiv) # run one episode
230
+ gif = env.visualize(indiv, gen=10) # render & save as GIF
231
+ ```
232
+
233
+ ---
234
+
209
235
  ## Preview: Pygame Integration
210
236
 
211
237
  Early prototypes demonstrate how evolutionary algorithms can evolve both neural networks and sensor properties such as number, range, and orientation for agents in 2D worlds built with pygame. This illustrates how networks and sensors co-adapt to dynamic environments with collisions and feedback.
@@ -253,6 +279,7 @@ For deeper exploration, see the [full examples directory](examples/)
253
279
  - [X] Neuroevolution
254
280
  - [X] Topological Evolution (neurons, edges)
255
281
  - [X] Ray Support for Parallel Evaluation (early prototypes)
282
+ - [X] OpenAI Gymnasium / Gym Wrapper
256
283
  - [ ] Advanced Visualization
257
284
  - [ ] Game Environment Integration (pygame, PettingZoo - early prototypes)
258
285
 
@@ -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
+ - **Gymnasium integration**: run standard RL benchmarks (e.g. CartPole, LunarLander) via a simple wrapper.
23
24
  - **Parallel evaluation (optional)**: basic support for [Ray](https://www.ray.io/) to speed up fitness evaluations.
24
25
  - **Type-checked**: PEP8 compliant, and consistent code style.
25
26
 
@@ -150,6 +151,27 @@ It can be applied to:
150
151
 
151
152
  ---
152
153
 
154
+ ### Gymnasium Integration
155
+
156
+ EvoLib provides a lightweight wrapper for [Gymnasium](https://gymnasium.farama.org/) environments.
157
+ This allows you to evaluate evolutionary agents directly on well-known RL benchmarks such as **CartPole**, **LunarLander**, or **Pendulum**.
158
+
159
+ - **Headless evaluation**: returns total episode reward as fitness.
160
+ - **Visualization**: render episodes and save them as GIFs.
161
+ - **Discrete & continuous action spaces** are both supported.
162
+
163
+ 👉 Example: [`examples/01_cartpole.py`](examples/01_cartpole.py)
164
+
165
+ ```python
166
+ from evolibs.gym_wrapper import GymEnv
167
+
168
+ env = GymEnv("CartPole-v1", max_steps=500)
169
+ fitness = env.evaluate(indiv) # run one episode
170
+ gif = env.visualize(indiv, gen=10) # render & save as GIF
171
+ ```
172
+
173
+ ---
174
+
153
175
  ## Preview: Pygame Integration
154
176
 
155
177
  Early prototypes demonstrate how evolutionary algorithms can evolve both neural networks and sensor properties such as number, range, and orientation for agents in 2D worlds built with pygame. This illustrates how networks and sensors co-adapt to dynamic environments with collisions and feedback.
@@ -197,6 +219,7 @@ For deeper exploration, see the [full examples directory](examples/)
197
219
  - [X] Neuroevolution
198
220
  - [X] Topological Evolution (neurons, edges)
199
221
  - [X] Ray Support for Parallel Evaluation (early prototypes)
222
+ - [X] OpenAI Gymnasium / Gym Wrapper
200
223
  - [ ] Advanced Visualization
201
224
  - [ ] Game Environment Integration (pygame, PettingZoo - early prototypes)
202
225
 
@@ -155,6 +155,21 @@ modules:
155
155
 
156
156
  ---
157
157
 
158
+ ## D) Parallel Evaluation (optional)
159
+
160
+ For expensive problems, EvoLib can evaluate individuals in parallel using [Ray](https://www.ray.io/).
161
+
162
+ ```yaml
163
+ parallel:
164
+ backend: ray # backend: none | ray
165
+ num_cpus: 2 # number of logical CPUs (only used in local mode)
166
+ address: auto # "auto" = local Ray; or "ray://host:10001" for remote
167
+ ```
168
+
169
+ If omitted, EvoLib runs in single-threaded mode.
170
+
171
+ ---
172
+
158
173
  ## Further examples
159
174
 
160
175
  For complete, runnable examples including fitness definitions and visualization,
@@ -17,6 +17,26 @@ The parameters are grouped into **global parameters**, **evolution strategy sett
17
17
  | `num_elites` | int | 0 | Number of top individuals copied unchanged into the next generation. |
18
18
  | `max_indiv_age` | int | 0 | Maximum age of individuals (0 = no age limit). |
19
19
 
20
+
21
+ ## Parallelization Settings
22
+
23
+ Optional parameters to enable parallel evaluation of individuals.
24
+
25
+ | Parameter | Type | Default | Explanation |
26
+ | ----------- | ---- | ------- | --------------------------------------------------------------------------- |
27
+ | `backend` | str | none | Parallel backend (`ray` or `none`). |
28
+ | `num_cpus` | int | 1 | Number of logical CPUs Ray may use for evaluation. |
29
+ | `address` | str | auto | `"auto"` = local Ray; or `ray://host:port` for connecting to a remote Ray cluster. |
30
+
31
+ Example:
32
+
33
+ ```yaml
34
+ parallel:
35
+ backend: ray
36
+ num_cpus: 4
37
+ address: auto
38
+ ```
39
+
20
40
  ---
21
41
 
22
42
  ## Stopping Criteria
@@ -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
 
@@ -190,7 +191,7 @@ For deeper exploration, see the [full examples directory](examples/)
190
191
  - [X] Composite Parameters (multi-module individuals)
191
192
  - [X] Neuroevolution
192
193
  - [X] Topological Evolution (neurons, edges)
193
- - [ ] Co-Evolution & Speciation Support
194
+ - [X] Ray Support for Parallel Evaluation (early prototypes)
194
195
  - [ ] Advanced Visualization
195
196
  - [ ] Game Environment Integration (pygame, PettingZoo - early prototypes)
196
197
  - [ ] Ray Support for Parallel Evaluation (early prototypes)
@@ -1,5 +1,6 @@
1
1
  from evolib.core.individual import Indiv as Individual
2
2
  from evolib.core.population import Pop as Population
3
+ from evolib.envs.gym_wrapper import GymEnv
3
4
  from evolib.interfaces.types import FitnessFunction
4
5
  from evolib.io.checkpoint import (
5
6
  load_best_indiv,
@@ -100,6 +101,7 @@ __all__ = [
100
101
  "load_best_indiv",
101
102
  "resume_or_create",
102
103
  "FitnessFunction",
104
+ "GymEnv",
103
105
  ]
104
106
 
105
107
  Pop = Population
@@ -10,7 +10,7 @@ into the respective Para* representations and operator modules.
10
10
 
11
11
  from typing import Literal, Optional, Union
12
12
 
13
- from pydantic import BaseModel, Field, model_validator
13
+ from pydantic import BaseModel, ConfigDict, Field, model_validator
14
14
 
15
15
  from evolib.interfaces.enums import (
16
16
  CrossoverOperator,
@@ -59,6 +59,8 @@ class MutationConfig(BaseModel):
59
59
  helpers.
60
60
  """
61
61
 
62
+ model_config = ConfigDict(extra="forbid")
63
+
62
64
  strategy: MutationStrategy = Field(..., description="Mutation strategy to use.")
63
65
 
64
66
  # Generic / commonly used parameters
@@ -133,11 +135,15 @@ class MutationConfig(BaseModel):
133
135
  # Strategy-specific light requirements
134
136
  if self.strategy.name == "CONSTANT":
135
137
  if self.strength is None:
136
- raise ValueError("CONSTANT strategy requires 'strength'.")
138
+ raise ValueError("CONSTANT requires 'strength'.")
139
+ if self.init_strength is not None or self.init_probability is not None:
140
+ raise ValueError("CONSTANT must not define init_* fields.")
137
141
 
138
142
  if self.strategy.name == "EXPONENTIAL_DECAY":
139
143
  if self.init_strength is None:
140
144
  raise ValueError("EXPONENTIAL_DECAY requires 'init_strength'.")
145
+ if self.strength is not None:
146
+ raise ValueError("EXPONENTIAL_DECAY must not define 'strength'.")
141
147
 
142
148
  if self.strategy.name == "ADAPTIVE_GLOBAL":
143
149
  if self.init_strength is None or self.init_probability is None:
@@ -168,6 +174,8 @@ class StructuralMutationConfig(BaseModel):
168
174
  max_edges: Optional[int] = None
169
175
  recurrent: Optional[Literal["none", "direct", "local", "all"]] = "none"
170
176
 
177
+ model_config = ConfigDict(extra="forbid")
178
+
171
179
  @model_validator(mode="after")
172
180
  def _check_ranges(self) -> "StructuralMutationConfig":
173
181
  for name in [
@@ -194,6 +202,9 @@ class StructuralMutationConfig(BaseModel):
194
202
 
195
203
 
196
204
  class ActivationMutationConfig(BaseModel):
205
+
206
+ model_config = ConfigDict(extra="forbid")
207
+
197
208
  probability: float = Field(
198
209
  ..., description="Per-neuron mutation probability in [0,1]."
199
210
  )
@@ -230,6 +241,8 @@ class EvoNetMutationConfig(MutationConfig):
230
241
  - structural: MutationConfig for structural choices (optional)
231
242
  """
232
243
 
244
+ model_config = ConfigDict(extra="forbid")
245
+
233
246
  biases: Optional[MutationConfig] = Field(
234
247
  default=None, description="Optional override for bias mutation."
235
248
  )
@@ -265,6 +278,8 @@ class CrossoverConfig(BaseModel):
265
278
  - ...others can be added as needed
266
279
  """
267
280
 
281
+ model_config = ConfigDict(extra="forbid")
282
+
268
283
  strategy: CrossoverStrategy = Field(..., description="Crossover strategy to use.")
269
284
  operator: Optional[CrossoverOperator] = Field(
270
285
  default=None, description="Concrete crossover operator (if applicable)."
@@ -14,7 +14,7 @@ config resolution.
14
14
  from typing import Literal, Optional, Tuple, Union
15
15
 
16
16
  from evonet.activation import ACTIVATIONS
17
- from pydantic import BaseModel, Field, field_validator, validator
17
+ from pydantic import BaseModel, ConfigDict, Field, field_validator, validator
18
18
  from pydantic_core import core_schema
19
19
 
20
20
  from evolib.config.base_component_config import (
@@ -47,6 +47,8 @@ class EvoNetComponentConfig(BaseModel):
47
47
  strength: 0.05
48
48
  """
49
49
 
50
+ model_config = ConfigDict(extra="forbid")
51
+
50
52
  # Module type is fixed to "evonet"
51
53
  type: Literal["evonet"] = "evonet"
52
54
 
@@ -1,7 +1,7 @@
1
1
  # SPDX-License-Identifier: MIT
2
2
  from typing import Any, Dict, Optional
3
3
 
4
- from pydantic import BaseModel, Field, model_validator
4
+ from pydantic import BaseModel, ConfigDict, Field, model_validator
5
5
 
6
6
  from evolib.config.component_registry import get_component_config_class
7
7
  from evolib.interfaces.enums import (
@@ -19,6 +19,8 @@ class EvolutionConfig(BaseModel):
19
19
  Para* representations and operator modules.
20
20
  """
21
21
 
22
+ model_config = ConfigDict(extra="forbid")
23
+
22
24
  strategy: EvolutionStrategy = Field(
23
25
  ..., description="High-level evolution strategy (e.g. (mu_plus_lambda)."
24
26
  )
@@ -32,6 +34,8 @@ class SelectionConfig(BaseModel):
32
34
  semantics are implemented in the selection registry.
33
35
  """
34
36
 
37
+ model_config = ConfigDict(extra="forbid")
38
+
35
39
  strategy: SelectionStrategy = Field(
36
40
  ..., description="Parent selection strategy (e.g. tournament, ranking)."
37
41
  )
@@ -56,6 +60,8 @@ class ReplacementConfig(BaseModel):
56
60
  Concrete behavior is implemented in the replacement registry.
57
61
  """
58
62
 
63
+ model_config = ConfigDict(extra="forbid")
64
+
59
65
  strategy: ReplacementStrategy = Field(
60
66
  ..., description="Survivor selection strategy (e.g. replace_worst, anneal)."
61
67
  )
@@ -70,6 +76,8 @@ class ReplacementConfig(BaseModel):
70
76
  class StoppingCriteria(BaseModel):
71
77
  """Optional stopping criteria for early stopping."""
72
78
 
79
+ model_config = ConfigDict(extra="forbid")
80
+
73
81
  target_fitness: Optional[float] = Field(
74
82
  None,
75
83
  description="Stop once fitness is below (or above if maximize) this value.",
@@ -96,6 +104,8 @@ class ParallelConfig(BaseModel):
96
104
  only Ray is supported).
97
105
  """
98
106
 
107
+ model_config = ConfigDict(extra="forbid")
108
+
99
109
  backend: str = Field(
100
110
  default="none",
101
111
  description="Parallel backend to use: 'none' (default) or 'ray'.",
@@ -124,6 +134,8 @@ class FullConfig(BaseModel):
124
134
  VectorComponentConfig, EvoNetComponentConfig).
125
135
  """
126
136
 
137
+ model_config = ConfigDict(extra="forbid")
138
+
127
139
  # Global run parameters
128
140
  parent_pool_size: int = Field(
129
141
  ..., description="Number of parents retained in each generation."
@@ -199,3 +211,20 @@ class FullConfig(BaseModel):
199
211
 
200
212
  data["modules"] = resolved
201
213
  return data
214
+
215
+ @model_validator(mode="after")
216
+ def _check_consistency(self) -> "FullConfig":
217
+ """Global sanity checks for the main configuration."""
218
+ if self.parent_pool_size <= 0:
219
+ raise ValueError("parent_pool_size must be > 0")
220
+ if self.offspring_pool_size <= 0:
221
+ raise ValueError("offspring_pool_size must be > 0")
222
+ if self.num_elites < 0:
223
+ raise ValueError("num_elites must be >= 0")
224
+ if self.num_elites > self.parent_pool_size:
225
+ raise ValueError("num_elites cannot exceed parent_pool_size")
226
+ if self.max_generations <= 0:
227
+ raise ValueError("max_generations must be > 0")
228
+ if self.max_indiv_age < 0:
229
+ raise ValueError("max_indiv_age must be >= 0")
230
+ return self
@@ -1,7 +1,7 @@
1
1
  # SPDX-License-Identifier: MIT
2
2
  from typing import Any, Literal, Optional, Tuple, Union
3
3
 
4
- from pydantic import BaseModel, Field, field_validator, model_validator
4
+ from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator
5
5
 
6
6
  from evolib.config.base_component_config import CrossoverConfig, MutationConfig
7
7
  from evolib.interfaces.enums import RepresentationType
@@ -29,6 +29,8 @@ class VectorComponentConfig(BaseModel):
29
29
  strength: 0.05
30
30
  """
31
31
 
32
+ model_config = ConfigDict(extra="forbid")
33
+
32
34
  # Fixed module type: "vector"
33
35
  type: RepresentationType = Field(
34
36
  default=RepresentationType.VECTOR,
@@ -0,0 +1,159 @@
1
+ # SPDX-License-Identifier: MIT
2
+ from __future__ import annotations
3
+
4
+ from typing import TYPE_CHECKING, Any, Union, cast
5
+
6
+ try:
7
+ import gymnasium as gym
8
+ except ImportError as e:
9
+ raise ImportError(
10
+ "Gymnasium is required for GymEnv. Please install with `pip install gymnasium`."
11
+ ) from e
12
+
13
+ try:
14
+ import imageio
15
+ except ImportError as e:
16
+ raise ImportError(
17
+ "imageio is required for GymEnv visualization. "
18
+ "Please install with `pip install imageio`."
19
+ ) from e
20
+
21
+ import numpy as np
22
+
23
+ if TYPE_CHECKING:
24
+ from evolib import Individual
25
+
26
+
27
+ class GymEnv:
28
+ """Thin wrapper to run OpenAI Gymnasium environments with EvoLib Individuals."""
29
+
30
+ def __init__(self, env_name: str, max_steps: int = 500, **env_kwargs: Any):
31
+ """
32
+ Initialize a Gym environment.
33
+
34
+ Args:
35
+ env_name: Name of the Gymnasium environment, e.g. "FrozenLake-v1".
36
+ max_steps: Maximum number of steps per episode.
37
+ **env_kwargs: Extra arguments passed directly to gym.make(),
38
+ e.g. is_slippery=False for FrozenLake.
39
+ """
40
+ self.env_name = env_name
41
+ self.max_steps = max_steps
42
+ self.env_kwargs = env_kwargs
43
+ # headless env (no Render)
44
+ self.env = gym.make(env_name, **env_kwargs)
45
+
46
+ def evaluate(
47
+ self,
48
+ indiv: Individual,
49
+ module: str = "brain",
50
+ episodes: int = 1,
51
+ ) -> float:
52
+ """
53
+ Run one or multiple episodes headless and return average total reward.
54
+
55
+ Args:
56
+ indiv: Individual whose network acts in the environment.
57
+ module: Which module in para to use for decision making.
58
+ episodes: How many episodes to average over (default: 1).
59
+
60
+ Returns:
61
+ Average total reward across all episodes.
62
+ """
63
+ total_reward = 0.0
64
+
65
+ for _ in range(episodes):
66
+ obs, _ = self.env.reset()
67
+ ep_reward = 0.0
68
+
69
+ for _ in range(self.max_steps):
70
+ if isinstance(obs, np.ndarray):
71
+ obs_list = obs.tolist()
72
+ elif np.isscalar(obs):
73
+ obs_list = [float(cast(float, obs))]
74
+ else:
75
+ obs_list = list(obs)
76
+
77
+ action = indiv.para[module].net.calc(obs_list)
78
+
79
+ # Discrete Action-Spaces --> argmax
80
+ if hasattr(self.env.action_space, "n"):
81
+ action = int(np.argmax(action))
82
+ else:
83
+ action = np.array(action, dtype=np.float32)
84
+
85
+ obs, reward, terminated, truncated, _ = self.env.step(action)
86
+ ep_reward += float(reward)
87
+
88
+ if terminated or truncated:
89
+ break
90
+
91
+ total_reward += ep_reward
92
+
93
+ return total_reward / episodes
94
+
95
+ def visualize(
96
+ self,
97
+ indiv: Individual,
98
+ gen: int,
99
+ filename: str | None = None,
100
+ fps: int = 30,
101
+ module: str = "brain",
102
+ ) -> str:
103
+ """
104
+ Render an episode with the given individual and save as GIF using imageio.
105
+
106
+ Args:
107
+ indiv: Individual to visualize.
108
+ gen: Generation number (used in default filename).
109
+ filename: Optional filename for output GIF.
110
+ fps: Frames per second for GIF.
111
+ module: Which module in para to use for decision making.
112
+
113
+ Returns:
114
+ Path to saved GIF.
115
+ """
116
+
117
+ env = gym.make(
118
+ self.env_name,
119
+ render_mode="rgb_array",
120
+ max_episode_steps=self.max_steps,
121
+ **self.env_kwargs,
122
+ )
123
+ obs, _ = env.reset()
124
+
125
+ RenderFrame = Union[np.ndarray, list[np.ndarray], None]
126
+ frames: list[np.ndarray] = []
127
+
128
+ for _ in range(self.max_steps):
129
+ if isinstance(obs, np.ndarray):
130
+ obs_list = obs.tolist()
131
+ elif np.isscalar(obs):
132
+ obs_list = [float(cast(float, obs))]
133
+ else:
134
+ obs_list = list(obs)
135
+
136
+ action = indiv.para[module].net.calc(obs_list)
137
+
138
+ if hasattr(env.action_space, "n"):
139
+ action = int(np.argmax(action))
140
+ else:
141
+ action = np.array(action, dtype=np.float32)
142
+
143
+ obs, reward, terminated, truncated, _ = env.step(action)
144
+
145
+ frame: RenderFrame = env.render()
146
+ if isinstance(frame, np.ndarray):
147
+ frames.append(frame)
148
+
149
+ if terminated or truncated:
150
+ break
151
+
152
+ env.close()
153
+
154
+ if filename is None:
155
+ filename = f"{self.env_name}_gen{gen:04d}.gif"
156
+
157
+ imageio.mimsave(filename, cast(list[Any], frames), fps=fps)
158
+
159
+ return filename
@@ -66,7 +66,7 @@ def save_checkpoint(pop: Pop, *, run_name: str = "default") -> None:
66
66
 
67
67
  def resume_from_checkpoint(
68
68
  run_name: str = "default",
69
- fitness_fn: Optional[FitnessFunction] = None,
69
+ fitness_function: Optional[FitnessFunction] = None,
70
70
  silent_fail: bool = True,
71
71
  ) -> Optional[Pop]:
72
72
  """
@@ -74,7 +74,7 @@ def resume_from_checkpoint(
74
74
 
75
75
  Args:
76
76
  run_name (str): Identifier of the checkpoint file.
77
- fitness_fn (callable, optional): Fitness function to assign.
77
+ fitness_function (callable, optional): Fitness function to assign.
78
78
  silent_fail (bool): If True, return None instead of raising FileNotFoundError.
79
79
 
80
80
 
@@ -89,8 +89,8 @@ def resume_from_checkpoint(
89
89
 
90
90
  pop = load_population_pickle(path)
91
91
 
92
- if fitness_fn:
93
- pop.set_fitness_function(fitness_fn)
92
+ if fitness_function:
93
+ pop.set_fitness_function(fitness_function)
94
94
 
95
95
  # Restore initializer
96
96
  pop.para_initializer = build_composite_initializer(pop.config)
@@ -99,14 +99,14 @@ def resume_from_checkpoint(
99
99
 
100
100
 
101
101
  def resume_or_create(
102
- config_path: str, fitness_fn: FitnessFunction, run_name: str = "default"
102
+ config_path: str, fitness_function: FitnessFunction, run_name: str = "default"
103
103
  ) -> Pop:
104
104
  """
105
105
  Try to resume a saved run, otherwise initialize a new population.
106
106
 
107
107
  Args:
108
108
  config_path (str): Path to the YAML configuration.
109
- fitness_fn (callable): Fitness function for individuals.
109
+ fitness_function (callable): Fitness function for individuals.
110
110
  run_name (str): Optional name for checkpoint file.
111
111
 
112
112
 
@@ -115,7 +115,7 @@ def resume_or_create(
115
115
  """
116
116
 
117
117
  pop = resume_from_checkpoint(
118
- run_name=run_name, fitness_fn=fitness_fn, silent_fail=True
118
+ run_name=run_name, fitness_function=fitness_function, silent_fail=True
119
119
  )
120
120
 
121
121
  if pop is not None:
@@ -126,7 +126,7 @@ def resume_or_create(
126
126
  return pop
127
127
 
128
128
  print(f"[Create] New population for run_name={run_name}")
129
- return Pop(config_path=config_path, fitness_function=fitness_fn)
129
+ return Pop(config_path=config_path, fitness_function=fitness_function)
130
130
 
131
131
 
132
132
  def save_best_indiv(pop: Pop, *, run_name: str = "default") -> None:
@@ -392,7 +392,7 @@ class EvoNet(ParaBase):
392
392
  def print_status(self) -> None:
393
393
  print(f"[EvoNet] : {self.net} ")
394
394
 
395
- def print_graph(
395
+ def plot(
396
396
  self,
397
397
  name: str,
398
398
  engine: str = "neato",
@@ -412,7 +412,7 @@ class EvoNet(ParaBase):
412
412
  thickness_on (bool): Adjust edge thickness by weight.
413
413
  fillcolors_on (bool): Fill nodes with colors by type.
414
414
  """
415
- self.net.print_graph(
415
+ self.net.plot(
416
416
  name=name,
417
417
  engine=engine,
418
418
  labels_on=labels_on,
@@ -1,7 +1,7 @@
1
1
  # SPDX-License-Identifier: MIT
2
2
  """Common mathematical benchmark functions for optimization tasks."""
3
3
 
4
- from typing import Literal, Sequence
4
+ from typing import Sequence
5
5
 
6
6
  import numpy as np
7
7
  from numpy.random import default_rng
@@ -10,9 +10,7 @@ from numpy.random import default_rng
10
10
  def generate_timeseries(
11
11
  length: int,
12
12
  normalize: bool = True,
13
- pattern: Literal[
14
- "default", "trend_switch", "parabolic", "zigzag", "shock"
15
- ] = "default",
13
+ pattern: str = "default",
16
14
  seed: int | None = None,
17
15
  ) -> np.ndarray:
18
16
  """
@@ -33,6 +31,9 @@ def generate_timeseries(
33
31
  np.ndarray: The generated time series.
34
32
  """
35
33
 
34
+ if pattern not in {"default", "trend_switch", "parabolic", "zigzag", "shock"}:
35
+ raise ValueError(f"Unknown pattern: {pattern}")
36
+
36
37
  if seed is not None:
37
38
  rng = default_rng(seed)
38
39
  else:
@@ -513,7 +513,7 @@ def save_combined_net_plot(
513
513
  Saves a combined image of network structure and approximation plot.
514
514
 
515
515
  Args:
516
- net: EvoNet instance with .print_graph().
516
+ net: EvoNet instance with .plot().
517
517
  X (np.ndarray): Input values (for plotting).
518
518
  Y_true (np.ndarray): Ground truth values (e.g. sin(x)).
519
519
  Y_pred (np.ndarray): Network prediction values.
@@ -523,7 +523,7 @@ def save_combined_net_plot(
523
523
  """
524
524
  with tempfile.TemporaryDirectory() as tmpdir:
525
525
  graph_path = os.path.join(tmpdir, "net")
526
- net.print_graph(graph_path, fillcolors_on=True, thickness_on=True)
526
+ net.plot(graph_path, fillcolors_on=True, thickness_on=True)
527
527
  img_net = Image.open(graph_path + ".png")
528
528
 
529
529
  # Create approximation plot