continual-foragax 0.32.0__tar.gz → 0.32.1__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.
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/PKG-INFO +1 -6
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/pyproject.toml +3 -3
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/continual_foragax.egg-info/PKG-INFO +1 -6
- continual_foragax-0.32.1/src/continual_foragax.egg-info/requires.txt +4 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/env.py +45 -31
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/tests/test_foragax.py +108 -39
- continual_foragax-0.32.0/src/continual_foragax.egg-info/requires.txt +0 -10
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/README.md +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/setup.cfg +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/continual_foragax.egg-info/SOURCES.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/continual_foragax.egg-info/dependency_links.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/continual_foragax.egg-info/entry_points.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/continual_foragax.egg-info/top_level.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/__init__.py +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/colors.py +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID100897.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID100928.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID100929.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID100930.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID100931.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106714.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106715.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106716.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106717.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106718.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106930.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106931.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106932.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106933.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106934.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106935.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106936.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106937.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106938.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106939.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106940.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106941.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106942.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106943.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106994.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106995.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106996.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106997.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106998.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106999.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107000.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107001.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107002.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107003.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107004.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107005.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107006.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107007.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107008.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107009.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107010.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107011.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107012.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107013.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107014.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107015.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107016.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107017.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107018.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107019.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107020.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107021.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107022.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107023.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107024.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107025.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107026.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107027.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107028.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107029.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107030.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107031.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107032.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107033.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107034.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107035.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107036.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107037.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107038.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107039.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107040.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107041.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107042.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107043.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107044.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107045.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107046.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107047.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107048.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107049.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107050.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107051.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107052.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107053.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107054.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107055.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107056.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107057.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107058.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107059.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107060.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107061.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107062.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107063.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107064.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107065.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107066.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107067.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107068.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107069.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107070.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107071.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID115808.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID115812.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID146811.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156831.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156835.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156839.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156843.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156847.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156851.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156855.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156859.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156863.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156867.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156871.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156875.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156879.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156883.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156887.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/elements.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/metadata.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/data/ECA_non-blended_custom/sources.txt +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/objects.py +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/registry.py +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/rendering.py +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/foragax/weather.py +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/tests/test_benchmark.py +0 -0
- {continual_foragax-0.32.0 → continual_foragax-0.32.1}/tests/test_registry.py +0 -0
|
@@ -1,17 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: continual-foragax
|
|
3
|
-
Version: 0.32.
|
|
3
|
+
Version: 0.32.1
|
|
4
4
|
Summary: A continual reinforcement learning benchmark
|
|
5
5
|
Author-email: Steven Tang <stang5@ualberta.ca>
|
|
6
6
|
Requires-Python: >=3.8
|
|
7
7
|
Description-Content-Type: text/markdown
|
|
8
8
|
Requires-Dist: gymnax
|
|
9
9
|
Requires-Dist: six; python_version < "3.10"
|
|
10
|
-
Provides-Extra: dev
|
|
11
|
-
Requires-Dist: pre-commit; extra == "dev"
|
|
12
|
-
Requires-Dist: pytest; extra == "dev"
|
|
13
|
-
Requires-Dist: pytest-benchmark; extra == "dev"
|
|
14
|
-
Requires-Dist: ruff; extra == "dev"
|
|
15
10
|
|
|
16
11
|
# foragax
|
|
17
12
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "continual-foragax"
|
|
3
|
-
version = "0.32.
|
|
3
|
+
version = "0.32.1"
|
|
4
4
|
description = "A continual reinforcement learning benchmark"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
authors = [
|
|
@@ -12,7 +12,7 @@ dependencies = [
|
|
|
12
12
|
"six; python_version < '3.10'",
|
|
13
13
|
]
|
|
14
14
|
|
|
15
|
-
[
|
|
15
|
+
[dependency-groups]
|
|
16
16
|
dev = [
|
|
17
17
|
"pre-commit",
|
|
18
18
|
"pytest",
|
|
@@ -30,7 +30,7 @@ build-backend = "setuptools.build_meta"
|
|
|
30
30
|
[tool]
|
|
31
31
|
[tool.commitizen]
|
|
32
32
|
name = "cz_conventional_commits"
|
|
33
|
-
version = "0.32.
|
|
33
|
+
version = "0.32.1"
|
|
34
34
|
tag_format = "$version"
|
|
35
35
|
version_files = ["pyproject.toml"]
|
|
36
36
|
|
{continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/continual_foragax.egg-info/PKG-INFO
RENAMED
|
@@ -1,17 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: continual-foragax
|
|
3
|
-
Version: 0.32.
|
|
3
|
+
Version: 0.32.1
|
|
4
4
|
Summary: A continual reinforcement learning benchmark
|
|
5
5
|
Author-email: Steven Tang <stang5@ualberta.ca>
|
|
6
6
|
Requires-Python: >=3.8
|
|
7
7
|
Description-Content-Type: text/markdown
|
|
8
8
|
Requires-Dist: gymnax
|
|
9
9
|
Requires-Dist: six; python_version < "3.10"
|
|
10
|
-
Provides-Extra: dev
|
|
11
|
-
Requires-Dist: pre-commit; extra == "dev"
|
|
12
|
-
Requires-Dist: pytest; extra == "dev"
|
|
13
|
-
Requires-Dist: pytest-benchmark; extra == "dev"
|
|
14
|
-
Requires-Dist: ruff; extra == "dev"
|
|
15
10
|
|
|
16
11
|
# foragax
|
|
17
12
|
|
|
@@ -506,17 +506,6 @@ class ForagaxEnv(environment.Environment):
|
|
|
506
506
|
lambda: object_state,
|
|
507
507
|
)
|
|
508
508
|
|
|
509
|
-
# Clear color grid when object is collected
|
|
510
|
-
object_state = jax.lax.cond(
|
|
511
|
-
should_collect_now,
|
|
512
|
-
lambda: object_state.replace(
|
|
513
|
-
color=object_state.color.at[pos[1], pos[0]].set(
|
|
514
|
-
jnp.full((3,), 255, dtype=jnp.uint8)
|
|
515
|
-
)
|
|
516
|
-
),
|
|
517
|
-
lambda: object_state,
|
|
518
|
-
)
|
|
519
|
-
|
|
520
509
|
# 3.5. HANDLE OBJECT EXPIRY
|
|
521
510
|
# Only process expiry if there are objects that can expire
|
|
522
511
|
key, object_state = self.expire_objects(key, state, object_state)
|
|
@@ -648,12 +637,6 @@ class ForagaxEnv(environment.Environment):
|
|
|
648
637
|
rand_key,
|
|
649
638
|
)
|
|
650
639
|
|
|
651
|
-
# Clear color grid when object expires
|
|
652
|
-
empty_color = jnp.full((3,), 255, dtype=jnp.uint8)
|
|
653
|
-
new_obj_state = new_obj_state.replace(
|
|
654
|
-
color=new_obj_state.color.at[y, x].set(empty_color)
|
|
655
|
-
)
|
|
656
|
-
|
|
657
640
|
return new_obj_state
|
|
658
641
|
|
|
659
642
|
def no_op():
|
|
@@ -1114,8 +1097,16 @@ class ForagaxEnv(environment.Environment):
|
|
|
1114
1097
|
y_out = (y_coords < 0) | (y_coords >= self.size[1])
|
|
1115
1098
|
x_out = (x_coords < 0) | (x_coords >= self.size[0])
|
|
1116
1099
|
out_of_bounds = y_out | x_out
|
|
1117
|
-
|
|
1118
|
-
|
|
1100
|
+
|
|
1101
|
+
# Handle both object_id grids (2D) and color grids (3D)
|
|
1102
|
+
if len(values.shape) == 3:
|
|
1103
|
+
# Color grid: use PADDING color (0, 0, 0)
|
|
1104
|
+
padding_value = jnp.array([0, 0, 0], dtype=values.dtype)
|
|
1105
|
+
aperture = jnp.where(out_of_bounds[..., None], padding_value, values)
|
|
1106
|
+
else:
|
|
1107
|
+
# Object ID grid: use PADDING index
|
|
1108
|
+
padding_index = self.object_ids[-1]
|
|
1109
|
+
aperture = jnp.where(out_of_bounds, padding_index, values)
|
|
1119
1110
|
else:
|
|
1120
1111
|
aperture = values
|
|
1121
1112
|
|
|
@@ -1124,12 +1115,14 @@ class ForagaxEnv(environment.Environment):
|
|
|
1124
1115
|
def get_obs(self, state: EnvState, params: EnvParams, key=None) -> jax.Array:
|
|
1125
1116
|
"""Get observation based on observation_type and full_world."""
|
|
1126
1117
|
obs_grid = state.object_state.object_id
|
|
1118
|
+
color_grid = state.object_state.color
|
|
1127
1119
|
|
|
1128
1120
|
if self.full_world:
|
|
1129
1121
|
return self._get_world_obs(obs_grid, state)
|
|
1130
1122
|
else:
|
|
1131
1123
|
grid = self._get_aperture(obs_grid, state.pos)
|
|
1132
|
-
|
|
1124
|
+
color_grid = self._get_aperture(color_grid, state.pos)
|
|
1125
|
+
return self._get_aperture_obs(grid, color_grid, state)
|
|
1133
1126
|
|
|
1134
1127
|
def _get_world_obs(self, obs_grid: jax.Array, state: EnvState) -> jax.Array:
|
|
1135
1128
|
"""Get world observation."""
|
|
@@ -1146,12 +1139,14 @@ class ForagaxEnv(environment.Environment):
|
|
|
1146
1139
|
obs = obs.at[state.pos[1], state.pos[0], -1].set(1)
|
|
1147
1140
|
return obs
|
|
1148
1141
|
elif self.observation_type == "rgb":
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1142
|
+
# Use state colors directly (supports dynamic biomes)
|
|
1143
|
+
colors = state.object_state.color / 255.0
|
|
1144
|
+
|
|
1145
|
+
# Mask empty cells (object_id == 0) to white
|
|
1146
|
+
empty_mask = obs_grid == 0
|
|
1147
|
+
white_color = jnp.ones((self.size[1], self.size[0], 3), dtype=jnp.float32)
|
|
1148
|
+
obs = jnp.where(empty_mask[..., None], white_color, colors)
|
|
1149
|
+
|
|
1155
1150
|
return obs
|
|
1156
1151
|
elif self.observation_type == "color":
|
|
1157
1152
|
# Handle case with no objects (only EMPTY)
|
|
@@ -1168,17 +1163,24 @@ class ForagaxEnv(environment.Environment):
|
|
|
1168
1163
|
else:
|
|
1169
1164
|
raise ValueError(f"Unknown observation_type: {self.observation_type}")
|
|
1170
1165
|
|
|
1171
|
-
def _get_aperture_obs(
|
|
1166
|
+
def _get_aperture_obs(
|
|
1167
|
+
self, aperture: jax.Array, color_aperture: jax.Array, state: EnvState
|
|
1168
|
+
) -> jax.Array:
|
|
1172
1169
|
"""Get aperture observation."""
|
|
1173
1170
|
if self.observation_type == "object":
|
|
1174
1171
|
num_obj_types = len(self.object_ids)
|
|
1175
1172
|
obs = jax.nn.one_hot(aperture, num_obj_types, axis=-1)
|
|
1176
1173
|
return obs
|
|
1177
1174
|
elif self.observation_type == "rgb":
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1175
|
+
# Use the color aperture that was passed in
|
|
1176
|
+
aperture_colors = color_aperture / 255.0
|
|
1177
|
+
|
|
1178
|
+
# Mask empty cells (object_id == 0) to white
|
|
1179
|
+
empty_mask = aperture == 0
|
|
1180
|
+
white_color = jnp.ones(aperture_colors.shape, dtype=jnp.float32)
|
|
1181
|
+
|
|
1182
|
+
obs = jnp.where(empty_mask[..., None], white_color, aperture_colors)
|
|
1183
|
+
|
|
1182
1184
|
return obs
|
|
1183
1185
|
elif self.observation_type == "color":
|
|
1184
1186
|
# Handle case with no objects (only EMPTY)
|
|
@@ -1229,6 +1231,10 @@ class ForagaxEnv(environment.Environment):
|
|
|
1229
1231
|
if self.dynamic_biomes:
|
|
1230
1232
|
# Use per-instance colors from state
|
|
1231
1233
|
img = state.object_state.color.copy()
|
|
1234
|
+
# Mask empty cells (object_id == 0) to white
|
|
1235
|
+
empty_mask = state.object_state.object_id == 0
|
|
1236
|
+
white_color = jnp.array([255, 255, 255], dtype=jnp.uint8)
|
|
1237
|
+
img = jnp.where(empty_mask[..., None], white_color, img)
|
|
1232
1238
|
else:
|
|
1233
1239
|
# Use default object colors
|
|
1234
1240
|
img = jnp.zeros((self.size[1], self.size[0], 3))
|
|
@@ -1297,6 +1303,14 @@ class ForagaxEnv(environment.Environment):
|
|
|
1297
1303
|
)
|
|
1298
1304
|
img = state.object_state.color[y_coords_adj, x_coords_adj]
|
|
1299
1305
|
|
|
1306
|
+
# Mask empty cells (object_id == 0) to white
|
|
1307
|
+
aperture_object_ids = state.object_state.object_id[
|
|
1308
|
+
y_coords_adj, x_coords_adj
|
|
1309
|
+
]
|
|
1310
|
+
empty_mask = aperture_object_ids == 0
|
|
1311
|
+
white_color = jnp.array([255, 255, 255], dtype=jnp.uint8)
|
|
1312
|
+
img = jnp.where(empty_mask[..., None], white_color, img)
|
|
1313
|
+
|
|
1300
1314
|
if self.nowrap:
|
|
1301
1315
|
# For out-of-bounds, use padding object color
|
|
1302
1316
|
y_out = (y_coords < 0) | (y_coords >= self.size[1])
|
|
@@ -308,7 +308,7 @@ def test_respawn():
|
|
|
308
308
|
|
|
309
309
|
|
|
310
310
|
def test_random_respawn():
|
|
311
|
-
"""Test that an object
|
|
311
|
+
"""Test that an object can respawn at random empty locations within its biome."""
|
|
312
312
|
key = jax.random.key(0)
|
|
313
313
|
|
|
314
314
|
flower_random = DefaultForagaxObject(
|
|
@@ -329,46 +329,60 @@ def test_random_respawn():
|
|
|
329
329
|
observation_type="color",
|
|
330
330
|
)
|
|
331
331
|
params = env.default_params
|
|
332
|
-
_, state = env.reset(key, params)
|
|
333
332
|
|
|
334
333
|
flower_id = 1 # 0 is EMPTY
|
|
335
334
|
original_pos = jnp.array([3, 3])
|
|
336
335
|
|
|
337
|
-
#
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
336
|
+
# Test multiple times to verify randomness
|
|
337
|
+
timer_positions = []
|
|
338
|
+
for i in range(20):
|
|
339
|
+
key, reset_key = jax.random.split(key)
|
|
340
|
+
_, state = env.reset(reset_key, params)
|
|
341
|
+
|
|
342
|
+
# Place a flower and move the agent to it
|
|
343
|
+
grid = jnp.zeros((7, 7), dtype=int)
|
|
344
|
+
grid = grid.at[original_pos[1], original_pos[0]].set(flower_id)
|
|
345
|
+
# Add a wall to make sure it doesn't spawn there
|
|
346
|
+
grid = grid.at[4, 4].set(2) # Use a fixed ID for the wall
|
|
347
|
+
state = state.replace(
|
|
348
|
+
object_state=state.object_state.replace(object_id=grid),
|
|
349
|
+
pos=jnp.array([2, 3]),
|
|
350
|
+
)
|
|
345
351
|
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
352
|
+
# Collect the flower
|
|
353
|
+
key, step_key = jax.random.split(key)
|
|
354
|
+
_, new_state, reward, _, _ = env.step(step_key, state, Actions.RIGHT, params)
|
|
349
355
|
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
356
|
+
assert reward == flower_random.reward_val
|
|
357
|
+
# Original position should be empty
|
|
358
|
+
assert new_state.object_state.object_id[original_pos[1], original_pos[0]] == 0
|
|
353
359
|
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
assert not jnp.array_equal(timer_pos, original_pos)
|
|
360
|
+
# A timer should be placed somewhere (check respawn_timer instead of object_id)
|
|
361
|
+
assert jnp.sum(new_state.object_state.respawn_timer > 0) == 1
|
|
362
|
+
timer_pos_flat = jnp.argmax(new_state.object_state.respawn_timer)
|
|
363
|
+
timer_pos_array = jnp.unravel_index(timer_pos_flat, (7, 7))
|
|
364
|
+
timer_pos = (int(timer_pos_array[0]), int(timer_pos_array[1]))
|
|
360
365
|
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
366
|
+
# New position should be within the biome
|
|
367
|
+
assert timer_pos[0] >= biome.start[0] and timer_pos[0] < biome.stop[0]
|
|
368
|
+
assert timer_pos[1] >= biome.start[1] and timer_pos[1] < biome.stop[1]
|
|
364
369
|
|
|
365
|
-
|
|
366
|
-
|
|
370
|
+
# New position should be on an empty cell (not the wall)
|
|
371
|
+
assert timer_pos != (4, 4)
|
|
367
372
|
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
373
|
+
# Verify respawn_object_id is set correctly
|
|
374
|
+
assert (
|
|
375
|
+
new_state.object_state.respawn_object_id[timer_pos[0], timer_pos[1]]
|
|
376
|
+
== flower_id
|
|
377
|
+
)
|
|
378
|
+
|
|
379
|
+
timer_positions.append(timer_pos)
|
|
380
|
+
|
|
381
|
+
# Verify that we get multiple different positions (randomness works)
|
|
382
|
+
# With 20 trials and multiple valid positions, we should see at least 2 different locations
|
|
383
|
+
unique_positions = set(timer_positions)
|
|
384
|
+
assert len(unique_positions) >= 2, (
|
|
385
|
+
f"Expected at least 2 unique positions, got {len(unique_positions)}: {unique_positions}"
|
|
372
386
|
)
|
|
373
387
|
|
|
374
388
|
|
|
@@ -1774,7 +1788,7 @@ def test_object_no_individual_respawn():
|
|
|
1774
1788
|
|
|
1775
1789
|
|
|
1776
1790
|
def test_object_color_grid_cleared_on_collection():
|
|
1777
|
-
"""Test that
|
|
1791
|
+
"""Test that object colors are preserved in state but masked in rendering when collected."""
|
|
1778
1792
|
key = jax.random.key(0)
|
|
1779
1793
|
env = ForagaxEnv(
|
|
1780
1794
|
size=(7, 7),
|
|
@@ -1793,6 +1807,9 @@ def test_object_color_grid_cleared_on_collection():
|
|
|
1793
1807
|
flower_pos = flower_positions[0]
|
|
1794
1808
|
y, x = flower_pos
|
|
1795
1809
|
|
|
1810
|
+
# Store original color
|
|
1811
|
+
original_color = state.object_state.color[y, x].copy()
|
|
1812
|
+
|
|
1796
1813
|
# Move agent to flower and collect it
|
|
1797
1814
|
# Position agent above the flower so moving down collects it
|
|
1798
1815
|
state = state.replace(pos=jnp.array([x, y - 1]))
|
|
@@ -1801,10 +1818,15 @@ def test_object_color_grid_cleared_on_collection():
|
|
|
1801
1818
|
|
|
1802
1819
|
assert reward == FLOWER.reward_val
|
|
1803
1820
|
|
|
1804
|
-
#
|
|
1821
|
+
# NEW BEHAVIOR: Color is preserved in state (not cleared to white)
|
|
1805
1822
|
collected_color = state.object_state.color[y, x]
|
|
1806
|
-
|
|
1807
|
-
|
|
1823
|
+
chex.assert_trees_all_equal(collected_color, original_color)
|
|
1824
|
+
|
|
1825
|
+
# But object_id should be 0 (or timer should be set)
|
|
1826
|
+
assert (
|
|
1827
|
+
state.object_state.object_id[y, x] == 0
|
|
1828
|
+
or state.object_state.respawn_timer[y, x] > 0
|
|
1829
|
+
)
|
|
1808
1830
|
|
|
1809
1831
|
# Check that other positions with objects still have their colors
|
|
1810
1832
|
other_flower_positions = jnp.argwhere(
|
|
@@ -1814,11 +1836,31 @@ def test_object_color_grid_cleared_on_collection():
|
|
|
1814
1836
|
other_pos = other_flower_positions[0]
|
|
1815
1837
|
other_color = state.object_state.color[other_pos[0], other_pos[1]]
|
|
1816
1838
|
# Should not be the empty color
|
|
1839
|
+
expected_empty_color = jnp.array([255, 255, 255], dtype=jnp.uint8)
|
|
1817
1840
|
assert not jnp.allclose(other_color, expected_empty_color)
|
|
1818
1841
|
|
|
1842
|
+
# Test RGB observation: empty cells should appear white
|
|
1843
|
+
# Create an RGB environment with the same setup
|
|
1844
|
+
env_rgb = ForagaxEnv(
|
|
1845
|
+
size=(7, 7),
|
|
1846
|
+
objects=(FLOWER,),
|
|
1847
|
+
biomes=(Biome(object_frequencies=(1.0,)),),
|
|
1848
|
+
observation_type="rgb",
|
|
1849
|
+
dynamic_biomes=True,
|
|
1850
|
+
aperture_size=-1, # Use world view to get full grid observation
|
|
1851
|
+
)
|
|
1852
|
+
# Use the same state to get observation
|
|
1853
|
+
obs_rgb = env_rgb.get_obs(state, params)
|
|
1854
|
+
|
|
1855
|
+
# Check that the collected position shows white in RGB observation
|
|
1856
|
+
# RGB observations are normalized to [0, 1], so white is [1.0, 1.0, 1.0]
|
|
1857
|
+
collected_rgb = obs_rgb[y, x]
|
|
1858
|
+
expected_white_rgb = jnp.array([1.0, 1.0, 1.0], dtype=jnp.float32)
|
|
1859
|
+
chex.assert_trees_all_close(collected_rgb, expected_white_rgb, rtol=1e-5)
|
|
1860
|
+
|
|
1819
1861
|
|
|
1820
1862
|
def test_object_color_grid_cleared_on_expiry():
|
|
1821
|
-
"""Test that
|
|
1863
|
+
"""Test that object colors are preserved in state but masked in rendering when expired."""
|
|
1822
1864
|
# Create an object that expires quickly
|
|
1823
1865
|
expiring_obj = DefaultForagaxObject(
|
|
1824
1866
|
name="expiring",
|
|
@@ -1847,6 +1889,9 @@ def test_object_color_grid_cleared_on_expiry():
|
|
|
1847
1889
|
obj_pos = obj_positions[0]
|
|
1848
1890
|
y, x = obj_pos
|
|
1849
1891
|
|
|
1892
|
+
# Store original color
|
|
1893
|
+
original_color = state.object_state.color[y, x].copy()
|
|
1894
|
+
|
|
1850
1895
|
# Step until expiry (4 steps: expiry happens when age >= expiry_time)
|
|
1851
1896
|
for _ in range(4):
|
|
1852
1897
|
key, key_step = jax.random.split(key)
|
|
@@ -1854,10 +1899,34 @@ def test_object_color_grid_cleared_on_expiry():
|
|
|
1854
1899
|
key_step, state, Actions.DOWN, env.default_params
|
|
1855
1900
|
)
|
|
1856
1901
|
|
|
1857
|
-
#
|
|
1902
|
+
# NEW BEHAVIOR: Color is preserved in state (not cleared to white)
|
|
1858
1903
|
expired_color = state.object_state.color[y, x]
|
|
1859
|
-
|
|
1860
|
-
|
|
1904
|
+
chex.assert_trees_all_equal(expired_color, original_color)
|
|
1905
|
+
|
|
1906
|
+
# But object_id should be 0 (or timer should be set)
|
|
1907
|
+
assert (
|
|
1908
|
+
state.object_state.object_id[y, x] == 0
|
|
1909
|
+
or state.object_state.respawn_timer[y, x] > 0
|
|
1910
|
+
)
|
|
1911
|
+
|
|
1912
|
+
# Test RGB observation: empty/expired cells should appear white
|
|
1913
|
+
# Create an RGB environment with the same setup
|
|
1914
|
+
env_rgb = ForagaxEnv(
|
|
1915
|
+
size=(5, 5),
|
|
1916
|
+
aperture_size=-1, # Use world view to get full grid observation
|
|
1917
|
+
objects=(expiring_obj,),
|
|
1918
|
+
biomes=(Biome(object_frequencies=(0.5,)),),
|
|
1919
|
+
observation_type="rgb",
|
|
1920
|
+
dynamic_biomes=True,
|
|
1921
|
+
)
|
|
1922
|
+
# Use the same state to get observation
|
|
1923
|
+
obs_rgb = env_rgb.get_obs(state, env.default_params)
|
|
1924
|
+
|
|
1925
|
+
# Check that the expired position shows white in RGB observation
|
|
1926
|
+
# RGB observations are normalized to [0, 1], so white is [1.0, 1.0, 1.0]
|
|
1927
|
+
expired_rgb = obs_rgb[y, x]
|
|
1928
|
+
expected_white_rgb = jnp.array([1.0, 1.0, 1.0], dtype=jnp.float32)
|
|
1929
|
+
chex.assert_trees_all_close(expired_rgb, expected_white_rgb, rtol=1e-5)
|
|
1861
1930
|
|
|
1862
1931
|
|
|
1863
1932
|
def test_biome_regeneration_preserves_old_objects():
|
|
File without changes
|
|
File without changes
|
{continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/continual_foragax.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{continual_foragax-0.32.0 → continual_foragax-0.32.1}/src/continual_foragax.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|