# Laser Learning Environment (LLE)
Documentation: [https://yamoling.github.io/lle/](https://yamoling.github.io/lle/)
LLE is a fast Multi-Agent Reinforcement Learning environment written in Rust which has proven to be a difficult exploration benchmark so far. The agents start in the start tiles, must collect the gems and finish the game by reaching the exit tiles. There are five actions: North, South, East, West and Stay.
When an agent enters a laser of its own colour, it blocks it. Otherwise, it dies and the game ends.

# Quick start
## Installation
You can install the Laser Learning Environment with pip or poetry.
```bash
pip install laser-learning-environment # Latest stable release with pip
pip install git+https://github.com/yamoling/lle # latest push on master
```
## Usage
LLE can be used at two levels of abstraction: as an `RLEnv` for cooperative multi-agent reinforcement learning or as a `World` for many other purposes.
### For cooperative multi-agent reinforcement learning
The `LLE` class inherits from the `RLEnv` class in the [rlenv](https://github.com/yamoling/rlenv) framework. Here is an example with the following map: 
```python
from lle import LLE
env = LLE.from_str("S0 G X").single_objective()
done = truncated = False
obs, state = env.reset()
while not (done or truncated):
# env.render() # Uncomment to render
actions = env.sample_action()
obs, state, reward, done, truncated, info = env.step(actions)
```
### For other purposes or fine grained control
The `World` class provides fine grained control on the environment by exposing the state of the world and the events that happen when the agents move.
```python
from lle import World, Action, EventType
world = World("S0 G X") # Linear world with start S0, gem G and exit X
world.reset()
available_actions = world.available_actions()[0] # [Action.STAY, Action.EAST]
events = world.step([Action.EAST])
assert events[0].event_type == EventType.GEM_COLLECTED
events = world.step([Action.EAST])
assert events[0].event_type == EventType.AGENT_EXIT
```
You can also access and force the state of the world
```python
state = world.get_state()
...
events = world.set_state(state)
```
You can query the world on the tiles with `world.start_pos`, `world.exit_pos`, `world.gem_pos`, ...
## Citing our work
The environment has been presented at [EWRL 2023](https://openreview.net/pdf?id=IPfdjr4rIs) and at [BNAIC 2023](https://bnaic2023.tudelft.nl/static/media/BNAICBENELEARN_2023_paper_124.c9f5d29e757e5ee27c44.pdf) where it received the best paper award.
```
@inproceedings{molinghen2023lle,
title={Laser Learning Environment: A new environment for coordination-critical multi-agent tasks},
author={Molinghen, Yannick and Avalos, Raphaël and Van Achter, Mark and Nowé, Ann and Lenaerts, Tom},
year={2023},
series={BeNeLux Artificial Intelligence Conference},
booktitle={BNAIC 2023}
}
```
## Development
If you want to modify the environment, you can clone the repo, install the python dependencies then compile it with `maturin`. The below example assumes that you are using `uv` as package manager but it should work with `conda`, `poetry` or just `pip` as well.
```
git clone https://github.com/yamoling/lle
uv venv # create a virtual environment
source .venv/bin/activate
uv sync # install python dependencies
maturin dev # build and install lle in the venv
```
You can also re-generate the python bindings in the folder `python/lle` with
```bash
cargo run --bin stub-gen
```
## Tests
This project **does not** respect Rust unit tests convention and takes inspiration from [this structure](http://xion.io/post/code/rust-unit-test-placement.html). Unit tests are in the `src/unit_tests` folder and are explicitely linked to in each file with the `#path` directive.
Integration tests are written on the python side.
Run unit tests with
```bash
cargo test
```
Run integration tests with
```bash
maturin develop
pytest
```
Raw data
{
"_id": null,
"home_page": "https://github.com/yamoling/lle",
"name": "laser-learning-environment",
"maintainer": null,
"docs_url": null,
"requires_python": "<4,>=3.10",
"maintainer_email": null,
"keywords": "marl, rl, lle, laser, environment",
"author": null,
"author_email": "Yannick Molinghen <yannick.molinghen@ulb.be>",
"download_url": "https://files.pythonhosted.org/packages/01/e4/c4ddd2d8952456a278766eb074a63cbeccdfa2cdb6f3679d586a960eaf3a/laser_learning_environment-2.2.0.tar.gz",
"platform": null,
"description": "# Laser Learning Environment (LLE)\nDocumentation: [https://yamoling.github.io/lle/](https://yamoling.github.io/lle/)\n\nLLE is a fast Multi-Agent Reinforcement Learning environment written in Rust which has proven to be a difficult exploration benchmark so far. The agents start in the start tiles, must collect the gems and finish the game by reaching the exit tiles. There are five actions: North, South, East, West and Stay. \n\nWhen an agent enters a laser of its own colour, it blocks it. Otherwise, it dies and the game ends.\n\n\n\n# Quick start\n## Installation\nYou can install the Laser Learning Environment with pip or poetry.\n```bash\npip install laser-learning-environment # Latest stable release with pip\npip install git+https://github.com/yamoling/lle # latest push on master\n```\n\n## Usage\nLLE can be used at two levels of abstraction: as an `RLEnv` for cooperative multi-agent reinforcement learning or as a `World` for many other purposes.\n### For cooperative multi-agent reinforcement learning\nThe `LLE` class inherits from the `RLEnv` class in the [rlenv](https://github.com/yamoling/rlenv) framework. Here is an example with the following map: \n\n\n```python\nfrom lle import LLE\n\nenv = LLE.from_str(\"S0 G X\").single_objective()\ndone = truncated = False\nobs, state = env.reset()\nwhile not (done or truncated):\n # env.render() # Uncomment to render\n actions = env.sample_action()\n obs, state, reward, done, truncated, info = env.step(actions)\n```\n\n\n### For other purposes or fine grained control\nThe `World` class provides fine grained control on the environment by exposing the state of the world and the events that happen when the agents move.\n\n```python\nfrom lle import World, Action, EventType\n\nworld = World(\"S0 G X\") # Linear world with start S0, gem G and exit X\nworld.reset()\navailable_actions = world.available_actions()[0] # [Action.STAY, Action.EAST]\nevents = world.step([Action.EAST])\nassert events[0].event_type == EventType.GEM_COLLECTED\nevents = world.step([Action.EAST])\nassert events[0].event_type == EventType.AGENT_EXIT\n```\n\nYou can also access and force the state of the world\n```python\nstate = world.get_state()\n...\nevents = world.set_state(state)\n```\n\nYou can query the world on the tiles with `world.start_pos`, `world.exit_pos`, `world.gem_pos`, ...\n\n\n\n\n## Citing our work\nThe environment has been presented at [EWRL 2023](https://openreview.net/pdf?id=IPfdjr4rIs) and at [BNAIC 2023](https://bnaic2023.tudelft.nl/static/media/BNAICBENELEARN_2023_paper_124.c9f5d29e757e5ee27c44.pdf) where it received the best paper award.\n\n```\n@inproceedings{molinghen2023lle,\n title={Laser Learning Environment: A new environment for coordination-critical multi-agent tasks},\n author={Molinghen, Yannick and Avalos, Rapha\u00ebl and Van Achter, Mark and Now\u00e9, Ann and Lenaerts, Tom},\n year={2023},\n series={BeNeLux Artificial Intelligence Conference},\n booktitle={BNAIC 2023}\n}\n```\n\n## Development\nIf you want to modify the environment, you can clone the repo, install the python dependencies then compile it with `maturin`. The below example assumes that you are using `uv` as package manager but it should work with `conda`, `poetry` or just `pip` as well.\n```\ngit clone https://github.com/yamoling/lle\nuv venv # create a virtual environment\nsource .venv/bin/activate\nuv sync # install python dependencies\nmaturin dev # build and install lle in the venv\n```\n\nYou can also re-generate the python bindings in the folder `python/lle` with\n```bash\ncargo run --bin stub-gen\n```\n\n\n## Tests\nThis project **does not** respect Rust unit tests convention and takes inspiration from [this structure](http://xion.io/post/code/rust-unit-test-placement.html). Unit tests are in the `src/unit_tests` folder and are explicitely linked to in each file with the `#path` directive. \nIntegration tests are written on the python side.\n\nRun unit tests with \n```bash\ncargo test\n```\n\nRun integration tests with\n```bash\nmaturin develop\npytest\n```\n\n",
"bugtrack_url": null,
"license": null,
"summary": "Laser Learning Environment (LLE) for Multi-Agent Reinforcement Learning",
"version": "2.2.0",
"project_urls": {
"Homepage": "https://github.com/yamoling/lle",
"Source Code": "https://github.com/yamoling/lle"
},
"split_keywords": [
"marl",
" rl",
" lle",
" laser",
" environment"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "5d219430e11903ba23085cc66a2e680535c04be7f3a49d06a83a15bb5f61cdf3",
"md5": "4d631a4f42ea4d350dd1e5e88d83f4ff",
"sha256": "2362f97854fd8c1bd1da7e31cf9eb8136a9e0154a419f7528896a3d67766b3b5"
},
"downloads": -1,
"filename": "laser_learning_environment-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "4d631a4f42ea4d350dd1e5e88d83f4ff",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<4,>=3.10",
"size": 1618607,
"upload_time": "2025-02-24T15:41:39",
"upload_time_iso_8601": "2025-02-24T15:41:39.282873Z",
"url": "https://files.pythonhosted.org/packages/5d/21/9430e11903ba23085cc66a2e680535c04be7f3a49d06a83a15bb5f61cdf3/laser_learning_environment-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "8b8b8d1d8f48fe2fe4b19b354cabda1c02420d848844130cd476408205e616c9",
"md5": "6faacc1f4e2185ccf3c1a36e8bc40e8e",
"sha256": "5fc0982505db1c33b88b42cefb2b234fce748241c42a3d3a7e47619614107f23"
},
"downloads": -1,
"filename": "laser_learning_environment-2.2.0-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "6faacc1f4e2185ccf3c1a36e8bc40e8e",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<4,>=3.10",
"size": 1293624,
"upload_time": "2025-02-24T15:41:48",
"upload_time_iso_8601": "2025-02-24T15:41:48.865773Z",
"url": "https://files.pythonhosted.org/packages/8b/8b/8d1d8f48fe2fe4b19b354cabda1c02420d848844130cd476408205e616c9/laser_learning_environment-2.2.0-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5e9ae6f11127452ec2f2e7b532bfc887e8efad800c43f127e08b7491b7079dfb",
"md5": "853ce8f6ed5f2cfd880c64478f17dea2",
"sha256": "600b5c3178155adfabf3abfaf926a1126ac1d95bc3794f20f3d32c9c862fb191"
},
"downloads": -1,
"filename": "laser_learning_environment-2.2.0-cp311-cp311-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "853ce8f6ed5f2cfd880c64478f17dea2",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4,>=3.10",
"size": 1507438,
"upload_time": "2025-02-24T15:41:31",
"upload_time_iso_8601": "2025-02-24T15:41:31.696049Z",
"url": "https://files.pythonhosted.org/packages/5e/9a/e6f11127452ec2f2e7b532bfc887e8efad800c43f127e08b7491b7079dfb/laser_learning_environment-2.2.0-cp311-cp311-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a45b425fe03f901b034196563c4643925baaa997f8f1a14a505c444e7de0652a",
"md5": "6c4a11ff81f9c70109590dee7c6a8cc0",
"sha256": "a777c892e140d30a4321c1ee9ae144e218594de1648cd957be6de8a87df86d19"
},
"downloads": -1,
"filename": "laser_learning_environment-2.2.0-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "6c4a11ff81f9c70109590dee7c6a8cc0",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4,>=3.10",
"size": 1455152,
"upload_time": "2025-02-24T15:41:24",
"upload_time_iso_8601": "2025-02-24T15:41:24.647314Z",
"url": "https://files.pythonhosted.org/packages/a4/5b/425fe03f901b034196563c4643925baaa997f8f1a14a505c444e7de0652a/laser_learning_environment-2.2.0-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "be697ff024c770c72f76a3c8d20536f4e24a67662ca3f6441e9717f2364807f6",
"md5": "c21015a239cb8cec454b9d5c2fa69b6d",
"sha256": "94477fa696590cb9462a67e2899e2e89d93c700fd0b4b5ac40ede339c23ea274"
},
"downloads": -1,
"filename": "laser_learning_environment-2.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "c21015a239cb8cec454b9d5c2fa69b6d",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4,>=3.10",
"size": 1618287,
"upload_time": "2025-02-24T15:41:41",
"upload_time_iso_8601": "2025-02-24T15:41:41.618227Z",
"url": "https://files.pythonhosted.org/packages/be/69/7ff024c770c72f76a3c8d20536f4e24a67662ca3f6441e9717f2364807f6/laser_learning_environment-2.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "bac97e0c76ed3a07be76a7046f166af64b508bfff621405ace4e06cf2ae274fb",
"md5": "b8c41d47484784487297bca43899b914",
"sha256": "35d44b0ebf4fec7b1ccec9e3760d1a3babd9fe0595be8e12e80702dcbb0ef752"
},
"downloads": -1,
"filename": "laser_learning_environment-2.2.0-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "b8c41d47484784487297bca43899b914",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4,>=3.10",
"size": 1293255,
"upload_time": "2025-02-24T15:41:50",
"upload_time_iso_8601": "2025-02-24T15:41:50.933671Z",
"url": "https://files.pythonhosted.org/packages/ba/c9/7e0c76ed3a07be76a7046f166af64b508bfff621405ace4e06cf2ae274fb/laser_learning_environment-2.2.0-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9769eb701e83091498d7c7916128b1247b1d7128c1082485da585d0f7897a587",
"md5": "8496434f8a3cebe0dae6fbf3af4aa1fe",
"sha256": "e6c22cc5c517a923209814a31e7de7bc646038a3071f95e53b434457fd3ba9a2"
},
"downloads": -1,
"filename": "laser_learning_environment-2.2.0-cp312-cp312-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "8496434f8a3cebe0dae6fbf3af4aa1fe",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4,>=3.10",
"size": 1499710,
"upload_time": "2025-02-24T15:41:33",
"upload_time_iso_8601": "2025-02-24T15:41:33.129456Z",
"url": "https://files.pythonhosted.org/packages/97/69/eb701e83091498d7c7916128b1247b1d7128c1082485da585d0f7897a587/laser_learning_environment-2.2.0-cp312-cp312-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "71b79458f21f9e0795827811b6cba4f0ec1ecdd561bfcabed3bc0d4a5c164f7b",
"md5": "8966dbc604d2838e57018358248bae00",
"sha256": "c24cf9435909b51cfa0a3df8c2bbb87c5445db47e19452b084f4a485d9965133"
},
"downloads": -1,
"filename": "laser_learning_environment-2.2.0-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "8966dbc604d2838e57018358248bae00",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4,>=3.10",
"size": 1444980,
"upload_time": "2025-02-24T15:41:27",
"upload_time_iso_8601": "2025-02-24T15:41:27.358786Z",
"url": "https://files.pythonhosted.org/packages/71/b7/9458f21f9e0795827811b6cba4f0ec1ecdd561bfcabed3bc0d4a5c164f7b/laser_learning_environment-2.2.0-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e4d6f5972f7e856c22143322f50f252ca11e57eb0328e7739ff301371f1005f4",
"md5": "29d675259da0422f0499e42cfb2ebbf3",
"sha256": "55869943391fe43aec049cc331513977d51609e4712b80f8fdd83ebde013f3a5"
},
"downloads": -1,
"filename": "laser_learning_environment-2.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "29d675259da0422f0499e42cfb2ebbf3",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4,>=3.10",
"size": 1618509,
"upload_time": "2025-02-24T15:41:43",
"upload_time_iso_8601": "2025-02-24T15:41:43.870832Z",
"url": "https://files.pythonhosted.org/packages/e4/d6/f5972f7e856c22143322f50f252ca11e57eb0328e7739ff301371f1005f4/laser_learning_environment-2.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2c7fa5769877d91e1736e8b7b0c44dc5d285edea814f96a83eee1167c550f547",
"md5": "2f0908cc519be2454175cab1264ff3ec",
"sha256": "a4636bac4af55071efc8d366f982454b0d867372b06f041dc6b054295e0e361c"
},
"downloads": -1,
"filename": "laser_learning_environment-2.2.0-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "2f0908cc519be2454175cab1264ff3ec",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4,>=3.10",
"size": 1290991,
"upload_time": "2025-02-24T15:41:52",
"upload_time_iso_8601": "2025-02-24T15:41:52.338610Z",
"url": "https://files.pythonhosted.org/packages/2c/7f/a5769877d91e1736e8b7b0c44dc5d285edea814f96a83eee1167c550f547/laser_learning_environment-2.2.0-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7fbba01af66b960436136fe050a43b38873c5f0abac931e57eec1743fa1f6d41",
"md5": "01bcafaaa6e7b119cd9782b6e6308874",
"sha256": "7cbc73100d9cc14c53f1c3ec2d785a51aaeb22ad618290ba326915370f99a8a5"
},
"downloads": -1,
"filename": "laser_learning_environment-2.2.0-cp313-cp313-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "01bcafaaa6e7b119cd9782b6e6308874",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": "<4,>=3.10",
"size": 1498936,
"upload_time": "2025-02-24T15:41:35",
"upload_time_iso_8601": "2025-02-24T15:41:35.481964Z",
"url": "https://files.pythonhosted.org/packages/7f/bb/a01af66b960436136fe050a43b38873c5f0abac931e57eec1743fa1f6d41/laser_learning_environment-2.2.0-cp313-cp313-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "84f26b0e866ef56492f90e233c233bca6612fabe498440e2a5c47183b9892f7d",
"md5": "dd0c85e28a0a55d292453a7ba0d2e644",
"sha256": "f40250f9bd31a55f564f8cbb1365ca6a5c3aa5624ea37af67891e687d76230db"
},
"downloads": -1,
"filename": "laser_learning_environment-2.2.0-cp313-cp313-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "dd0c85e28a0a55d292453a7ba0d2e644",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": "<4,>=3.10",
"size": 1444599,
"upload_time": "2025-02-24T15:41:29",
"upload_time_iso_8601": "2025-02-24T15:41:29.572684Z",
"url": "https://files.pythonhosted.org/packages/84/f2/6b0e866ef56492f90e233c233bca6612fabe498440e2a5c47183b9892f7d/laser_learning_environment-2.2.0-cp313-cp313-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "83f74b70891f0d8cc76cc9a51631a2792913aebf3f9899c98183b2d4a092b216",
"md5": "b7ee8d47af95e6fb9c6712b325169f85",
"sha256": "c3128a8dd01dc4fd25781d4dc3f0a39957b9d98beffe70211bd9fb8813b06091"
},
"downloads": -1,
"filename": "laser_learning_environment-2.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "b7ee8d47af95e6fb9c6712b325169f85",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": "<4,>=3.10",
"size": 1617343,
"upload_time": "2025-02-24T15:41:45",
"upload_time_iso_8601": "2025-02-24T15:41:45.280947Z",
"url": "https://files.pythonhosted.org/packages/83/f7/4b70891f0d8cc76cc9a51631a2792913aebf3f9899c98183b2d4a092b216/laser_learning_environment-2.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d20ccc9e4d1a5432e6d7dd739a67af1362413a5945b66cb5569c3799f3ae5c80",
"md5": "3af98783e016c39300d296cdbd6825f5",
"sha256": "a94bd9d3d036b6ae3fd6ff0a015d7e8f72d3f8162454a5dcf3140ac562004320"
},
"downloads": -1,
"filename": "laser_learning_environment-2.2.0-cp313-cp313-win_amd64.whl",
"has_sig": false,
"md5_digest": "3af98783e016c39300d296cdbd6825f5",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": "<4,>=3.10",
"size": 1290620,
"upload_time": "2025-02-24T15:41:54",
"upload_time_iso_8601": "2025-02-24T15:41:54.749106Z",
"url": "https://files.pythonhosted.org/packages/d2/0c/cc9e4d1a5432e6d7dd739a67af1362413a5945b66cb5569c3799f3ae5c80/laser_learning_environment-2.2.0-cp313-cp313-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a3b36573748f3baddd4fea55177d77998e1687433f68f5db38b91dcb74085a92",
"md5": "64cf4dd9b3c3fc42b88f0508ef6e90dc",
"sha256": "24c17cc120f26f01d2d6234f2a1c8be129b025258bb8c4b8f6bd3e79f07f0fc1"
},
"downloads": -1,
"filename": "laser_learning_environment-2.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "64cf4dd9b3c3fc42b88f0508ef6e90dc",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": "<4,>=3.10",
"size": 1618788,
"upload_time": "2025-02-24T15:41:46",
"upload_time_iso_8601": "2025-02-24T15:41:46.725574Z",
"url": "https://files.pythonhosted.org/packages/a3/b3/6573748f3baddd4fea55177d77998e1687433f68f5db38b91dcb74085a92/laser_learning_environment-2.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "01e4c4ddd2d8952456a278766eb074a63cbeccdfa2cdb6f3679d586a960eaf3a",
"md5": "f3fa80a0c29c1348c08050d21e1894f3",
"sha256": "7d6adf676e805417e9b5e9cead112e83e0c02ad8200d934cf652c854a1efc7ab"
},
"downloads": -1,
"filename": "laser_learning_environment-2.2.0.tar.gz",
"has_sig": false,
"md5_digest": "f3fa80a0c29c1348c08050d21e1894f3",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4,>=3.10",
"size": 99343,
"upload_time": "2025-02-24T15:41:37",
"upload_time_iso_8601": "2025-02-24T15:41:37.705421Z",
"url": "https://files.pythonhosted.org/packages/01/e4/c4ddd2d8952456a278766eb074a63cbeccdfa2cdb6f3679d586a960eaf3a/laser_learning_environment-2.2.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-02-24 15:41:37",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "yamoling",
"github_project": "lle",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "laser-learning-environment"
}