continual-foragax 0.8.2__tar.gz → 0.9.0__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.8.2 → continual_foragax-0.9.0}/PKG-INFO +10 -1
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/README.md +9 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/pyproject.toml +2 -2
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/continual_foragax.egg-info/PKG-INFO +10 -1
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/env.py +52 -5
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/tests/test_foragax.py +166 -1
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/setup.cfg +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/continual_foragax.egg-info/SOURCES.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/continual_foragax.egg-info/dependency_links.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/continual_foragax.egg-info/entry_points.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/continual_foragax.egg-info/requires.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/continual_foragax.egg-info/top_level.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/__init__.py +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID100897.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID100928.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID100929.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID100930.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID100931.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106714.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106715.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106716.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106717.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106718.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106930.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106931.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106932.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106933.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106934.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106935.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106936.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106937.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106938.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106939.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106940.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106941.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106942.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106943.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106994.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106995.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106996.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106997.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106998.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106999.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107000.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107001.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107002.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107003.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107004.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107005.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107006.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107007.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107008.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107009.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107010.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107011.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107012.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107013.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107014.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107015.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107016.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107017.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107018.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107019.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107020.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107021.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107022.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107023.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107024.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107025.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107026.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107027.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107028.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107029.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107030.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107031.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107032.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107033.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107034.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107035.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107036.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107037.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107038.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107039.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107040.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107041.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107042.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107043.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107044.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107045.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107046.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107047.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107048.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107049.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107050.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107051.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107052.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107053.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107054.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107055.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107056.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107057.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107058.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107059.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107060.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107061.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107062.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107063.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107064.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107065.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107066.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107067.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107068.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107069.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107070.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107071.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID115808.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID115812.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID146811.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156831.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156835.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156839.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156843.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156847.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156851.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156855.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156859.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156863.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156867.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156871.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156875.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156879.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156883.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156887.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/elements.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/metadata.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/data/ECA_non-blended_custom/sources.txt +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/objects.py +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/registry.py +0 -0
- {continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/foragax/weather.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: continual-foragax
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.9.0
|
4
4
|
Summary: A continual reinforcement learning benchmark
|
5
5
|
Author-email: Steven Tang <stang5@ualberta.ca>
|
6
6
|
Requires-Python: >=3.8
|
@@ -119,3 +119,12 @@ class into registry configs or construct environments programmatically.
|
|
119
119
|
## Development
|
120
120
|
|
121
121
|
Run unit tests via pytest.
|
122
|
+
|
123
|
+
## Acknowledgments
|
124
|
+
|
125
|
+
We acknowledge the data providers in the ECA&D project. Klein Tank, A.M.G. and
|
126
|
+
Coauthors, 2002. Daily dataset of 20th-century surface air temperature and
|
127
|
+
precipitation series for the European Climate Assessment. Int. J. of Climatol.,
|
128
|
+
22, 1441-1453.
|
129
|
+
|
130
|
+
Data and metadata available at https://www.ecad.eu
|
@@ -104,3 +104,12 @@ class into registry configs or construct environments programmatically.
|
|
104
104
|
## Development
|
105
105
|
|
106
106
|
Run unit tests via pytest.
|
107
|
+
|
108
|
+
## Acknowledgments
|
109
|
+
|
110
|
+
We acknowledge the data providers in the ECA&D project. Klein Tank, A.M.G. and
|
111
|
+
Coauthors, 2002. Daily dataset of 20th-century surface air temperature and
|
112
|
+
precipitation series for the European Climate Assessment. Int. J. of Climatol.,
|
113
|
+
22, 1441-1453.
|
114
|
+
|
115
|
+
Data and metadata available at https://www.ecad.eu
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[project]
|
2
2
|
name = "continual-foragax"
|
3
|
-
version = "0.
|
3
|
+
version = "0.9.0"
|
4
4
|
description = "A continual reinforcement learning benchmark"
|
5
5
|
readme = "README.md"
|
6
6
|
authors = [
|
@@ -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.
|
33
|
+
version = "0.9.0"
|
34
34
|
tag_format = "$version"
|
35
35
|
version_files = ["pyproject.toml"]
|
36
36
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: continual-foragax
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.9.0
|
4
4
|
Summary: A continual reinforcement learning benchmark
|
5
5
|
Author-email: Steven Tang <stang5@ualberta.ca>
|
6
6
|
Requires-Python: >=3.8
|
@@ -119,3 +119,12 @@ class into registry configs or construct environments programmatically.
|
|
119
119
|
## Development
|
120
120
|
|
121
121
|
Run unit tests via pytest.
|
122
|
+
|
123
|
+
## Acknowledgments
|
124
|
+
|
125
|
+
We acknowledge the data providers in the ECA&D project. Klein Tank, A.M.G. and
|
126
|
+
Coauthors, 2002. Daily dataset of 20th-century surface air temperature and
|
127
|
+
precipitation series for the European Climate Assessment. Int. J. of Climatol.,
|
128
|
+
22, 1441-1453.
|
129
|
+
|
130
|
+
Data and metadata available at https://www.ecad.eu
|
@@ -380,22 +380,69 @@ class ForagaxEnv(environment.Environment):
|
|
380
380
|
class ForagaxObjectEnv(ForagaxEnv):
|
381
381
|
"""Foragax environment with object-based aperture observation."""
|
382
382
|
|
383
|
+
def __init__(
|
384
|
+
self,
|
385
|
+
size: Union[Tuple[int, int], int] = (10, 10),
|
386
|
+
aperture_size: Union[Tuple[int, int], int] = (5, 5),
|
387
|
+
objects: Tuple[BaseForagaxObject, ...] = (),
|
388
|
+
biomes: Tuple[Biome, ...] = (Biome(object_frequencies=()),),
|
389
|
+
):
|
390
|
+
super().__init__(size, aperture_size, objects, biomes)
|
391
|
+
|
392
|
+
# Compute unique colors and mapping for partial observability
|
393
|
+
# Exclude EMPTY (index 0) from color channels
|
394
|
+
object_colors_no_empty = self.object_colors[1:]
|
395
|
+
|
396
|
+
# Find unique colors in order of first appearance
|
397
|
+
unique_colors = []
|
398
|
+
color_indices = jnp.zeros(len(object_colors_no_empty), dtype=int)
|
399
|
+
color_map = {}
|
400
|
+
next_channel = 0
|
401
|
+
|
402
|
+
for i, color in enumerate(object_colors_no_empty):
|
403
|
+
color_tuple = tuple(color.tolist())
|
404
|
+
if color_tuple not in color_map:
|
405
|
+
color_map[color_tuple] = next_channel
|
406
|
+
unique_colors.append(color)
|
407
|
+
next_channel += 1
|
408
|
+
color_indices = color_indices.at[i].set(color_map[color_tuple])
|
409
|
+
|
410
|
+
self.unique_colors = jnp.array(unique_colors)
|
411
|
+
self.num_color_channels = len(unique_colors)
|
412
|
+
# color_indices maps from object_id-1 to color_channel_index
|
413
|
+
self.object_to_color_map = color_indices
|
414
|
+
|
383
415
|
def get_obs(self, state: EnvState, params: EnvParams, key=None) -> jax.Array:
|
384
|
-
num_obj_types = len(self.object_ids)
|
385
416
|
# Decode grid for observation
|
386
417
|
obs_grid = jnp.maximum(0, state.object_grid)
|
387
418
|
aperture = self._get_aperture(obs_grid, state.pos)
|
388
419
|
aperture = jnp.flip(aperture, axis=0)
|
389
|
-
|
390
|
-
|
420
|
+
|
421
|
+
# Handle case with no objects (only EMPTY)
|
422
|
+
if self.num_color_channels == 0:
|
423
|
+
return jnp.zeros(aperture.shape + (0,), dtype=jnp.float32)
|
424
|
+
|
425
|
+
# Map object IDs to color channel indices
|
426
|
+
# aperture contains object IDs (0 = EMPTY, 1+ = objects)
|
427
|
+
# For EMPTY (0), we want no color channel activated
|
428
|
+
# For objects (1+), map to color channel using object_to_color_map
|
429
|
+
color_channels = jnp.where(
|
430
|
+
aperture == 0,
|
431
|
+
-1, # Special value for EMPTY
|
432
|
+
jnp.take(self.object_to_color_map, aperture - 1, axis=0),
|
433
|
+
)
|
434
|
+
|
435
|
+
# Create one-hot encoding for color channels
|
436
|
+
# jax.nn.one_hot produces all zeros for -1 (EMPTY positions)
|
437
|
+
obs = jax.nn.one_hot(color_channels, self.num_color_channels, axis=-1)
|
438
|
+
|
391
439
|
return obs
|
392
440
|
|
393
441
|
def observation_space(self, params: EnvParams) -> spaces.Box:
|
394
|
-
num_obj_types = len(self.object_ids)
|
395
442
|
obs_shape = (
|
396
443
|
self.aperture_size[0],
|
397
444
|
self.aperture_size[1],
|
398
|
-
|
445
|
+
self.num_color_channels,
|
399
446
|
)
|
400
447
|
return spaces.Box(0, 1, obs_shape, float)
|
401
448
|
|
@@ -9,7 +9,16 @@ from foragax.env import (
|
|
9
9
|
ForagaxRGBEnv,
|
10
10
|
ForagaxWorldEnv,
|
11
11
|
)
|
12
|
-
from foragax.objects import
|
12
|
+
from foragax.objects import (
|
13
|
+
FLOWER,
|
14
|
+
LARGE_MOREL,
|
15
|
+
MEDIUM_MOREL,
|
16
|
+
MOREL,
|
17
|
+
OYSTER,
|
18
|
+
THORNS,
|
19
|
+
WALL,
|
20
|
+
DefaultForagaxObject,
|
21
|
+
)
|
13
22
|
|
14
23
|
|
15
24
|
def test_observation_shape():
|
@@ -423,6 +432,162 @@ def test_generate_objects_in_biome():
|
|
423
432
|
assert thorns_id not in unique_objects
|
424
433
|
|
425
434
|
|
435
|
+
def test_color_based_partial_observability():
|
436
|
+
"""Test that objects with the same color are grouped into the same observation channel."""
|
437
|
+
env = ForagaxObjectEnv(
|
438
|
+
size=(10, 10),
|
439
|
+
aperture_size=(5, 5),
|
440
|
+
objects=(MOREL, LARGE_MOREL, MEDIUM_MOREL, FLOWER),
|
441
|
+
)
|
442
|
+
params = env.default_params
|
443
|
+
key = jax.random.key(0)
|
444
|
+
|
445
|
+
# Check that morels (all same color) use 1 channel, plus flower = 2 total
|
446
|
+
assert env.num_color_channels == 2
|
447
|
+
|
448
|
+
# Create a state with different morels and a flower
|
449
|
+
state = env.reset(key, params)[1]
|
450
|
+
|
451
|
+
# Manually place objects
|
452
|
+
grid = jnp.zeros((10, 10), dtype=int)
|
453
|
+
grid = grid.at[5, 5].set(1) # MOREL
|
454
|
+
grid = grid.at[5, 6].set(2) # LARGE_MOREL
|
455
|
+
grid = grid.at[5, 7].set(3) # MEDIUM_MOREL
|
456
|
+
grid = grid.at[6, 5].set(4) # FLOWER
|
457
|
+
state = state.replace(object_grid=grid)
|
458
|
+
|
459
|
+
obs = env.get_obs(state, params)
|
460
|
+
|
461
|
+
# All morels should activate the same channel (channel 0 for brown)
|
462
|
+
# Flower should activate channel 1 (green)
|
463
|
+
center_obs = obs[2, 2, :] # MOREL at center
|
464
|
+
morel_obs = obs[2, 3, :] # LARGE_MOREL
|
465
|
+
med_morel_obs = obs[2, 4, :] # MEDIUM_MOREL
|
466
|
+
flower_obs = obs[1, 2, :] # FLOWER (flipped coordinates)
|
467
|
+
|
468
|
+
# All morels should have the same observation (channel 0 activated)
|
469
|
+
chex.assert_trees_all_equal(center_obs, jnp.array([1.0, 0.0]))
|
470
|
+
chex.assert_trees_all_equal(center_obs, morel_obs)
|
471
|
+
chex.assert_trees_all_equal(center_obs, med_morel_obs)
|
472
|
+
|
473
|
+
# Flower should have different observation (channel 1 activated)
|
474
|
+
chex.assert_trees_all_equal(flower_obs, jnp.array([0.0, 1.0]))
|
475
|
+
|
476
|
+
|
477
|
+
def test_color_channel_mapping():
|
478
|
+
"""Test that the color channel mapping is correct."""
|
479
|
+
env = ForagaxObjectEnv(
|
480
|
+
size=(10, 10),
|
481
|
+
aperture_size=(3, 3),
|
482
|
+
objects=(WALL, FLOWER, THORNS),
|
483
|
+
)
|
484
|
+
|
485
|
+
# WALL (gray), FLOWER (green), THORNS (red) - all different colors
|
486
|
+
assert env.num_color_channels == 3
|
487
|
+
|
488
|
+
# Check that unique colors are correctly identified in order of first appearance
|
489
|
+
expected_colors = jnp.array(
|
490
|
+
[
|
491
|
+
[127, 127, 127], # gray (WALL) - appears first
|
492
|
+
[0, 255, 0], # green (FLOWER) - appears second
|
493
|
+
[255, 0, 0], # red (THORNS) - appears third
|
494
|
+
]
|
495
|
+
)
|
496
|
+
chex.assert_trees_all_equal(env.unique_colors, expected_colors)
|
497
|
+
|
498
|
+
|
499
|
+
def test_same_color_objects_same_channel():
|
500
|
+
"""Test that objects with identical colors produce identical observations."""
|
501
|
+
obj1 = DefaultForagaxObject(name="obj1", color=(100, 50, 25))
|
502
|
+
obj2 = DefaultForagaxObject(name="obj2", color=(100, 50, 25)) # Same color
|
503
|
+
obj3 = DefaultForagaxObject(name="obj3", color=(200, 100, 50)) # Different color
|
504
|
+
|
505
|
+
env = ForagaxObjectEnv(
|
506
|
+
size=(7, 7),
|
507
|
+
aperture_size=(3, 3),
|
508
|
+
objects=(obj1, obj2, obj3),
|
509
|
+
)
|
510
|
+
params = env.default_params
|
511
|
+
|
512
|
+
# Should have 2 color channels
|
513
|
+
assert env.num_color_channels == 2
|
514
|
+
|
515
|
+
# Create test state
|
516
|
+
key = jax.random.key(0)
|
517
|
+
state = env.reset(key, params)[1]
|
518
|
+
|
519
|
+
# Place objects
|
520
|
+
grid = jnp.zeros((7, 7), dtype=int)
|
521
|
+
grid = grid.at[3, 3].set(1) # obj1
|
522
|
+
grid = grid.at[3, 4].set(2) # obj2 (same color as obj1)
|
523
|
+
grid = grid.at[4, 3].set(3) # obj3 (different color)
|
524
|
+
state = state.replace(object_grid=grid)
|
525
|
+
|
526
|
+
obs = env.get_obs(state, params)
|
527
|
+
|
528
|
+
# obj1 and obj2 should have identical observations
|
529
|
+
obj1_obs = obs[1, 1, :] # Center
|
530
|
+
obj2_obs = obs[1, 2, :] # Right of center
|
531
|
+
obj3_obs = obs[2, 1, :] # Below center
|
532
|
+
|
533
|
+
chex.assert_trees_all_equal(obj1_obs, obj2_obs)
|
534
|
+
assert not jnp.allclose(obj1_obs, obj3_obs)
|
535
|
+
|
536
|
+
|
537
|
+
def test_empty_environment_observation():
|
538
|
+
"""Test observation shape when no objects are present."""
|
539
|
+
env = ForagaxObjectEnv(
|
540
|
+
size=(5, 5),
|
541
|
+
aperture_size=(3, 3),
|
542
|
+
objects=(), # No objects
|
543
|
+
)
|
544
|
+
params = env.default_params
|
545
|
+
key = jax.random.key(0)
|
546
|
+
obs, state = env.reset(key, params)
|
547
|
+
|
548
|
+
# Should have 0 color channels
|
549
|
+
assert env.num_color_channels == 0
|
550
|
+
assert obs.shape == (3, 3, 0)
|
551
|
+
|
552
|
+
|
553
|
+
def test_single_color_all_objects():
|
554
|
+
"""Test when all objects have the same color."""
|
555
|
+
# Create multiple objects with same color
|
556
|
+
from foragax.objects import DefaultForagaxObject
|
557
|
+
|
558
|
+
obj1 = DefaultForagaxObject(name="obj1", color=(50, 100, 150))
|
559
|
+
obj2 = DefaultForagaxObject(name="obj2", color=(50, 100, 150))
|
560
|
+
obj3 = DefaultForagaxObject(name="obj3", color=(50, 100, 150))
|
561
|
+
|
562
|
+
env = ForagaxObjectEnv(
|
563
|
+
size=(7, 7),
|
564
|
+
aperture_size=(3, 3),
|
565
|
+
objects=(obj1, obj2, obj3),
|
566
|
+
)
|
567
|
+
params = env.default_params
|
568
|
+
|
569
|
+
# Should have 1 color channel
|
570
|
+
assert env.num_color_channels == 1
|
571
|
+
|
572
|
+
# Create test state
|
573
|
+
key = jax.random.key(0)
|
574
|
+
state = env.reset(key, params)[1]
|
575
|
+
|
576
|
+
# Place all objects
|
577
|
+
grid = jnp.zeros((7, 7), dtype=int)
|
578
|
+
grid = grid.at[3, 2].set(1) # obj1
|
579
|
+
grid = grid.at[3, 3].set(2) # obj2
|
580
|
+
grid = grid.at[3, 4].set(3) # obj3
|
581
|
+
state = state.replace(object_grid=grid)
|
582
|
+
|
583
|
+
obs = env.get_obs(state, params)
|
584
|
+
|
585
|
+
# All objects should activate the same channel
|
586
|
+
for i in range(3):
|
587
|
+
obj_obs = obs[1, i, :] # Row 1, columns 0-2
|
588
|
+
chex.assert_trees_all_equal(obj_obs, jnp.array([1.0]))
|
589
|
+
|
590
|
+
|
426
591
|
def test_benchmark_vision(benchmark):
|
427
592
|
env = ForagaxObjectEnv(size=7, aperture_size=3, objects=(WALL,))
|
428
593
|
params = env.default_params
|
File without changes
|
{continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/continual_foragax.egg-info/SOURCES.txt
RENAMED
File without changes
|
File without changes
|
{continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/continual_foragax.egg-info/entry_points.txt
RENAMED
File without changes
|
{continual_foragax-0.8.2 → continual_foragax-0.9.0}/src/continual_foragax.egg-info/requires.txt
RENAMED
File without changes
|
{continual_foragax-0.8.2 → continual_foragax-0.9.0}/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
|