continual-foragax 0.9.0__tar.gz → 0.10.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.9.0 → continual_foragax-0.10.1}/PKG-INFO +1 -1
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/pyproject.toml +2 -2
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/continual_foragax.egg-info/PKG-INFO +1 -1
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/continual_foragax.egg-info/SOURCES.txt +2 -0
- continual_foragax-0.10.1/src/foragax/colors.py +74 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/env.py +27 -6
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/objects.py +1 -1
- continual_foragax-0.10.1/src/foragax/rendering.py +74 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/tests/test_foragax.py +16 -3
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/README.md +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/setup.cfg +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/continual_foragax.egg-info/dependency_links.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/continual_foragax.egg-info/entry_points.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/continual_foragax.egg-info/requires.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/continual_foragax.egg-info/top_level.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/__init__.py +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID100897.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID100928.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID100929.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID100930.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID100931.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106714.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106715.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106716.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106717.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106718.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106930.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106931.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106932.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106933.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106934.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106935.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106936.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106937.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106938.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106939.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106940.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106941.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106942.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106943.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106994.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106995.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106996.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106997.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106998.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID106999.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107000.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107001.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107002.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107003.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107004.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107005.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107006.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107007.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107008.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107009.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107010.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107011.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107012.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107013.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107014.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107015.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107016.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107017.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107018.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107019.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107020.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107021.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107022.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107023.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107024.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107025.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107026.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107027.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107028.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107029.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107030.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107031.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107032.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107033.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107034.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107035.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107036.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107037.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107038.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107039.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107040.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107041.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107042.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107043.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107044.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107045.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107046.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107047.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107048.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107049.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107050.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107051.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107052.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107053.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107054.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107055.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107056.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107057.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107058.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107059.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107060.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107061.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107062.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107063.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107064.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107065.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107066.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107067.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107068.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107069.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107070.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID107071.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID115808.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID115812.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID146811.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156831.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156835.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156839.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156843.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156847.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156851.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156855.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156859.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156863.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156867.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156871.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156875.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156879.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156883.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/TG_SOUID156887.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/elements.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/metadata.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/data/ECA_non-blended_custom/sources.txt +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/registry.py +0 -0
- {continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/foragax/weather.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
[project]
|
2
2
|
name = "continual-foragax"
|
3
|
-
version = "0.
|
3
|
+
version = "0.10.1"
|
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.10.1"
|
34
34
|
tag_format = "$version"
|
35
35
|
version_files = ["pyproject.toml"]
|
36
36
|
|
{continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/continual_foragax.egg-info/SOURCES.txt
RENAMED
@@ -7,9 +7,11 @@ src/continual_foragax.egg-info/entry_points.txt
|
|
7
7
|
src/continual_foragax.egg-info/requires.txt
|
8
8
|
src/continual_foragax.egg-info/top_level.txt
|
9
9
|
src/foragax/__init__.py
|
10
|
+
src/foragax/colors.py
|
10
11
|
src/foragax/env.py
|
11
12
|
src/foragax/objects.py
|
12
13
|
src/foragax/registry.py
|
14
|
+
src/foragax/rendering.py
|
13
15
|
src/foragax/weather.py
|
14
16
|
src/foragax/data/ECA_non-blended_custom/TG_SOUID100897.txt
|
15
17
|
src/foragax/data/ECA_non-blended_custom/TG_SOUID100928.txt
|
@@ -0,0 +1,74 @@
|
|
1
|
+
"""Color utility functions for Foragax."""
|
2
|
+
|
3
|
+
import jax
|
4
|
+
import jax.numpy as jnp
|
5
|
+
|
6
|
+
|
7
|
+
def hsv_to_rgb(h: jax.Array, s: float = 1.0, v: float = 1.0) -> jax.Array:
|
8
|
+
"""Convert HSV color values to RGB.
|
9
|
+
|
10
|
+
Args:
|
11
|
+
h: Hue values in range [0, 1]
|
12
|
+
s: Saturation value in range [0, 1], default 1.0
|
13
|
+
v: Value (brightness) in range [0, 1], default 1.0
|
14
|
+
|
15
|
+
Returns:
|
16
|
+
RGB values as array of shape (..., 3) with values in range [0, 1]
|
17
|
+
"""
|
18
|
+
c = v * s
|
19
|
+
x = c * (1 - jnp.abs(jnp.mod(h * 6, 2) - 1))
|
20
|
+
m = v - c
|
21
|
+
|
22
|
+
# Create RGB arrays
|
23
|
+
r = jnp.zeros_like(h)
|
24
|
+
g = jnp.zeros_like(h)
|
25
|
+
b = jnp.zeros_like(h)
|
26
|
+
|
27
|
+
# Sector 0: 0-60 degrees (red to yellow)
|
28
|
+
mask0 = h < 1 / 6
|
29
|
+
r = jnp.where(mask0, c, r)
|
30
|
+
g = jnp.where(mask0, x, g)
|
31
|
+
|
32
|
+
# Sector 1: 60-120 degrees (yellow to green)
|
33
|
+
mask1 = (h >= 1 / 6) & (h < 2 / 6)
|
34
|
+
r = jnp.where(mask1, x, r)
|
35
|
+
g = jnp.where(mask1, c, g)
|
36
|
+
|
37
|
+
# Sector 2: 120-180 degrees (green to cyan)
|
38
|
+
mask2 = (h >= 2 / 6) & (h < 3 / 6)
|
39
|
+
g = jnp.where(mask2, c, g)
|
40
|
+
b = jnp.where(mask2, x, b)
|
41
|
+
|
42
|
+
# Sector 3: 180-240 degrees (cyan to blue)
|
43
|
+
mask3 = (h >= 3 / 6) & (h < 4 / 6)
|
44
|
+
g = jnp.where(mask3, x, g)
|
45
|
+
b = jnp.where(mask3, c, b)
|
46
|
+
|
47
|
+
# Sector 4: 240-300 degrees (blue to magenta)
|
48
|
+
mask4 = (h >= 4 / 6) & (h < 5 / 6)
|
49
|
+
r = jnp.where(mask4, x, r)
|
50
|
+
b = jnp.where(mask4, c, b)
|
51
|
+
|
52
|
+
# Sector 5: 300-360 degrees (magenta to red)
|
53
|
+
mask5 = h >= 5 / 6
|
54
|
+
r = jnp.where(mask5, c, r)
|
55
|
+
b = jnp.where(mask5, x, b)
|
56
|
+
|
57
|
+
# Add value offset
|
58
|
+
rgb = jnp.stack([r + m, g + m, b + m], axis=-1)
|
59
|
+
return rgb
|
60
|
+
|
61
|
+
|
62
|
+
def hsv_to_rgb_255(h: jax.Array, s: float = 0.9, v: float = 0.8) -> jax.Array:
|
63
|
+
"""Convert HSV to RGB with values scaled to 0-255 range for image rendering.
|
64
|
+
|
65
|
+
Args:
|
66
|
+
h: Hue values in range [0, 1]
|
67
|
+
s: Saturation value, default 0.9
|
68
|
+
v: Value (brightness), default 0.8
|
69
|
+
|
70
|
+
Returns:
|
71
|
+
RGB values as uint8 array of shape (..., 3) with values in range [0, 255]
|
72
|
+
"""
|
73
|
+
rgb = hsv_to_rgb(h, s, v)
|
74
|
+
return (rgb * 255).astype(jnp.uint8)
|
@@ -14,6 +14,7 @@ from flax import struct
|
|
14
14
|
from gymnax.environments import environment, spaces
|
15
15
|
|
16
16
|
from foragax.objects import AGENT, EMPTY, BaseForagaxObject, WeatherObject
|
17
|
+
from foragax.rendering import apply_true_borders
|
17
18
|
from foragax.weather import get_temperature
|
18
19
|
|
19
20
|
|
@@ -295,7 +296,11 @@ class ForagaxEnv(environment.Environment):
|
|
295
296
|
@partial(jax.jit, static_argnames=("self", "render_mode"))
|
296
297
|
def render(self, state: EnvState, params: EnvParams, render_mode: str = "world"):
|
297
298
|
"""Render the environment state."""
|
298
|
-
|
299
|
+
is_world_mode = render_mode in ("world", "world_true")
|
300
|
+
is_aperture_mode = render_mode in ("aperture", "aperture_true")
|
301
|
+
is_true_mode = render_mode in ("world_true", "aperture_true")
|
302
|
+
|
303
|
+
if is_world_mode:
|
299
304
|
# Create an RGB image from the object grid
|
300
305
|
img = jnp.zeros((self.size[1], self.size[0], 3))
|
301
306
|
# Decode grid for rendering: non-negative are objects, negative are empty
|
@@ -341,15 +346,18 @@ class ForagaxEnv(environment.Environment):
|
|
341
346
|
jax.image.ResizeMethod.NEAREST,
|
342
347
|
)
|
343
348
|
|
349
|
+
if is_true_mode:
|
350
|
+
# Apply true object borders by overlaying true colors on border pixels
|
351
|
+
img = apply_true_borders(img, render_grid, self.size)
|
352
|
+
|
353
|
+
# Add grid lines for world mode
|
344
354
|
grid_color = jnp.zeros(3, dtype=jnp.uint8)
|
345
355
|
row_indices = jnp.arange(1, self.size[1]) * 24
|
346
356
|
col_indices = jnp.arange(1, self.size[0]) * 24
|
347
357
|
img = img.at[row_indices, :].set(grid_color)
|
348
358
|
img = img.at[:, col_indices].set(grid_color)
|
349
359
|
|
350
|
-
|
351
|
-
|
352
|
-
elif render_mode == "aperture":
|
360
|
+
elif is_aperture_mode:
|
353
361
|
obs_grid = jnp.maximum(0, state.object_grid)
|
354
362
|
aperture = self._get_aperture(obs_grid, state.pos)
|
355
363
|
aperture_one_hot = jax.nn.one_hot(aperture, len(self.object_ids))
|
@@ -366,16 +374,22 @@ class ForagaxEnv(environment.Environment):
|
|
366
374
|
jax.image.ResizeMethod.NEAREST,
|
367
375
|
)
|
368
376
|
|
377
|
+
if is_true_mode:
|
378
|
+
# Apply true object borders by overlaying true colors on border pixels
|
379
|
+
img = apply_true_borders(img, aperture, self.aperture_size)
|
380
|
+
|
381
|
+
# Add grid lines for aperture mode
|
369
382
|
grid_color = jnp.zeros(3, dtype=jnp.uint8)
|
370
383
|
row_indices = jnp.arange(1, self.aperture_size[0]) * 24
|
371
384
|
col_indices = jnp.arange(1, self.aperture_size[1]) * 24
|
372
385
|
img = img.at[row_indices, :].set(grid_color)
|
373
386
|
img = img.at[:, col_indices].set(grid_color)
|
374
387
|
|
375
|
-
return img
|
376
388
|
else:
|
377
389
|
raise ValueError(f"Unknown render_mode: {render_mode}")
|
378
390
|
|
391
|
+
return img
|
392
|
+
|
379
393
|
|
380
394
|
class ForagaxObjectEnv(ForagaxEnv):
|
381
395
|
"""Foragax environment with object-based aperture observation."""
|
@@ -478,7 +492,14 @@ class ForagaxWorldEnv(ForagaxEnv):
|
|
478
492
|
num_obj_types = len(self.object_ids)
|
479
493
|
# Decode grid for observation
|
480
494
|
obs_grid = jnp.maximum(0, state.object_grid)
|
481
|
-
obs =
|
495
|
+
obs = jnp.zeros((self.size[1], self.size[0], num_obj_types), dtype=jnp.float32)
|
496
|
+
|
497
|
+
num_object_channels = num_obj_types - 1
|
498
|
+
# create masks for all objects at once
|
499
|
+
object_ids = jnp.arange(1, num_obj_types)
|
500
|
+
object_masks = obs_grid[..., None] == object_ids[None, None, :]
|
501
|
+
obs = obs.at[:, :, :num_object_channels].set(object_masks.astype(float))
|
502
|
+
|
482
503
|
obs = obs.at[state.pos[1], state.pos[0], -1].set(1)
|
483
504
|
return obs
|
484
505
|
|
@@ -181,7 +181,7 @@ AGENT = DefaultForagaxObject(name="agent", blocking=True, color=(0, 0, 255))
|
|
181
181
|
|
182
182
|
|
183
183
|
def create_weather_objects(
|
184
|
-
file_index: int = 0, repeat: int =
|
184
|
+
file_index: int = 0, repeat: int = 500, multiplier: float = 1.0
|
185
185
|
):
|
186
186
|
"""Create HOT and COLD WeatherObject instances using the specified file.
|
187
187
|
|
@@ -0,0 +1,74 @@
|
|
1
|
+
"""Rendering utilities for Foragax environments."""
|
2
|
+
|
3
|
+
from typing import Tuple
|
4
|
+
|
5
|
+
import jax
|
6
|
+
import jax.numpy as jnp
|
7
|
+
|
8
|
+
from foragax.colors import hsv_to_rgb_255
|
9
|
+
|
10
|
+
|
11
|
+
def apply_true_borders(
|
12
|
+
base_img: jax.Array, true_grid: jax.Array, grid_size: Tuple[int, int]
|
13
|
+
) -> jax.Array:
|
14
|
+
"""Apply true object borders by overlaying HSV border colors on border pixels.
|
15
|
+
|
16
|
+
Args:
|
17
|
+
base_img: Base image with object colors
|
18
|
+
true_grid: Grid of object IDs for determining border colors
|
19
|
+
grid_size: (height, width) of the grid
|
20
|
+
|
21
|
+
Returns:
|
22
|
+
Image with HSV borders overlaid on border pixels
|
23
|
+
"""
|
24
|
+
# Create HSV border colors for each object type
|
25
|
+
num_objects = true_grid.max() + 1 # Assume object IDs start from 0
|
26
|
+
hues = jnp.linspace(0, 1, num_objects, endpoint=False)
|
27
|
+
|
28
|
+
# Convert HSV to RGB for border colors
|
29
|
+
border_colors = hsv_to_rgb_255(hues[true_grid])
|
30
|
+
|
31
|
+
# Resize border colors to match rendered image size
|
32
|
+
border_img = jax.image.resize(
|
33
|
+
border_colors,
|
34
|
+
(grid_size[0] * 24, grid_size[1] * 24, 3),
|
35
|
+
jax.image.ResizeMethod.NEAREST,
|
36
|
+
)
|
37
|
+
|
38
|
+
# Create border mask (2-pixel thick borders) - vectorized like grid lines
|
39
|
+
height, width = grid_size
|
40
|
+
img_height, img_width = height * 24, width * 24
|
41
|
+
|
42
|
+
border_mask = jnp.zeros((img_height, img_width), dtype=bool)
|
43
|
+
|
44
|
+
# Create border row and column indices for all cells at once
|
45
|
+
cell_rows = jnp.arange(height)
|
46
|
+
cell_cols = jnp.arange(width)
|
47
|
+
|
48
|
+
# Top border rows: 2 rows per cell
|
49
|
+
top_border_rows = cell_rows[:, None] * 24 + jnp.arange(2)[None, :]
|
50
|
+
top_border_rows_flat = top_border_rows.flatten()
|
51
|
+
|
52
|
+
# Bottom border rows: 2 rows per cell
|
53
|
+
bottom_border_rows = cell_rows[:, None] * 24 + 22 + jnp.arange(2)[None, :]
|
54
|
+
bottom_border_rows_flat = bottom_border_rows.flatten()
|
55
|
+
|
56
|
+
# Left border columns: 2 columns per cell
|
57
|
+
left_border_cols = cell_cols[:, None] * 24 + jnp.arange(2)[None, :]
|
58
|
+
left_border_cols_flat = left_border_cols.flatten()
|
59
|
+
|
60
|
+
# Right border columns: 2 columns per cell
|
61
|
+
right_border_cols = cell_cols[:, None] * 24 + 22 + jnp.arange(2)[None, :]
|
62
|
+
right_border_cols_flat = right_border_cols.flatten()
|
63
|
+
|
64
|
+
# Set top and bottom borders (full width rectangles)
|
65
|
+
all_border_rows = jnp.concatenate([top_border_rows_flat, bottom_border_rows_flat])
|
66
|
+
border_mask = border_mask.at[all_border_rows, :].set(True)
|
67
|
+
|
68
|
+
# Set left and right borders (full height rectangles)
|
69
|
+
all_border_cols = jnp.concatenate([left_border_cols_flat, right_border_cols_flat])
|
70
|
+
border_mask = border_mask.at[:, all_border_cols].set(True)
|
71
|
+
|
72
|
+
# Apply border mask: use HSV border colors for border pixels, base colors elsewhere
|
73
|
+
result_img = jnp.where(border_mask[..., None], border_img, base_img)
|
74
|
+
return result_img
|
@@ -13,7 +13,7 @@ from foragax.objects import (
|
|
13
13
|
FLOWER,
|
14
14
|
LARGE_MOREL,
|
15
15
|
MEDIUM_MOREL,
|
16
|
-
MOREL,
|
16
|
+
MOREL,
|
17
17
|
OYSTER,
|
18
18
|
THORNS,
|
19
19
|
WALL,
|
@@ -143,12 +143,25 @@ def test_rgb_observation_mode_large_aperture():
|
|
143
143
|
|
144
144
|
def test_world_observation_mode():
|
145
145
|
# can use world observation mode
|
146
|
-
env = ForagaxWorldEnv(
|
146
|
+
env = ForagaxWorldEnv(
|
147
|
+
size=(10, 10),
|
148
|
+
aperture_size=5,
|
149
|
+
objects=(WALL, FLOWER),
|
150
|
+
biomes=(Biome(object_frequencies=(0.1, 0.1)),),
|
151
|
+
)
|
147
152
|
params = env.default_params
|
148
153
|
key = jax.random.key(0)
|
149
154
|
obs, state = env.reset(key, params)
|
150
155
|
|
151
|
-
assert obs.shape == (10, 10,
|
156
|
+
assert obs.shape == (10, 10, 3)
|
157
|
+
# Check agent channel (last channel) is 0 except 1 at agent position
|
158
|
+
agent_channel = obs[:, :, 2]
|
159
|
+
assert jnp.sum(agent_channel) == 1
|
160
|
+
assert agent_channel[state.pos[1], state.pos[0]] == 1
|
161
|
+
|
162
|
+
# check non-zero values in other channels
|
163
|
+
assert jnp.sum(obs[:, :, 0]) > 0
|
164
|
+
assert jnp.sum(obs[:, :, 1]) > 0
|
152
165
|
|
153
166
|
|
154
167
|
def test_basic_movement():
|
File without changes
|
File without changes
|
File without changes
|
{continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/continual_foragax.egg-info/entry_points.txt
RENAMED
File without changes
|
{continual_foragax-0.9.0 → continual_foragax-0.10.1}/src/continual_foragax.egg-info/requires.txt
RENAMED
File without changes
|
{continual_foragax-0.9.0 → continual_foragax-0.10.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
|