laser-learning-environment


Namelaser-learning-environment JSON
Version 2.1.1 PyPI version JSON
download
home_pagehttps://github.com/yamoling/lle
SummaryLaser Learning Environment (LLE) for Multi-Agent Reinforcement Learning
upload_time2024-12-31 14:25:08
maintainerNone
docs_urlNone
authorNone
requires_python<4,>=3.10
licenseNone
keywords marl rl lle laser environment
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 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.

![LLE](docs/lvl6-annotated.png)

# 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: ![LLE](docs/3x1.png)


```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/ee/88/9a72da6cc5a5b9f6f27434961cc200ff395517489318a05e3c28702aadd5/laser_learning_environment-2.1.1.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![LLE](docs/lvl6-annotated.png)\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: ![LLE](docs/3x1.png)\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.1.1",
    "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": "412b1ea5e0d86d9af4f900b12a7cda50b998b55b43122e22e290932d5501b9d1",
                "md5": "7659e2e5496396894d53939350c33b86",
                "sha256": "bbbe56b8ff0868f2dec670e5bfdc096bd6bb57f333b4824def391991b09c37c6"
            },
            "downloads": -1,
            "filename": "laser_learning_environment-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "7659e2e5496396894d53939350c33b86",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": "<4,>=3.10",
            "size": 1558859,
            "upload_time": "2024-12-31T14:25:10",
            "upload_time_iso_8601": "2024-12-31T14:25:10.040137Z",
            "url": "https://files.pythonhosted.org/packages/41/2b/1ea5e0d86d9af4f900b12a7cda50b998b55b43122e22e290932d5501b9d1/laser_learning_environment-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a93b1afbb07abb26aa05d2fc9668372222ffcd38fb7d070b2dbd44d8d3ec1e59",
                "md5": "c59c3bba0b1bc5c6fa386b1c59b892ea",
                "sha256": "71e5b33c26dc13d3cf0920e10c0247427f0d6bb5d5f26047b7cb03a75b329f3a"
            },
            "downloads": -1,
            "filename": "laser_learning_environment-2.1.1-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "c59c3bba0b1bc5c6fa386b1c59b892ea",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": "<4,>=3.10",
            "size": 1248446,
            "upload_time": "2024-12-31T14:25:24",
            "upload_time_iso_8601": "2024-12-31T14:25:24.029475Z",
            "url": "https://files.pythonhosted.org/packages/a9/3b/1afbb07abb26aa05d2fc9668372222ffcd38fb7d070b2dbd44d8d3ec1e59/laser_learning_environment-2.1.1-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c016311bcd0ac9ad3755a1277836f9bdc1a3336690e2651ef2e570a4d6040f18",
                "md5": "5c8e3c0a9a78685a4ee1345f77017c04",
                "sha256": "eeeef8b86823c6fcb97fb85cef5629d101076a0e10cb4f9ee1cfe158460394bb"
            },
            "downloads": -1,
            "filename": "laser_learning_environment-2.1.1-cp311-cp311-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "5c8e3c0a9a78685a4ee1345f77017c04",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "<4,>=3.10",
            "size": 1444383,
            "upload_time": "2024-12-31T14:25:01",
            "upload_time_iso_8601": "2024-12-31T14:25:01.649574Z",
            "url": "https://files.pythonhosted.org/packages/c0/16/311bcd0ac9ad3755a1277836f9bdc1a3336690e2651ef2e570a4d6040f18/laser_learning_environment-2.1.1-cp311-cp311-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4bc3f314d77322f68fc1969bcc7e7f9b512b3382c7d8591fb5d2b04d55ef82d2",
                "md5": "1165576840fee1d08e9d3f1af70f5629",
                "sha256": "751a9ccaa8abc6cd67ba57a8f879187c3b92c13a8a970708ea2963688bd0a5f4"
            },
            "downloads": -1,
            "filename": "laser_learning_environment-2.1.1-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "1165576840fee1d08e9d3f1af70f5629",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "<4,>=3.10",
            "size": 1399856,
            "upload_time": "2024-12-31T14:24:52",
            "upload_time_iso_8601": "2024-12-31T14:24:52.797009Z",
            "url": "https://files.pythonhosted.org/packages/4b/c3/f314d77322f68fc1969bcc7e7f9b512b3382c7d8591fb5d2b04d55ef82d2/laser_learning_environment-2.1.1-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "049ab89def5695ed1a03014d7af7b5fbff103febc532e122b54484763b9b24f1",
                "md5": "a5e97e2a7a70a4faf6f77dca9c9e29c4",
                "sha256": "546914282ecfb49ceed7eea058d923d880386e84ac3718414302169296b51117"
            },
            "downloads": -1,
            "filename": "laser_learning_environment-2.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a5e97e2a7a70a4faf6f77dca9c9e29c4",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "<4,>=3.10",
            "size": 1558801,
            "upload_time": "2024-12-31T14:25:11",
            "upload_time_iso_8601": "2024-12-31T14:25:11.961624Z",
            "url": "https://files.pythonhosted.org/packages/04/9a/b89def5695ed1a03014d7af7b5fbff103febc532e122b54484763b9b24f1/laser_learning_environment-2.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "52cc7f3f15322f12d837079f3d8218d31ba53c698dbbdf22221afb9c6b2cb3e8",
                "md5": "d6cb240a7a770eb8878235cf0abdc08a",
                "sha256": "86b4182b5debea7b5c7a4f3e57622a58ef32df6a8292ac396319785373c88f30"
            },
            "downloads": -1,
            "filename": "laser_learning_environment-2.1.1-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "d6cb240a7a770eb8878235cf0abdc08a",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "<4,>=3.10",
            "size": 1248516,
            "upload_time": "2024-12-31T14:25:25",
            "upload_time_iso_8601": "2024-12-31T14:25:25.879728Z",
            "url": "https://files.pythonhosted.org/packages/52/cc/7f3f15322f12d837079f3d8218d31ba53c698dbbdf22221afb9c6b2cb3e8/laser_learning_environment-2.1.1-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8260ec7d0d773f7a2b1dfe49a5010747938a2ca40034f6162e5924d492c6a968",
                "md5": "6811ed37a25d36ddece467d9d056b60f",
                "sha256": "db1c3ca771fb890322e5da8b0025c228626c455d4e9b088aa91252218f082b06"
            },
            "downloads": -1,
            "filename": "laser_learning_environment-2.1.1-cp312-cp312-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "6811ed37a25d36ddece467d9d056b60f",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": "<4,>=3.10",
            "size": 1427939,
            "upload_time": "2024-12-31T14:25:04",
            "upload_time_iso_8601": "2024-12-31T14:25:04.941072Z",
            "url": "https://files.pythonhosted.org/packages/82/60/ec7d0d773f7a2b1dfe49a5010747938a2ca40034f6162e5924d492c6a968/laser_learning_environment-2.1.1-cp312-cp312-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9e7d0e393cdfc81b49d21eb7d29d23be875003a3dd64e3fa0ea43d1f340c4c57",
                "md5": "84564c9fa95abdbd34610018932d3a5c",
                "sha256": "939717c8e2e9d3a4d16d2ff7a5d79abc09eae23da4fecb6c2280f880ed43b7c2"
            },
            "downloads": -1,
            "filename": "laser_learning_environment-2.1.1-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "84564c9fa95abdbd34610018932d3a5c",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": "<4,>=3.10",
            "size": 1390282,
            "upload_time": "2024-12-31T14:24:56",
            "upload_time_iso_8601": "2024-12-31T14:24:56.372618Z",
            "url": "https://files.pythonhosted.org/packages/9e/7d/0e393cdfc81b49d21eb7d29d23be875003a3dd64e3fa0ea43d1f340c4c57/laser_learning_environment-2.1.1-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7b45907e31546dafd565f3700d5196f778f9bc989b57b4d583be31dc6f31e70d",
                "md5": "f116cd0226a034d0ca0d065630ea2637",
                "sha256": "706202379e840560829548e715396e6756d58a56c889b2f62b918c2f19451df4"
            },
            "downloads": -1,
            "filename": "laser_learning_environment-2.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "f116cd0226a034d0ca0d065630ea2637",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": "<4,>=3.10",
            "size": 1561221,
            "upload_time": "2024-12-31T14:25:13",
            "upload_time_iso_8601": "2024-12-31T14:25:13.988689Z",
            "url": "https://files.pythonhosted.org/packages/7b/45/907e31546dafd565f3700d5196f778f9bc989b57b4d583be31dc6f31e70d/laser_learning_environment-2.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0cd3651bd31821b683679da5fd5122079cb9389f47c437efe1d2dd74b8d7bcfc",
                "md5": "b48b803ec40cbf6dfe3e55ae1eba2377",
                "sha256": "1af977f41264be01d1991abd02717ed96da222b41f9f8c2ce3609962da76b132"
            },
            "downloads": -1,
            "filename": "laser_learning_environment-2.1.1-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "b48b803ec40cbf6dfe3e55ae1eba2377",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": "<4,>=3.10",
            "size": 1242336,
            "upload_time": "2024-12-31T14:25:27",
            "upload_time_iso_8601": "2024-12-31T14:25:27.805985Z",
            "url": "https://files.pythonhosted.org/packages/0c/d3/651bd31821b683679da5fd5122079cb9389f47c437efe1d2dd74b8d7bcfc/laser_learning_environment-2.1.1-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "467cebb9ae1971489731e168031d9520cb904f01bc8917a4fa7483134fbf5bf2",
                "md5": "c0d5c1f6fe0493c148565b22ebc2f1b1",
                "sha256": "5d3e2faca1432dc854131f0744de0e95f94f82da724f10303d8734b7db3e594f"
            },
            "downloads": -1,
            "filename": "laser_learning_environment-2.1.1-cp313-cp313-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "c0d5c1f6fe0493c148565b22ebc2f1b1",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "<4,>=3.10",
            "size": 1427583,
            "upload_time": "2024-12-31T14:25:06",
            "upload_time_iso_8601": "2024-12-31T14:25:06.804315Z",
            "url": "https://files.pythonhosted.org/packages/46/7c/ebb9ae1971489731e168031d9520cb904f01bc8917a4fa7483134fbf5bf2/laser_learning_environment-2.1.1-cp313-cp313-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d15e5feb892b058ed1de68a94734947f9d7218722d61fcb5b4b630795281cd2b",
                "md5": "49de5877545cf27804e812710e604379",
                "sha256": "c329fe604ad5db9a3ae61761d1a2244ea13c7829a005ea5f0feeed6afa7fc27c"
            },
            "downloads": -1,
            "filename": "laser_learning_environment-2.1.1-cp313-cp313-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "49de5877545cf27804e812710e604379",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "<4,>=3.10",
            "size": 1390109,
            "upload_time": "2024-12-31T14:24:59",
            "upload_time_iso_8601": "2024-12-31T14:24:59.422279Z",
            "url": "https://files.pythonhosted.org/packages/d1/5e/5feb892b058ed1de68a94734947f9d7218722d61fcb5b4b630795281cd2b/laser_learning_environment-2.1.1-cp313-cp313-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "64cef4240a90caf39eaa7d9a24925984b2275b4ae1765e41c323943919347ab5",
                "md5": "5133e27e622fd1d286ceb2c59912b528",
                "sha256": "9f4b1619b84bda81322eb0326fa50a00b58e25afc328016c469a8984f95e6191"
            },
            "downloads": -1,
            "filename": "laser_learning_environment-2.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "5133e27e622fd1d286ceb2c59912b528",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "<4,>=3.10",
            "size": 1561006,
            "upload_time": "2024-12-31T14:25:18",
            "upload_time_iso_8601": "2024-12-31T14:25:18.499586Z",
            "url": "https://files.pythonhosted.org/packages/64/ce/f4240a90caf39eaa7d9a24925984b2275b4ae1765e41c323943919347ab5/laser_learning_environment-2.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b49a04653fd0f16a93c7adaddaa62e7a4e124c7661940cb9a0a289c0c661006b",
                "md5": "78c364f68da1d1a15831f67d31e7fa9b",
                "sha256": "408622e91956b24488ffa9efcf2be52750902b34021e77b92890cc21fd57675d"
            },
            "downloads": -1,
            "filename": "laser_learning_environment-2.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "78c364f68da1d1a15831f67d31e7fa9b",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": "<4,>=3.10",
            "size": 1559837,
            "upload_time": "2024-12-31T14:25:20",
            "upload_time_iso_8601": "2024-12-31T14:25:20.875702Z",
            "url": "https://files.pythonhosted.org/packages/b4/9a/04653fd0f16a93c7adaddaa62e7a4e124c7661940cb9a0a289c0c661006b/laser_learning_environment-2.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ee889a72da6cc5a5b9f6f27434961cc200ff395517489318a05e3c28702aadd5",
                "md5": "393ffe768619f7e65aba5b1dd42fba68",
                "sha256": "9f583f1e63ed92d37b48614d14617560d155641dc3e55343d2a1a84f2c4936af"
            },
            "downloads": -1,
            "filename": "laser_learning_environment-2.1.1.tar.gz",
            "has_sig": false,
            "md5_digest": "393ffe768619f7e65aba5b1dd42fba68",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4,>=3.10",
            "size": 95625,
            "upload_time": "2024-12-31T14:25:08",
            "upload_time_iso_8601": "2024-12-31T14:25:08.380165Z",
            "url": "https://files.pythonhosted.org/packages/ee/88/9a72da6cc5a5b9f6f27434961cc200ff395517489318a05e3c28702aadd5/laser_learning_environment-2.1.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-12-31 14:25:08",
    "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"
}
        
Elapsed time: 0.39558s