evolib 0.2.0b3.dev1__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 (475) hide show
  1. {evolib-0.2.0b3.dev1/evolib.egg-info → evolib-0.2.0b3.dev2}/PKG-INFO +25 -2
  2. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/README.md +23 -1
  3. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/api.py +2 -0
  4. evolib-0.2.0b3.dev2/evolib/envs/gym_wrapper.py +159 -0
  5. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2/evolib.egg-info}/PKG-INFO +25 -2
  6. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib.egg-info/SOURCES.txt +5 -2
  7. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib.egg-info/requires.txt +1 -0
  8. evolib-0.2.0b3.dev2/examples/08_gym/01_cartpole.py +32 -0
  9. evolib-0.2.0b3.dev2/examples/08_gym/01_frozen_lake.py +52 -0
  10. evolib-0.2.0b3.dev2/examples/08_gym/02_cliff_walking.py +51 -0
  11. {evolib-0.2.0b3.dev1/examples/08_envs → evolib-0.2.0b3.dev2/examples/08_gym}/02_lunar_lander.py +8 -0
  12. evolib-0.2.0b3.dev2/examples/08_gym/03_taxi.py +85 -0
  13. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/pyproject.toml +3 -2
  14. evolib-0.2.0b3.dev1/evolib/envs/gym_wrapper.py +0 -98
  15. evolib-0.2.0b3.dev1/examples/08_envs/01_cartpole.py +0 -34
  16. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/LICENSE +0 -0
  17. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/MANIFEST.in +0 -0
  18. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_core_individual.rst +0 -0
  19. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_core_population.rst +0 -0
  20. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_operators_crossover.rst +0 -0
  21. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_operators_evonet_structural_mutation.rst +0 -0
  22. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_operators_mutation.rst +0 -0
  23. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_operators_replacement.rst +0 -0
  24. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_operators_reproduction.rst +0 -0
  25. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_operators_selection.rst +0 -0
  26. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_operators_strategy.rst +0 -0
  27. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_public_api.rst +0 -0
  28. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_representation_evonet.rst +0 -0
  29. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_representation_netvector.rst +0 -0
  30. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_representation_vector.rst +0 -0
  31. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_utils_benchmarks.rst +0 -0
  32. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_utils_history_logger.rst +0 -0
  33. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_utils_loss_functions.rst +0 -0
  34. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/api_utils_plotting.rst +0 -0
  35. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/conf.py +0 -0
  36. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/config_guide.md +0 -0
  37. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/config_parameter.md +0 -0
  38. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/getting_started.md +0 -0
  39. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/docs/index.md +0 -0
  40. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/PIL/__init__.py +0 -0
  41. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/__init__.py +0 -0
  42. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
  43. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/annotated_types/__init__.py +0 -0
  44. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/asyncio/__init__.py +0 -0
  45. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/collections/__init__.py +0 -0
  46. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/concurrent/__init__.py +0 -0
  47. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
  48. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/ctypes/__init__.py +0 -0
  49. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/cycler/__init__.py +0 -0
  50. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/email/__init__.py +0 -0
  51. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/__init__.py +0 -0
  52. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/config/__init__.py +0 -0
  53. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
  54. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
  55. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/initializers/__init__.py +0 -0
  56. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
  57. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
  58. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/registry/__init__.py +0 -0
  59. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/representation/__init__.py +0 -0
  60. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
  61. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/html/__init__.py +0 -0
  62. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/importlib/__init__.py +0 -0
  63. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
  64. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
  65. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/jinja2/__init__.py +0 -0
  66. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/json/__init__.py +0 -0
  67. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/logging/__init__.py +0 -0
  68. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/markdown_it/__init__.py +0 -0
  69. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/markdown_it/common/__init__.py +0 -0
  70. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/markdown_it/helpers/__init__.py +0 -0
  71. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/markdown_it/presets/__init__.py +0 -0
  72. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/markdown_it/rules_block/__init__.py +0 -0
  73. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/markdown_it/rules_core/__init__.py +0 -0
  74. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/markdown_it/rules_inline/__init__.py +0 -0
  75. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
  76. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
  77. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
  78. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
  79. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
  80. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
  81. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
  82. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
  83. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/mdurl/__init__.py +0 -0
  84. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
  85. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/__init__.py +0 -0
  86. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
  87. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
  88. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
  89. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
  90. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
  91. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
  92. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
  93. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
  94. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
  95. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
  96. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
  97. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
  98. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
  99. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
  100. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
  101. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
  102. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
  103. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
  104. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/os/__init__.py +0 -0
  105. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/packaging/__init__.py +0 -0
  106. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pydantic/__init__.py +0 -0
  107. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pydantic/_internal/__init__.py +0 -0
  108. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pydantic/deprecated/__init__.py +0 -0
  109. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pydantic/plugin/__init__.py +0 -0
  110. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pydantic/v1/__init__.py +0 -0
  111. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pydantic_core/__init__.py +0 -0
  112. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
  113. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
  114. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
  115. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/rich/__init__.py +0 -0
  116. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/sys/__init__.py +0 -0
  117. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/typing_inspection/__init__.py +0 -0
  118. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/unittest/__init__.py +0 -0
  119. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/urllib/__init__.py +0 -0
  120. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/xml/__init__.py +0 -0
  121. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
  122. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
  123. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
  124. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/yaml/__init__.py +0 -0
  125. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/zipfile/__init__.py +0 -0
  126. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
  127. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/zoneinfo/__init__.py +0 -0
  128. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/__init__.py +0 -0
  129. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/__init__.py +0 -0
  130. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/__pycache__/__init__.py +0 -0
  131. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/config/__init__.py +0 -0
  132. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/config/__pycache__/__init__.py +0 -0
  133. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/config/base_component_config.py +0 -0
  134. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/config/component_registry.py +0 -0
  135. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/config/evonet_component_config.py +0 -0
  136. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/config/schema.py +0 -0
  137. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/config/vector_component_config.py +0 -0
  138. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/PIL/__init__.py +0 -0
  139. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/__init__.py +0 -0
  140. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
  141. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/asyncio/__init__.py +0 -0
  142. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/collections/__init__.py +0 -0
  143. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/concurrent/__init__.py +0 -0
  144. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
  145. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/ctypes/__init__.py +0 -0
  146. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/cycler/__init__.py +0 -0
  147. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/email/__init__.py +0 -0
  148. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/evolib/__init__.py +0 -0
  149. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
  150. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
  151. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
  152. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
  153. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
  154. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/html/__init__.py +0 -0
  155. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/importlib/__init__.py +0 -0
  156. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
  157. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
  158. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/jinja2/__init__.py +0 -0
  159. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/json/__init__.py +0 -0
  160. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/logging/__init__.py +0 -0
  161. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
  162. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
  163. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
  164. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
  165. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
  166. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
  167. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
  168. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
  169. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
  170. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/__init__.py +0 -0
  171. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
  172. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
  173. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
  174. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
  175. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
  176. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
  177. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
  178. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
  179. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
  180. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
  181. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
  182. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
  183. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
  184. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
  185. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
  186. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
  187. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
  188. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
  189. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/os/__init__.py +0 -0
  190. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/packaging/__init__.py +0 -0
  191. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
  192. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
  193. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
  194. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/sys/__init__.py +0 -0
  195. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/unittest/__init__.py +0 -0
  196. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/urllib/__init__.py +0 -0
  197. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/xml/__init__.py +0 -0
  198. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
  199. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
  200. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
  201. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/yaml/__init__.py +0 -0
  202. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/zipfile/__init__.py +0 -0
  203. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
  204. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/__init__.py +0 -0
  205. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/README.md +0 -0
  206. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/__init__.py +0 -0
  207. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/__pycache__/__init__.py +0 -0
  208. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/individual.py +0 -0
  209. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/core/population.py +0 -0
  210. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/globals/README.md +0 -0
  211. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/globals/__init__.py +0 -0
  212. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/globals/__pycache__/__init__.py +0 -0
  213. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/globals/numeric.py +0 -0
  214. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/PIL/__init__.py +0 -0
  215. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/__init__.py +0 -0
  216. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
  217. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/asyncio/__init__.py +0 -0
  218. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/collections/__init__.py +0 -0
  219. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/concurrent/__init__.py +0 -0
  220. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
  221. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/ctypes/__init__.py +0 -0
  222. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/cycler/__init__.py +0 -0
  223. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/email/__init__.py +0 -0
  224. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/evolib/__init__.py +0 -0
  225. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
  226. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
  227. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/evolib/initializers/__init__.py +0 -0
  228. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
  229. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
  230. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
  231. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/html/__init__.py +0 -0
  232. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/importlib/__init__.py +0 -0
  233. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
  234. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
  235. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/jinja2/__init__.py +0 -0
  236. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/json/__init__.py +0 -0
  237. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/logging/__init__.py +0 -0
  238. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
  239. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
  240. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
  241. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
  242. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
  243. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
  244. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
  245. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
  246. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
  247. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/__init__.py +0 -0
  248. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
  249. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
  250. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
  251. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
  252. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
  253. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
  254. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
  255. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
  256. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
  257. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
  258. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
  259. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
  260. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
  261. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
  262. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
  263. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
  264. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
  265. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
  266. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/os/__init__.py +0 -0
  267. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/packaging/__init__.py +0 -0
  268. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
  269. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
  270. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
  271. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/sys/__init__.py +0 -0
  272. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/unittest/__init__.py +0 -0
  273. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/urllib/__init__.py +0 -0
  274. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/xml/__init__.py +0 -0
  275. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
  276. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
  277. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
  278. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/yaml/__init__.py +0 -0
  279. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/zipfile/__init__.py +0 -0
  280. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
  281. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/__init__.py +0 -0
  282. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/__init__.py +0 -0
  283. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/__pycache__/__init__.py +0 -0
  284. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/evonet_initializers.py +0 -0
  285. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/net_initializers.py +0 -0
  286. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/registry.py +0 -0
  287. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/initializers/vector_initializers.py +0 -0
  288. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/interfaces/__init__.py +0 -0
  289. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/interfaces/__pycache__/__init__.py +0 -0
  290. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/interfaces/enum_helpers.py +0 -0
  291. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/interfaces/enums.py +0 -0
  292. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/interfaces/structs.py +0 -0
  293. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/interfaces/types.py +0 -0
  294. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/io/checkpoint.py +0 -0
  295. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/io/serialization.py +0 -0
  296. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/operators/README.md +0 -0
  297. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/operators/__init__.py +0 -0
  298. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/operators/__pycache__/__init__.py +0 -0
  299. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/operators/crossover.py +0 -0
  300. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/operators/evonet_structural_mutation.py +0 -0
  301. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/operators/mutation.py +0 -0
  302. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/operators/replacement.py +0 -0
  303. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/operators/reproduction.py +0 -0
  304. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/operators/selection.py +0 -0
  305. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/operators/strategy.py +0 -0
  306. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/registry/__init__.py +0 -0
  307. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/registry/__pycache__/__init__.py +0 -0
  308. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/registry/replacement_registry.py +0 -0
  309. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/registry/selection_registry.py +0 -0
  310. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/registry/strategy_registry.py +0 -0
  311. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/PIL/__init__.py +0 -0
  312. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/__init__.py +0 -0
  313. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
  314. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/annotated_types/__init__.py +0 -0
  315. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/asyncio/__init__.py +0 -0
  316. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/collections/__init__.py +0 -0
  317. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/concurrent/__init__.py +0 -0
  318. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
  319. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/ctypes/__init__.py +0 -0
  320. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/cycler/__init__.py +0 -0
  321. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/email/__init__.py +0 -0
  322. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/__init__.py +0 -0
  323. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/config/__init__.py +0 -0
  324. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
  325. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
  326. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/initializers/__init__.py +0 -0
  327. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
  328. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
  329. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/registry/__init__.py +0 -0
  330. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/representation/__init__.py +0 -0
  331. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
  332. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/html/__init__.py +0 -0
  333. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/importlib/__init__.py +0 -0
  334. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
  335. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
  336. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/jinja2/__init__.py +0 -0
  337. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/json/__init__.py +0 -0
  338. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/logging/__init__.py +0 -0
  339. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/markdown_it/__init__.py +0 -0
  340. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/markdown_it/common/__init__.py +0 -0
  341. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/markdown_it/helpers/__init__.py +0 -0
  342. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/markdown_it/presets/__init__.py +0 -0
  343. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/markdown_it/rules_block/__init__.py +0 -0
  344. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/markdown_it/rules_core/__init__.py +0 -0
  345. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/markdown_it/rules_inline/__init__.py +0 -0
  346. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
  347. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
  348. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
  349. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
  350. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
  351. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
  352. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
  353. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
  354. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/mdurl/__init__.py +0 -0
  355. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
  356. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/__init__.py +0 -0
  357. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
  358. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
  359. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
  360. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
  361. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
  362. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
  363. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
  364. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
  365. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
  366. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
  367. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
  368. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
  369. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
  370. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
  371. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
  372. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
  373. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
  374. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
  375. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/os/__init__.py +0 -0
  376. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/packaging/__init__.py +0 -0
  377. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pydantic/__init__.py +0 -0
  378. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pydantic/_internal/__init__.py +0 -0
  379. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pydantic/deprecated/__init__.py +0 -0
  380. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pydantic/plugin/__init__.py +0 -0
  381. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pydantic/v1/__init__.py +0 -0
  382. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pydantic_core/__init__.py +0 -0
  383. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
  384. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
  385. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
  386. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/rich/__init__.py +0 -0
  387. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/sys/__init__.py +0 -0
  388. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/typing_inspection/__init__.py +0 -0
  389. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/unittest/__init__.py +0 -0
  390. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/urllib/__init__.py +0 -0
  391. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/xml/__init__.py +0 -0
  392. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
  393. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
  394. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
  395. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/yaml/__init__.py +0 -0
  396. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/zipfile/__init__.py +0 -0
  397. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
  398. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/zoneinfo/__init__.py +0 -0
  399. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/__init__.py +0 -0
  400. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/__init__.py +0 -0
  401. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/__pycache__/__init__.py +0 -0
  402. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/_apply_config_mapping.py +0 -0
  403. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/base.py +0 -0
  404. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/composite.py +0 -0
  405. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/dummy.py +0 -0
  406. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/evo_params.py +0 -0
  407. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/evonet.py +0 -0
  408. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/netvector.py +0 -0
  409. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/representation/vector.py +0 -0
  410. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/utils/README.md +0 -0
  411. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/utils/__init__.py +0 -0
  412. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/utils/__pycache__/__init__.py +0 -0
  413. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/utils/benchmarks.py +0 -0
  414. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/utils/config_loader.py +0 -0
  415. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/utils/fitness.py +0 -0
  416. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/utils/history_logger.py +0 -0
  417. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/utils/loss_functions.py +0 -0
  418. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/utils/parallel.py +0 -0
  419. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/utils/plotting.py +0 -0
  420. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/utils/random.py +0 -0
  421. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib/utils/registry.py +0 -0
  422. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib.egg-info/dependency_links.txt +0 -0
  423. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/evolib.egg-info/top_level.txt +0 -0
  424. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/01_basic_usage/01_getting_started.py +0 -0
  425. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/01_basic_usage/02_mutation.py +0 -0
  426. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/01_basic_usage/03_population_mutation.py +0 -0
  427. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/01_basic_usage/04_fitness.py +0 -0
  428. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/02_strategies/01_step_by_step_evolution.py +0 -0
  429. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/02_strategies/02_mu_lambda_step.py +0 -0
  430. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/02_strategies/03_mu_lambda.py +0 -0
  431. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/02_strategies/04_flexible.py +0 -0
  432. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/03_comparisons/01_history.py +0 -0
  433. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/03_comparisons/02_plotting.py +0 -0
  434. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/03_comparisons/03_compare_runs.py +0 -0
  435. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/03_comparisons/04_exponential_decay_vs_static.py +0 -0
  436. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/03_comparisons/05_adaptive_global_vs_static.py +0 -0
  437. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/03_comparisons/06_adaptive_individual_vs_static.py +0 -0
  438. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/03_comparisons/07_selection_comparison.py +0 -0
  439. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/03_comparisons/08_selection_pressure.py +0 -0
  440. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/03_comparisons/09_selection_vs_mutation_pressure.py +0 -0
  441. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/03_comparisons/10_selection_stochastic_vs_deterministic.py +0 -0
  442. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/03_comparisons/11_crossover_comparison.py +0 -0
  443. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/04_function_approximation/01_polynomial_sine.py +0 -0
  444. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/04_function_approximation/02_sine_point_approximation.py +0 -0
  445. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/04_function_approximation/03_approximation_with_noise.py +0 -0
  446. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/05_advanced_topics/01_fitness_landscape_exploration.py +0 -0
  447. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/05_advanced_topics/02_rosenbrock_surface_path.py +0 -0
  448. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/05_advanced_topics/03_vector_control.py +0 -0
  449. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/05_advanced_topics/04_vector_control_with_obstacles.py +0 -0
  450. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/05_advanced_topics/05_piecewise_linear_xsys.py +0 -0
  451. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/05_advanced_topics/06_evolving_mutation_strength_as_a_module.py +0 -0
  452. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/06_netvector/01_netvector_sine_approximation.py +0 -0
  453. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/06_netvector/02_netvector_modulated_output.py +0 -0
  454. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/06_netvector/03_netvector_gain_and_bias.py +0 -0
  455. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/07_evonet/00_identity_test.py +0 -0
  456. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/07_evonet/01_sine_approximation.py +0 -0
  457. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/07_evonet/02_image_approximation.py +0 -0
  458. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/07_evonet/03_structural_xor.py +0 -0
  459. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/07_evonet/04_recurrent_bit_prediction.py +0 -0
  460. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/07_evonet/05_recurrent_timeseries.py +0 -0
  461. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/07_evonet/06_recurrent_indicator.py +0 -0
  462. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/07_evonet/06_recurrent_indicator_01.py +0 -0
  463. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/07_evonet/06_recurrent_indicator_02.py +0 -0
  464. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/07_evonet/06_recurrent_trading.py +0 -0
  465. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/examples/07_evonet/07_recurrent_trading_01.py +0 -0
  466. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/setup.cfg +0 -0
  467. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/tests/test_benchmarks.py +0 -0
  468. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/tests/test_config_loader.py +0 -0
  469. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/tests/test_elitism_preserves_best_fitness.py +0 -0
  470. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/tests/test_evonet_vector_io.py +0 -0
  471. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/tests/test_initializer_evonet.py +0 -0
  472. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/tests/test_initializer_net.py +0 -0
  473. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/tests/test_mutation.py +0 -0
  474. {evolib-0.2.0b3.dev1 → evolib-0.2.0b3.dev2}/tests/test_population.py +0 -0
  475. {evolib-0.2.0b3.dev1 → 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.0b3.dev1
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
@@ -48,6 +48,7 @@ Requires-Dist: types-PyYAML; extra == "dev"
48
48
  Requires-Dist: ray; extra == "dev"
49
49
  Requires-Dist: gymnasium; extra == "dev"
50
50
  Requires-Dist: imageio; extra == "dev"
51
+ Requires-Dist: Box2D; extra == "dev"
51
52
  Provides-Extra: docs
52
53
  Requires-Dist: sphinx; extra == "docs"
53
54
  Requires-Dist: sphinx-rtd-theme; extra == "docs"
@@ -79,6 +80,7 @@ EvoLib is a lightweight and transparent framework for evolutionary computation,
79
80
  - **Modularity**: mutation, selection, crossover, and parameter representations can be freely combined.
80
81
  - **Educational value**: examples and a clean API make it practical for illustrating evolutionary concepts.
81
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.
82
84
  - **Parallel evaluation (optional)**: basic support for [Ray](https://www.ray.io/) to speed up fitness evaluations.
83
85
  - **Type-checked**: PEP8 compliant, and consistent code style.
84
86
 
@@ -209,6 +211,27 @@ It can be applied to:
209
211
 
210
212
  ---
211
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
+
212
235
  ## Preview: Pygame Integration
213
236
 
214
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.
@@ -256,7 +279,7 @@ For deeper exploration, see the [full examples directory](examples/)
256
279
  - [X] Neuroevolution
257
280
  - [X] Topological Evolution (neurons, edges)
258
281
  - [X] Ray Support for Parallel Evaluation (early prototypes)
259
- - [ ] OpenAI Gymnasium / Gym Wrapper
282
+ - [X] OpenAI Gymnasium / Gym Wrapper
260
283
  - [ ] Advanced Visualization
261
284
  - [ ] Game Environment Integration (pygame, PettingZoo - early prototypes)
262
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,7 +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)
200
- - [ ] OpenAI Gymnasium / Gym Wrapper
222
+ - [X] OpenAI Gymnasium / Gym Wrapper
201
223
  - [ ] Advanced Visualization
202
224
  - [ ] Game Environment Integration (pygame, PettingZoo - early prototypes)
203
225
 
@@ -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
@@ -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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: evolib
3
- Version: 0.2.0b3.dev1
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
@@ -48,6 +48,7 @@ Requires-Dist: types-PyYAML; extra == "dev"
48
48
  Requires-Dist: ray; extra == "dev"
49
49
  Requires-Dist: gymnasium; extra == "dev"
50
50
  Requires-Dist: imageio; extra == "dev"
51
+ Requires-Dist: Box2D; extra == "dev"
51
52
  Provides-Extra: docs
52
53
  Requires-Dist: sphinx; extra == "docs"
53
54
  Requires-Dist: sphinx-rtd-theme; extra == "docs"
@@ -79,6 +80,7 @@ EvoLib is a lightweight and transparent framework for evolutionary computation,
79
80
  - **Modularity**: mutation, selection, crossover, and parameter representations can be freely combined.
80
81
  - **Educational value**: examples and a clean API make it practical for illustrating evolutionary concepts.
81
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.
82
84
  - **Parallel evaluation (optional)**: basic support for [Ray](https://www.ray.io/) to speed up fitness evaluations.
83
85
  - **Type-checked**: PEP8 compliant, and consistent code style.
84
86
 
@@ -209,6 +211,27 @@ It can be applied to:
209
211
 
210
212
  ---
211
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
+
212
235
  ## Preview: Pygame Integration
213
236
 
214
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.
@@ -256,7 +279,7 @@ For deeper exploration, see the [full examples directory](examples/)
256
279
  - [X] Neuroevolution
257
280
  - [X] Topological Evolution (neurons, edges)
258
281
  - [X] Ray Support for Parallel Evaluation (early prototypes)
259
- - [ ] OpenAI Gymnasium / Gym Wrapper
282
+ - [X] OpenAI Gymnasium / Gym Wrapper
260
283
  - [ ] Advanced Visualization
261
284
  - [ ] Game Environment Integration (pygame, PettingZoo - early prototypes)
262
285
 
@@ -456,8 +456,11 @@ examples/07_evonet/06_recurrent_indicator_01.py
456
456
  examples/07_evonet/06_recurrent_indicator_02.py
457
457
  examples/07_evonet/06_recurrent_trading.py
458
458
  examples/07_evonet/07_recurrent_trading_01.py
459
- examples/08_envs/01_cartpole.py
460
- examples/08_envs/02_lunar_lander.py
459
+ examples/08_gym/01_cartpole.py
460
+ examples/08_gym/01_frozen_lake.py
461
+ examples/08_gym/02_cliff_walking.py
462
+ examples/08_gym/02_lunar_lander.py
463
+ examples/08_gym/03_taxi.py
461
464
  tests/test_benchmarks.py
462
465
  tests/test_config_loader.py
463
466
  tests/test_elitism_preserves_best_fitness.py
@@ -12,6 +12,7 @@ types-PyYAML
12
12
  ray
13
13
  gymnasium
14
14
  imageio
15
+ Box2D
15
16
 
16
17
  [docs]
17
18
  sphinx
@@ -0,0 +1,32 @@
1
+ import numpy as np
2
+ from evolib import Population, Individual, resume_or_create, GymEnv
3
+
4
+ CONFIG_FILE = "./configs/01_cartpole.yaml"
5
+ FRAME_FOLDER = "01_frames"
6
+ MAX_STEPS = 500
7
+
8
+ # init environment once (can be reused for all individuals)
9
+ cartpole_env = GymEnv("CartPole-v1", max_steps=MAX_STEPS)
10
+
11
+
12
+ def eval_fitness(indiv: Individual) -> None:
13
+ """Assign fitness to an individual by running one CartPole episode."""
14
+ fitness = cartpole_env.evaluate(indiv, module="brain")
15
+ indiv.fitness = -fitness
16
+
17
+
18
+ def on_generation_end(pop: Population) -> None:
19
+ best = pop.best()
20
+ gif = cartpole_env.visualize(best, pop.generation_num,
21
+ filename=f"{FRAME_FOLDER}/gen_{pop.generation_num:03d}.gif")
22
+ print(f"Saved: {gif}")
23
+
24
+
25
+ if __name__ == "__main__":
26
+ pop = resume_or_create(
27
+ CONFIG_FILE,
28
+ fitness_function=eval_fitness,
29
+ run_name="08_cartpole",
30
+ )
31
+
32
+ pop.run(verbosity=1, on_generation_end=on_generation_end)
@@ -0,0 +1,52 @@
1
+ """
2
+ Example: Training on the FrozenLake-v1 environment.
3
+
4
+ FrozenLake is a task where the agent must reach the goal while
5
+ avoiding holes on a slippery surface.
6
+ This example demonstrates how stochastic transitions make
7
+ evolutionary training noisy and challenging.
8
+ """
9
+
10
+ from evolib import GymEnv, Individual, Population, resume_or_create
11
+
12
+ CONFIG_FILE = "./configs/01_frozen_lake.yaml"
13
+ FRAME_FOLDER = "01_frames"
14
+ MAX_STEPS = 150
15
+
16
+ # init environment once (can be reused for all individuals)
17
+ gym_env = GymEnv("FrozenLake-v1", max_steps=MAX_STEPS, is_slippery=True, map_name="8x8")
18
+
19
+
20
+ def eval_fitness(indiv: Individual) -> None:
21
+ """
22
+ Assign fitness to an individual by running several FrozenLake episodes.
23
+
24
+ The agent controls discrete moves (left, down, right, up) on an 8x8 grid. Fitness is
25
+ defined as the negative average reward across 5 episodes, encouraging robust
26
+ policies that consistently reach the goal while avoiding holes.
27
+ """
28
+
29
+ fitness = gym_env.evaluate(indiv, module="brain", episodes=5)
30
+ indiv.fitness = -fitness
31
+
32
+
33
+ def on_generation_end(pop: Population) -> None:
34
+ """Visualize the best individual of the current generation as a GIF."""
35
+
36
+ best = pop.best()
37
+ gif = gym_env.visualize(
38
+ best,
39
+ pop.generation_num,
40
+ filename=f"{FRAME_FOLDER}/gen_{pop.generation_num:03d}.gif",
41
+ )
42
+ print(f"Saved: {gif}")
43
+
44
+
45
+ if __name__ == "__main__":
46
+ pop = resume_or_create(
47
+ CONFIG_FILE,
48
+ fitness_function=eval_fitness,
49
+ run_name="FrozenLake-v1",
50
+ )
51
+
52
+ pop.run(verbosity=1, on_generation_end=on_generation_end)
@@ -0,0 +1,51 @@
1
+ """
2
+ Example: Training on the CliffWalking-v1 environment.
3
+
4
+ This setup illustrates why CliffWalking is considered an
5
+ "anti-evolution" benchmark: progress appears rarely and
6
+ suboptimal strategies may dominate due to the reward structure.
7
+ """
8
+
9
+ from evolib import GymEnv, Individual, Population, resume_or_create
10
+
11
+ CONFIG_FILE = "./configs/02_cliff_walking.yaml"
12
+ FRAME_FOLDER = "02_frames"
13
+ MAX_STEPS = 100
14
+
15
+ # Initialize the environment once (can be reused for all individuals)
16
+ gym_env = GymEnv("CliffWalking-v1", max_steps=MAX_STEPS)
17
+
18
+
19
+ def eval_fitness(indiv: Individual) -> None:
20
+ """
21
+ Evaluate the fitness of an individual in the CliffWalking-v1 environment.
22
+
23
+ The environment returns cumulative rewards (≤ 0).
24
+ To align with EvoLib's convention of minimizing fitness,
25
+ the reward is negated: higher rewards (closer to 0) become
26
+ smaller fitness values and are therefore preferred.
27
+ """
28
+ reward = gym_env.evaluate(indiv, module="brain")
29
+ indiv.fitness = -reward
30
+
31
+
32
+ def on_generation_end(pop: Population) -> None:
33
+ """Visualize the best individual of the current generation as a GIF."""
34
+
35
+ best = pop.best()
36
+ gif = gym_env.visualize(
37
+ best,
38
+ pop.generation_num,
39
+ filename=f"{FRAME_FOLDER}/gen_{pop.generation_num:03d}.gif",
40
+ )
41
+ print(f"Saved: {gif}")
42
+
43
+
44
+ if __name__ == "__main__":
45
+ pop = resume_or_create(
46
+ CONFIG_FILE,
47
+ fitness_function=eval_fitness,
48
+ run_name="CliffWalking-v1",
49
+ )
50
+
51
+ pop.run(verbosity=1, on_generation_end=on_generation_end)
@@ -14,6 +14,14 @@ def eval_lunar_fitness(indiv: Individual) -> None:
14
14
  fitness = lunar_env.evaluate(indiv, module="brain")
15
15
  indiv.fitness = -fitness
16
16
 
17
+
18
+ def on_generation_end(pop: Population) -> None:
19
+ if pop.generation_num % 20 == 0 or pop.generation_num == pop.max_generations:
20
+ best = pop.best()
21
+ gif = cartpole_env.visualize(best, pop.generation_num,
22
+ filename=f"{FRAME_FOLDER}/gen_{pop.generation_num:03d}.gif")
23
+ print(f"Saved: {gif}")
24
+
17
25
  if __name__ == "__main__":
18
26
  pop = resume_or_create(
19
27
  CONFIG_FILE,
@@ -0,0 +1,85 @@
1
+ """
2
+ """
3
+ import numpy as np
4
+ from evolib import GymEnv, Individual, Population, resume_or_create
5
+
6
+ CONFIG_FILE = "./configs/03_taxi.yaml"
7
+ FRAME_FOLDER = "03_frames"
8
+ MAX_STEPS = 150
9
+
10
+ # init environment once (can be reused for all individuals)
11
+ gym_env = GymEnv("Taxi-v3", max_steps=MAX_STEPS)
12
+
13
+
14
+ def eval_fitness(indiv: Individual, episodes: int = 5) -> None:
15
+ """
16
+ Evaluate an individual in the Taxi-v3 environment with reward shaping,
17
+ averaged across multiple episodes.
18
+ """
19
+ taxi_env = gym_env.env.unwrapped
20
+ total_reward = 0.0
21
+
22
+ for _ in range(episodes):
23
+ obs, _ = gym_env.env.reset()
24
+ ep_reward = 0.0
25
+
26
+ for _ in range(gym_env.max_steps):
27
+ # --- Choose action from network ---
28
+ action_vec = indiv.para["brain"].net.calc([float(obs)])
29
+ action = int(np.argmax(action_vec))
30
+
31
+ # --- Decode current state ---
32
+ old_taxi_row, old_taxi_col, pass_loc, dest_idx = taxi_env.decode(obs)
33
+
34
+ # Target = passenger before pickup, else destination
35
+ if pass_loc != 4:
36
+ target_row, target_col = taxi_env.locs[pass_loc]
37
+ else:
38
+ target_row, target_col = taxi_env.locs[dest_idx]
39
+ old_dist = abs(old_taxi_row - target_row) + abs(old_taxi_col - target_col)
40
+
41
+ # --- Step ---
42
+ obs, reward, terminated, truncated, _ = gym_env.env.step(action)
43
+ ep_reward += reward
44
+
45
+ # --- Shaping ---
46
+ if reward == -10:
47
+ ep_reward -= 5.0
48
+
49
+ new_taxi_row, new_taxi_col, pass_loc, dest_idx = taxi_env.decode(obs)
50
+ if pass_loc != 4:
51
+ target_row, target_col = taxi_env.locs[pass_loc]
52
+ else:
53
+ target_row, target_col = taxi_env.locs[dest_idx]
54
+ new_dist = abs(new_taxi_row - target_row) + abs(new_taxi_col - target_col)
55
+
56
+ ep_reward += (old_dist - new_dist) * 0.2
57
+
58
+ if terminated or truncated:
59
+ break
60
+
61
+ total_reward += ep_reward
62
+
63
+ # Average fitness across episodes
64
+ indiv.fitness = -total_reward / episodes
65
+
66
+ def on_generation_end(pop: Population) -> None:
67
+ """Visualize the best individual of the current generation as a GIF."""
68
+
69
+ best = pop.best()
70
+ gif = gym_env.visualize(
71
+ best,
72
+ pop.generation_num,
73
+ filename=f"{FRAME_FOLDER}/gen_{pop.generation_num:03d}.gif",
74
+ )
75
+ print(f"Saved: {gif}")
76
+
77
+
78
+ if __name__ == "__main__":
79
+ pop = resume_or_create(
80
+ CONFIG_FILE,
81
+ fitness_function=eval_fitness,
82
+ run_name="Taxi-v3",
83
+ )
84
+
85
+ pop.run(verbosity=1, on_generation_end=on_generation_end)
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "evolib"
7
- version = "0.2.0b3dev1"
7
+ version = "0.2.0b3dev2"
8
8
  description = "A modular framework for evolutionary strategies and neuroevolution."
9
9
  authors = [
10
10
  { name = "EvoLib", email = "evolib@dismail.de" }
@@ -38,7 +38,8 @@ dev = [
38
38
  "types-PyYAML",
39
39
  "ray",
40
40
  "gymnasium",
41
- "imageio"
41
+ "imageio",
42
+ "Box2D"
42
43
  ]
43
44
  docs = [
44
45
  "sphinx",