freemt commited on
Commit
fb4c8c6
·
1 Parent(s): fd19d9b

Update radio_embed_p

Browse files
.flake8 ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [flake8]
2
+ ignore =
3
+ D203,
4
+ # line too long
5
+ E501
6
+ per-file-ignores =
7
+ # imported but unused
8
+ # __init__.py: F401
9
+ test_*.py: F401
10
+ exclude =
11
+ .git,
12
+ __pycache__,
13
+ docs/source/conf.py,
14
+ old,
15
+ build,
16
+ dist,
17
+ .venv
18
+ pad*.py
19
+ max-complexity = 25
.github/workflows/codeql-analysis.yml- ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # For most projects, this workflow file will not need changing; you simply need
2
+ # to commit it to your repository.
3
+ #
4
+ # You may wish to alter this file to override the set of languages analyzed,
5
+ # or to provide custom queries or build logic.
6
+ #
7
+ # ******** NOTE ********
8
+ # We have attempted to detect the languages in your repository. Please check
9
+ # the `language` matrix defined below to confirm you have the correct set of
10
+ # supported CodeQL languages.
11
+ #
12
+ name: "CodeQL"
13
+
14
+ on:
15
+ push:
16
+ branches: [ master ]
17
+ pull_request:
18
+ # The branches below must be a subset of the branches above
19
+ branches: [ master ]
20
+ schedule:
21
+ - cron: '16 15 * * 2'
22
+
23
+ jobs:
24
+ analyze:
25
+ name: Analyze
26
+ runs-on: ubuntu-latest
27
+
28
+ strategy:
29
+ fail-fast: false
30
+ matrix:
31
+ language: [ 'python' ]
32
+ # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
33
+ # Learn more:
34
+ # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
35
+
36
+ steps:
37
+ - name: Checkout repository
38
+ uses: actions/checkout@v2
39
+
40
+ # Initializes the CodeQL tools for scanning.
41
+ - name: Initialize CodeQL
42
+ uses: github/codeql-action/init@v1
43
+ with:
44
+ languages: ${{ matrix.language }}
45
+ # If you wish to specify custom queries, you can do so here or in a config file.
46
+ # By default, queries listed here will override any specified in a config file.
47
+ # Prefix the list here with "+" to use these queries and those in the config file.
48
+ # queries: ./path/to/local/query, your-org/your-repo/queries@main
49
+
50
+ # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
51
+ # If this step fails, then you should remove it and run the build manually (see below)
52
+ - name: Autobuild
53
+ uses: github/codeql-action/autobuild@v1
54
+
55
+ # ℹ️ Command-line programs to run using the OS shell.
56
+ # 📚 https://git.io/JvXDl
57
+
58
+ # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
59
+ # and modify them (or add more) to build your code if your project
60
+ # uses a compiled language
61
+
62
+ #- run: |
63
+ # make bootstrap
64
+ # make release
65
+
66
+ - name: Perform CodeQL Analysis
67
+ uses: github/codeql-action/analyze@v1
.github/workflows/routine-tests.yml ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: pytest
2
+
3
+ on:
4
+ push:
5
+
6
+ jobs:
7
+ flake8-pytest:
8
+ strategy:
9
+ fail-fast: false
10
+ matrix:
11
+ python-version: [3.8]
12
+ poetry-version: [1.1.2]
13
+ os: [ubuntu-18.04, macos-latest, windows-latest]
14
+ runs-on: ${{ matrix.os }}
15
+ steps:
16
+ - uses: actions/checkout@v2
17
+ - uses: actions/setup-python@v2
18
+ with:
19
+ python-version: ${{ matrix.python-version }}
20
+ - uses: abatilo/[email protected]
21
+ with:
22
+ poetry-version: ${{ matrix.poetry-version }}
23
+ - name: Install packages
24
+ run: poetry install # --no-dev
25
+ - name: Run flake8
26
+ run: |
27
+ poetry run flake8 --exit-zero
28
+ # poetry run pytest
29
+ - name: Run pytest
30
+ run: poetry run pytest tests
.gitignore ADDED
@@ -0,0 +1,145 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py,cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ .pybuilder/
76
+ target/
77
+
78
+ # Jupyter Notebook
79
+ .ipynb_checkpoints
80
+
81
+ # IPython
82
+ profile_default/
83
+ ipython_config.py
84
+
85
+ # pyenv
86
+ # For a library or package, you might want to ignore these files since the code is
87
+ # intended to run in multiple environments; otherwise, check them in:
88
+ # .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ #Pipfile.lock
96
+
97
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow
98
+ __pypackages__/
99
+
100
+ # Celery stuff
101
+ celerybeat-schedule
102
+ celerybeat.pid
103
+
104
+ # SageMath parsed files
105
+ *.sage.py
106
+
107
+ # Environments
108
+ .env
109
+ .venv
110
+ env/
111
+ venv/
112
+ ENV/
113
+ env.bak/
114
+ venv.bak/
115
+
116
+ # Spyder project settings
117
+ .spyderproject
118
+ .spyproject
119
+
120
+ # Rope project settings
121
+ .ropeproject
122
+
123
+ # mkdocs documentation
124
+ /site
125
+
126
+ # mypy
127
+ .mypy_cache/
128
+ .dmypy.json
129
+ dmypy.json
130
+
131
+ # Pyre type checker
132
+ .pyre/
133
+
134
+ # pytype static type analyzer
135
+ .pytype/
136
+
137
+ # Cython debug symbols
138
+ cython_debug/
139
+ *.bat
140
+ *.swp
141
+ links/
142
+ # .gitignore
143
+ node_modules
144
+ tests\ff-en.lzma
145
+ tests/ff-en.lzma
.stignore ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .git
2
+ # Byte-compiled / optimized / DLL files
3
+ __pycache__
4
+ *.py[cod]
5
+ *$py.class
6
+
7
+ # C extensions
8
+ *.so
9
+
10
+ # Distribution / packaging
11
+ .Python
12
+ build
13
+ develop-eggs
14
+ dist
15
+ downloads
16
+ eggs
17
+ .eggs
18
+ lib
19
+ lib64
20
+ parts
21
+ sdist
22
+ var
23
+ wheels
24
+ pip-wheel-metadata
25
+ share/python-wheels
26
+ *.egg-info
27
+ .installed.cfg
28
+ *.egg
29
+ MANIFEST
30
+
31
+ # PyInstaller
32
+ # Usually these files are written by a python script from a template
33
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
34
+ *.manifest
35
+ *.spec
36
+
37
+ # Installer logs
38
+ pip-log.txt
39
+ pip-delete-this-directory.txt
40
+
41
+ # Translations
42
+ *.mo
43
+ *.pot
44
+
45
+ # Django stuff:
46
+ *.log
47
+ local_settings.py
48
+ db.sqlite3
49
+
50
+ # Flask stuff:
51
+ instance
52
+ .webassets-cache
53
+
54
+ # Scrapy stuff:
55
+ .scrapy
56
+
57
+ # Sphinx documentation
58
+ docs/_build
59
+
60
+ # PyBuilder
61
+ target
62
+
63
+ # Jupyter Notebook
64
+ .ipynb_checkpoints
65
+
66
+ # IPython
67
+ profile_default
68
+ ipython_config.py
69
+
70
+ # pyenv
71
+ .python-version
72
+
73
+ # celery beat schedule file
74
+ celerybeat-schedule
75
+
76
+ # SageMath parsed files
77
+ *.sage.py
78
+
79
+ # Environments
80
+ .env
81
+ .venv
82
+ env
83
+ venv
84
+ ENV
85
+ env.bak
86
+ venv.bak
87
+
88
+ # Spyder project settings
89
+ .spyderproject
90
+ .spyproject
91
+
92
+ # Rope project settings
93
+ .ropeproject
94
+
95
+ # mypy
96
+ .mypy_cache
97
+ .dmypy.json
98
+ dmypy.json
99
+
100
+ # Pyre type checker
101
+ .pyre
LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2020 ffreemt
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
README1.md ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # radio-embed-p
2
+ [![pytest](https://github.com/ffreemt/radio-embed-p/actions/workflows/routine-tests.yml/badge.svg)](https://github.com/ffreemt/radio-embed-p/actions)[![python](https://img.shields.io/static/v1?label=python+&message=3.8%2B&color=blue)](https://www.python.org/downloads/)[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)[![PyPI version](https://badge.fury.io/py/radio_embed_p.svg)](https://badge.fury.io/py/radio_embed_p)
3
+
4
+ radio-embed parallel
5
+
6
+ ## Install it
7
+
8
+ ```shell
9
+ # pip install git+https://github.com/ffreemt/radio-embed-p
10
+ # poetry add git+https://github.com/ffreemt/radio-embed-p
11
+ # git clone https://github.com/ffreemt/radio-embed-p && cd radio-embed-p
12
+ ```
app.py ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Create entry."""
2
+ # pylint: disbale=invalid-name
3
+ import os
4
+ import time
5
+ from pathlib import Path
6
+
7
+ import gradio as gr
8
+ import logzero
9
+ import pandas as pd
10
+ from about_time import about_time
11
+ from icecream import install as ic_install, ic
12
+ from logzero import logger
13
+ from set_loglevel import set_loglevel
14
+
15
+ from radio_embed_p import __version__, radio_embed_p
16
+
17
+ os.environ["LOGLEVEL"] = "10" # turn debug on
18
+ os.environ["LOGLEVEL"] = "20" # turn debug off
19
+ logzero.loglevel(set_loglevel())
20
+ if set_loglevel() <= 10:
21
+ logger.info(" debug is on ")
22
+ else:
23
+ logger.info(" debug is off ")
24
+
25
+ ic_install()
26
+ ic.configureOutput(
27
+ includeContext=True,
28
+ outputFunction=logger.info,
29
+ )
30
+ # ic.enable()
31
+ ic.disable() # to turn off
32
+
33
+ os.environ["TZ"] = "Asia/Shanghai"
34
+ try:
35
+ time.tzset() # type: ignore
36
+ except Exception as _:
37
+ logger.warning("time.tzset() error: %s. Probably running Windows, we let it pass.", _)
38
+
39
+
40
+ iface = gr.Interface(
41
+ fn=radio_embed_p,
42
+ inputs="textarea",
43
+ outputs="dataframe",
44
+ title=f"radio-embed {__version__}",
45
+ description="embed in parallel rest api via gradio",
46
+ examples=[
47
+ ["test\n测试"]
48
+ ],
49
+ allow_flagging="never",
50
+ )
51
+
52
+ debug = False
53
+ if set_loglevel() <= 10:
54
+ debug = True
55
+
56
+ iface.launch(
57
+ show_error=debug,
58
+ enable_queue=True,
59
+ debug=debug,
60
+ )
install-sw.sh ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # pip install pipx
2
+ # pipx install poetry
3
+ # pipx ensurepath
4
+ # source ~/.bashrc
5
+
6
+ # curl -sSL https://install.python-poetry.org | python3 -
7
+ # -C- continue -S show error -o output
8
+ curl -sSL -C- -o install-poetry.py https://install.python-poetry.org
9
+ python install-poetry.py
10
+ rm install-poetry.py
11
+ echo export PATH=~/.local/bin:$PATH > ~/.bashrc
12
+ source ~/.bashrc
13
+ # ~/.local/bin/poetry install
14
+
15
+ wget -c https://deb.nodesource.com/setup_14.x
16
+ bash setup_14.x
17
+ apt-get install -y nodejs
18
+ npm install -g npm@latest
19
+ npm install -g nodemon
20
+ rm setup_14.x
21
+
22
+ # apt upate # alerady done in apt-get install -y nodejs
23
+ apt install byobu -y > /dev/null 2>&1
install-sw1.sh ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # pip install pipx
2
+ # pipx install poetry
3
+ # pipx ensurepath
4
+ # source ~/.bashrc
5
+
6
+ # curl -sSL https://install.python-poetry.org | python3 -
7
+ # -C- continue -S show error -o output
8
+ curl -sSL -C- -o install-poetry.py https://install.python-poetry.org
9
+ python install-poetry.py
10
+ rm install-poetry.py
11
+ echo export PATH=~/.local/bin:$PATH > ~/.bashrc
12
+ source ~/.bashrc
13
+ # ~/.local/bin/poetry install
14
+
15
+ wget -c https://deb.nodesource.com/setup_12.x
16
+ bash setup_14.x
17
+ apt-get install -y nodejs
18
+ npm install -g npm@latest
19
+ npm install -g nodemon
20
+ rm setup_14.x
21
+
22
+ # apt update # alerady done in apt-get install -y nodejs
23
+ apt install byobu -y > /dev/null 2>&1
24
+ byobu-enable
25
+ byobu
nodemon.json ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "restartable": "rs",
3
+ "ignore": [
4
+ ".venv",
5
+ ".git",
6
+ "node_modules/**/node_modules"
7
+ ],
8
+ "verbose": true,
9
+ "execMap": {
10
+ "js": "node --harmony"
11
+ },
12
+ "watch": [
13
+ "tests",
14
+ "test/fixtures/",
15
+ "test/samples/"
16
+ ],
17
+ "env": {
18
+ "NODE_ENV": "development"
19
+ },
20
+ "ext": "js json py"
21
+ }
okteto.yml ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: gradio-cmat
2
+
3
+ # The build section defines how to build the images of
4
+ # your development environment
5
+ # More info: https://www.okteto.com/docs/reference/manifest/#build
6
+ # build:
7
+ # my-service:
8
+ # context: .
9
+
10
+ # The deploy section defines how to deploy your development environment
11
+ # More info: https://www.okteto.com/docs/reference/manifest/#deploy
12
+ # deploy:
13
+ # commands:
14
+ # - name: Deploy
15
+ # command: echo 'Replace this line with the proper 'helm'
16
+
17
+ # or 'kubectl' commands to deploy your development environment'
18
+
19
+ # The dependencies section defines other git repositories to be
20
+ # deployed as part of your development environment
21
+ # More info: https://www.okteto.com/docs/reference/manifest/#dependencies
22
+ # dependencies:
23
+ # - https://github.com/okteto/sample
24
+ # The dev section defines how to activate a development container
25
+ # More info: https://www.okteto.com/docs/reference/manifest/#dev
26
+ dev:
27
+ gradio-cmat:
28
+ # image: okteto/dev:latest
29
+ # image: python:3.8.13-bullseye
30
+ # image: simbachain/poetry-3.8
31
+ image: python:3.8
32
+ command: bash
33
+ workdir: /usr/src/app
34
+ sync:
35
+ - .:/usr/src/app
36
+ environment:
37
+ - name=$USER
38
+ forward:
39
+ - 7861:7861
40
+ - 7860:7860
41
+ - 8501:8501
42
+ - 22:22
43
+ reverse:
44
+ - 9000:9000
45
+ autocreate: true
package.json ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "dependencies": {
3
+ "npm-run-all": "^4.1.5"
4
+ },
5
+ "scripts": {
6
+ "start": "pyright && pytest && yarn style",
7
+ "test": "nodemon -w tests -w radio_embed_p -x pytest tests",
8
+ "pyright": "nodemon -w radio_embed_p -w .venv -e .py -x pyright radio_embed_p tests",
9
+ "pytest": "nodemon -w tests -w radio_embed_p -e .py -x pytest tests radio_embed_p",
10
+ "style": "nodemon -w radio_embed_p -w tests -x \"black tests radio_embed_p && python -m flake8\"",
11
+ "docstyle": "nodemon -w radio_embed_p -w tests -x pydocstyle --convention=google tests radio_embed_p",
12
+ "pylint": "nodemon -w radio_embed_p -e .py -x pylint radio_embed_p",
13
+ "test:radio_embed_p": "nodemon -w tests -e .py -x pytest -k radio_embed_p tests",
14
+ "publish": "poetry build && poetry publish",
15
+ "black": "black tests radio_embed_p",
16
+ "flake8": "flake8 tests radio_embed_p",
17
+ "pflake8": "pflake8 tests radio_embed_p",
18
+ "pep257": "pep257 tests radio_embed_p",
19
+ "final": "run-s docstyle black flake8 pytest"
20
+ }
21
+ }
poetry.lock ADDED
@@ -0,0 +1,850 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [[package]]
2
+ name = "astroid"
3
+ version = "2.11.7"
4
+ description = "An abstract syntax tree for Python with inference support."
5
+ category = "dev"
6
+ optional = false
7
+ python-versions = ">=3.6.2"
8
+
9
+ [package.dependencies]
10
+ lazy-object-proxy = ">=1.4.0"
11
+ typing-extensions = {version = ">=3.10", markers = "python_version < \"3.10\""}
12
+ wrapt = ">=1.11,<2"
13
+
14
+ [[package]]
15
+ name = "asttokens"
16
+ version = "2.0.7"
17
+ description = "Annotate AST trees with source code positions"
18
+ category = "main"
19
+ optional = false
20
+ python-versions = "*"
21
+
22
+ [package.dependencies]
23
+ six = "*"
24
+
25
+ [package.extras]
26
+ test = ["astroid (<=2.5.3)", "pytest"]
27
+
28
+ [[package]]
29
+ name = "atomicwrites"
30
+ version = "1.4.1"
31
+ description = "Atomic file writes."
32
+ category = "dev"
33
+ optional = false
34
+ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
35
+
36
+ [[package]]
37
+ name = "attrs"
38
+ version = "22.1.0"
39
+ description = "Classes Without Boilerplate"
40
+ category = "dev"
41
+ optional = false
42
+ python-versions = ">=3.5"
43
+
44
+ [package.extras]
45
+ dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
46
+ docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
47
+ tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope.interface", "cloudpickle"]
48
+ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "cloudpickle"]
49
+
50
+ [[package]]
51
+ name = "black"
52
+ version = "22.6.0"
53
+ description = "The uncompromising code formatter."
54
+ category = "dev"
55
+ optional = false
56
+ python-versions = ">=3.6.2"
57
+
58
+ [package.dependencies]
59
+ click = ">=8.0.0"
60
+ mypy-extensions = ">=0.4.3"
61
+ pathspec = ">=0.9.0"
62
+ platformdirs = ">=2"
63
+ tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""}
64
+ typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""}
65
+
66
+ [package.extras]
67
+ colorama = ["colorama (>=0.4.3)"]
68
+ d = ["aiohttp (>=3.7.4)"]
69
+ jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"]
70
+ uvloop = ["uvloop (>=0.15.2)"]
71
+
72
+ [[package]]
73
+ name = "click"
74
+ version = "8.1.3"
75
+ description = "Composable command line interface toolkit"
76
+ category = "main"
77
+ optional = false
78
+ python-versions = ">=3.7"
79
+
80
+ [package.dependencies]
81
+ colorama = {version = "*", markers = "platform_system == \"Windows\""}
82
+
83
+ [[package]]
84
+ name = "colorama"
85
+ version = "0.4.5"
86
+ description = "Cross-platform colored terminal text."
87
+ category = "main"
88
+ optional = false
89
+ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
90
+
91
+ [[package]]
92
+ name = "dill"
93
+ version = "0.3.5.1"
94
+ description = "serialize all of python"
95
+ category = "dev"
96
+ optional = false
97
+ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*"
98
+
99
+ [package.extras]
100
+ graph = ["objgraph (>=1.7.2)"]
101
+
102
+ [[package]]
103
+ name = "environs"
104
+ version = "9.5.0"
105
+ description = "simplified environment variable parsing"
106
+ category = "main"
107
+ optional = false
108
+ python-versions = ">=3.6"
109
+
110
+ [package.dependencies]
111
+ marshmallow = ">=3.0.0"
112
+ python-dotenv = "*"
113
+
114
+ [package.extras]
115
+ dev = ["pytest", "dj-database-url", "dj-email-url", "django-cache-url", "flake8 (==4.0.1)", "flake8-bugbear (==21.9.2)", "mypy (==0.910)", "pre-commit (>=2.4,<3.0)", "tox"]
116
+ django = ["dj-database-url", "dj-email-url", "django-cache-url"]
117
+ lint = ["flake8 (==4.0.1)", "flake8-bugbear (==21.9.2)", "mypy (==0.910)", "pre-commit (>=2.4,<3.0)"]
118
+ tests = ["pytest", "dj-database-url", "dj-email-url", "django-cache-url"]
119
+
120
+ [[package]]
121
+ name = "executing"
122
+ version = "0.9.1"
123
+ description = "Get the currently executing AST node of a frame, and other information"
124
+ category = "main"
125
+ optional = false
126
+ python-versions = "*"
127
+
128
+ [[package]]
129
+ name = "flake8"
130
+ version = "3.9.2"
131
+ description = "the modular source code checker: pep8 pyflakes and co"
132
+ category = "dev"
133
+ optional = false
134
+ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
135
+
136
+ [package.dependencies]
137
+ mccabe = ">=0.6.0,<0.7.0"
138
+ pycodestyle = ">=2.7.0,<2.8.0"
139
+ pyflakes = ">=2.3.0,<2.4.0"
140
+
141
+ [[package]]
142
+ name = "icecream"
143
+ version = "2.1.3"
144
+ description = "Never use print() to debug again; inspect variables, expressions, and program execution with a single, simple function call."
145
+ category = "main"
146
+ optional = false
147
+ python-versions = "*"
148
+
149
+ [package.dependencies]
150
+ asttokens = ">=2.0.1"
151
+ colorama = ">=0.3.9"
152
+ executing = ">=0.3.1"
153
+ pygments = ">=2.2.0"
154
+
155
+ [[package]]
156
+ name = "iniconfig"
157
+ version = "1.1.1"
158
+ description = "iniconfig: brain-dead simple config-ini parsing"
159
+ category = "dev"
160
+ optional = false
161
+ python-versions = "*"
162
+
163
+ [[package]]
164
+ name = "install"
165
+ version = "1.3.5"
166
+ description = "Install packages from within code"
167
+ category = "main"
168
+ optional = false
169
+ python-versions = ">=2.7, >=3.5"
170
+
171
+ [[package]]
172
+ name = "isort"
173
+ version = "5.10.1"
174
+ description = "A Python utility / library to sort Python imports."
175
+ category = "dev"
176
+ optional = false
177
+ python-versions = ">=3.6.1,<4.0"
178
+
179
+ [package.extras]
180
+ pipfile_deprecated_finder = ["pipreqs", "requirementslib"]
181
+ requirements_deprecated_finder = ["pipreqs", "pip-api"]
182
+ colors = ["colorama (>=0.4.3,<0.5.0)"]
183
+ plugins = ["setuptools"]
184
+
185
+ [[package]]
186
+ name = "joblib"
187
+ version = "1.1.0"
188
+ description = "Lightweight pipelining with Python functions"
189
+ category = "dev"
190
+ optional = false
191
+ python-versions = ">=3.6"
192
+
193
+ [[package]]
194
+ name = "lazy-object-proxy"
195
+ version = "1.7.1"
196
+ description = "A fast and thorough lazy object proxy."
197
+ category = "dev"
198
+ optional = false
199
+ python-versions = ">=3.6"
200
+
201
+ [[package]]
202
+ name = "logzero"
203
+ version = "1.7.0"
204
+ description = "Robust and effective logging for Python 2 and 3"
205
+ category = "main"
206
+ optional = false
207
+ python-versions = "*"
208
+
209
+ [package.dependencies]
210
+ colorama = {version = "*", markers = "sys_platform == \"win32\""}
211
+
212
+ [[package]]
213
+ name = "marshmallow"
214
+ version = "3.17.0"
215
+ description = "A lightweight library for converting complex datatypes to and from native Python datatypes."
216
+ category = "main"
217
+ optional = false
218
+ python-versions = ">=3.7"
219
+
220
+ [package.dependencies]
221
+ packaging = ">=17.0"
222
+
223
+ [package.extras]
224
+ dev = ["pytest", "pytz", "simplejson", "mypy (==0.961)", "flake8 (==4.0.1)", "flake8-bugbear (==22.6.22)", "pre-commit (>=2.4,<3.0)", "tox"]
225
+ docs = ["sphinx (==4.5.0)", "sphinx-issues (==3.0.1)", "alabaster (==0.7.12)", "sphinx-version-warning (==1.1.2)", "autodocsumm (==0.2.8)"]
226
+ lint = ["mypy (==0.961)", "flake8 (==4.0.1)", "flake8-bugbear (==22.6.22)", "pre-commit (>=2.4,<3.0)"]
227
+ tests = ["pytest", "pytz", "simplejson"]
228
+
229
+ [[package]]
230
+ name = "mccabe"
231
+ version = "0.6.1"
232
+ description = "McCabe checker, plugin for flake8"
233
+ category = "dev"
234
+ optional = false
235
+ python-versions = "*"
236
+
237
+ [[package]]
238
+ name = "more-itertools"
239
+ version = "8.14.0"
240
+ description = "More routines for operating on iterables, beyond itertools"
241
+ category = "main"
242
+ optional = false
243
+ python-versions = ">=3.5"
244
+
245
+ [[package]]
246
+ name = "mypy-extensions"
247
+ version = "0.4.3"
248
+ description = "Experimental type system extensions for programs checked with the mypy typechecker."
249
+ category = "dev"
250
+ optional = false
251
+ python-versions = "*"
252
+
253
+ [[package]]
254
+ name = "nodeenv"
255
+ version = "1.7.0"
256
+ description = "Node.js virtual environment builder"
257
+ category = "dev"
258
+ optional = false
259
+ python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*"
260
+
261
+ [[package]]
262
+ name = "packaging"
263
+ version = "21.3"
264
+ description = "Core utilities for Python packages"
265
+ category = "main"
266
+ optional = false
267
+ python-versions = ">=3.6"
268
+
269
+ [package.dependencies]
270
+ pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
271
+
272
+ [[package]]
273
+ name = "pastel"
274
+ version = "0.2.1"
275
+ description = "Bring colors to your terminal."
276
+ category = "dev"
277
+ optional = false
278
+ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
279
+
280
+ [[package]]
281
+ name = "pathspec"
282
+ version = "0.9.0"
283
+ description = "Utility library for gitignore style pattern matching of file paths."
284
+ category = "dev"
285
+ optional = false
286
+ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
287
+
288
+ [[package]]
289
+ name = "platformdirs"
290
+ version = "2.5.2"
291
+ description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
292
+ category = "dev"
293
+ optional = false
294
+ python-versions = ">=3.7"
295
+
296
+ [package.extras]
297
+ docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"]
298
+ test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"]
299
+
300
+ [[package]]
301
+ name = "pluggy"
302
+ version = "1.0.0"
303
+ description = "plugin and hook calling mechanisms for python"
304
+ category = "dev"
305
+ optional = false
306
+ python-versions = ">=3.6"
307
+
308
+ [package.extras]
309
+ testing = ["pytest-benchmark", "pytest"]
310
+ dev = ["tox", "pre-commit"]
311
+
312
+ [[package]]
313
+ name = "poethepoet"
314
+ version = "0.10.0"
315
+ description = "A task runner that works well with poetry."
316
+ category = "dev"
317
+ optional = false
318
+ python-versions = ">=3.6,<4.0"
319
+
320
+ [package.dependencies]
321
+ pastel = ">=0.2.0,<0.3.0"
322
+ tomlkit = ">=0.6.0,<1.0.0"
323
+
324
+ [[package]]
325
+ name = "py"
326
+ version = "1.11.0"
327
+ description = "library with cross-python path, ini-parsing, io, code, log facilities"
328
+ category = "dev"
329
+ optional = false
330
+ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
331
+
332
+ [[package]]
333
+ name = "pycodestyle"
334
+ version = "2.7.0"
335
+ description = "Python style guide checker"
336
+ category = "dev"
337
+ optional = false
338
+ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
339
+
340
+ [[package]]
341
+ name = "pydocstyle"
342
+ version = "6.1.1"
343
+ description = "Python docstring style checker"
344
+ category = "dev"
345
+ optional = false
346
+ python-versions = ">=3.6"
347
+
348
+ [package.dependencies]
349
+ snowballstemmer = "*"
350
+
351
+ [package.extras]
352
+ toml = ["toml"]
353
+
354
+ [[package]]
355
+ name = "pyflakes"
356
+ version = "2.3.1"
357
+ description = "passive checker of Python programs"
358
+ category = "dev"
359
+ optional = false
360
+ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
361
+
362
+ [[package]]
363
+ name = "pygments"
364
+ version = "2.12.0"
365
+ description = "Pygments is a syntax highlighting package written in Python."
366
+ category = "main"
367
+ optional = false
368
+ python-versions = ">=3.6"
369
+
370
+ [[package]]
371
+ name = "pylint"
372
+ version = "2.14.5"
373
+ description = "python code static checker"
374
+ category = "dev"
375
+ optional = false
376
+ python-versions = ">=3.7.2"
377
+
378
+ [package.dependencies]
379
+ astroid = ">=2.11.6,<=2.12.0-dev0"
380
+ colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""}
381
+ dill = ">=0.2"
382
+ isort = ">=4.2.5,<6"
383
+ mccabe = ">=0.6,<0.8"
384
+ platformdirs = ">=2.2.0"
385
+ tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}
386
+ tomlkit = ">=0.10.1"
387
+ typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""}
388
+
389
+ [package.extras]
390
+ spelling = ["pyenchant (>=3.2,<4.0)"]
391
+ testutils = ["gitpython (>3)"]
392
+
393
+ [[package]]
394
+ name = "pyparsing"
395
+ version = "3.0.9"
396
+ description = "pyparsing module - Classes and methods to define and execute parsing grammars"
397
+ category = "main"
398
+ optional = false
399
+ python-versions = ">=3.6.8"
400
+
401
+ [package.extras]
402
+ diagrams = ["railroad-diagrams", "jinja2"]
403
+
404
+ [[package]]
405
+ name = "pyright"
406
+ version = "1.1.266"
407
+ description = "Command line wrapper for pyright"
408
+ category = "dev"
409
+ optional = false
410
+ python-versions = ">=3.7"
411
+
412
+ [package.dependencies]
413
+ nodeenv = ">=1.6.0"
414
+
415
+ [package.extras]
416
+ all = ["twine (>=3.4.1)"]
417
+ dev = ["twine (>=3.4.1)"]
418
+
419
+ [[package]]
420
+ name = "pytest"
421
+ version = "7.1.2"
422
+ description = "pytest: simple powerful testing with Python"
423
+ category = "dev"
424
+ optional = false
425
+ python-versions = ">=3.7"
426
+
427
+ [package.dependencies]
428
+ atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""}
429
+ attrs = ">=19.2.0"
430
+ colorama = {version = "*", markers = "sys_platform == \"win32\""}
431
+ iniconfig = "*"
432
+ packaging = "*"
433
+ pluggy = ">=0.12,<2.0"
434
+ py = ">=1.8.2"
435
+ tomli = ">=1.0.0"
436
+
437
+ [package.extras]
438
+ testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"]
439
+
440
+ [[package]]
441
+ name = "python-dotenv"
442
+ version = "0.20.0"
443
+ description = "Read key-value pairs from a .env file and set them as environment variables"
444
+ category = "main"
445
+ optional = false
446
+ python-versions = ">=3.5"
447
+
448
+ [package.extras]
449
+ cli = ["click (>=5.0)"]
450
+
451
+ [[package]]
452
+ name = "set-loglevel"
453
+ version = "0.1.2"
454
+ description = "Return a loglevel (10, 20, etc.) taking ENV LOGLEVEL into account"
455
+ category = "main"
456
+ optional = false
457
+ python-versions = ">=3.8.3,<4.0.0"
458
+
459
+ [package.dependencies]
460
+ environs = ">=9.5.0,<10.0.0"
461
+ logzero = ">=1.7.0,<2.0.0"
462
+
463
+ [[package]]
464
+ name = "six"
465
+ version = "1.16.0"
466
+ description = "Python 2 and 3 compatibility utilities"
467
+ category = "main"
468
+ optional = false
469
+ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
470
+
471
+ [[package]]
472
+ name = "snowballstemmer"
473
+ version = "2.2.0"
474
+ description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms."
475
+ category = "dev"
476
+ optional = false
477
+ python-versions = "*"
478
+
479
+ [[package]]
480
+ name = "toml"
481
+ version = "0.10.2"
482
+ description = "Python Library for Tom's Obvious, Minimal Language"
483
+ category = "dev"
484
+ optional = false
485
+ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
486
+
487
+ [[package]]
488
+ name = "tomli"
489
+ version = "2.0.1"
490
+ description = "A lil' TOML parser"
491
+ category = "dev"
492
+ optional = false
493
+ python-versions = ">=3.7"
494
+
495
+ [[package]]
496
+ name = "tomlkit"
497
+ version = "0.11.3"
498
+ description = "Style preserving TOML library"
499
+ category = "dev"
500
+ optional = false
501
+ python-versions = ">=3.6,<4.0"
502
+
503
+ [[package]]
504
+ name = "typer"
505
+ version = "0.4.2"
506
+ description = "Typer, build great CLIs. Easy to code. Based on Python type hints."
507
+ category = "main"
508
+ optional = false
509
+ python-versions = ">=3.6"
510
+
511
+ [package.dependencies]
512
+ click = ">=7.1.1,<9.0.0"
513
+
514
+ [package.extras]
515
+ test = ["isort (>=5.0.6,<6.0.0)", "black (>=22.3.0,<23.0.0)", "mypy (==0.910)", "pytest-sugar (>=0.9.4,<0.10.0)", "pytest-xdist (>=1.32.0,<2.0.0)", "coverage (>=5.2,<6.0)", "pytest-cov (>=2.10.0,<3.0.0)", "pytest (>=4.4.0,<5.4.0)", "shellingham (>=1.3.0,<2.0.0)"]
516
+ doc = ["mdx-include (>=1.4.1,<2.0.0)", "mkdocs-material (>=8.1.4,<9.0.0)", "mkdocs (>=1.1.2,<2.0.0)"]
517
+ dev = ["pre-commit (>=2.17.0,<3.0.0)", "flake8 (>=3.8.3,<4.0.0)", "autoflake (>=1.3.1,<2.0.0)"]
518
+ all = ["shellingham (>=1.3.0,<2.0.0)", "colorama (>=0.4.3,<0.5.0)"]
519
+
520
+ [[package]]
521
+ name = "typing-extensions"
522
+ version = "4.3.0"
523
+ description = "Backported and Experimental Type Hints for Python 3.7+"
524
+ category = "dev"
525
+ optional = false
526
+ python-versions = ">=3.7"
527
+
528
+ [[package]]
529
+ name = "wrapt"
530
+ version = "1.14.1"
531
+ description = "Module for decorators, wrappers and monkey patching."
532
+ category = "dev"
533
+ optional = false
534
+ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
535
+
536
+ [metadata]
537
+ lock-version = "1.1"
538
+ python-versions = "^3.8.3"
539
+ content-hash = "3ebd832872060b7bc7a8a30dd9d0d64bb3dd2ddbb5a8f6879832a0d975f73583"
540
+
541
+ [metadata.files]
542
+ astroid = [
543
+ {file = "astroid-2.11.7-py3-none-any.whl", hash = "sha256:86b0a340a512c65abf4368b80252754cda17c02cdbbd3f587dddf98112233e7b"},
544
+ {file = "astroid-2.11.7.tar.gz", hash = "sha256:bb24615c77f4837c707669d16907331374ae8a964650a66999da3f5ca68dc946"},
545
+ ]
546
+ asttokens = [
547
+ {file = "asttokens-2.0.7-py2.py3-none-any.whl", hash = "sha256:f5589ef8518f73dd82c15e1c19f795d8a62c133485e557c04443d4a1a730cf9f"},
548
+ {file = "asttokens-2.0.7.tar.gz", hash = "sha256:8444353e4e2a99661c8dfb85ec9c02eedded08f0006234bff7db44a06840acc2"},
549
+ ]
550
+ atomicwrites = [
551
+ {file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"},
552
+ ]
553
+ attrs = [
554
+ {file = "attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"},
555
+ {file = "attrs-22.1.0.tar.gz", hash = "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6"},
556
+ ]
557
+ black = [
558
+ {file = "black-22.6.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f586c26118bc6e714ec58c09df0157fe2d9ee195c764f630eb0d8e7ccce72e69"},
559
+ {file = "black-22.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b270a168d69edb8b7ed32c193ef10fd27844e5c60852039599f9184460ce0807"},
560
+ {file = "black-22.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6797f58943fceb1c461fb572edbe828d811e719c24e03375fd25170ada53825e"},
561
+ {file = "black-22.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c85928b9d5f83b23cee7d0efcb310172412fbf7cb9d9ce963bd67fd141781def"},
562
+ {file = "black-22.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:f6fe02afde060bbeef044af7996f335fbe90b039ccf3f5eb8f16df8b20f77666"},
563
+ {file = "black-22.6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cfaf3895a9634e882bf9d2363fed5af8888802d670f58b279b0bece00e9a872d"},
564
+ {file = "black-22.6.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94783f636bca89f11eb5d50437e8e17fbc6a929a628d82304c80fa9cd945f256"},
565
+ {file = "black-22.6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2ea29072e954a4d55a2ff58971b83365eba5d3d357352a07a7a4df0d95f51c78"},
566
+ {file = "black-22.6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e439798f819d49ba1c0bd9664427a05aab79bfba777a6db94fd4e56fae0cb849"},
567
+ {file = "black-22.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:187d96c5e713f441a5829e77120c269b6514418f4513a390b0499b0987f2ff1c"},
568
+ {file = "black-22.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:074458dc2f6e0d3dab7928d4417bb6957bb834434516f21514138437accdbe90"},
569
+ {file = "black-22.6.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a218d7e5856f91d20f04e931b6f16d15356db1c846ee55f01bac297a705ca24f"},
570
+ {file = "black-22.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:568ac3c465b1c8b34b61cd7a4e349e93f91abf0f9371eda1cf87194663ab684e"},
571
+ {file = "black-22.6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6c1734ab264b8f7929cef8ae5f900b85d579e6cbfde09d7387da8f04771b51c6"},
572
+ {file = "black-22.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9a3ac16efe9ec7d7381ddebcc022119794872abce99475345c5a61aa18c45ad"},
573
+ {file = "black-22.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:b9fd45787ba8aa3f5e0a0a98920c1012c884622c6c920dbe98dbd05bc7c70fbf"},
574
+ {file = "black-22.6.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7ba9be198ecca5031cd78745780d65a3f75a34b2ff9be5837045dce55db83d1c"},
575
+ {file = "black-22.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a3db5b6409b96d9bd543323b23ef32a1a2b06416d525d27e0f67e74f1446c8f2"},
576
+ {file = "black-22.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:560558527e52ce8afba936fcce93a7411ab40c7d5fe8c2463e279e843c0328ee"},
577
+ {file = "black-22.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b154e6bbde1e79ea3260c4b40c0b7b3109ffcdf7bc4ebf8859169a6af72cd70b"},
578
+ {file = "black-22.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:4af5bc0e1f96be5ae9bd7aaec219c901a94d6caa2484c21983d043371c733fc4"},
579
+ {file = "black-22.6.0-py3-none-any.whl", hash = "sha256:ac609cf8ef5e7115ddd07d85d988d074ed00e10fbc3445aee393e70164a2219c"},
580
+ {file = "black-22.6.0.tar.gz", hash = "sha256:6c6d39e28aed379aec40da1c65434c77d75e65bb59a1e1c283de545fb4e7c6c9"},
581
+ ]
582
+ click = [
583
+ {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"},
584
+ {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"},
585
+ ]
586
+ colorama = [
587
+ {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"},
588
+ {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"},
589
+ ]
590
+ dill = [
591
+ {file = "dill-0.3.5.1-py2.py3-none-any.whl", hash = "sha256:33501d03270bbe410c72639b350e941882a8b0fd55357580fbc873fba0c59302"},
592
+ {file = "dill-0.3.5.1.tar.gz", hash = "sha256:d75e41f3eff1eee599d738e76ba8f4ad98ea229db8b085318aa2b3333a208c86"},
593
+ ]
594
+ environs = [
595
+ {file = "environs-9.5.0-py2.py3-none-any.whl", hash = "sha256:1e549569a3de49c05f856f40bce86979e7d5ffbbc4398e7f338574c220189124"},
596
+ {file = "environs-9.5.0.tar.gz", hash = "sha256:a76307b36fbe856bdca7ee9161e6c466fd7fcffc297109a118c59b54e27e30c9"},
597
+ ]
598
+ executing = [
599
+ {file = "executing-0.9.1-py2.py3-none-any.whl", hash = "sha256:4ce4d6082d99361c0231fc31ac1a0f56979363cc6819de0b1410784f99e49105"},
600
+ {file = "executing-0.9.1.tar.gz", hash = "sha256:ea278e2cf90cbbacd24f1080dd1f0ac25b71b2e21f50ab439b7ba45dd3195587"},
601
+ ]
602
+ flake8 = [
603
+ {file = "flake8-3.9.2-py2.py3-none-any.whl", hash = "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"},
604
+ {file = "flake8-3.9.2.tar.gz", hash = "sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b"},
605
+ ]
606
+ icecream = [
607
+ {file = "icecream-2.1.3-py2.py3-none-any.whl", hash = "sha256:757aec31ad4488b949bc4f499d18e6e5973c40cc4d4fc607229e78cfaec94c34"},
608
+ {file = "icecream-2.1.3.tar.gz", hash = "sha256:0aa4a7c3374ec36153a1d08f81e3080e83d8ac1eefd97d2f4fe9544e8f9b49de"},
609
+ ]
610
+ iniconfig = [
611
+ {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
612
+ {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"},
613
+ ]
614
+ install = [
615
+ {file = "install-1.3.5-py3-none-any.whl", hash = "sha256:0d3fadf4aa62c95efe8d34757c8507eb46177f86c016c21c6551eafc6a53d5a9"},
616
+ {file = "install-1.3.5.tar.gz", hash = "sha256:e67c8a0be5ccf8cb4ffa17d090f3a61b6e820e6a7e21cd1d2c0f7bc59b18e647"},
617
+ ]
618
+ isort = [
619
+ {file = "isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"},
620
+ {file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"},
621
+ ]
622
+ joblib = [
623
+ {file = "joblib-1.1.0-py2.py3-none-any.whl", hash = "sha256:f21f109b3c7ff9d95f8387f752d0d9c34a02aa2f7060c2135f465da0e5160ff6"},
624
+ {file = "joblib-1.1.0.tar.gz", hash = "sha256:4158fcecd13733f8be669be0683b96ebdbbd38d23559f54dca7205aea1bf1e35"},
625
+ ]
626
+ lazy-object-proxy = [
627
+ {file = "lazy-object-proxy-1.7.1.tar.gz", hash = "sha256:d609c75b986def706743cdebe5e47553f4a5a1da9c5ff66d76013ef396b5a8a4"},
628
+ {file = "lazy_object_proxy-1.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bb8c5fd1684d60a9902c60ebe276da1f2281a318ca16c1d0a96db28f62e9166b"},
629
+ {file = "lazy_object_proxy-1.7.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a57d51ed2997e97f3b8e3500c984db50a554bb5db56c50b5dab1b41339b37e36"},
630
+ {file = "lazy_object_proxy-1.7.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd45683c3caddf83abbb1249b653a266e7069a09f486daa8863fb0e7496a9fdb"},
631
+ {file = "lazy_object_proxy-1.7.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8561da8b3dd22d696244d6d0d5330618c993a215070f473b699e00cf1f3f6443"},
632
+ {file = "lazy_object_proxy-1.7.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fccdf7c2c5821a8cbd0a9440a456f5050492f2270bd54e94360cac663398739b"},
633
+ {file = "lazy_object_proxy-1.7.1-cp310-cp310-win32.whl", hash = "sha256:898322f8d078f2654d275124a8dd19b079080ae977033b713f677afcfc88e2b9"},
634
+ {file = "lazy_object_proxy-1.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:85b232e791f2229a4f55840ed54706110c80c0a210d076eee093f2b2e33e1bfd"},
635
+ {file = "lazy_object_proxy-1.7.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:46ff647e76f106bb444b4533bb4153c7370cdf52efc62ccfc1a28bdb3cc95442"},
636
+ {file = "lazy_object_proxy-1.7.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12f3bb77efe1367b2515f8cb4790a11cffae889148ad33adad07b9b55e0ab22c"},
637
+ {file = "lazy_object_proxy-1.7.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c19814163728941bb871240d45c4c30d33b8a2e85972c44d4e63dd7107faba44"},
638
+ {file = "lazy_object_proxy-1.7.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:e40f2013d96d30217a51eeb1db28c9ac41e9d0ee915ef9d00da639c5b63f01a1"},
639
+ {file = "lazy_object_proxy-1.7.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:2052837718516a94940867e16b1bb10edb069ab475c3ad84fd1e1a6dd2c0fcfc"},
640
+ {file = "lazy_object_proxy-1.7.1-cp36-cp36m-win32.whl", hash = "sha256:6a24357267aa976abab660b1d47a34aaf07259a0c3859a34e536f1ee6e76b5bb"},
641
+ {file = "lazy_object_proxy-1.7.1-cp36-cp36m-win_amd64.whl", hash = "sha256:6aff3fe5de0831867092e017cf67e2750c6a1c7d88d84d2481bd84a2e019ec35"},
642
+ {file = "lazy_object_proxy-1.7.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6a6e94c7b02641d1311228a102607ecd576f70734dc3d5e22610111aeacba8a0"},
643
+ {file = "lazy_object_proxy-1.7.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4ce15276a1a14549d7e81c243b887293904ad2d94ad767f42df91e75fd7b5b6"},
644
+ {file = "lazy_object_proxy-1.7.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e368b7f7eac182a59ff1f81d5f3802161932a41dc1b1cc45c1f757dc876b5d2c"},
645
+ {file = "lazy_object_proxy-1.7.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6ecbb350991d6434e1388bee761ece3260e5228952b1f0c46ffc800eb313ff42"},
646
+ {file = "lazy_object_proxy-1.7.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:553b0f0d8dbf21890dd66edd771f9b1b5f51bd912fa5f26de4449bfc5af5e029"},
647
+ {file = "lazy_object_proxy-1.7.1-cp37-cp37m-win32.whl", hash = "sha256:c7a683c37a8a24f6428c28c561c80d5f4fd316ddcf0c7cab999b15ab3f5c5c69"},
648
+ {file = "lazy_object_proxy-1.7.1-cp37-cp37m-win_amd64.whl", hash = "sha256:df2631f9d67259dc9620d831384ed7732a198eb434eadf69aea95ad18c587a28"},
649
+ {file = "lazy_object_proxy-1.7.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:07fa44286cda977bd4803b656ffc1c9b7e3bc7dff7d34263446aec8f8c96f88a"},
650
+ {file = "lazy_object_proxy-1.7.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4dca6244e4121c74cc20542c2ca39e5c4a5027c81d112bfb893cf0790f96f57e"},
651
+ {file = "lazy_object_proxy-1.7.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91ba172fc5b03978764d1df5144b4ba4ab13290d7bab7a50f12d8117f8630c38"},
652
+ {file = "lazy_object_proxy-1.7.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:043651b6cb706eee4f91854da4a089816a6606c1428fd391573ef8cb642ae4f7"},
653
+ {file = "lazy_object_proxy-1.7.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b9e89b87c707dd769c4ea91f7a31538888aad05c116a59820f28d59b3ebfe25a"},
654
+ {file = "lazy_object_proxy-1.7.1-cp38-cp38-win32.whl", hash = "sha256:9d166602b525bf54ac994cf833c385bfcc341b364e3ee71e3bf5a1336e677b55"},
655
+ {file = "lazy_object_proxy-1.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:8f3953eb575b45480db6568306893f0bd9d8dfeeebd46812aa09ca9579595148"},
656
+ {file = "lazy_object_proxy-1.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dd7ed7429dbb6c494aa9bc4e09d94b778a3579be699f9d67da7e6804c422d3de"},
657
+ {file = "lazy_object_proxy-1.7.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70ed0c2b380eb6248abdef3cd425fc52f0abd92d2b07ce26359fcbc399f636ad"},
658
+ {file = "lazy_object_proxy-1.7.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7096a5e0c1115ec82641afbdd70451a144558ea5cf564a896294e346eb611be1"},
659
+ {file = "lazy_object_proxy-1.7.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f769457a639403073968d118bc70110e7dce294688009f5c24ab78800ae56dc8"},
660
+ {file = "lazy_object_proxy-1.7.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:39b0e26725c5023757fc1ab2a89ef9d7ab23b84f9251e28f9cc114d5b59c1b09"},
661
+ {file = "lazy_object_proxy-1.7.1-cp39-cp39-win32.whl", hash = "sha256:2130db8ed69a48a3440103d4a520b89d8a9405f1b06e2cc81640509e8bf6548f"},
662
+ {file = "lazy_object_proxy-1.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:677ea950bef409b47e51e733283544ac3d660b709cfce7b187f5ace137960d61"},
663
+ {file = "lazy_object_proxy-1.7.1-pp37.pp38-none-any.whl", hash = "sha256:d66906d5785da8e0be7360912e99c9188b70f52c422f9fc18223347235691a84"},
664
+ ]
665
+ logzero = [
666
+ {file = "logzero-1.7.0-py2.py3-none-any.whl", hash = "sha256:23eb1f717a2736f9ab91ca0d43160fd2c996ad49ae6bad34652d47aba908769d"},
667
+ {file = "logzero-1.7.0.tar.gz", hash = "sha256:7f73ddd3ae393457236f081ffebd044a3aa2e423a47ae6ddb5179ab90d0ad082"},
668
+ ]
669
+ marshmallow = [
670
+ {file = "marshmallow-3.17.0-py3-none-any.whl", hash = "sha256:00040ab5ea0c608e8787137627a8efae97fabd60552a05dc889c888f814e75eb"},
671
+ {file = "marshmallow-3.17.0.tar.gz", hash = "sha256:635fb65a3285a31a30f276f30e958070f5214c7196202caa5c7ecf28f5274bc7"},
672
+ ]
673
+ mccabe = [
674
+ {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"},
675
+ {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"},
676
+ ]
677
+ more-itertools = [
678
+ {file = "more-itertools-8.14.0.tar.gz", hash = "sha256:c09443cd3d5438b8dafccd867a6bc1cb0894389e90cb53d227456b0b0bccb750"},
679
+ {file = "more_itertools-8.14.0-py3-none-any.whl", hash = "sha256:1bc4f91ee5b1b31ac7ceacc17c09befe6a40a503907baf9c839c229b5095cfd2"},
680
+ ]
681
+ mypy-extensions = [
682
+ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"},
683
+ {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"},
684
+ ]
685
+ nodeenv = [
686
+ {file = "nodeenv-1.7.0-py2.py3-none-any.whl", hash = "sha256:27083a7b96a25f2f5e1d8cb4b6317ee8aeda3bdd121394e5ac54e498028a042e"},
687
+ {file = "nodeenv-1.7.0.tar.gz", hash = "sha256:e0e7f7dfb85fc5394c6fe1e8fa98131a2473e04311a45afb6508f7cf1836fa2b"},
688
+ ]
689
+ packaging = [
690
+ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
691
+ {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
692
+ ]
693
+ pastel = [
694
+ {file = "pastel-0.2.1-py2.py3-none-any.whl", hash = "sha256:4349225fcdf6c2bb34d483e523475de5bb04a5c10ef711263452cb37d7dd4364"},
695
+ {file = "pastel-0.2.1.tar.gz", hash = "sha256:e6581ac04e973cac858828c6202c1e1e81fee1dc7de7683f3e1ffe0bfd8a573d"},
696
+ ]
697
+ pathspec = [
698
+ {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"},
699
+ {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"},
700
+ ]
701
+ platformdirs = [
702
+ {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"},
703
+ {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"},
704
+ ]
705
+ pluggy = [
706
+ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
707
+ {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
708
+ ]
709
+ poethepoet = [
710
+ {file = "poethepoet-0.10.0-py3-none-any.whl", hash = "sha256:6fb3021603d4421c6fcc40072bbcf150a6c52ef70ff4d3be089b8b04e015ef5a"},
711
+ {file = "poethepoet-0.10.0.tar.gz", hash = "sha256:70b97cb194b978dc464c70793e85e6f746cddf82b84a38bfb135946ad71ae19c"},
712
+ ]
713
+ py = [
714
+ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
715
+ {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
716
+ ]
717
+ pycodestyle = [
718
+ {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"},
719
+ {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"},
720
+ ]
721
+ pydocstyle = [
722
+ {file = "pydocstyle-6.1.1-py3-none-any.whl", hash = "sha256:6987826d6775056839940041beef5c08cc7e3d71d63149b48e36727f70144dc4"},
723
+ {file = "pydocstyle-6.1.1.tar.gz", hash = "sha256:1d41b7c459ba0ee6c345f2eb9ae827cab14a7533a88c5c6f7e94923f72df92dc"},
724
+ ]
725
+ pyflakes = [
726
+ {file = "pyflakes-2.3.1-py2.py3-none-any.whl", hash = "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3"},
727
+ {file = "pyflakes-2.3.1.tar.gz", hash = "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"},
728
+ ]
729
+ pygments = [
730
+ {file = "Pygments-2.12.0-py3-none-any.whl", hash = "sha256:dc9c10fb40944260f6ed4c688ece0cd2048414940f1cea51b8b226318411c519"},
731
+ {file = "Pygments-2.12.0.tar.gz", hash = "sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb"},
732
+ ]
733
+ pylint = [
734
+ {file = "pylint-2.14.5-py3-none-any.whl", hash = "sha256:fabe30000de7d07636d2e82c9a518ad5ad7908590fe135ace169b44839c15f90"},
735
+ {file = "pylint-2.14.5.tar.gz", hash = "sha256:487ce2192eee48211269a0e976421f334cf94de1806ca9d0a99449adcdf0285e"},
736
+ ]
737
+ pyparsing = [
738
+ {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"},
739
+ {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"},
740
+ ]
741
+ pyright = [
742
+ {file = "pyright-1.1.266-py3-none-any.whl", hash = "sha256:246b2fb33c9483ac6e684e8e7619e3ecf0fee20180ec22549a4f3cdf47dbd0de"},
743
+ {file = "pyright-1.1.266.tar.gz", hash = "sha256:1154aeaaa0b62f5161af09342bf0a586468d6789377dfd8710ba8d85c22eee94"},
744
+ ]
745
+ pytest = [
746
+ {file = "pytest-7.1.2-py3-none-any.whl", hash = "sha256:13d0e3ccfc2b6e26be000cb6568c832ba67ba32e719443bfe725814d3c42433c"},
747
+ {file = "pytest-7.1.2.tar.gz", hash = "sha256:a06a0425453864a270bc45e71f783330a7428defb4230fb5e6a731fde06ecd45"},
748
+ ]
749
+ python-dotenv = [
750
+ {file = "python-dotenv-0.20.0.tar.gz", hash = "sha256:b7e3b04a59693c42c36f9ab1cc2acc46fa5df8c78e178fc33a8d4cd05c8d498f"},
751
+ {file = "python_dotenv-0.20.0-py3-none-any.whl", hash = "sha256:d92a187be61fe482e4fd675b6d52200e7be63a12b724abbf931a40ce4fa92938"},
752
+ ]
753
+ set-loglevel = [
754
+ {file = "set_loglevel-0.1.2-py3-none-any.whl", hash = "sha256:fcfe76ccd3791511e2cb51ec11ded6cc2186a727e441a934c547a211d0fdf773"},
755
+ {file = "set_loglevel-0.1.2.tar.gz", hash = "sha256:4da23414a798cea918801b113e17af092f13ccda96345203b14042b6d6d3a896"},
756
+ ]
757
+ six = [
758
+ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
759
+ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
760
+ ]
761
+ snowballstemmer = [
762
+ {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"},
763
+ {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"},
764
+ ]
765
+ toml = [
766
+ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"},
767
+ {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
768
+ ]
769
+ tomli = [
770
+ {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"},
771
+ {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
772
+ ]
773
+ tomlkit = [
774
+ {file = "tomlkit-0.11.3-py3-none-any.whl", hash = "sha256:800628e7705ff7c7cc4395c29836c7073e55b9ec820e1fc696080f9c5591a789"},
775
+ {file = "tomlkit-0.11.3.tar.gz", hash = "sha256:0ace4c975e0f3e6f71be8a2d61fe568777f1634bc80abff642cd3323ce709a0d"},
776
+ ]
777
+ typer = [
778
+ {file = "typer-0.4.2-py3-none-any.whl", hash = "sha256:023bae00d1baf358a6cc7cea45851639360bb716de687b42b0a4641cd99173f1"},
779
+ {file = "typer-0.4.2.tar.gz", hash = "sha256:b8261c6c0152dd73478b5ba96ba677e5d6948c715c310f7c91079f311f62ec03"},
780
+ ]
781
+ typing-extensions = [
782
+ {file = "typing_extensions-4.3.0-py3-none-any.whl", hash = "sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02"},
783
+ {file = "typing_extensions-4.3.0.tar.gz", hash = "sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6"},
784
+ ]
785
+ wrapt = [
786
+ {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"},
787
+ {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef"},
788
+ {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28"},
789
+ {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59"},
790
+ {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87"},
791
+ {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1"},
792
+ {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b"},
793
+ {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462"},
794
+ {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1"},
795
+ {file = "wrapt-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320"},
796
+ {file = "wrapt-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2"},
797
+ {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4"},
798
+ {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069"},
799
+ {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310"},
800
+ {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f"},
801
+ {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656"},
802
+ {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c"},
803
+ {file = "wrapt-1.14.1-cp310-cp310-win32.whl", hash = "sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8"},
804
+ {file = "wrapt-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164"},
805
+ {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907"},
806
+ {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3"},
807
+ {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3"},
808
+ {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d"},
809
+ {file = "wrapt-1.14.1-cp35-cp35m-win32.whl", hash = "sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7"},
810
+ {file = "wrapt-1.14.1-cp35-cp35m-win_amd64.whl", hash = "sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00"},
811
+ {file = "wrapt-1.14.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4"},
812
+ {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1"},
813
+ {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1"},
814
+ {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff"},
815
+ {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d"},
816
+ {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1"},
817
+ {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569"},
818
+ {file = "wrapt-1.14.1-cp36-cp36m-win32.whl", hash = "sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed"},
819
+ {file = "wrapt-1.14.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471"},
820
+ {file = "wrapt-1.14.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248"},
821
+ {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68"},
822
+ {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d"},
823
+ {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77"},
824
+ {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7"},
825
+ {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015"},
826
+ {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a"},
827
+ {file = "wrapt-1.14.1-cp37-cp37m-win32.whl", hash = "sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853"},
828
+ {file = "wrapt-1.14.1-cp37-cp37m-win_amd64.whl", hash = "sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c"},
829
+ {file = "wrapt-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456"},
830
+ {file = "wrapt-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f"},
831
+ {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc"},
832
+ {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1"},
833
+ {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af"},
834
+ {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b"},
835
+ {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0"},
836
+ {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57"},
837
+ {file = "wrapt-1.14.1-cp38-cp38-win32.whl", hash = "sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5"},
838
+ {file = "wrapt-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d"},
839
+ {file = "wrapt-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383"},
840
+ {file = "wrapt-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7"},
841
+ {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86"},
842
+ {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735"},
843
+ {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b"},
844
+ {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3"},
845
+ {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3"},
846
+ {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe"},
847
+ {file = "wrapt-1.14.1-cp39-cp39-win32.whl", hash = "sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5"},
848
+ {file = "wrapt-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb"},
849
+ {file = "wrapt-1.14.1.tar.gz", hash = "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d"},
850
+ ]
poetry.toml ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ [virtualenvs]
2
+ create = true
3
+ in-project = true
pylintrc ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ [EXCEPTIONS]
2
+ # C0301 line too long
3
+ # R0801 dup
4
+ # C0103 invalid-name
5
+ # W0612 unused-variable
6
+ # W0611 unused-import
7
+ disable=W0703,R0801,C0103,C0301,W0612,W0611
pyproject.toml ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [tool.poetry]
2
+ name = "radio-embed-p"
3
+ version = "0.1.0-alpha.0"
4
+ description = "radio-embed parallel"
5
+ authors = ["ffreemt"]
6
+ license = "MIT"
7
+ readme = "README1.md"
8
+ repository = "https://github.com/ffreemt/radio-embed-p"
9
+
10
+ [tool.poetry.dependencies]
11
+ python = "^3.8.3"
12
+ logzero = "^1.7.0"
13
+ set-loglevel = "^0.1.2"
14
+ typer = "^0.4.1"
15
+ icecream = "^2.1.1"
16
+ install = "^1.3.5"
17
+ more-itertools = "^8.14.0"
18
+
19
+ [tool.poe.executor]
20
+ type = "poetry"
21
+
22
+ [tool.poe.tasks]
23
+ memo = "echo poe test or poetry run poe test"
24
+ test = "pytest tests"
25
+ pyright = "pyright radio_embed_p"
26
+ flake8 = "flake8 radio_embed_p --ignore F401,E501,F841"
27
+ check = ["pyright", "flake8"]
28
+ export = "poetry export --without-hashes -f requirements.txt -o requirements.txt"
29
+ build = "poetry build"
30
+ publish = "poetry publish"
31
+ release = ["test", "build", "publish"]
32
+ lint = { cmd = "pylint radio_embed_p" }
33
+ isort = "isort tests radio_embed_p"
34
+ black = "black tests radio_embed_p"
35
+ format = ["isort", "black"]
36
+ docstyle = "pydocstyle --convention=google tests radio_embed_p"
37
+ prerelease = {cmd = "poetry version prerelease && sync-version"}
38
+ tunnel = {cmd = "ssh -CN ip_or_hostname_defined_in_hosts -L 9091:127.0.0.1:9091"}
39
+
40
+ [tool.poetry.dev-dependencies]
41
+ pytest = "^7.1"
42
+ flake8 = "^3.9.2"
43
+ isort = "^5.10.1"
44
+ black = "^22.3.0"
45
+ pylint = "^2.14.2"
46
+ pyright = "^1.1.254"
47
+ pydocstyle = "^6.1.1"
48
+ toml = "^0.10.2"
49
+ # tbump = "^6.3.2"
50
+ poethepoet = "^0.10.0"
51
+ joblib = "^1.1.0"
52
+
53
+ [tool.poetry.scripts]
54
+ "radio-embed-p" = "radio_embed_p.__main__:app"
55
+
56
+ [build-system]
57
+ requires = ["poetry-core>=1.0.0"]
58
+ build-backend = "poetry.core.masonry.api"
59
+
60
+ [tool.pytest.ini_options]
61
+ minversion = "6.0"
62
+ addopts = "-ra -q --doctest-modules"
63
+ log_cli = true
64
+ testpaths = [
65
+ "tests",
66
+ # "integration",
67
+ ]
68
+
69
+ [tool.black]
70
+ skip-string-normalization = 0
71
+
72
+ [tool.isort]
73
+ profile = "black"
74
+ multi_line_output = 3
pyrightconfig.json ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "include": ["tests", "radio_embed_p"],
3
+ "venvPath": ".venv",
4
+ "reportTypeshedErrors": false,
5
+ "reportMissingImports": true,
6
+ "reportMissingTypeStubs": false,
7
+ "pythonVersion": "3.8",
8
+ "ignore": []
9
+ }
radio_embed_p/__init__.py ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ """Init."""
2
+ __version__ = "0.1.0a0"
3
+ from .radio_embed_p import radio_embed_p
4
+
5
+ __all__ = ("radio_embed_p",)
radio_embed_p/__main__.py- ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Prep __main__.py."""
2
+ # pylint: disable=invalid-name
3
+ from pathlib import Path
4
+ from typing import Optional
5
+
6
+ import logzero
7
+ import typer
8
+ from logzero import logger
9
+ from set_loglevel import set_loglevel
10
+
11
+ from radio_embed_p import __version__, radio_embed_p
12
+
13
+ logzero.loglevel(set_loglevel())
14
+
15
+ app = typer.Typer(
16
+ name="radio_embed_p",
17
+ add_completion=False,
18
+ help="radio_embed_p help",
19
+ )
20
+
21
+
22
+ def _version_callback(value: bool) -> None:
23
+ if value:
24
+ typer.echo(f"{app.info.name} v.{__version__} -- ...")
25
+ raise typer.Exit()
26
+
27
+
28
+ @app.command()
29
+ def main(
30
+ version: Optional[bool] = typer.Option( # pylint: disable=(unused-argument
31
+ None,
32
+ "--version",
33
+ "-v",
34
+ "-V",
35
+ help="Show version info and exit.",
36
+ callback=_version_callback,
37
+ is_eager=True,
38
+ ),
39
+ ):
40
+ """Define."""
41
+
42
+
43
+ if __name__ == "__main__":
44
+ app()
radio_embed_p/radio_embed_p.py ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Embed input."""
2
+ # pylint: disable=invalid-name
3
+ import multiprocessing as mp
4
+ from math import ceil
5
+
6
+ import more_itertools as mit
7
+ import numpy
8
+ from hf_model_s_cpu import model_s
9
+ from logzero import logger
10
+
11
+ try:
12
+ model = model_s()
13
+ except Exception as _:
14
+ logger.exception(_)
15
+ raise SystemExit(1) from _
16
+
17
+ num_cpus = mp.cpu_count()
18
+
19
+
20
+ def radio_embed(
21
+ text: str,
22
+ ) -> numpy.ndarray:
23
+ """Embed input."""
24
+ try:
25
+ _ = model.encode(text.strip().splitlines())
26
+ except Exception as _:
27
+ logger.exception(_)
28
+ raise
29
+
30
+ return _
31
+
32
+
33
+ def radio_embed_p(
34
+ text: str,
35
+ ) -> numpy.ndarray:
36
+ """Embed input in parallel."""
37
+ # split evenly to num_cpus parts
38
+ _ = text.splitlines()
39
+ _ = mit.chunked_even(_, ceil(len(_) / num_cpus))
40
+
41
+ # back to str for radio_embed
42
+ args = ["\n".join(elm) for elm in _]
43
+
44
+ try:
45
+ with mp.Pool(num_cpus) as pool:
46
+ # ret = pool.map(func, args_)
47
+ ret = pool.map(radio_embed, args)
48
+ except Exception as exc:
49
+ logger.error(exc)
50
+ raise
51
+
52
+ return ret
start-sshd.sh ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ apt update && apt-get install openssh-server -y
2
+ /etc/init.d/ssh restart && mkdir -p ~/.ssh && echo ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOl+SiDFL1ZUh1QJ0454eYKtamkMCVs2hhuv3cWN1LU7 id_ed25519_colab > ~/.ssh/authorized_keys
tests/__init__.py ADDED
@@ -0,0 +1 @@
 
 
1
+ """Init."""
tests/fangfang-en.txt ADDED
The diff for this file is too large to render. See raw diff
 
tests/test_radio_embed_p.py ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Test radio_embed_p."""
2
+ # pylint: disable=broad-except, invalid-name
3
+ from pathlib import Path
4
+
5
+ import joblib
6
+ import numpy as np
7
+
8
+ from radio_embed_p import __version__, radio_embed_p
9
+ from radio_embed_p.radio_embed_p import radio_embed
10
+
11
+
12
+ def test_version():
13
+ """Test version."""
14
+ assert __version__[:3] == "0.1"
15
+
16
+
17
+ def test_sanity():
18
+ """Check sanity."""
19
+ try:
20
+ assert not radio_embed_p()
21
+ except Exception:
22
+ assert True
23
+
24
+
25
+ def test_ff_en():
26
+ """Test ff-en.txt."""
27
+ # __file__ = "tests/test_radio_embed_p.py"
28
+
29
+ # fpath = Path(__file__).parent / "ff-en.lzma"
30
+ # r = joblib.load(fpath)
31
+
32
+ fpath = Path(__file__).parent / "fangfang-en.txt"
33
+ lst = [
34
+ elm.strip() for elm in Path(fpath).read_text("utf8").splitlines() if elm.strip()
35
+ ]
36
+ text = "\n".join(lst[:100])
37
+
38
+ r = radio_embed(text)
39
+
40
+ # import os
41
+ # os.environ["TOKENIZERS_PARALLELISM"] = "false"
42
+ r1 = radio_embed_p(text)
43
+
44
+ assert np.allclose(np.array(r), np.array(r1), atol=1e-07)