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.
- {evolib-0.2.0b2.dev7/evolib.egg-info → evolib-0.2.0b3.dev2}/PKG-INFO +28 -1
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/README.md +23 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/config_guide.md +15 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/config_parameter.md +20 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/index.md +2 -1
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/api.py +2 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/config/base_component_config.py +17 -2
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/config/evonet_component_config.py +3 -1
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/config/schema.py +30 -1
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/config/vector_component_config.py +3 -1
- evolib-0.2.0b3.dev2/evolib/envs/gym_wrapper.py +159 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/io/checkpoint.py +8 -8
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/evonet.py +2 -2
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/utils/benchmarks.py +5 -4
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/utils/plotting.py +2 -2
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2/evolib.egg-info}/PKG-INFO +28 -1
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib.egg-info/SOURCES.txt +6 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib.egg-info/requires.txt +4 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/07_evonet/02_image_approximation.py +1 -1
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/07_evonet/04_recurrent_bit_prediction.py +1 -3
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/07_evonet/05_recurrent_timeseries.py +78 -51
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/07_evonet/06_recurrent_indicator.py +1 -1
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/07_evonet/06_recurrent_trading.py +71 -20
- evolib-0.2.0b3.dev2/examples/08_gym/01_cartpole.py +32 -0
- evolib-0.2.0b3.dev2/examples/08_gym/01_frozen_lake.py +52 -0
- evolib-0.2.0b3.dev2/examples/08_gym/02_cliff_walking.py +51 -0
- evolib-0.2.0b3.dev2/examples/08_gym/02_lunar_lander.py +40 -0
- evolib-0.2.0b3.dev2/examples/08_gym/03_taxi.py +85 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/pyproject.toml +5 -1
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/LICENSE +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/MANIFEST.in +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_core_individual.rst +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_core_population.rst +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_operators_crossover.rst +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_operators_evonet_structural_mutation.rst +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_operators_mutation.rst +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_operators_replacement.rst +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_operators_reproduction.rst +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_operators_selection.rst +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_operators_strategy.rst +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_public_api.rst +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_representation_evonet.rst +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_representation_netvector.rst +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_representation_vector.rst +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_utils_benchmarks.rst +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_utils_history_logger.rst +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_utils_loss_functions.rst +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/api_utils_plotting.rst +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/conf.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/docs/getting_started.md +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/PIL/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/annotated_types/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/asyncio/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/collections/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/concurrent/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/ctypes/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/cycler/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/email/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/config/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/initializers/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/registry/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/representation/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/html/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/importlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/jinja2/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/json/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/logging/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/markdown_it/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/markdown_it/common/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/markdown_it/helpers/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/markdown_it/presets/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/markdown_it/rules_block/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/markdown_it/rules_core/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/markdown_it/rules_inline/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/mdurl/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/os/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/packaging/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pydantic/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pydantic/_internal/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pydantic/deprecated/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pydantic/plugin/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pydantic/v1/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pydantic_core/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/rich/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/sys/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/typing_inspection/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/unittest/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/urllib/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/xml/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/yaml/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/zipfile/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/3.12/zoneinfo/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/.mypy_cache/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/config/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/config/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/config/component_registry.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/PIL/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/asyncio/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/collections/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/concurrent/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/ctypes/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/cycler/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/email/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/evolib/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/html/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/importlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/jinja2/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/json/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/logging/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/os/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/packaging/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/sys/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/unittest/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/urllib/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/xml/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/yaml/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/zipfile/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/.mypy_cache/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/README.md +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/individual.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/core/population.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/globals/README.md +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/globals/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/globals/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/globals/numeric.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/PIL/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/asyncio/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/collections/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/concurrent/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/ctypes/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/cycler/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/email/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/evolib/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/evolib/initializers/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/html/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/importlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/jinja2/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/json/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/logging/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/os/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/packaging/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/sys/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/unittest/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/urllib/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/xml/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/yaml/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/zipfile/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/.mypy_cache/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/evonet_initializers.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/net_initializers.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/registry.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/initializers/vector_initializers.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/interfaces/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/interfaces/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/interfaces/enum_helpers.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/interfaces/enums.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/interfaces/structs.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/interfaces/types.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/io/serialization.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/operators/README.md +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/operators/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/operators/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/operators/crossover.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/operators/evonet_structural_mutation.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/operators/mutation.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/operators/replacement.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/operators/reproduction.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/operators/selection.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/operators/strategy.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/registry/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/registry/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/registry/replacement_registry.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/registry/selection_registry.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/registry/strategy_registry.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/PIL/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/_typeshed/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/annotated_types/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/asyncio/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/collections/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/concurrent/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/concurrent/futures/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/ctypes/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/cycler/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/email/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/config/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/core/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/globals/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/initializers/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/interfaces/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/operators/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/registry/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/representation/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/evolib/utils/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/html/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/importlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/importlib/metadata/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/importlib/resources/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/jinja2/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/json/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/logging/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/markdown_it/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/markdown_it/common/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/markdown_it/helpers/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/markdown_it/presets/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/markdown_it/rules_block/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/markdown_it/rules_core/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/markdown_it/rules_inline/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/markupsafe/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/matplotlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/matplotlib/_api/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/matplotlib/axes/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/matplotlib/backends/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/matplotlib/projections/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/matplotlib/style/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/matplotlib/tri/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/mdurl/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/multiprocessing/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/_core/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/_typing/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/_utils/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/char/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/core/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/f2py/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/fft/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/lib/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/linalg/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/ma/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/matrixlib/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/polynomial/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/random/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/rec/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/strings/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/testing/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/testing/_private/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/numpy/typing/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/os/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/packaging/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pydantic/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pydantic/_internal/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pydantic/deprecated/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pydantic/plugin/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pydantic/v1/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pydantic_core/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pyexpat/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pyparsing/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/pyparsing/diagram/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/rich/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/sys/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/typing_inspection/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/unittest/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/urllib/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/xml/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/xml/etree/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/xml/parsers/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/xml/parsers/expat/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/yaml/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/zipfile/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/zipfile/_path/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/3.12/zoneinfo/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/.mypy_cache/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/_apply_config_mapping.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/base.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/composite.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/dummy.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/evo_params.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/netvector.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/representation/vector.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/utils/README.md +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/utils/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/utils/__pycache__/__init__.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/utils/config_loader.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/utils/fitness.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/utils/history_logger.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/utils/loss_functions.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/utils/parallel.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/utils/random.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib/utils/registry.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib.egg-info/dependency_links.txt +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/evolib.egg-info/top_level.txt +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/01_basic_usage/01_getting_started.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/01_basic_usage/02_mutation.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/01_basic_usage/03_population_mutation.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/01_basic_usage/04_fitness.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/02_strategies/01_step_by_step_evolution.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/02_strategies/02_mu_lambda_step.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/02_strategies/03_mu_lambda.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/02_strategies/04_flexible.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/03_comparisons/01_history.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/03_comparisons/02_plotting.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/03_comparisons/03_compare_runs.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/03_comparisons/04_exponential_decay_vs_static.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/03_comparisons/05_adaptive_global_vs_static.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/03_comparisons/06_adaptive_individual_vs_static.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/03_comparisons/07_selection_comparison.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/03_comparisons/08_selection_pressure.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/03_comparisons/09_selection_vs_mutation_pressure.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/03_comparisons/10_selection_stochastic_vs_deterministic.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/03_comparisons/11_crossover_comparison.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/04_function_approximation/01_polynomial_sine.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/04_function_approximation/02_sine_point_approximation.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/04_function_approximation/03_approximation_with_noise.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/05_advanced_topics/01_fitness_landscape_exploration.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/05_advanced_topics/02_rosenbrock_surface_path.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/05_advanced_topics/03_vector_control.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/05_advanced_topics/04_vector_control_with_obstacles.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/05_advanced_topics/05_piecewise_linear_xsys.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/05_advanced_topics/06_evolving_mutation_strength_as_a_module.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/06_netvector/01_netvector_sine_approximation.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/06_netvector/02_netvector_modulated_output.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/06_netvector/03_netvector_gain_and_bias.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/07_evonet/00_identity_test.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/07_evonet/01_sine_approximation.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/07_evonet/03_structural_xor.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/07_evonet/06_recurrent_indicator_01.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/07_evonet/06_recurrent_indicator_02.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/examples/07_evonet/07_recurrent_trading_01.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/setup.cfg +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/tests/test_benchmarks.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/tests/test_config_loader.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/tests/test_elitism_preserves_best_fitness.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/tests/test_evonet_vector_io.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/tests/test_initializer_evonet.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/tests/test_initializer_net.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/tests/test_mutation.py +0 -0
- {evolib-0.2.0b2.dev7 → evolib-0.2.0b3.dev2}/tests/test_population.py +0 -0
- {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.
|
|
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
|
-
- [
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
93
|
-
pop.set_fitness_function(
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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=
|
|
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
|
|
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.
|
|
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
|
|
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:
|
|
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 .
|
|
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.
|
|
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
|