Name | astroemperor JSON |
Version |
0.9.7.3
JSON |
| download |
home_page | None |
Summary | Flexible python exoplanet fitter |
upload_time | 2025-08-20 01:00:43 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.6 |
license | MIT License
Copyright (c) [year] [fullname]
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
|
keywords |
python
mcmc
sampler
adaptive
parallel tempering
|
VCS |
 |
bugtrack_url |
|
requirements |
anyio
argon2-cffi
argon2-cffi-bindings
arrow
asttokens
async-lru
attrs
babel
beautifulsoup4
bleach
certifi
cffi
charset-normalizer
comm
contourpy
corner
cycler
debugpy
decorator
defusedxml
emcee
executing
fast-kepler
fastjsonschema
fonttools
fqdn
h11
httpcore
httpx
idna
ipykernel
ipython
isoduration
jedi
jinja2
json5
jsonpointer
jsonschema
jsonschema-specifications
jupyter-client
jupyter-core
jupyter-events
jupyter-lsp
jupyter-server
jupyter-server-terminals
jupyterlab
jupyterlab-pygments
jupyterlab-server
jupyterthemes
kepler-py
kiwisolver
lesscpy
markupsafe
matplotlib
matplotlib-inline
mistune
nbclient
nbconvert
nbformat
nest-asyncio
notebook
notebook-shim
numpy
overrides
packaging
pandocfilters
parso
pexpect
pillow
platformdirs
ply
prometheus-client
prompt-toolkit
psutil
ptyprocess
pure-eval
pycparser
pygments
pyparsing
python-dateutil
python-json-logger
pyyaml
pyzmq
reddcolors
reddemcee
referencing
requests
rfc3339-validator
rfc3986-validator
rpds-py
send2trash
six
sniffio
soupsieve
stack-data
tabulate
termcolor
terminado
tinycss2
tornado
tqdm
traitlets
types-python-dateutil
typing-extensions
uri-template
urllib3
wcwidth
webcolors
webencodings
websocket-client
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# EMPEROR
Exoplanet Mcmc Parallel tEmpering for Rv Orbit Retrieval
# Overview
`EMPEROR` (Exoplanet Mcmc Parallel tEmpering for Rv Orbit Retrieval), is a Python-based algorithm that automatically searches for signals in Radial Velocity timeseries, employing Markov chains and parallel tempering methods, convergence tests and Bayesian statistics, along with various noise models. A number of posterior sampling routines are available, focused on efficiently searching for signals in highly multi-modal posteriors. The code allows the analysis of multi-instrument and multi-planet data sets and performs model comparisons automatically to return the optimum model that best describes the data.
Make sure to check the [documentation!](https://astroemperor.readthedocs.io/en/latest/)
## Why `EMPEROR`?
- It's really simple to use
- It has a series of configuration commands that will amaze you
- Advanced Noise Model
- Quite Flexible!
# Dependencies
This code makes use of:
- [Numpy](https://numpy.org)
- [Scipy](https://scipy.org)
- [pandas](https://pandas.pydata.org)
- [matplotlib>=3.5.1](https://matplotlib.org)
- [kepler](https://github.com/dfm/kepler.py)
- [reddemcee](https://github.com/ReddTea/reddemcee/)
- [reddcolors](https://github.com/ReddTea/reddcolors/)
- [tabulate](https://pypi.org/project/tabulate/)
- [termcolor](https://pypi.python.org/pypi/termcolor)
- [tqdm](https://pypi.python.org/pypi/tqdm)
All of them can be easily installed with pip.
For additional capabilities, you can install:
- [arviz](https://arviz-devs.github.io/arviz/)
- [celerite2](https://celerite2.readthedocs.io/en/latest/)
- [corner](https://pypi.python.org/pypi/corner)
- [dynesty](https://dynesty.readthedocs.io/en/stable/)
- [emcee](http://dan.iel.fm/emcee/current/)
- [scikit-learn](https://scikit-learn.org/stable/)
# Installation
## Pip
In the console type
```sh
pip3 install astroEMPEROR
```
## From Source
In the console type
```sh
git clone https://github.com/ReddTea/astroEMPEROR.git
```
## Installation Verification
Download the [tests folder](https://github.com/ReddTea/astroemperor/tree/main/tests) and run `test_basic.py` to make sure everything works!
In terminal:
```sh
python test_basic.py
```
# Quick Usage
We need to set up our working directory with two subfolders, `datafiles` and `datalogs`, the former for data input, the later for output.
```
๐working_directory
โฃ ๐mini_test.py
โฃ ๐datafiles
โ โฃ ๐51Peg
โ โ โ ๐RV
โ โ โ โ ๐51peg.vels
โฃ ๐datalogs
โ โฃ ๐51Peg
โ โ โ ๐run_1
```
Running the code is as simple as:
```python
import astroemperor
sim = astroemperor.Simulation()
sim.set_engine('reddemcee')
sim.engine_config['setup'] = [2, 100, 500, 1]
sim.load_data('51Peg') # read from ./datafiles/
sim.plot_trace['plot'] = False # deactivate arviz plots
sim.autorun(1, 1) # (from=1, to=1): just 1 keplerian
```
# Outputs
All results can be found in the `datalogs` folder. You will see chain plots, posterior plots, histograms, phasefolded curves, the chain sample and more!
Raw data
{
"_id": null,
"home_page": null,
"name": "astroemperor",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": null,
"keywords": "python, MCMC, sampler, adaptive, parallel tempering",
"author": null,
"author_email": "ReddTea <redd@tea.com>",
"download_url": "https://files.pythonhosted.org/packages/3f/68/296f8cdcb670dc73857bece4a6bcae3d4f3dc1fef6456cd256d7083a5ae5/astroemperor-0.9.7.3.tar.gz",
"platform": null,
"description": "# EMPEROR\nExoplanet Mcmc Parallel tEmpering for Rv Orbit Retrieval\n\n# Overview\n`EMPEROR` (Exoplanet Mcmc Parallel tEmpering for Rv Orbit Retrieval), is a Python-based algorithm that automatically searches for signals in Radial Velocity timeseries, employing Markov chains and parallel tempering methods, convergence tests and Bayesian statistics, along with various noise models. A number of posterior sampling routines are available, focused on efficiently searching for signals in highly multi-modal posteriors. The code allows the analysis of multi-instrument and multi-planet data sets and performs model comparisons automatically to return the optimum model that best describes the data.\n\nMake sure to check the [documentation!](https://astroemperor.readthedocs.io/en/latest/)\n\n## Why `EMPEROR`?\n\n - It's really simple to use\n - It has a series of configuration commands that will amaze you\n - Advanced Noise Model\n - Quite Flexible!\n\n\n# Dependencies\nThis code makes use of:\n\n - [Numpy](https://numpy.org)\n - [Scipy](https://scipy.org)\n - [pandas](https://pandas.pydata.org)\n - [matplotlib>=3.5.1](https://matplotlib.org)\n\n - [kepler](https://github.com/dfm/kepler.py)\n - [reddemcee](https://github.com/ReddTea/reddemcee/)\n - [reddcolors](https://github.com/ReddTea/reddcolors/)\n - [tabulate](https://pypi.org/project/tabulate/)\n - [termcolor](https://pypi.python.org/pypi/termcolor)\n - [tqdm](https://pypi.python.org/pypi/tqdm)\n\nAll of them can be easily installed with pip.\n\nFor additional capabilities, you can install:\n\n - [arviz](https://arviz-devs.github.io/arviz/)\n - [celerite2](https://celerite2.readthedocs.io/en/latest/)\n - [corner](https://pypi.python.org/pypi/corner)\n - [dynesty](https://dynesty.readthedocs.io/en/stable/)\n - [emcee](http://dan.iel.fm/emcee/current/)\n - [scikit-learn](https://scikit-learn.org/stable/)\n\n\n\n# Installation\n\n## Pip\nIn the console type\n```sh\npip3 install astroEMPEROR\n```\n\n## From Source\nIn the console type\n```sh\ngit clone https://github.com/ReddTea/astroEMPEROR.git\n```\n\n\n## Installation Verification\nDownload the [tests folder](https://github.com/ReddTea/astroemperor/tree/main/tests) and run `test_basic.py` to make sure everything works!\n\nIn terminal:\n\n```sh\npython test_basic.py\n```\n\n\n# Quick Usage\nWe need to set up our working directory with two subfolders, `datafiles` and `datalogs`, the former for data input, the later for output.\n\n```\n\ud83d\udcc2working_directory\n \u2523 \ud83d\udcdcmini_test.py\n \u2523 \ud83d\udcc2datafiles\n \u2503 \u2523 \ud83d\udcc251Peg\n \u2503 \u2503 \u2517 \ud83d\udcc2RV\n \u2503 \u2503 \u2503 \u2517 \ud83d\udcdc51peg.vels\n \u2523 \ud83d\udcc2datalogs\n \u2503 \u2523 \ud83d\udcc251Peg\n \u2503 \u2503 \u2517 \ud83d\udcc2run_1\n```\n\nRunning the code is as simple as:\n\n```python\nimport astroemperor\n\nsim = astroemperor.Simulation()\n\nsim.set_engine('reddemcee')\nsim.engine_config['setup'] = [2, 100, 500, 1]\nsim.load_data('51Peg') # read from ./datafiles/\n\nsim.plot_trace['plot'] = False # deactivate arviz plots\nsim.autorun(1, 1) # (from=1, to=1): just 1 keplerian\n\n```\n\n# Outputs\nAll results can be found in the `datalogs` folder. You will see chain plots, posterior plots, histograms, phasefolded curves, the chain sample and more!\n",
"bugtrack_url": null,
"license": "MIT License\n \n Copyright (c) [year] [fullname]\n \n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n \n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n \n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n ",
"summary": "Flexible python exoplanet fitter",
"version": "0.9.7.3",
"project_urls": {
"Documentation": "https://astroemperor.readthedocs.io/",
"Homepage": "https://astroemperor.readthedocs.io/",
"Issues": "https://github.com/ReddTea/astroemperor/issues",
"Repository": "https://github.com/ReddTea/astroemperor/"
},
"split_keywords": [
"python",
" mcmc",
" sampler",
" adaptive",
" parallel tempering"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "ada2c46c1b69e9bb19643ac4cdc695cea5cd8e1f8bfa99fc28c77edd87479bff",
"md5": "cfb7ae9be1dcf5988371e75ba3e11bcb",
"sha256": "4b272a13beadf4f63dadf8d546fcd2ba343656d9c5e2a18d854f54a518857444"
},
"downloads": -1,
"filename": "astroemperor-0.9.7.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "cfb7ae9be1dcf5988371e75ba3e11bcb",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 100450,
"upload_time": "2025-08-20T01:00:42",
"upload_time_iso_8601": "2025-08-20T01:00:42.552780Z",
"url": "https://files.pythonhosted.org/packages/ad/a2/c46c1b69e9bb19643ac4cdc695cea5cd8e1f8bfa99fc28c77edd87479bff/astroemperor-0.9.7.3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "3f68296f8cdcb670dc73857bece4a6bcae3d4f3dc1fef6456cd256d7083a5ae5",
"md5": "f4dab9acddbc4e6e5450fbaf794fdcb3",
"sha256": "6b9fa12f6d1e4cb104f977a7e94ae523b35b2e2e71557099b1c6a79d11c55eb0"
},
"downloads": -1,
"filename": "astroemperor-0.9.7.3.tar.gz",
"has_sig": false,
"md5_digest": "f4dab9acddbc4e6e5450fbaf794fdcb3",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 83221,
"upload_time": "2025-08-20T01:00:43",
"upload_time_iso_8601": "2025-08-20T01:00:43.744520Z",
"url": "https://files.pythonhosted.org/packages/3f/68/296f8cdcb670dc73857bece4a6bcae3d4f3dc1fef6456cd256d7083a5ae5/astroemperor-0.9.7.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-20 01:00:43",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "ReddTea",
"github_project": "astroemperor",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [
{
"name": "anyio",
"specs": [
[
"==",
"4.8.0"
]
]
},
{
"name": "argon2-cffi",
"specs": [
[
"==",
"23.1.0"
]
]
},
{
"name": "argon2-cffi-bindings",
"specs": [
[
"==",
"21.2.0"
]
]
},
{
"name": "arrow",
"specs": [
[
"==",
"1.3.0"
]
]
},
{
"name": "asttokens",
"specs": [
[
"==",
"3.0.0"
]
]
},
{
"name": "async-lru",
"specs": [
[
"==",
"2.0.4"
]
]
},
{
"name": "attrs",
"specs": [
[
"==",
"25.1.0"
]
]
},
{
"name": "babel",
"specs": [
[
"==",
"2.17.0"
]
]
},
{
"name": "beautifulsoup4",
"specs": [
[
"==",
"4.13.3"
]
]
},
{
"name": "bleach",
"specs": [
[
"==",
"6.2.0"
]
]
},
{
"name": "certifi",
"specs": [
[
"==",
"2025.1.31"
]
]
},
{
"name": "cffi",
"specs": [
[
"==",
"1.17.1"
]
]
},
{
"name": "charset-normalizer",
"specs": [
[
"==",
"3.4.1"
]
]
},
{
"name": "comm",
"specs": [
[
"==",
"0.2.2"
]
]
},
{
"name": "contourpy",
"specs": [
[
"==",
"1.3.1"
]
]
},
{
"name": "corner",
"specs": [
[
"==",
"2.2.3"
]
]
},
{
"name": "cycler",
"specs": [
[
"==",
"0.12.1"
]
]
},
{
"name": "debugpy",
"specs": [
[
"==",
"1.8.12"
]
]
},
{
"name": "decorator",
"specs": [
[
"==",
"5.2.1"
]
]
},
{
"name": "defusedxml",
"specs": [
[
"==",
"0.7.1"
]
]
},
{
"name": "emcee",
"specs": [
[
"==",
"3.1.6"
]
]
},
{
"name": "executing",
"specs": [
[
"==",
"2.2.0"
]
]
},
{
"name": "fast-kepler",
"specs": [
[
"==",
"0.5.1"
]
]
},
{
"name": "fastjsonschema",
"specs": [
[
"==",
"2.21.1"
]
]
},
{
"name": "fonttools",
"specs": [
[
"==",
"4.56.0"
]
]
},
{
"name": "fqdn",
"specs": [
[
"==",
"1.5.1"
]
]
},
{
"name": "h11",
"specs": [
[
"==",
"0.14.0"
]
]
},
{
"name": "httpcore",
"specs": [
[
"==",
"1.0.7"
]
]
},
{
"name": "httpx",
"specs": [
[
"==",
"0.28.1"
]
]
},
{
"name": "idna",
"specs": [
[
"==",
"3.10"
]
]
},
{
"name": "ipykernel",
"specs": [
[
"==",
"6.29.5"
]
]
},
{
"name": "ipython",
"specs": [
[
"==",
"8.32.0"
]
]
},
{
"name": "isoduration",
"specs": [
[
"==",
"20.11.0"
]
]
},
{
"name": "jedi",
"specs": [
[
"==",
"0.19.2"
]
]
},
{
"name": "jinja2",
"specs": [
[
"==",
"3.1.5"
]
]
},
{
"name": "json5",
"specs": [
[
"==",
"0.10.0"
]
]
},
{
"name": "jsonpointer",
"specs": [
[
"==",
"3.0.0"
]
]
},
{
"name": "jsonschema",
"specs": [
[
"==",
"4.23.0"
]
]
},
{
"name": "jsonschema-specifications",
"specs": [
[
"==",
"2024.10.1"
]
]
},
{
"name": "jupyter-client",
"specs": [
[
"==",
"8.6.3"
]
]
},
{
"name": "jupyter-core",
"specs": [
[
"==",
"5.7.2"
]
]
},
{
"name": "jupyter-events",
"specs": [
[
"==",
"0.12.0"
]
]
},
{
"name": "jupyter-lsp",
"specs": [
[
"==",
"2.2.5"
]
]
},
{
"name": "jupyter-server",
"specs": [
[
"==",
"2.15.0"
]
]
},
{
"name": "jupyter-server-terminals",
"specs": [
[
"==",
"0.5.3"
]
]
},
{
"name": "jupyterlab",
"specs": [
[
"==",
"4.3.5"
]
]
},
{
"name": "jupyterlab-pygments",
"specs": [
[
"==",
"0.3.0"
]
]
},
{
"name": "jupyterlab-server",
"specs": [
[
"==",
"2.27.3"
]
]
},
{
"name": "jupyterthemes",
"specs": [
[
"==",
"0.20.0"
]
]
},
{
"name": "kepler-py",
"specs": [
[
"==",
"0.0.7"
]
]
},
{
"name": "kiwisolver",
"specs": [
[
"==",
"1.4.8"
]
]
},
{
"name": "lesscpy",
"specs": [
[
"==",
"0.15.1"
]
]
},
{
"name": "markupsafe",
"specs": [
[
"==",
"3.0.2"
]
]
},
{
"name": "matplotlib",
"specs": [
[
"==",
"3.10.1"
]
]
},
{
"name": "matplotlib-inline",
"specs": [
[
"==",
"0.1.7"
]
]
},
{
"name": "mistune",
"specs": [
[
"==",
"3.1.2"
]
]
},
{
"name": "nbclient",
"specs": [
[
"==",
"0.10.2"
]
]
},
{
"name": "nbconvert",
"specs": [
[
"==",
"7.16.6"
]
]
},
{
"name": "nbformat",
"specs": [
[
"==",
"5.10.4"
]
]
},
{
"name": "nest-asyncio",
"specs": [
[
"==",
"1.6.0"
]
]
},
{
"name": "notebook",
"specs": [
[
"==",
"7.3.2"
]
]
},
{
"name": "notebook-shim",
"specs": [
[
"==",
"0.2.4"
]
]
},
{
"name": "numpy",
"specs": [
[
"==",
"2.2.3"
]
]
},
{
"name": "overrides",
"specs": [
[
"==",
"7.7.0"
]
]
},
{
"name": "packaging",
"specs": [
[
"==",
"24.2"
]
]
},
{
"name": "pandocfilters",
"specs": [
[
"==",
"1.5.1"
]
]
},
{
"name": "parso",
"specs": [
[
"==",
"0.8.4"
]
]
},
{
"name": "pexpect",
"specs": [
[
"==",
"4.9.0"
]
]
},
{
"name": "pillow",
"specs": [
[
"==",
"11.1.0"
]
]
},
{
"name": "platformdirs",
"specs": [
[
"==",
"4.3.6"
]
]
},
{
"name": "ply",
"specs": [
[
"==",
"3.11"
]
]
},
{
"name": "prometheus-client",
"specs": [
[
"==",
"0.21.1"
]
]
},
{
"name": "prompt-toolkit",
"specs": [
[
"==",
"3.0.50"
]
]
},
{
"name": "psutil",
"specs": [
[
"==",
"7.0.0"
]
]
},
{
"name": "ptyprocess",
"specs": [
[
"==",
"0.7.0"
]
]
},
{
"name": "pure-eval",
"specs": [
[
"==",
"0.2.3"
]
]
},
{
"name": "pycparser",
"specs": [
[
"==",
"2.22"
]
]
},
{
"name": "pygments",
"specs": [
[
"==",
"2.19.1"
]
]
},
{
"name": "pyparsing",
"specs": [
[
"==",
"3.2.1"
]
]
},
{
"name": "python-dateutil",
"specs": [
[
"==",
"2.9.0.post0"
]
]
},
{
"name": "python-json-logger",
"specs": [
[
"==",
"3.2.1"
]
]
},
{
"name": "pyyaml",
"specs": [
[
"==",
"6.0.2"
]
]
},
{
"name": "pyzmq",
"specs": [
[
"==",
"26.2.1"
]
]
},
{
"name": "reddcolors",
"specs": [
[
"==",
"0.1.0"
]
]
},
{
"name": "reddemcee",
"specs": [
[
"==",
"0.8.5"
]
]
},
{
"name": "referencing",
"specs": [
[
"==",
"0.36.2"
]
]
},
{
"name": "requests",
"specs": [
[
"==",
"2.32.3"
]
]
},
{
"name": "rfc3339-validator",
"specs": [
[
"==",
"0.1.4"
]
]
},
{
"name": "rfc3986-validator",
"specs": [
[
"==",
"0.1.1"
]
]
},
{
"name": "rpds-py",
"specs": [
[
"==",
"0.23.1"
]
]
},
{
"name": "send2trash",
"specs": [
[
"==",
"1.8.3"
]
]
},
{
"name": "six",
"specs": [
[
"==",
"1.17.0"
]
]
},
{
"name": "sniffio",
"specs": [
[
"==",
"1.3.1"
]
]
},
{
"name": "soupsieve",
"specs": [
[
"==",
"2.6"
]
]
},
{
"name": "stack-data",
"specs": [
[
"==",
"0.6.3"
]
]
},
{
"name": "tabulate",
"specs": [
[
"==",
"0.9.0"
]
]
},
{
"name": "termcolor",
"specs": [
[
"==",
"2.5.0"
]
]
},
{
"name": "terminado",
"specs": [
[
"==",
"0.18.1"
]
]
},
{
"name": "tinycss2",
"specs": [
[
"==",
"1.4.0"
]
]
},
{
"name": "tornado",
"specs": [
[
"==",
"6.4.2"
]
]
},
{
"name": "tqdm",
"specs": [
[
"==",
"4.67.1"
]
]
},
{
"name": "traitlets",
"specs": [
[
"==",
"5.14.3"
]
]
},
{
"name": "types-python-dateutil",
"specs": [
[
"==",
"2.9.0.20241206"
]
]
},
{
"name": "typing-extensions",
"specs": [
[
"==",
"4.12.2"
]
]
},
{
"name": "uri-template",
"specs": [
[
"==",
"1.3.0"
]
]
},
{
"name": "urllib3",
"specs": [
[
"==",
"2.3.0"
]
]
},
{
"name": "wcwidth",
"specs": [
[
"==",
"0.2.13"
]
]
},
{
"name": "webcolors",
"specs": [
[
"==",
"24.11.1"
]
]
},
{
"name": "webencodings",
"specs": [
[
"==",
"0.5.1"
]
]
},
{
"name": "websocket-client",
"specs": [
[
"==",
"1.8.0"
]
]
}
],
"lcname": "astroemperor"
}