laser-learning-environment


Namelaser-learning-environment JSON
Version 2.2.0 PyPI version JSON
download
home_pagehttps://github.com/yamoling/lle
SummaryLaser Learning Environment (LLE) for Multi-Agent Reinforcement Learning
upload_time2025-02-24 15:41:37
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/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![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.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"
}
        
Elapsed time: 1.40663s