laser-learning-environment


Namelaser-learning-environment JSON
Version 2.1.0 PyPI version JSON
download
home_pagehttps://github.com/yamoling/lle
SummaryLaser Learning Environment (LLE) for Multi-Agent Reinforcement Learning
upload_time2024-12-19 23:04:11
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/cb/e2/fdad9b1cb5b3d10f512f5ec9a1c4336deec9cf6f7e6f64a982dca9b6bca1/laser_learning_environment-2.1.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.1.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": "a3fbd70ba0c8bcbba2fdbeea7a48a21c8914a7ebbdf88761128e4b7f3b1ba1aa",
                "md5": "a246672b2eb811bb9d1cb58d0ea91bb6",
                "sha256": "2eafcfa518ff279452c3ff1462dae7d92e5315e830397089a873d9ff3a6daeba"
            },
            "downloads": -1,
            "filename": "laser_learning_environment-2.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a246672b2eb811bb9d1cb58d0ea91bb6",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": "<4,>=3.10",
            "size": 1557966,
            "upload_time": "2024-12-19T23:04:12",
            "upload_time_iso_8601": "2024-12-19T23:04:12.824609Z",
            "url": "https://files.pythonhosted.org/packages/a3/fb/d70ba0c8bcbba2fdbeea7a48a21c8914a7ebbdf88761128e4b7f3b1ba1aa/laser_learning_environment-2.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b91a42421549a6f90e82bd4622ea93b2cbfdab7886d5d4b2dd1471f71a0eb523",
                "md5": "485e45ba4d3ad3c3c5613fc2b6c02935",
                "sha256": "95dda97b2ebea245b3ded99b34e0484f7096a3cb97a3a6ba8c1006b8f4d37449"
            },
            "downloads": -1,
            "filename": "laser_learning_environment-2.1.0-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "485e45ba4d3ad3c3c5613fc2b6c02935",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": "<4,>=3.10",
            "size": 1247936,
            "upload_time": "2024-12-19T23:04:28",
            "upload_time_iso_8601": "2024-12-19T23:04:28.958676Z",
            "url": "https://files.pythonhosted.org/packages/b9/1a/42421549a6f90e82bd4622ea93b2cbfdab7886d5d4b2dd1471f71a0eb523/laser_learning_environment-2.1.0-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e9afaadc4f9614c45f28cd734e5c74c843a6c450bf26919d069e318fb35c231d",
                "md5": "0ffecc13d6ac8733efe1072d55bc9b32",
                "sha256": "f3139f72e0897166cf24b87a2a6694714d405222b4d8a357eb2b39ec12828685"
            },
            "downloads": -1,
            "filename": "laser_learning_environment-2.1.0-cp311-cp311-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "0ffecc13d6ac8733efe1072d55bc9b32",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "<4,>=3.10",
            "size": 1443765,
            "upload_time": "2024-12-19T23:04:04",
            "upload_time_iso_8601": "2024-12-19T23:04:04.575503Z",
            "url": "https://files.pythonhosted.org/packages/e9/af/aadc4f9614c45f28cd734e5c74c843a6c450bf26919d069e318fb35c231d/laser_learning_environment-2.1.0-cp311-cp311-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2fff634f03cda68f8251839bd4fba65ee02025cda45b47f4f19bf03f2367afcb",
                "md5": "9a9f6ba0f97239c2e98cc27611614939",
                "sha256": "2740f5c9ef2630bd909143fb8b4d777f09cec04a897a30cd8559f08f700fb0df"
            },
            "downloads": -1,
            "filename": "laser_learning_environment-2.1.0-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "9a9f6ba0f97239c2e98cc27611614939",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "<4,>=3.10",
            "size": 1397099,
            "upload_time": "2024-12-19T23:03:52",
            "upload_time_iso_8601": "2024-12-19T23:03:52.771407Z",
            "url": "https://files.pythonhosted.org/packages/2f/ff/634f03cda68f8251839bd4fba65ee02025cda45b47f4f19bf03f2367afcb/laser_learning_environment-2.1.0-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b6f8f70b1ba6776467b6b5dd4119b7d6cfff4f1f780efa32d1bf6153386bbc02",
                "md5": "e79305636eb89bfdd736f5046ea263f1",
                "sha256": "b7bd32440da986084f39ddb860a37f1a79ba0850e5bad7cbaa73291d3a0c637b"
            },
            "downloads": -1,
            "filename": "laser_learning_environment-2.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "e79305636eb89bfdd736f5046ea263f1",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "<4,>=3.10",
            "size": 1558321,
            "upload_time": "2024-12-19T23:04:15",
            "upload_time_iso_8601": "2024-12-19T23:04:15.925522Z",
            "url": "https://files.pythonhosted.org/packages/b6/f8/f70b1ba6776467b6b5dd4119b7d6cfff4f1f780efa32d1bf6153386bbc02/laser_learning_environment-2.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "5b00f1054d31ef0425bcf80ecf87f4f932bbd2d24223672f9b86a08c81d59b19",
                "md5": "157f99393f73de2e09bc7c8799100663",
                "sha256": "52665eb5faaa892054f79da7e7a2abcee7dae8dbaedb004bf5aeed4377973764"
            },
            "downloads": -1,
            "filename": "laser_learning_environment-2.1.0-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "157f99393f73de2e09bc7c8799100663",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "<4,>=3.10",
            "size": 1248205,
            "upload_time": "2024-12-19T23:04:33",
            "upload_time_iso_8601": "2024-12-19T23:04:33.558854Z",
            "url": "https://files.pythonhosted.org/packages/5b/00/f1054d31ef0425bcf80ecf87f4f932bbd2d24223672f9b86a08c81d59b19/laser_learning_environment-2.1.0-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ec641cd12db4097a65adfbe4e1e9acdf76220ef6e978bbc341b86418a4844dfa",
                "md5": "e77451ec22a6006fbaf519c8cf120a99",
                "sha256": "f015b96c476c5d7481d29c56bb30673e3fcebf36b097b318f1bd7a008efd6ad1"
            },
            "downloads": -1,
            "filename": "laser_learning_environment-2.1.0-cp312-cp312-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "e77451ec22a6006fbaf519c8cf120a99",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": "<4,>=3.10",
            "size": 1435677,
            "upload_time": "2024-12-19T23:04:06",
            "upload_time_iso_8601": "2024-12-19T23:04:06.611530Z",
            "url": "https://files.pythonhosted.org/packages/ec/64/1cd12db4097a65adfbe4e1e9acdf76220ef6e978bbc341b86418a4844dfa/laser_learning_environment-2.1.0-cp312-cp312-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "64437f65a8f844a30544a1ae5b1852cf39c04aa73728e38746d075090ceb0b46",
                "md5": "697710e717eba2ad39aaa373919359eb",
                "sha256": "d6371a35012eb0f997ef53657c8fd15e81e50e6276caf3b4ab3d0e4db4bb6b32"
            },
            "downloads": -1,
            "filename": "laser_learning_environment-2.1.0-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "697710e717eba2ad39aaa373919359eb",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": "<4,>=3.10",
            "size": 1383135,
            "upload_time": "2024-12-19T23:03:56",
            "upload_time_iso_8601": "2024-12-19T23:03:56.626718Z",
            "url": "https://files.pythonhosted.org/packages/64/43/7f65a8f844a30544a1ae5b1852cf39c04aa73728e38746d075090ceb0b46/laser_learning_environment-2.1.0-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "61a305380ca006aa273764d56ef513c11e034d625a45163c798fa58f7ea12557",
                "md5": "926c389dd3b465e8d591909f383c311b",
                "sha256": "056a17aeac3a7b23fbea9809ed10445194cf107e58ea518aa7a5aac8e77d2437"
            },
            "downloads": -1,
            "filename": "laser_learning_environment-2.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "926c389dd3b465e8d591909f383c311b",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": "<4,>=3.10",
            "size": 1558353,
            "upload_time": "2024-12-19T23:04:18",
            "upload_time_iso_8601": "2024-12-19T23:04:18.076629Z",
            "url": "https://files.pythonhosted.org/packages/61/a3/05380ca006aa273764d56ef513c11e034d625a45163c798fa58f7ea12557/laser_learning_environment-2.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "bff1146356b35f43bde31f97d6e8333bd9a1c6d032ee4f641d2213220b5ebf39",
                "md5": "6157a7bf4abaa1bf56517779a78b78eb",
                "sha256": "611fdf969fea025e677b9aee445d1fd083f0f8141b70f12f7779a8d8c6a80289"
            },
            "downloads": -1,
            "filename": "laser_learning_environment-2.1.0-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "6157a7bf4abaa1bf56517779a78b78eb",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": "<4,>=3.10",
            "size": 1249310,
            "upload_time": "2024-12-19T23:04:35",
            "upload_time_iso_8601": "2024-12-19T23:04:35.488722Z",
            "url": "https://files.pythonhosted.org/packages/bf/f1/146356b35f43bde31f97d6e8333bd9a1c6d032ee4f641d2213220b5ebf39/laser_learning_environment-2.1.0-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "afcf6796b4c611329ab60794a1c37625d11209a7ea69ccfa592e10ccdd311e36",
                "md5": "6eec4011d75648ce59c2b5bf1b4744a8",
                "sha256": "d2dcb0c2e66f71b10274d1eb51c541327eeb397cbb6134f25ccab69fe5007712"
            },
            "downloads": -1,
            "filename": "laser_learning_environment-2.1.0-cp313-cp313-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "6eec4011d75648ce59c2b5bf1b4744a8",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "<4,>=3.10",
            "size": 1435436,
            "upload_time": "2024-12-19T23:04:09",
            "upload_time_iso_8601": "2024-12-19T23:04:09.702114Z",
            "url": "https://files.pythonhosted.org/packages/af/cf/6796b4c611329ab60794a1c37625d11209a7ea69ccfa592e10ccdd311e36/laser_learning_environment-2.1.0-cp313-cp313-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "04c7fa60d19cdb675d425e24b63485d0fa27ab5ef209ec94cb450a01ffb3d716",
                "md5": "c850063afb3ed1c17b5d4626de360859",
                "sha256": "f796f32ef01513681e92b572c8c3074337f962a5bce818955f1a6551177c5430"
            },
            "downloads": -1,
            "filename": "laser_learning_environment-2.1.0-cp313-cp313-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "c850063afb3ed1c17b5d4626de360859",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "<4,>=3.10",
            "size": 1382823,
            "upload_time": "2024-12-19T23:04:01",
            "upload_time_iso_8601": "2024-12-19T23:04:01.729700Z",
            "url": "https://files.pythonhosted.org/packages/04/c7/fa60d19cdb675d425e24b63485d0fa27ab5ef209ec94cb450a01ffb3d716/laser_learning_environment-2.1.0-cp313-cp313-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "473222f8b1134f920bcb846666ca885cb4fa9f607b1f5708c546347b7f497df6",
                "md5": "134ef5471283a7f364671e065aac7a05",
                "sha256": "8222ef855faf521943cf23bf38152dfd42f2d4c225799838bc53a0ae1868b0b0"
            },
            "downloads": -1,
            "filename": "laser_learning_environment-2.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "134ef5471283a7f364671e065aac7a05",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "<4,>=3.10",
            "size": 1558301,
            "upload_time": "2024-12-19T23:04:22",
            "upload_time_iso_8601": "2024-12-19T23:04:22.306090Z",
            "url": "https://files.pythonhosted.org/packages/47/32/22f8b1134f920bcb846666ca885cb4fa9f607b1f5708c546347b7f497df6/laser_learning_environment-2.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ca98e337f27affa8250d826c723929cb045b5348e92c9acaf01f70b978e1055e",
                "md5": "fd1829d052e0b1025782d35f9d345ac7",
                "sha256": "3f537214825213d957770c5b36c0b269e1ab4c0db9535988b49ef7c70cfbbbbd"
            },
            "downloads": -1,
            "filename": "laser_learning_environment-2.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "fd1829d052e0b1025782d35f9d345ac7",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": "<4,>=3.10",
            "size": 1558621,
            "upload_time": "2024-12-19T23:04:25",
            "upload_time_iso_8601": "2024-12-19T23:04:25.717699Z",
            "url": "https://files.pythonhosted.org/packages/ca/98/e337f27affa8250d826c723929cb045b5348e92c9acaf01f70b978e1055e/laser_learning_environment-2.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "cbe2fdad9b1cb5b3d10f512f5ec9a1c4336deec9cf6f7e6f64a982dca9b6bca1",
                "md5": "3265d035e21d2216e8c055c003679104",
                "sha256": "2c6633d4635ce4e4fd36c5d64fdffd49933ce4bd3eec70552fa8c639abafb823"
            },
            "downloads": -1,
            "filename": "laser_learning_environment-2.1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "3265d035e21d2216e8c055c003679104",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4,>=3.10",
            "size": 95123,
            "upload_time": "2024-12-19T23:04:11",
            "upload_time_iso_8601": "2024-12-19T23:04:11.190691Z",
            "url": "https://files.pythonhosted.org/packages/cb/e2/fdad9b1cb5b3d10f512f5ec9a1c4336deec9cf6f7e6f64a982dca9b6bca1/laser_learning_environment-2.1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-12-19 23:04:11",
    "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.64329s