From 59d122e3d70b89906ac861e3c4e076113073f563 Mon Sep 17 00:00:00 2001 From: Aleksei Pronkin <31882933+alexey-pronkin@users.noreply.github.com> Date: Wed, 3 Nov 2021 21:14:50 +0300 Subject: [PATCH 01/63] add docker, fix windows problems, add installation guide --- .dockerignore | 2 + .github/workflows/test-docker.yml | 2 + .github/workflows/windows-requirements.yml | 1 + .gitignore | 4 + Dockerfile | 9 + INSTALLATION.md | 225 +++++++++++++++++++++ requirements-listner.txt | 12 ++ requirements.txt | 18 ++ tools/toml2requirements.py | 49 +++++ 9 files changed, 322 insertions(+) create mode 100644 .dockerignore create mode 100644 .github/workflows/test-docker.yml create mode 100644 .github/workflows/windows-requirements.yml create mode 100644 Dockerfile create mode 100644 INSTALLATION.md create mode 100644 requirements-listner.txt create mode 100644 requirements.txt create mode 100644 tools/toml2requirements.py diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000..746b16d84d --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +.git/* +.github/* \ No newline at end of file diff --git a/.github/workflows/test-docker.yml b/.github/workflows/test-docker.yml new file mode 100644 index 0000000000..59d5a1efb8 --- /dev/null +++ b/.github/workflows/test-docker.yml @@ -0,0 +1,2 @@ +# Test docker for student and contributor + autoupdate requirements.txt file +# TODO \ No newline at end of file diff --git a/.github/workflows/windows-requirements.yml b/.github/workflows/windows-requirements.yml new file mode 100644 index 0000000000..6b3a80a45e --- /dev/null +++ b/.github/workflows/windows-requirements.yml @@ -0,0 +1 @@ +#TODO: test that requirements.txt works for windows and tools/ \ No newline at end of file diff --git a/.gitignore b/.gitignore index 76cccbfec4..bc83a6a48b 100644 --- a/.gitignore +++ b/.gitignore @@ -513,3 +513,7 @@ _build* # VSCode settings dir .vscode +# Docker errors +docker_errors +# Docker volume +docker_volume \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000..e147c09e8f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,9 @@ +FROM continuumio/miniconda3:latest +COPY . . +RUN conda create -n qmlcourse.ai python=3.8 --yes +# Make RUN commands use the new environment: +RUN conda run -n qmlcourse.ai conda install poetry --yes +RUN conda run -n qmlcourse.ai poetry install +RUN conda run -n qmlcourse.ai conda install psi4 python=3.8 -c psi4 --yes +# RUN conda run -n qmlcourse.ai conda list -e > requirements.txt - we could use this to make requirements.txt exactly as poetry, however this works only on Ubuntu :( +RUN conda run -n qmlcourse.ai conda install -c conda-forge jupyterlab \ No newline at end of file diff --git a/INSTALLATION.md b/INSTALLATION.md new file mode 100644 index 0000000000..b1eed95d80 --- /dev/null +++ b/INSTALLATION.md @@ -0,0 +1,225 @@ +# Installation + +There are several ways to install this course: with your system installed anaconda3/miniconda3 or with docker. If you don't need to contribute or change the course, you could follow only Listener instructions. The contributor environment additionally contains pre-commit hooks and the patched jupyter book package. Additionally, you could install GPU versions of the packages and use your modern Nvidia GPUs. + +## Before we start + +Clone this repository using git or manualy: + +```shell +git clone https://github.com/SemyonSinchenko/qmlcourse.git +``` + +## Conda + +First of all, install miniconda for your operating system https://docs.conda.io/en/latest/miniconda.html +Then you need to create an empty environment for the course, let's name it `qmlcourse.ai`. For this course we use some features of python 3.8, so you need at least this version. + +```shell +conda create -n qmlcourse.ai python=3.8 --yes +``` + +after that, you need to activate this env by the following command + +```shell +conda activate qmlcourse.ai +``` + +--- + +**NOTE** + +You could also install all packages from Intel optimized repositories, but for now, we don't test this approach. This could make sense in four cases: + +- if you are using a very old Intel/AMD processor (that does not have AVX2 instructions, for example). Then with high probability, you'll need to compile some packages by yourself. Intel® Distribution for Python contains many compilers and tools to help you with this non-trivial task. +- if you are using an extra modern Intel CPU with avx-512 or new AMX instructions. Or your CPU has more than eight cores. +- if you are using cluster and don't want to install OpenMP and other libraries manually. + In the mean case scenario with 8 cores CPU, you probably get about a 10% increase in the speed of calculations that, in my opinion, do not cost additional efforts and space on your SSD/HDD. Some users reviews that this actually works with an AMD processor, so if you have an AMD CPU you could message @avpronkin in ODS.ai Slack about a successful installation or ask for help. + +### Intel® Distribution for Python + +First of all, update your conda: + +```shell +conda update conda +``` + +Secondly, add Intel channel for packages: + +```shell +conda config --add channels intel +``` + +Finally, create intel based python environment and activate it: + +```shell +conda create -n qmlcourse.ai intelpython3_core python=3.8 --yes +conda activate qmlcourse.ai +``` + +After you could activate your environment and continue to install all other packages, conda automatically search all repositories with the preference of the intel repo. + +If you stack with problems, you could remove the Intel channel + +```shell +conda config --remove channels intel +``` + +And remove `qmlcourse.ai` environment: +**WARNING** +_This cannot be undone, so you remove all packages that you install in `qmlcourse.ai` environment_ + +```shell +conda deactivate +conda env remove -n qmlcourse.ai +``` + +## so then you could proceed with another type of installation + +### Check the installation + +The following command prints your path to the `alias python` in the activated environment: + +```shell +python -c "import sys; print(sys.executable)" +``` + +The printed path should look like `/home/user/miniconda3/envs/qmlcourse.ai/python` on Unix system and `C:\Users\USER\miniconda3\envs\qmlcourse.ai\python.exe` on Windows. + +### Installing packages + +#### Listener + +When you activate conda env + +```shell +conda activate qmlcourse.ai +``` + +On linux and OSX you could install stable version of psi4: + +```shell +conda install psi4 python=3.8 -c psi4 --yes +``` + +On Windows, you need to install nightly build: + +```shell +conda install psi4 python=3.8 -c psi4/label/dev -c conda-forge --yes +``` + +Before installation the main packages, you could install GPU version of tensorflow/jax. +See instructions here [_tensorflow-gpu_](https://www.tensorflow.org/install/gpu), [_Jax GPU_](https://github.com/google/jax#pip-installation-gpu-cuda): + +And, finally, you need to install the majority of packages by: + +``` +python -m pip install -r requirements-listner.txt +``` + +Additionally, you could install jupyter or jupyter lab. In this guide, we install `jupyter-lab` + +``` +conda activate qmlcourse.ai +conda install -c conda-forge jupyterlab +``` + +### Working with course + +I recommend you always use an explicit command like `python -m some_module` and work only inside the virtual environment. For example: + +```shell +conda activate qmlcourse.ai +python - m pip install pandas +python - m jupyter notebook +``` + +In other cases (python3, py3, pip3, poetry run, etc.) you need to know what you do, where you do, and why you do that. +You could always use aliases and macros for shortcuts like + +```bash +alias qml='conda activate qmlcourse.ai && python -m jupyter notebook' +``` + +or for Windows: + +```bat +doskey qml=conda activate qmlcourse.ai $T python -m jupyter notebook +``` + +And then printing `qml` in your terminal gives you proper jupyter notebook kernel (do not forget back up your ".dotfiles" somewhere. You could search on the Internet which file you need to back up to save all your aliases). + +```shell +qml +``` + +#### Contributor + +\*\* +**WINDOWS NOTE** +There is no way to easily install the contributor packages due to changes in some async packages from python 3.8 on Windows. We use in our course some tricks from python3.8 like f-string debugging, so you need Docker Desktop or WSL2 +\*\* + +```shell +conda create -n qmlcourse.ai-dev python=3.9 --yes +``` + +```shell +conda activate qmlcourse.ai-dev +``` + +On linux and OSX you could install stable version of psi4: + +```shell +conda install psi4 python=3.8 -c psi4 --yes +``` + +On Windows, you need to install nightly build: + +```shell + conda install psi4 python=3.8 -c psi4/label/dev -c conda-forge --yes +``` + +And finally, install all other packages: + +``` +python -m pip install -r requirements.txt +``` + +Or in Linux, you could use poetry: + +```shell +conda activate qmlcourse.ai-dev +conda install psi4 python=3.8 -c psi4 --yes +python -m pip install poetry +python -m poetry install +``` + +#### Troubleshooting + +##### Known problems + +[_Jupyter book does not work with python 3.8+ on Windows_](https://github.com/jupyter/nbclient/issues/85), so for contributing use docker/WSL2 instead. + +If packagin conflicts, then update conda: + +```shell +conda deactivate +conda update conda +``` + +## Docker + +For installing a docker environment on your operating system, please read [_this official guide_](https://docs.docker.com/get-docker/). After the installation, if you are on a Linux system, please make post-installation steps: [_Linux post-installation steps_](https://docs.docker.com/engine/install/linux-postinstall/). After that, you probably should restart your OS. You could test your installation with the following command: + +### Test that docker is working + +### Contributor + +### Listener + +`TODO` + +### Starting jupyter: + +#### jupyter-lab diff --git a/requirements-listner.txt b/requirements-listner.txt new file mode 100644 index 0000000000..66d9c424e1 --- /dev/null +++ b/requirements-listner.txt @@ -0,0 +1,12 @@ +PennyLane>=0.18.0 +cirq>=0.11.0 +dwave-system>=1.10.0 +dwavebinarycsp>=0.1.3 +matplotlib>=3.3.4 +networkx>=2.6.3 +numpy>=1.19.2 +penaltymodel-maxgap>=0.5.5 +pyppeteer>=0.2.6 +qiskit>=0.31.0 +scikit-learn>=0.24.1 +sympy==1.5 \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000..32ff2384ab --- /dev/null +++ b/requirements.txt @@ -0,0 +1,18 @@ +PennyLane>=0.18.0 +cirq>=0.11.0 +dwave-system>=1.10.0 +dwavebinarycsp>=0.1.3 +jupyter-book>=0.10.1 +matplotlib>=3.3.4 +networkx>=2.6.3 +numpy>=1.19.2 +paramiko>=2.8.0 +penaltymodel-maxgap>=0.5.5 +pre-commit>=2.13.0 +pylatexenc==2.10 +pyppeteer>=0.2.6 +pyyaml>=5.4.1 +qiskit>=0.31.0 +scikit-learn>=0.24.1 +scp>=0.14.1 +sympy==1.5 \ No newline at end of file diff --git a/tools/toml2requirements.py b/tools/toml2requirements.py new file mode 100644 index 0000000000..01d35efafe --- /dev/null +++ b/tools/toml2requirements.py @@ -0,0 +1,49 @@ + +prohibited_packages_listner = set([ + "python", + "pre-commit", + "jupyter-book", + "pyyaml", + "pylatexenc", + "paramiko", + "scp", + "", + ]) +prohibited_packages_dev = set(["python", ""]) + + +def get_packages(prohibited_packages): + packages = [] + packages_flag = False + with open("pyproject.toml", 'r') as toml_file: + for line in toml_file: + line = line.strip() + if line == "[tool.poetry.dependencies]": + packages_flag=True + continue + elif line == "[build-system]": + packages_flag=False + elif line == "": + continue + if packages_flag: + package, version = line.split(" = ") + package = package.strip() + version = version.strip()[1:-1] # remove brakets \"^version\" + if package not in prohibited_packages: + if version.startswith("^"): + if len(version.split("."))==3: + packages.append(package+">="+version[1:]) # choose major version, needed for security bugfixes + else: + packages.append(package+"=="+version[1:]) + else: + packages.append(package+"=="+version) + return sorted(packages) + + #Sorting just for penaltymodel be upper +# GPU +# Intel +if __name__=="__main__": + with open("requirements.txt", 'w') as req_file: + req_file.writelines("\n".join(get_packages(prohibited_packages=prohibited_packages_dev))) + with open("requirements-listner.txt", 'w') as req_file: + req_file.writelines("\n".join(get_packages(prohibited_packages=prohibited_packages_listner))) From 56891f7ccde84081285eeeadc10182dd6fb94d79 Mon Sep 17 00:00:00 2001 From: Aleksei Pronkin <31882933+alexey-pronkin@users.noreply.github.com> Date: Mon, 22 Nov 2021 12:19:23 +0300 Subject: [PATCH 02/63] litle fixes, not done yet --- .github/workflows/test-docker.yml | 2 +- .gitignore | 5 +- INSTALLATION.md | 76 ++++++++++++++----- ...s-listner.txt => requirements-listener.txt | 2 +- 4 files changed, 60 insertions(+), 25 deletions(-) rename requirements-listner.txt => requirements-listener.txt (94%) diff --git a/.github/workflows/test-docker.yml b/.github/workflows/test-docker.yml index 59d5a1efb8..2b125ae853 100644 --- a/.github/workflows/test-docker.yml +++ b/.github/workflows/test-docker.yml @@ -1,2 +1,2 @@ # Test docker for student and contributor + autoupdate requirements.txt file -# TODO \ No newline at end of file +# TODO diff --git a/.gitignore b/.gitignore index bc83a6a48b..336eaa4af4 100644 --- a/.gitignore +++ b/.gitignore @@ -513,7 +513,6 @@ _build* # VSCode settings dir .vscode -# Docker errors -docker_errors + # Docker volume -docker_volume \ No newline at end of file +lecture_notebooks diff --git a/INSTALLATION.md b/INSTALLATION.md index b1eed95d80..558d65a043 100644 --- a/INSTALLATION.md +++ b/INSTALLATION.md @@ -1,10 +1,10 @@ # Installation -There are several ways to install this course: with your system installed anaconda3/miniconda3 or with docker. If you don't need to contribute or change the course, you could follow only Listener instructions. The contributor environment additionally contains pre-commit hooks and the patched jupyter book package. Additionally, you could install GPU versions of the packages and use your modern Nvidia GPUs. +There are several ways to install this course: with your system installed anaconda3/miniconda3 or with docker. If you don't need to contribute or change the course, you could follow only listener instructions. The contributor environment additionally contains pre-commit hooks and the patched jupyter book package. Additionally, you could install GPU versions of the packages and use your modern Nvidia GPUs. ## Before we start -Clone this repository using git or manualy: +Clone this repository using git or manually download using GitHub web version: ```shell git clone https://github.com/SemyonSinchenko/qmlcourse.git @@ -13,7 +13,7 @@ git clone https://github.com/SemyonSinchenko/qmlcourse.git ## Conda First of all, install miniconda for your operating system https://docs.conda.io/en/latest/miniconda.html -Then you need to create an empty environment for the course, let's name it `qmlcourse.ai`. For this course we use some features of python 3.8, so you need at least this version. +Then you have to create an empty environment for the course, let's name it `qmlcourse.ai`. For this course, we use some features of python 3.8, so you need at least this version. ```shell conda create -n qmlcourse.ai python=3.8 --yes @@ -32,9 +32,9 @@ conda activate qmlcourse.ai You could also install all packages from Intel optimized repositories, but for now, we don't test this approach. This could make sense in four cases: - if you are using a very old Intel/AMD processor (that does not have AVX2 instructions, for example). Then with high probability, you'll need to compile some packages by yourself. Intel® Distribution for Python contains many compilers and tools to help you with this non-trivial task. -- if you are using an extra modern Intel CPU with avx-512 or new AMX instructions. Or your CPU has more than eight cores. +- if you are using an extra modern Intel CPU with AVX-512 or new AMX instructions. Or your CPU has more than eight cores. - if you are using cluster and don't want to install OpenMP and other libraries manually. - In the mean case scenario with 8 cores CPU, you probably get about a 10% increase in the speed of calculations that, in my opinion, do not cost additional efforts and space on your SSD/HDD. Some users reviews that this actually works with an AMD processor, so if you have an AMD CPU you could message @avpronkin in ODS.ai Slack about a successful installation or ask for help. + In the mean case scenario with 8 cores CPU, you probably get about a 10% increase in the speed of calculations that, in my opinion, do not cost additional efforts and space on your SSD/HDD. Some users review that this actually works with an AMD processor, so if you have an AMD CPU you could message @avpronkin in ODS.ai Slack about a successful installation or ask for help. ### Intel® Distribution for Python @@ -44,7 +44,7 @@ First of all, update your conda: conda update conda ``` -Secondly, add Intel channel for packages: +Secondly, add the Intel channel for packages: ```shell conda config --add channels intel @@ -96,7 +96,7 @@ When you activate conda env conda activate qmlcourse.ai ``` -On linux and OSX you could install stable version of psi4: +On Linux and OSX you could install a stable version of psi4: ```shell conda install psi4 python=3.8 -c psi4 --yes @@ -108,13 +108,13 @@ On Windows, you need to install nightly build: conda install psi4 python=3.8 -c psi4/label/dev -c conda-forge --yes ``` -Before installation the main packages, you could install GPU version of tensorflow/jax. -See instructions here [_tensorflow-gpu_](https://www.tensorflow.org/install/gpu), [_Jax GPU_](https://github.com/google/jax#pip-installation-gpu-cuda): +Before installation the main packages, you could install the GPU version of TensorFlow/JAX. +See instructions here [_tensorflow-gpu_](https://www.tensorflow.org/install/gpu), [_JAX GPU_](https://github.com/google/jax#pip-installation-gpu-cuda): And, finally, you need to install the majority of packages by: ``` -python -m pip install -r requirements-listner.txt +python -m pip install -r requirements-listener.txt ``` Additionally, you could install jupyter or jupyter lab. In this guide, we install `jupyter-lab` @@ -134,7 +134,7 @@ python - m pip install pandas python - m jupyter notebook ``` -In other cases (python3, py3, pip3, poetry run, etc.) you need to know what you do, where you do, and why you do that. +In other cases (python3, py3, pip3, poetry run, etc.), you need to know what you do, where you do, and why you do that. You could always use aliases and macros for shortcuts like ```bash @@ -147,7 +147,7 @@ or for Windows: doskey qml=conda activate qmlcourse.ai $T python -m jupyter notebook ``` -And then printing `qml` in your terminal gives you proper jupyter notebook kernel (do not forget back up your ".dotfiles" somewhere. You could search on the Internet which file you need to back up to save all your aliases). +And then printing `qml` in your terminal gives you the proper jupyter notebook kernel (do not forget to back up your ".dotfiles" somewhere. You could search on the Internet which files you need to back up to save all your aliases). ```shell qml @@ -157,18 +157,18 @@ qml \*\* **WINDOWS NOTE** -There is no way to easily install the contributor packages due to changes in some async packages from python 3.8 on Windows. We use in our course some tricks from python3.8 like f-string debugging, so you need Docker Desktop or WSL2 +There is no way to easily install the contributor packages due to changes in some async packages from Python 3.8 on Windows. We use in our course some tricks from python3.8 like f-string debugging, so you need Docker Desktop or WSL2 \*\* ```shell -conda create -n qmlcourse.ai-dev python=3.9 --yes +conda create -n qmlcourse.ai-dev python=3.8 --yes ``` ```shell conda activate qmlcourse.ai-dev ``` -On linux and OSX you could install stable version of psi4: +On Linux and OSX you could install the stable version of psi4: ```shell conda install psi4 python=3.8 -c psi4 --yes @@ -199,9 +199,9 @@ python -m poetry install ##### Known problems -[_Jupyter book does not work with python 3.8+ on Windows_](https://github.com/jupyter/nbclient/issues/85), so for contributing use docker/WSL2 instead. +[_Jupyter book does not work with python 3.8+ on Windows_](https://github.com/jupyter/nbclient/issues/85). So, please use docker/WSL2 for the contributing instead. -If packagin conflicts, then update conda: +If packages conflicts, then update conda: ```shell conda deactivate @@ -210,16 +210,52 @@ conda update conda ## Docker -For installing a docker environment on your operating system, please read [_this official guide_](https://docs.docker.com/get-docker/). After the installation, if you are on a Linux system, please make post-installation steps: [_Linux post-installation steps_](https://docs.docker.com/engine/install/linux-postinstall/). After that, you probably should restart your OS. You could test your installation with the following command: +For installing a docker environment on your operating system, please read [_this official guide_](https://docs.docker.com/get-docker/). After the installation, if you are on a Linux system, please do the post-installation steps: [_Linux post-installation steps_](https://docs.docker.com/engine/install/linux-postinstall/). After that, you probably should restart your OS. You could test your installation with the following command: -### Test that docker is working +```shell +docker version +docker run hello-world +``` + +You need to see docker version and then short instructions and links to the documentation. If you see that command docker is not find, then you need to add docker to PATH, and if you see permitions issues, than you didn't do post-instalaltion steps and didn't reboot your system, see the documentation on the docker website. ### Contributor +Firstly, you need to git clone repository and build docker image from qmlcourse folder with Dockerfile: + +``` +git clone --recursive https://github.com/SemyonSinchenko/qmlcourse.git +cd qmlcourse +docker build . -t qmlcourse.ai-dev:latest +``` + +after that you can see new docker image with + +```shell +docker images +``` + +you could build the entire book into folder with following command: + +```shell +docker run -it qmlcourse.ai-dev:latest /bin/sh -c "conda run -n qmlcourse.ai jupyter book build TODO:" +``` + +and you could use jupyter to write lectures, and then convert them into .md files with jupyter book: + +```shell +TODO: +``` + ### Listener -`TODO` +`TODO:different docker tags for listner packages and contributer packages` +`TODO:Try magma instead of conda` ### Starting jupyter: #### jupyter-lab + +```shell +docker run -it qmlcourse.ai-dev:latest /bin/sh -c "conda run -n qmlcourse.ai jupyter lab" +``` diff --git a/requirements-listner.txt b/requirements-listener.txt similarity index 94% rename from requirements-listner.txt rename to requirements-listener.txt index 66d9c424e1..13b401c5b5 100644 --- a/requirements-listner.txt +++ b/requirements-listener.txt @@ -9,4 +9,4 @@ penaltymodel-maxgap>=0.5.5 pyppeteer>=0.2.6 qiskit>=0.31.0 scikit-learn>=0.24.1 -sympy==1.5 \ No newline at end of file +sympy==1.5 From 2c7d41f3d94deef4c8e516fd06977e786aebd46c Mon Sep 17 00:00:00 2001 From: Aleksei Pronkin <31882933+alexey-pronkin@users.noreply.github.com> Date: Mon, 13 Jun 2022 05:09:34 +0300 Subject: [PATCH 03/63] start making dokerfile --- Dockerfile | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000..ca61b10ddf --- /dev/null +++ b/Dockerfile @@ -0,0 +1,31 @@ +# Purpose of the builder is to make all lectures, convert them into ipython notebooks (.ipynb). This operation is time costly and take a lot of space on the HDD. +# After that we could use lightweight +FROM ubuntu:20.04 as builder + +RUN apt update && apt install -y build-essential && apt install -y wget +RUN apt update && apt install -y python3-pip +RUN python3 -m pip install poetry + +RUN apt update && apt install -y git && git clone https://github.com/quantum-ods/qmlcourse.git +WORKDIR ./qmlcourse +RUN poetry install --no-interaction --no-root +RUN poetry run jupyter-book toc migrate ./qmlcourse/_toc.yml -o ./qmlcourse/_toc.yml +RUN poetry run jupyter-book build ./qmlcourse --keep-going +RUN poetry run jupyter-book build ./qmlcourse --builder latex --keep-going + +# FROM python:3.8 +# RUN python -m pip install jupyter +# CMD ["jupyter notebook"] +# Add support with flags: +# TODO: Add python compilation + +# TODO: add cuda support +# TODO: add conda support +# TODO: add intel xeon scalable support +# TODO: add amd hip support + + +# TODO: add arm support and powerpc support +# RUN wget https://www.python.org/ftp/python/3.8.9/Python-3.8.9.tgz && tar -xf Python-3.8.9.tgz +# WORKDIR Python-3.8.9 && ./configure --enable-optimizations +# RUN make && make install From 4ec42f28909b288ba48e9b868d7904432768e4cb Mon Sep 17 00:00:00 2001 From: Aleksei Pronkin <31882933+alexey-pronkin@users.noreply.github.com> Date: Wed, 15 Jun 2022 05:04:31 +0300 Subject: [PATCH 04/63] add script convert2ipynb and light docker --- Dockerfile | 28 ++++++++++------------------ poetry.lock | 31 +++++++++++++++++++++++++------ pyproject.toml | 1 + requirements.txt | 25 +++++++++++++++++++++++++ scripts/convert2ipynb.py | 17 +++++++++++++++++ 5 files changed, 78 insertions(+), 24 deletions(-) create mode 100644 requirements.txt create mode 100644 scripts/convert2ipynb.py diff --git a/Dockerfile b/Dockerfile index ca61b10ddf..2967633418 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,31 +1,23 @@ # Purpose of the builder is to make all lectures, convert them into ipython notebooks (.ipynb). This operation is time costly and take a lot of space on the HDD. -# After that we could use lightweight +# After that we could use lightweight environment FROM ubuntu:20.04 as builder RUN apt update && apt install -y build-essential && apt install -y wget RUN apt update && apt install -y python3-pip RUN python3 -m pip install poetry -RUN apt update && apt install -y git && git clone https://github.com/quantum-ods/qmlcourse.git +#RUN apt update && apt install -y git && git clone https://github.com/quantum-ods/qmlcourse.git +COPY . . WORKDIR ./qmlcourse RUN poetry install --no-interaction --no-root +RUN poetry run python scripts/convert2ipynb.py RUN poetry run jupyter-book toc migrate ./qmlcourse/_toc.yml -o ./qmlcourse/_toc.yml RUN poetry run jupyter-book build ./qmlcourse --keep-going RUN poetry run jupyter-book build ./qmlcourse --builder latex --keep-going -# FROM python:3.8 -# RUN python -m pip install jupyter -# CMD ["jupyter notebook"] -# Add support with flags: -# TODO: Add python compilation - -# TODO: add cuda support -# TODO: add conda support -# TODO: add intel xeon scalable support -# TODO: add amd hip support - - -# TODO: add arm support and powerpc support -# RUN wget https://www.python.org/ftp/python/3.8.9/Python-3.8.9.tgz && tar -xf Python-3.8.9.tgz -# WORKDIR Python-3.8.9 && ./configure --enable-optimizations -# RUN make && make install +FROM continuumio/miniconda3:latest +RUN conda create -n qmlcourse python=3.8 --yes +RUN conda run -n qmlcourse conda install psi4 python=3.8 -c psi4 -y +RUN conda run -n python -m pip install -r requirements.txt +RUN conda run -n qmlcourse conda install -c conda-forge jupyterlab -y +CMD ["/bin/sh", "-c", "conda run -n qmlcourse.ai jupyter lab"] diff --git a/poetry.lock b/poetry.lock index 5ea124c9f9..b5bedb93ee 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1215,6 +1215,25 @@ category = "main" optional = false python-versions = ">=3.6" +[[package]] +name = "jupytext" +version = "1.13.8" +description = "Jupyter notebooks as Markdown documents, Julia, Python or R scripts" +category = "main" +optional = false +python-versions = "~=3.6" + +[package.dependencies] +markdown-it-py = ">=1.0.0,<3.0.0" +mdit-py-plugins = "*" +nbformat = "*" +pyyaml = "*" +toml = "*" + +[package.extras] +rst2md = ["sphinx-gallery (>=0.7.0,<0.8.0)"] +toml = ["toml"] + [[package]] name = "keras" version = "2.7.0" @@ -2347,11 +2366,6 @@ category = "main" optional = false python-versions = ">=3.6" -[package.dependencies] -numpy = ">=1.16.3" -qiskit-terra = ">=0.17.0" -scipy = ">=1.0" - [package.extras] dask = ["dask", "distributed"] @@ -3387,7 +3401,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = ">=3.8,<=3.9" -content-hash = "f40bd5b74a025500a4ee0149bca89b95cd0011019be4baa9795bf19ae5b16867" +content-hash = "cd6e0fc8cfc0bdac1af0270282c4b5b339a46e59bfaac8b2ae9a764e6340adff" [metadata.files] absl-py = [ @@ -4101,6 +4115,10 @@ jupyterlab-widgets = [ {file = "jupyterlab_widgets-1.1.0-py3-none-any.whl", hash = "sha256:c2a9bd3789f120f64d73268c066ed3b000c56bc1dda217be5cdc43e7b4ebad3f"}, {file = "jupyterlab_widgets-1.1.0.tar.gz", hash = "sha256:d5f41bc1713795385f718d44dcba47e1e1473c6289f28a95aa6b2c0782ee372a"}, ] +jupytext = [ + {file = "jupytext-1.13.8-py3-none-any.whl", hash = "sha256:625d2d2012763cc87d3f0dd60383516cec442c11894f53ad0c5ee5aa2a52caa2"}, + {file = "jupytext-1.13.8.tar.gz", hash = "sha256:60148537de5aa08bb9cbe8797500a49360b7a8eb6667736ae5b80e3ec7ba084d"}, +] keras = [ {file = "keras-2.7.0-py2.py3-none-any.whl", hash = "sha256:0c33ae1f728064ca0d35dfba999e9c316f03623bf5688c82fb83cc74a80ea248"}, ] @@ -5495,6 +5513,7 @@ sqlalchemy = [ {file = "SQLAlchemy-1.4.37-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:d9050b0c4a7f5538650c74aaba5c80cd64450e41c206f43ea6d194ae6d060ff9"}, {file = "SQLAlchemy-1.4.37-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b4c92823889cf9846b972ee6db30c0e3a92c0ddfc76c6060a6cda467aa5fb694"}, {file = "SQLAlchemy-1.4.37-cp27-cp27m-win32.whl", hash = "sha256:b55932fd0e81b43f4aff397c8ad0b3c038f540af37930423ab8f47a20b117e4c"}, + {file = "SQLAlchemy-1.4.37-cp27-cp27m-win_amd64.whl", hash = "sha256:4a17c1a1152ca4c29d992714aa9df3054da3af1598e02134f2e7314a32ef69d8"}, {file = "SQLAlchemy-1.4.37-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ffe487570f47536b96eff5ef2b84034a8ba4e19aab5ab7647e677d94a119ea55"}, {file = "SQLAlchemy-1.4.37-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:78363f400fbda80f866e8e91d37d36fe6313ff847ded08674e272873c1377ea5"}, {file = "SQLAlchemy-1.4.37-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ee34c85cbda7779d66abac392c306ec78c13f5c73a1f01b8b767916d4895d23"}, diff --git a/pyproject.toml b/pyproject.toml index 8a61f31034..d9678cf9bf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,6 +32,7 @@ tensorflow-quantum = "0.6.0" Jinja2 = "3.0.3" # [tool.poetry.dev-dependencies] +jupytext = "^1.13.8" [build-system] diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000..7b4916bcd0 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,25 @@ +PennyLane>=0.18.0 +cirq>=0.11.0 +dwave-system>=1.10.0 +dwavebinarycsp>=0.1.3 +matplotlib>=3.3.4 +networkx>=2.6.3 +numpy>=1.19.2 +penaltymodel-maxgap>=0.5.5 +pyppeteer>=0.2.6 +qiskit>=0.31.0 +scikit-learn>=0.24.1 +sympy>=1.5 +PennyLane>=0.18.0 +cirq>=0.11.0 +dwave-system>=1.10.0 +dwavebinarycsp>=0.1.3 +jupyter-book>=0.10.1 +matplotlib>=3.3.4 +networkx>=2.6.3 +numpy>=1.19.2 +paramiko>=2.8.0 +penaltymodel-maxgap>=0.5.5 +pre-commit>=2.13.0 +qiskit>=0.31.0 +scikit-learn>=0.24.1 \ No newline at end of file diff --git a/scripts/convert2ipynb.py b/scripts/convert2ipynb.py new file mode 100644 index 0000000000..25389501e0 --- /dev/null +++ b/scripts/convert2ipynb.py @@ -0,0 +1,17 @@ +import os +from subprocess import call + +import yaml + +PREFIX = ''#'qmlcourse'+'/' + +with open('qmlcourse/_toc.yml') as f: + toc = yaml.safe_load(f) +# make dir for ipynbs +os.makedirs("notebooks", exist_ok=True) +# remove index file +for part in toc[1:]: + for chapter in part['chapters']: + call(['poetry', 'run', 'jupytext', PREFIX + chapter['file'], '--to', 'ipynb']) + os.makedirs( 'notebooks/' + '/'.join(chapter['file'].split("/")[1:-1]), exist_ok=True) + call(['mv', PREFIX + chapter['file'].split('.')[0] + '.ipynb', 'notebooks/' + '/'.join(chapter['file'].split("/")[1:]) + '.ipynb']) \ No newline at end of file From 91f9e206643a4c82e205d1bf63115c1bd20aad56 Mon Sep 17 00:00:00 2001 From: Aleksei Pronkin <31882933+alexey-pronkin@users.noreply.github.com> Date: Thu, 16 Jun 2022 19:14:09 +0300 Subject: [PATCH 05/63] change gitignore and next stage of dockerfile --- .gitignore | 3 +++ Dockerfile | 1 - scripts/convert2ipynb.py | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 26121d53b0..9d1a294cc0 100644 --- a/.gitignore +++ b/.gitignore @@ -514,3 +514,6 @@ _build* # VSCode settings dir .vscode _tmp_notebooks + +# Notebooks dir +notebooks \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 2967633418..573f5116eb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,7 +8,6 @@ RUN python3 -m pip install poetry #RUN apt update && apt install -y git && git clone https://github.com/quantum-ods/qmlcourse.git COPY . . -WORKDIR ./qmlcourse RUN poetry install --no-interaction --no-root RUN poetry run python scripts/convert2ipynb.py RUN poetry run jupyter-book toc migrate ./qmlcourse/_toc.yml -o ./qmlcourse/_toc.yml diff --git a/scripts/convert2ipynb.py b/scripts/convert2ipynb.py index 25389501e0..12c26d7537 100644 --- a/scripts/convert2ipynb.py +++ b/scripts/convert2ipynb.py @@ -3,7 +3,7 @@ import yaml -PREFIX = ''#'qmlcourse'+'/' +PREFIX = 'qmlcourse'+'/' with open('qmlcourse/_toc.yml') as f: toc = yaml.safe_load(f) From a98aa9126f04fa6aef1ef5e4eb1620af9bc697ad Mon Sep 17 00:00:00 2001 From: Aleksei Pronkin <31882933+alexey-pronkin@users.noreply.github.com> Date: Thu, 16 Jun 2022 22:22:11 +0300 Subject: [PATCH 06/63] working docker --- Dockerfile | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 573f5116eb..92b794f761 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,8 +15,9 @@ RUN poetry run jupyter-book build ./qmlcourse --keep-going RUN poetry run jupyter-book build ./qmlcourse --builder latex --keep-going FROM continuumio/miniconda3:latest +COPY . . RUN conda create -n qmlcourse python=3.8 --yes -RUN conda run -n qmlcourse conda install psi4 python=3.8 -c psi4 -y -RUN conda run -n python -m pip install -r requirements.txt -RUN conda run -n qmlcourse conda install -c conda-forge jupyterlab -y -CMD ["/bin/sh", "-c", "conda run -n qmlcourse.ai jupyter lab"] +RUN conda run -n qmlcourse conda install psi4 python=3.8 -c psi4 --yes +RUN conda run -n qmlcourse python -m pip install -r requirements.txt +RUN conda run -n qmlcourse conda install -c conda-forge jupyterlab --yes +CMD ["/bin/sh", "-c", "conda run -n qmlcourse jupyter lab --allow-root --p 8989"] \ No newline at end of file From bd136bc89384d519efb2c09e685854e431c2f259 Mon Sep 17 00:00:00 2001 From: Aleksei Pronkin <31882933+alexey-pronkin@users.noreply.github.com> Date: Sat, 18 Jun 2022 14:56:21 +0300 Subject: [PATCH 07/63] style change --- Dockerfile | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 92b794f761..4e118779c8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,9 @@ -# Purpose of the builder is to make all lectures, convert them into ipython notebooks (.ipynb). This operation is time costly and take a lot of space on the HDD. +# Purpose of the builder is to make all lectures, convert them into ipython notebooks (.ipynb). This operation is time costly and take a lot of space on the HDD. # After that we could use lightweight environment FROM ubuntu:20.04 as builder RUN apt update && apt install -y build-essential && apt install -y wget -RUN apt update && apt install -y python3-pip +RUN apt update && apt install -y python3-pip RUN python3 -m pip install poetry #RUN apt update && apt install -y git && git clone https://github.com/quantum-ods/qmlcourse.git @@ -14,10 +14,11 @@ RUN poetry run jupyter-book toc migrate ./qmlcourse/_toc.yml -o ./qmlcourse/_toc RUN poetry run jupyter-book build ./qmlcourse --keep-going RUN poetry run jupyter-book build ./qmlcourse --builder latex --keep-going +# Purpose of this stage is to get all packages from lectures and jupyter lab to interact with lectures. FROM continuumio/miniconda3:latest COPY . . RUN conda create -n qmlcourse python=3.8 --yes RUN conda run -n qmlcourse conda install psi4 python=3.8 -c psi4 --yes RUN conda run -n qmlcourse python -m pip install -r requirements.txt RUN conda run -n qmlcourse conda install -c conda-forge jupyterlab --yes -CMD ["/bin/sh", "-c", "conda run -n qmlcourse jupyter lab --allow-root --p 8989"] \ No newline at end of file +CMD ["/bin/sh", "-c", "conda run -n qmlcourse jupyter lab --allow-root --p 8989"] From 8b9e62942ebcf93761fc0a5e10a2d12bb6ec8ad1 Mon Sep 17 00:00:00 2001 From: Aleksei Pronkin <31882933+alexey-pronkin@users.noreply.github.com> Date: Sat, 18 Jun 2022 15:06:37 +0300 Subject: [PATCH 08/63] style 2 --- scripts/convert2ipynb.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/scripts/convert2ipynb.py b/scripts/convert2ipynb.py index 12c26d7537..8604b21f74 100644 --- a/scripts/convert2ipynb.py +++ b/scripts/convert2ipynb.py @@ -3,15 +3,21 @@ import yaml -PREFIX = 'qmlcourse'+'/' +PREFIX = "qmlcourse" + "/" -with open('qmlcourse/_toc.yml') as f: +with open("qmlcourse/_toc.yml") as f: toc = yaml.safe_load(f) # make dir for ipynbs os.makedirs("notebooks", exist_ok=True) # remove index file for part in toc[1:]: - for chapter in part['chapters']: - call(['poetry', 'run', 'jupytext', PREFIX + chapter['file'], '--to', 'ipynb']) - os.makedirs( 'notebooks/' + '/'.join(chapter['file'].split("/")[1:-1]), exist_ok=True) - call(['mv', PREFIX + chapter['file'].split('.')[0] + '.ipynb', 'notebooks/' + '/'.join(chapter['file'].split("/")[1:]) + '.ipynb']) \ No newline at end of file + for chapter in part["chapters"]: + call(["poetry", "run", "jupytext", PREFIX + chapter["file"], "--to", "ipynb"]) + os.makedirs("notebooks/" + "/".join(chapter["file"].split("/")[1:-1]), exist_ok=True) + call( + [ + "mv", + PREFIX + chapter["file"].split(".")[0] + ".ipynb", + "notebooks/" + "/".join(chapter["file"].split("/")[1:]) + ".ipynb", + ] + ) From 77f632ebf230bee62ec3f1e0ef18ae88f53d40b1 Mon Sep 17 00:00:00 2001 From: Aleksei Pronkin <31882933+alexey-pronkin@users.noreply.github.com> Date: Sat, 18 Jun 2022 15:55:38 +0300 Subject: [PATCH 09/63] style 2 --- .gitignore | 2 +- qmlcourse/book/ml/ru/ml_intro.md | 13 ++++++++++--- requirements.txt | 2 +- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 9d1a294cc0..e429f64c6d 100644 --- a/.gitignore +++ b/.gitignore @@ -516,4 +516,4 @@ _build* _tmp_notebooks # Notebooks dir -notebooks \ No newline at end of file +notebooks diff --git a/qmlcourse/book/ml/ru/ml_intro.md b/qmlcourse/book/ml/ru/ml_intro.md index e5cf18fb42..ff7ff25709 100644 --- a/qmlcourse/book/ml/ru/ml_intro.md +++ b/qmlcourse/book/ml/ru/ml_intro.md @@ -1,10 +1,17 @@ -(ml_intro)= +--- +jupytext: + text_representation: + extension: .md + format_name: myst + format_version: 0.13 + jupytext_version: 1.13.8 +--- # О блоке "Машинное обучение" -Этот блок рассказывает о том, что общего у разных задач машинного обучения и как из основных компонентов, подобно паззлу, складываются различные применения моделей машинного обучения. Основная наша задача – чтоб у читателя даже не знакомого с машинным обучением возникло понимание того, как это все работает и как "сложить паззл" в новой задаче, будь то кластеризация новостей, детекция лиц на фотографиях или различные сложные применения вариационных квантовых схем, о которых пойдет речь далее в курсе. - +Этот блок рассказывает о том, что общего у разных задач машинного обучения и как из основных компонентов, подобно паззлу, складываются различные применения моделей машинного обучения. Основная наша задача – чтоб у читателя даже не знакомого с машинным обучением возникло понимание того, как это все работает и как "сложить паззл" в новой задаче, будь то кластеризация новостей, детекция лиц на фотографиях или различные сложные применения вариационных квантовых схем, о которых пойдет речь далее в курсе. ++++ ```{figure} /_static/ml/ru/vqgan_clip_neural_network.png :name: vqgan_clip_neural_network diff --git a/requirements.txt b/requirements.txt index 7b4916bcd0..ee20eebc77 100644 --- a/requirements.txt +++ b/requirements.txt @@ -22,4 +22,4 @@ paramiko>=2.8.0 penaltymodel-maxgap>=0.5.5 pre-commit>=2.13.0 qiskit>=0.31.0 -scikit-learn>=0.24.1 \ No newline at end of file +scikit-learn>=0.24.1 From 893218dcbeaa94ccbabd60349347de23b3e16aab Mon Sep 17 00:00:00 2001 From: Alexey Pronkin Date: Wed, 22 Jun 2022 17:23:14 -0400 Subject: [PATCH 10/63] fix convert2ipynb.py; add .dockerignore; add toml2requirements.py --- .dockerignore | 2 ++ scripts/convert2ipynb.py | 44 +++++++++++++++++----------- scripts/toml2requirements.py | 56 ++++++++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+), 16 deletions(-) create mode 100644 .dockerignore create mode 100644 scripts/toml2requirements.py diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000..2229b733da --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +.git/* +.github/* diff --git a/scripts/convert2ipynb.py b/scripts/convert2ipynb.py index 8604b21f74..5656504cb2 100644 --- a/scripts/convert2ipynb.py +++ b/scripts/convert2ipynb.py @@ -5,19 +5,31 @@ PREFIX = "qmlcourse" + "/" -with open("qmlcourse/_toc.yml") as f: - toc = yaml.safe_load(f) -# make dir for ipynbs -os.makedirs("notebooks", exist_ok=True) -# remove index file -for part in toc[1:]: - for chapter in part["chapters"]: - call(["poetry", "run", "jupytext", PREFIX + chapter["file"], "--to", "ipynb"]) - os.makedirs("notebooks/" + "/".join(chapter["file"].split("/")[1:-1]), exist_ok=True) - call( - [ - "mv", - PREFIX + chapter["file"].split(".")[0] + ".ipynb", - "notebooks/" + "/".join(chapter["file"].split("/")[1:]) + ".ipynb", - ] - ) + +def convert_md2ipynb(toc): + """ + Convert MyST files from toc to ipython notebooks. + toc: YAML list of the dicts with table of contents for jupyter book. + """ + for part in toc[1:]: + for chapter in part["chapters"]: + call(["poetry", "run", "jupytext", PREFIX + chapter["file"], "--to", "ipynb"]) + os.makedirs("notebooks/" + "/".join(chapter["file"].split("/")[1:-1]), exist_ok=True) + call( + [ + "mv", + PREFIX + chapter["file"].split(".")[0] + ".ipynb", + "notebooks/" + "/".join(chapter["file"].split("/")[1:]) + ".ipynb", + ] + ) + + +if __name__ == "main": + with open("qmlcourse/_toc.yml") as f: + toc = yaml.safe_load(f) + + # make dir for ipynbs + os.makedirs("notebooks", exist_ok=True) + + # convert lectures + convert_md2ipynb(toc) diff --git a/scripts/toml2requirements.py b/scripts/toml2requirements.py new file mode 100644 index 0000000000..84e7fb3a75 --- /dev/null +++ b/scripts/toml2requirements.py @@ -0,0 +1,56 @@ +prohibited_packages_listner = set( + [ + "python", + "pre-commit", + "jupyter-book", + "pyyaml", + "pylatexenc", + "paramiko", + "scp", + "", + ] +) +prohibited_packages_dev = set(["python", ""]) + + +def get_packages(prohibited_packages): + """ + Remove prohibited packages and creates text for requirements.txt + prohibited_packages: set of prohibited packages + """ + packages = [] + packages_flag = False + with open("pyproject.toml", "r") as toml_file: + for line in toml_file: + line = line.strip() + if line == "[tool.poetry.dependencies]": + packages_flag = True + continue + elif line == "[build-system]": + packages_flag = False + elif line == "": + continue + if packages_flag: + package, version = line.split(" = ") + package = package.strip() + version = version.strip()[1:-1] # remove brakets \"^version\" + if package not in prohibited_packages: + if version.startswith("^"): + if len(version.split(".")) == 3: + packages.append( + package + ">=" + version[1:] + ) # choose major version, needed for security bugfixes + else: + packages.append(package + "==" + version[1:]) + else: + packages.append(package + "==" + version) + return sorted(packages) + + +if __name__ == "__main__": + with open("requirements.txt", "w") as req_file: + req_file.writelines("\n".join(get_packages(prohibited_packages=prohibited_packages_listner))) + + # Devs now only with poetry + # with open("requirements.txt", 'w') as req_file: + # req_file.writelines("\n".join(get_packages(prohibited_packages=prohibited_packages_dev))) From d519fc8e6e6c637c97bb0efa47cb0cc14225a16a Mon Sep 17 00:00:00 2001 From: Aleksei Pronkin <31882933+alexey-pronkin@users.noreply.github.com> Date: Fri, 24 Jun 2022 23:49:14 +0300 Subject: [PATCH 11/63] refactor scripts, remove bugs --- qmlcourse/book/ml/ru/ml_intro.md | 13 +++---------- requirements.txt | 23 ++++++---------------- scripts/convert2ipynb.py | 33 ++++++++++++++++++++------------ scripts/toml2requirements.py | 19 +++++++++++++----- 4 files changed, 44 insertions(+), 44 deletions(-) diff --git a/qmlcourse/book/ml/ru/ml_intro.md b/qmlcourse/book/ml/ru/ml_intro.md index ff7ff25709..e5cf18fb42 100644 --- a/qmlcourse/book/ml/ru/ml_intro.md +++ b/qmlcourse/book/ml/ru/ml_intro.md @@ -1,17 +1,10 @@ ---- -jupytext: - text_representation: - extension: .md - format_name: myst - format_version: 0.13 - jupytext_version: 1.13.8 ---- +(ml_intro)= # О блоке "Машинное обучение" -Этот блок рассказывает о том, что общего у разных задач машинного обучения и как из основных компонентов, подобно паззлу, складываются различные применения моделей машинного обучения. Основная наша задача – чтоб у читателя даже не знакомого с машинным обучением возникло понимание того, как это все работает и как "сложить паззл" в новой задаче, будь то кластеризация новостей, детекция лиц на фотографиях или различные сложные применения вариационных квантовых схем, о которых пойдет речь далее в курсе. +Этот блок рассказывает о том, что общего у разных задач машинного обучения и как из основных компонентов, подобно паззлу, складываются различные применения моделей машинного обучения. Основная наша задача – чтоб у читателя даже не знакомого с машинным обучением возникло понимание того, как это все работает и как "сложить паззл" в новой задаче, будь то кластеризация новостей, детекция лиц на фотографиях или различные сложные применения вариационных квантовых схем, о которых пойдет речь далее в курсе. + -+++ ```{figure} /_static/ml/ru/vqgan_clip_neural_network.png :name: vqgan_clip_neural_network diff --git a/requirements.txt b/requirements.txt index ee20eebc77..03795013ee 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,25 +1,14 @@ -PennyLane>=0.18.0 -cirq>=0.11.0 +PennyLane==0.20.0 +cirq==0.11.0 dwave-system>=1.10.0 dwavebinarycsp>=0.1.3 matplotlib>=3.3.4 +netket==3.2 networkx>=2.6.3 numpy>=1.19.2 penaltymodel-maxgap>=0.5.5 -pyppeteer>=0.2.6 -qiskit>=0.31.0 -scikit-learn>=0.24.1 -sympy>=1.5 -PennyLane>=0.18.0 -cirq>=0.11.0 -dwave-system>=1.10.0 -dwavebinarycsp>=0.1.3 -jupyter-book>=0.10.1 -matplotlib>=3.3.4 -networkx>=2.6.3 -numpy>=1.19.2 -paramiko>=2.8.0 -penaltymodel-maxgap>=0.5.5 -pre-commit>=2.13.0 qiskit>=0.31.0 scikit-learn>=0.24.1 +sympy==1.8 +tensorflow-quantum==0.6.0 +tensorflow==2.7.2 diff --git a/scripts/convert2ipynb.py b/scripts/convert2ipynb.py index 5656504cb2..f111451763 100644 --- a/scripts/convert2ipynb.py +++ b/scripts/convert2ipynb.py @@ -1,31 +1,40 @@ import os +from pathlib import Path from subprocess import call +from typing import Dict +from typing import List import yaml -PREFIX = "qmlcourse" + "/" +PREFIX = Path("qmlcourse") -def convert_md2ipynb(toc): +def convert_md2ipynb(toc: List[Dict[str, Dict]]) -> None: """ Convert MyST files from toc to ipython notebooks. toc: YAML list of the dicts with table of contents for jupyter book. """ for part in toc[1:]: for chapter in part["chapters"]: - call(["poetry", "run", "jupytext", PREFIX + chapter["file"], "--to", "ipynb"]) - os.makedirs("notebooks/" + "/".join(chapter["file"].split("/")[1:-1]), exist_ok=True) - call( - [ - "mv", - PREFIX + chapter["file"].split(".")[0] + ".ipynb", - "notebooks/" + "/".join(chapter["file"].split("/")[1:]) + ".ipynb", - ] + file_path = PREFIX / Path(chapter["file"]) + call(["poetry", "run", "jupytext", file_path.absolute(), "--to", "ipynb"]) + os.makedirs( + Path("notebooks") / Path("/".join(chapter["file"].split("/")[1:-1])), + exist_ok=True, ) + try: + os.replace( + PREFIX / Path(chapter["file"].split(".")[0] + ".ipynb"), + Path("notebooks") / Path("/".join(chapter["file"].split("/")[1:]) + ".ipynb"), + ) + except FileNotFoundError: + print("Problem with", Path(chapter["file"])) -if __name__ == "main": - with open("qmlcourse/_toc.yml") as f: +if __name__ == "__main__": + + # Open table of content + with open("qmlcourse/_toc.yml", "r", encoding="utf-8") as f: toc = yaml.safe_load(f) # make dir for ipynbs diff --git a/scripts/toml2requirements.py b/scripts/toml2requirements.py index 84e7fb3a75..5939f4abd2 100644 --- a/scripts/toml2requirements.py +++ b/scripts/toml2requirements.py @@ -1,3 +1,6 @@ +from typing import List +from typing import Set + prohibited_packages_listner = set( [ "python", @@ -5,15 +8,19 @@ "jupyter-book", "pyyaml", "pylatexenc", + "pyppeteer", + "sphinx-jupyterbook-latex", + "sphinx-sitemap", "paramiko", "scp", + "Jinja2", "", - ] + ], ) prohibited_packages_dev = set(["python", ""]) -def get_packages(prohibited_packages): +def get_packages(prohibited_packages: Set[str]) -> List[str]: """ Remove prohibited packages and creates text for requirements.txt prohibited_packages: set of prohibited packages @@ -26,7 +33,7 @@ def get_packages(prohibited_packages): if line == "[tool.poetry.dependencies]": packages_flag = True continue - elif line == "[build-system]": + elif line in ["[build-system]", "# [tool.poetry.dev-dependencies]"]: packages_flag = False elif line == "": continue @@ -38,7 +45,7 @@ def get_packages(prohibited_packages): if version.startswith("^"): if len(version.split(".")) == 3: packages.append( - package + ">=" + version[1:] + package + ">=" + version[1:], ) # choose major version, needed for security bugfixes else: packages.append(package + "==" + version[1:]) @@ -50,7 +57,9 @@ def get_packages(prohibited_packages): if __name__ == "__main__": with open("requirements.txt", "w") as req_file: req_file.writelines("\n".join(get_packages(prohibited_packages=prohibited_packages_listner))) + req_file.writelines("\n") # Devs now only with poetry - # with open("requirements.txt", 'w') as req_file: + # with open("requirements-dev.txt", 'w') as req_file: # req_file.writelines("\n".join(get_packages(prohibited_packages=prohibited_packages_dev))) + # req_file.writelines("\n") From e30698812a6ffe5279f03acb67995bf25f460a52 Mon Sep 17 00:00:00 2001 From: Aleksei Pronkin <31882933+alexey-pronkin@users.noreply.github.com> Date: Sat, 25 Jun 2022 09:04:04 +0300 Subject: [PATCH 12/63] manually change requirements file --- requirements.txt | 2 +- scripts/toml2requirements.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 03795013ee..f9e22aa5d5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ PennyLane==0.20.0 -cirq==0.11.0 +cirq>=0.11.0 dwave-system>=1.10.0 dwavebinarycsp>=0.1.3 matplotlib>=3.3.4 diff --git a/scripts/toml2requirements.py b/scripts/toml2requirements.py index 5939f4abd2..53a75a4369 100644 --- a/scripts/toml2requirements.py +++ b/scripts/toml2requirements.py @@ -48,7 +48,7 @@ def get_packages(prohibited_packages: Set[str]) -> List[str]: package + ">=" + version[1:], ) # choose major version, needed for security bugfixes else: - packages.append(package + "==" + version[1:]) + packages.append(package + ">=" + version[1:]) else: packages.append(package + "==" + version) return sorted(packages) From 69e1fc6016b090d63d77c4a2882947cc66a41037 Mon Sep 17 00:00:00 2001 From: Aleksei Pronkin <31882933+alexey-pronkin@users.noreply.github.com> Date: Sun, 26 Jun 2022 22:21:57 +0300 Subject: [PATCH 13/63] working with listner docker stage --- Dockerfile | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4e118779c8..eb383c147d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,12 +1,14 @@ # Purpose of the builder is to make all lectures, convert them into ipython notebooks (.ipynb). This operation is time costly and take a lot of space on the HDD. # After that we could use lightweight environment -FROM ubuntu:20.04 as builder + +FROM ubuntu:20.04 as dev RUN apt update && apt install -y build-essential && apt install -y wget RUN apt update && apt install -y python3-pip RUN python3 -m pip install poetry #RUN apt update && apt install -y git && git clone https://github.com/quantum-ods/qmlcourse.git + COPY . . RUN poetry install --no-interaction --no-root RUN poetry run python scripts/convert2ipynb.py @@ -14,11 +16,23 @@ RUN poetry run jupyter-book toc migrate ./qmlcourse/_toc.yml -o ./qmlcourse/_toc RUN poetry run jupyter-book build ./qmlcourse --keep-going RUN poetry run jupyter-book build ./qmlcourse --builder latex --keep-going +#### # Purpose of this stage is to get all packages from lectures and jupyter lab to interact with lectures. -FROM continuumio/miniconda3:latest +#### + +FROM continuumio/miniconda3:latest as listener COPY . . RUN conda create -n qmlcourse python=3.8 --yes RUN conda run -n qmlcourse conda install psi4 python=3.8 -c psi4 --yes RUN conda run -n qmlcourse python -m pip install -r requirements.txt RUN conda run -n qmlcourse conda install -c conda-forge jupyterlab --yes -CMD ["/bin/sh", "-c", "conda run -n qmlcourse jupyter lab --allow-root --p 8989"] + +# Configure environment +ENV CONDA_DIR=/opt/conda \ + SHELL=/bin/bash +ENV PATH="${SHELL}:${PATH}" +ENV PATH="${CONDA_DIR}/bin:${PATH}" +EXPOSE 8989 + +# Starting jupyter lab +# ENTRYPOINT ["conda", "run", "--name=qmlcourse","jupyter", "lab", "--ip=127.0.0.1", "--allow-root", "--p=8989"] From a9677ce93ff21c7d67b09e9cfe839504eb955959 Mon Sep 17 00:00:00 2001 From: Aleksei Pronkin <31882933+alexey-pronkin@users.noreply.github.com> Date: Mon, 27 Jun 2022 13:11:10 +0300 Subject: [PATCH 14/63] not working bash in listener stage --- Dockerfile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index eb383c147d..bad2a028c2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,7 +8,7 @@ RUN apt update && apt install -y python3-pip RUN python3 -m pip install poetry #RUN apt update && apt install -y git && git clone https://github.com/quantum-ods/qmlcourse.git - +WORKDIR qmlcourse COPY . . RUN poetry install --no-interaction --no-root RUN poetry run python scripts/convert2ipynb.py @@ -21,6 +21,7 @@ RUN poetry run jupyter-book build ./qmlcourse --builder latex --keep-going #### FROM continuumio/miniconda3:latest as listener +WORKDIR qmlcourse COPY . . RUN conda create -n qmlcourse python=3.8 --yes RUN conda run -n qmlcourse conda install psi4 python=3.8 -c psi4 --yes @@ -33,6 +34,7 @@ ENV CONDA_DIR=/opt/conda \ ENV PATH="${SHELL}:${PATH}" ENV PATH="${CONDA_DIR}/bin:${PATH}" EXPOSE 8989 +# ENTRYPOINT ["/bin/bash", "-c"] # Starting jupyter lab # ENTRYPOINT ["conda", "run", "--name=qmlcourse","jupyter", "lab", "--ip=127.0.0.1", "--allow-root", "--p=8989"] From a75192c912e9662047640a1ab56f08861063422d Mon Sep 17 00:00:00 2001 From: Aleksei Pronkin <31882933+alexey-pronkin@users.noreply.github.com> Date: Mon, 27 Jun 2022 17:25:42 +0300 Subject: [PATCH 15/63] Update comment Co-authored-by: vtrokhymenko <8581044+vtrokhymenko@users.noreply.github.com> --- Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile b/Dockerfile index bad2a028c2..99ee0817b0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,7 @@ +#### # Purpose of the builder is to make all lectures, convert them into ipython notebooks (.ipynb). This operation is time costly and take a lot of space on the HDD. # After that we could use lightweight environment +#### FROM ubuntu:20.04 as dev From cb3ee7971204cf09a913354f35827d1d2410438a Mon Sep 17 00:00:00 2001 From: Aleksei Pronkin <31882933+alexey-pronkin@users.noreply.github.com> Date: Tue, 28 Jun 2022 14:28:17 +0300 Subject: [PATCH 16/63] add entry point --- Dockerfile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 99ee0817b0..f9612c1a3d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -36,7 +36,8 @@ ENV CONDA_DIR=/opt/conda \ ENV PATH="${SHELL}:${PATH}" ENV PATH="${CONDA_DIR}/bin:${PATH}" EXPOSE 8989 -# ENTRYPOINT ["/bin/bash", "-c"] +ENTRYPOINT ["bash"] # Starting jupyter lab -# ENTRYPOINT ["conda", "run", "--name=qmlcourse","jupyter", "lab", "--ip=127.0.0.1", "--allow-root", "--p=8989"] +# conda activate qmlcourse +# jupyter lab --allow-root --port 8989 From 170dcd04bcda5085dea9a56318a388471b4c39a6 Mon Sep 17 00:00:00 2001 From: Alexey Pronkin Date: Sun, 3 Jul 2022 08:12:25 -0400 Subject: [PATCH 17/63] add tex libs --- Dockerfile | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Dockerfile b/Dockerfile index f9612c1a3d..7a4a1b3016 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,8 +16,15 @@ RUN poetry install --no-interaction --no-root RUN poetry run python scripts/convert2ipynb.py RUN poetry run jupyter-book toc migrate ./qmlcourse/_toc.yml -o ./qmlcourse/_toc.yml RUN poetry run jupyter-book build ./qmlcourse --keep-going +RUN apt update && apt -y install texlive-latex-recommended texlive-latex-extra \ + texlive-fonts-recommended texlive-fonts-extra \ + texlive-xetex latexmk RUN poetry run jupyter-book build ./qmlcourse --builder latex --keep-going +CMD["/bin/bash"] + +# xelatex -interaction nonstopmode qmlcourse.tex + #### # Purpose of this stage is to get all packages from lectures and jupyter lab to interact with lectures. #### From 607e2dd57d804f46b9078562a2a5183c69b7fbe8 Mon Sep 17 00:00:00 2001 From: Aleksei Pronkin <31882933+alexey-pronkin@users.noreply.github.com> Date: Thu, 7 Jul 2022 22:28:54 +0300 Subject: [PATCH 18/63] refactor docker, remove buildings to interactive regime --- Dockerfile | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/Dockerfile b/Dockerfile index 7a4a1b3016..5dd846dba7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,27 +2,30 @@ # Purpose of the builder is to make all lectures, convert them into ipython notebooks (.ipynb). This operation is time costly and take a lot of space on the HDD. # After that we could use lightweight environment #### - +ARG GIT-BRANCH=master FROM ubuntu:20.04 as dev - -RUN apt update && apt install -y build-essential && apt install -y wget +ENV DEBIAN_FRONTEND=noninteractive +ENV TZ=Europe/London +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone +RUN apt update && apt install -y build-essential git wget tzdata RUN apt update && apt install -y python3-pip RUN python3 -m pip install poetry +RUN apt update && apt install -y +# Needed if we pull from dockerhub without local repo. +# RUN git clone https://github.com/quantum-ods/qmlcourse.git -#RUN apt update && apt install -y git && git clone https://github.com/quantum-ods/qmlcourse.git WORKDIR qmlcourse COPY . . +# RUN git checkout ${GIT-BRANCH} RUN poetry install --no-interaction --no-root -RUN poetry run python scripts/convert2ipynb.py -RUN poetry run jupyter-book toc migrate ./qmlcourse/_toc.yml -o ./qmlcourse/_toc.yml -RUN poetry run jupyter-book build ./qmlcourse --keep-going -RUN apt update && apt -y install texlive-latex-recommended texlive-latex-extra \ - texlive-fonts-recommended texlive-fonts-extra \ - texlive-xetex latexmk -RUN poetry run jupyter-book build ./qmlcourse --builder latex --keep-going - -CMD["/bin/bash"] - +RUN apt update && apt install -y texlive-latex-extra texlive-fonts-extra texlive-xetex latexmk +# ENTRYPOINT ["/bin/bash"] +# RUN poetry run python scripts/convert2ipynb.py +# RUN poetry run jupyter-book toc migrate ./qmlcourse/_toc.yml -o ./qmlcourse/_toc.yml +# RUN poetry run jupyter-book build ./qmlcourse --keep-going +# # Get latex file +# RUN poetry run jupyter-book build ./qmlcourse --builder latex --keep-going +# Building pdf # xelatex -interaction nonstopmode qmlcourse.tex #### From 5da04d1e803c006fcfc9868e6f17cf6638bf26f0 Mon Sep 17 00:00:00 2001 From: Aleksei Pronkin <31882933+alexey-pronkin@users.noreply.github.com> Date: Fri, 8 Jul 2022 09:02:05 +0300 Subject: [PATCH 19/63] clean --- .dockerignore | 2 -- Dockerfile | 9 --------- requirements-listener.txt | 12 ------------ requirements.txt | 18 ------------------ 4 files changed, 41 deletions(-) delete mode 100644 .dockerignore delete mode 100644 Dockerfile delete mode 100644 requirements-listener.txt delete mode 100644 requirements.txt diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index 746b16d84d..0000000000 --- a/.dockerignore +++ /dev/null @@ -1,2 +0,0 @@ -.git/* -.github/* \ No newline at end of file diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index e147c09e8f..0000000000 --- a/Dockerfile +++ /dev/null @@ -1,9 +0,0 @@ -FROM continuumio/miniconda3:latest -COPY . . -RUN conda create -n qmlcourse.ai python=3.8 --yes -# Make RUN commands use the new environment: -RUN conda run -n qmlcourse.ai conda install poetry --yes -RUN conda run -n qmlcourse.ai poetry install -RUN conda run -n qmlcourse.ai conda install psi4 python=3.8 -c psi4 --yes -# RUN conda run -n qmlcourse.ai conda list -e > requirements.txt - we could use this to make requirements.txt exactly as poetry, however this works only on Ubuntu :( -RUN conda run -n qmlcourse.ai conda install -c conda-forge jupyterlab \ No newline at end of file diff --git a/requirements-listener.txt b/requirements-listener.txt deleted file mode 100644 index 13b401c5b5..0000000000 --- a/requirements-listener.txt +++ /dev/null @@ -1,12 +0,0 @@ -PennyLane>=0.18.0 -cirq>=0.11.0 -dwave-system>=1.10.0 -dwavebinarycsp>=0.1.3 -matplotlib>=3.3.4 -networkx>=2.6.3 -numpy>=1.19.2 -penaltymodel-maxgap>=0.5.5 -pyppeteer>=0.2.6 -qiskit>=0.31.0 -scikit-learn>=0.24.1 -sympy==1.5 diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 32ff2384ab..0000000000 --- a/requirements.txt +++ /dev/null @@ -1,18 +0,0 @@ -PennyLane>=0.18.0 -cirq>=0.11.0 -dwave-system>=1.10.0 -dwavebinarycsp>=0.1.3 -jupyter-book>=0.10.1 -matplotlib>=3.3.4 -networkx>=2.6.3 -numpy>=1.19.2 -paramiko>=2.8.0 -penaltymodel-maxgap>=0.5.5 -pre-commit>=2.13.0 -pylatexenc==2.10 -pyppeteer>=0.2.6 -pyyaml>=5.4.1 -qiskit>=0.31.0 -scikit-learn>=0.24.1 -scp>=0.14.1 -sympy==1.5 \ No newline at end of file From c9916f40c86b35d5faf9d1c49a9449c36d558957 Mon Sep 17 00:00:00 2001 From: Aleksei Pronkin <31882933+alexey-pronkin@users.noreply.github.com> Date: Fri, 8 Jul 2022 11:36:22 +0300 Subject: [PATCH 20/63] add test to convert2ipynb.py --- scripts/convert2ipynb.py | 3 +- scripts/test_convert2ipynb.py | 79 +++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 scripts/test_convert2ipynb.py diff --git a/scripts/convert2ipynb.py b/scripts/convert2ipynb.py index f111451763..49a3e423b0 100644 --- a/scripts/convert2ipynb.py +++ b/scripts/convert2ipynb.py @@ -17,6 +17,7 @@ def convert_md2ipynb(toc: List[Dict[str, Dict]]) -> None: for part in toc[1:]: for chapter in part["chapters"]: file_path = PREFIX / Path(chapter["file"]) + print(file_path) call(["poetry", "run", "jupytext", file_path.absolute(), "--to", "ipynb"]) os.makedirs( Path("notebooks") / Path("/".join(chapter["file"].split("/")[1:-1])), @@ -25,7 +26,7 @@ def convert_md2ipynb(toc: List[Dict[str, Dict]]) -> None: try: os.replace( PREFIX / Path(chapter["file"].split(".")[0] + ".ipynb"), - Path("notebooks") / Path("/".join(chapter["file"].split("/")[1:]) + ".ipynb"), + Path("notebooks") / Path("/".join(chapter["file"].split(".")[0].split("/")[1:]) + ".ipynb"), ) except FileNotFoundError: print("Problem with", Path(chapter["file"])) diff --git a/scripts/test_convert2ipynb.py b/scripts/test_convert2ipynb.py new file mode 100644 index 0000000000..f1146632bb --- /dev/null +++ b/scripts/test_convert2ipynb.py @@ -0,0 +1,79 @@ +import os +import pathlib +import unittest +from unittest import TestCase + +import yaml +from convert2ipynb import convert_md2ipynb + +## +# Test working from scripts folder +# python -m unittest +## +test_toc = """ +- file: book/index.md + +# :ru: + +- part: Test + chapters: + - file: book/test/test.md + title: 🟦 Just test +""" +test_md = """ +# Test + +Some test text + +$$ +E = mc^2 +$$ + +```python +print(2+2) +``` + +""" + +test_md_file_path = pathlib.Path("../qmlcourse/book/test/test.md") +test_ipynb_file_path = pathlib.Path("../notebooks/test/test.ipynb") + + +class TestConvertmd2ipynb(TestCase): + def setUp(self: TestCase) -> None: + try: + os.mkdir(test_md_file_path.parent) + except OSError: + print("Test path is exist, that shouldn't be. Testing teardDown don't work.") + with open(test_md_file_path, "w") as test_md_file: + test_md_file.writelines(test_md) + + def tearDown(self: TestCase) -> None: + try: + os.remove(test_md_file_path) + os.rmdir(test_md_file_path.parent) + except OSError: + print("test don't setup the md file or folder") + try: + os.remove(test_ipynb_file_path) + os.rmdir(test_ipynb_file_path.parent) + except FileNotFoundError: + print("test don't get the ipynb file or folder") + + def test_convert_md2ipynb(self: TestCase) -> None: + cwd = pathlib.Path(os.getcwd()) + os.chdir(cwd.parent) + print(os.getcwd()) + convert_md2ipynb(toc=yaml.safe_load(test_toc)) + + os.chdir("scripts") + # Test that test ipynb exists + print(os.path.exists(test_ipynb_file_path)) + # Test len ipynb + with open(test_ipynb_file_path, "r") as test_ipynb_file: + test_ipynb_readed = test_ipynb_file.read() + assert len(test_ipynb_readed) == 685 + + +if __name__ == "__main__": + unittest.main() From fc33b4107f1b6ef92a73b691bbf39b81aa7e5b83 Mon Sep 17 00:00:00 2001 From: Aleksei Pronkin <31882933+alexey-pronkin@users.noreply.github.com> Date: Fri, 8 Jul 2022 15:43:34 +0300 Subject: [PATCH 21/63] starting working on docker lecture --- .github/workflows/test-docker.yml | 27 +- .github/workflows/windows-requirements.yml | 1 - Dockerfile | 21 +- INSTALLATION.md | 261 -------------------- qmlcourse/_toc.yml | 11 +- qmlcourse/book/install/en/advanced.md | 53 ++++ qmlcourse/book/install/en/docker.md | 120 +++++++++ qmlcourse/book/install/en/intro.md | 100 ++++++++ qmlcourse/book/install/en/trobleshooting.md | 23 ++ requirements.txt | 2 + tools/toml2requirements.py | 49 ---- 11 files changed, 345 insertions(+), 323 deletions(-) delete mode 100644 .github/workflows/windows-requirements.yml delete mode 100644 INSTALLATION.md create mode 100644 qmlcourse/book/install/en/advanced.md create mode 100644 qmlcourse/book/install/en/docker.md create mode 100644 qmlcourse/book/install/en/intro.md create mode 100644 qmlcourse/book/install/en/trobleshooting.md delete mode 100644 tools/toml2requirements.py diff --git a/.github/workflows/test-docker.yml b/.github/workflows/test-docker.yml index 2b125ae853..c0d3015551 100644 --- a/.github/workflows/test-docker.yml +++ b/.github/workflows/test-docker.yml @@ -1,2 +1,25 @@ -# Test docker for student and contributor + autoupdate requirements.txt file -# TODO +# Test docker for dev and listner +name: test-docker + +on: + workflow_dispatch: + push: + branches: [ master ] + +jobs: + + deploy_book: + runs-on: ubuntu-latest + timeout-minutes: 60 + + steps: + - name: checkout branch for build + uses: actions/checkout@v2 + - name: set up docker + uses: actions/setup-docker@v1 + - name: test dev (qml-dev) docker + run: | + docker build . --tag qml-dev:latest --target dev + - name: test listener (qmlcourse) docker + run: | + docker build . --tag qmlcourse:latest --target listener \ No newline at end of file diff --git a/.github/workflows/windows-requirements.yml b/.github/workflows/windows-requirements.yml deleted file mode 100644 index 6b3a80a45e..0000000000 --- a/.github/workflows/windows-requirements.yml +++ /dev/null @@ -1 +0,0 @@ -#TODO: test that requirements.txt works for windows and tools/ \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 5dd846dba7..dc83f614f6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,6 +2,7 @@ # Purpose of the builder is to make all lectures, convert them into ipython notebooks (.ipynb). This operation is time costly and take a lot of space on the HDD. # After that we could use lightweight environment #### + ARG GIT-BRANCH=master FROM ubuntu:20.04 as dev ENV DEBIAN_FRONTEND=noninteractive @@ -11,6 +12,7 @@ RUN apt update && apt install -y build-essential git wget tzdata RUN apt update && apt install -y python3-pip RUN python3 -m pip install poetry RUN apt update && apt install -y + # Needed if we pull from dockerhub without local repo. # RUN git clone https://github.com/quantum-ods/qmlcourse.git @@ -19,14 +21,14 @@ COPY . . # RUN git checkout ${GIT-BRANCH} RUN poetry install --no-interaction --no-root RUN apt update && apt install -y texlive-latex-extra texlive-fonts-extra texlive-xetex latexmk -# ENTRYPOINT ["/bin/bash"] -# RUN poetry run python scripts/convert2ipynb.py -# RUN poetry run jupyter-book toc migrate ./qmlcourse/_toc.yml -o ./qmlcourse/_toc.yml -# RUN poetry run jupyter-book build ./qmlcourse --keep-going -# # Get latex file -# RUN poetry run jupyter-book build ./qmlcourse --builder latex --keep-going -# Building pdf +RUN poetry run python scripts/convert2ipynb.py +RUN poetry run jupyter-book toc migrate ./qmlcourse/_toc.yml -o ./qmlcourse/_toc.yml +RUN poetry run jupyter-book build ./qmlcourse --keep-going +# Get latex file +RUN poetry run jupyter-book build ./qmlcourse --builder latex --keep-going +# TODO: Building pdf # xelatex -interaction nonstopmode qmlcourse.tex +ENTRYPOINT ["/bin/bash"] #### # Purpose of this stage is to get all packages from lectures and jupyter lab to interact with lectures. @@ -48,6 +50,7 @@ ENV PATH="${CONDA_DIR}/bin:${PATH}" EXPOSE 8989 ENTRYPOINT ["bash"] -# Starting jupyter lab +# Starting jupyter lab in interactive docker shell: +# docker run -it -p 8989:8989 qmlcourse:latest /bin/bash # conda activate qmlcourse -# jupyter lab --allow-root --port 8989 +# jupyter lab --allow-root --port 8989 \ No newline at end of file diff --git a/INSTALLATION.md b/INSTALLATION.md deleted file mode 100644 index 558d65a043..0000000000 --- a/INSTALLATION.md +++ /dev/null @@ -1,261 +0,0 @@ -# Installation - -There are several ways to install this course: with your system installed anaconda3/miniconda3 or with docker. If you don't need to contribute or change the course, you could follow only listener instructions. The contributor environment additionally contains pre-commit hooks and the patched jupyter book package. Additionally, you could install GPU versions of the packages and use your modern Nvidia GPUs. - -## Before we start - -Clone this repository using git or manually download using GitHub web version: - -```shell -git clone https://github.com/SemyonSinchenko/qmlcourse.git -``` - -## Conda - -First of all, install miniconda for your operating system https://docs.conda.io/en/latest/miniconda.html -Then you have to create an empty environment for the course, let's name it `qmlcourse.ai`. For this course, we use some features of python 3.8, so you need at least this version. - -```shell -conda create -n qmlcourse.ai python=3.8 --yes -``` - -after that, you need to activate this env by the following command - -```shell -conda activate qmlcourse.ai -``` - ---- - -**NOTE** - -You could also install all packages from Intel optimized repositories, but for now, we don't test this approach. This could make sense in four cases: - -- if you are using a very old Intel/AMD processor (that does not have AVX2 instructions, for example). Then with high probability, you'll need to compile some packages by yourself. Intel® Distribution for Python contains many compilers and tools to help you with this non-trivial task. -- if you are using an extra modern Intel CPU with AVX-512 or new AMX instructions. Or your CPU has more than eight cores. -- if you are using cluster and don't want to install OpenMP and other libraries manually. - In the mean case scenario with 8 cores CPU, you probably get about a 10% increase in the speed of calculations that, in my opinion, do not cost additional efforts and space on your SSD/HDD. Some users review that this actually works with an AMD processor, so if you have an AMD CPU you could message @avpronkin in ODS.ai Slack about a successful installation or ask for help. - -### Intel® Distribution for Python - -First of all, update your conda: - -```shell -conda update conda -``` - -Secondly, add the Intel channel for packages: - -```shell -conda config --add channels intel -``` - -Finally, create intel based python environment and activate it: - -```shell -conda create -n qmlcourse.ai intelpython3_core python=3.8 --yes -conda activate qmlcourse.ai -``` - -After you could activate your environment and continue to install all other packages, conda automatically search all repositories with the preference of the intel repo. - -If you stack with problems, you could remove the Intel channel - -```shell -conda config --remove channels intel -``` - -And remove `qmlcourse.ai` environment: -**WARNING** -_This cannot be undone, so you remove all packages that you install in `qmlcourse.ai` environment_ - -```shell -conda deactivate -conda env remove -n qmlcourse.ai -``` - -## so then you could proceed with another type of installation - -### Check the installation - -The following command prints your path to the `alias python` in the activated environment: - -```shell -python -c "import sys; print(sys.executable)" -``` - -The printed path should look like `/home/user/miniconda3/envs/qmlcourse.ai/python` on Unix system and `C:\Users\USER\miniconda3\envs\qmlcourse.ai\python.exe` on Windows. - -### Installing packages - -#### Listener - -When you activate conda env - -```shell -conda activate qmlcourse.ai -``` - -On Linux and OSX you could install a stable version of psi4: - -```shell -conda install psi4 python=3.8 -c psi4 --yes -``` - -On Windows, you need to install nightly build: - -```shell -conda install psi4 python=3.8 -c psi4/label/dev -c conda-forge --yes -``` - -Before installation the main packages, you could install the GPU version of TensorFlow/JAX. -See instructions here [_tensorflow-gpu_](https://www.tensorflow.org/install/gpu), [_JAX GPU_](https://github.com/google/jax#pip-installation-gpu-cuda): - -And, finally, you need to install the majority of packages by: - -``` -python -m pip install -r requirements-listener.txt -``` - -Additionally, you could install jupyter or jupyter lab. In this guide, we install `jupyter-lab` - -``` -conda activate qmlcourse.ai -conda install -c conda-forge jupyterlab -``` - -### Working with course - -I recommend you always use an explicit command like `python -m some_module` and work only inside the virtual environment. For example: - -```shell -conda activate qmlcourse.ai -python - m pip install pandas -python - m jupyter notebook -``` - -In other cases (python3, py3, pip3, poetry run, etc.), you need to know what you do, where you do, and why you do that. -You could always use aliases and macros for shortcuts like - -```bash -alias qml='conda activate qmlcourse.ai && python -m jupyter notebook' -``` - -or for Windows: - -```bat -doskey qml=conda activate qmlcourse.ai $T python -m jupyter notebook -``` - -And then printing `qml` in your terminal gives you the proper jupyter notebook kernel (do not forget to back up your ".dotfiles" somewhere. You could search on the Internet which files you need to back up to save all your aliases). - -```shell -qml -``` - -#### Contributor - -\*\* -**WINDOWS NOTE** -There is no way to easily install the contributor packages due to changes in some async packages from Python 3.8 on Windows. We use in our course some tricks from python3.8 like f-string debugging, so you need Docker Desktop or WSL2 -\*\* - -```shell -conda create -n qmlcourse.ai-dev python=3.8 --yes -``` - -```shell -conda activate qmlcourse.ai-dev -``` - -On Linux and OSX you could install the stable version of psi4: - -```shell -conda install psi4 python=3.8 -c psi4 --yes -``` - -On Windows, you need to install nightly build: - -```shell - conda install psi4 python=3.8 -c psi4/label/dev -c conda-forge --yes -``` - -And finally, install all other packages: - -``` -python -m pip install -r requirements.txt -``` - -Or in Linux, you could use poetry: - -```shell -conda activate qmlcourse.ai-dev -conda install psi4 python=3.8 -c psi4 --yes -python -m pip install poetry -python -m poetry install -``` - -#### Troubleshooting - -##### Known problems - -[_Jupyter book does not work with python 3.8+ on Windows_](https://github.com/jupyter/nbclient/issues/85). So, please use docker/WSL2 for the contributing instead. - -If packages conflicts, then update conda: - -```shell -conda deactivate -conda update conda -``` - -## Docker - -For installing a docker environment on your operating system, please read [_this official guide_](https://docs.docker.com/get-docker/). After the installation, if you are on a Linux system, please do the post-installation steps: [_Linux post-installation steps_](https://docs.docker.com/engine/install/linux-postinstall/). After that, you probably should restart your OS. You could test your installation with the following command: - -```shell -docker version -docker run hello-world -``` - -You need to see docker version and then short instructions and links to the documentation. If you see that command docker is not find, then you need to add docker to PATH, and if you see permitions issues, than you didn't do post-instalaltion steps and didn't reboot your system, see the documentation on the docker website. - -### Contributor - -Firstly, you need to git clone repository and build docker image from qmlcourse folder with Dockerfile: - -``` -git clone --recursive https://github.com/SemyonSinchenko/qmlcourse.git -cd qmlcourse -docker build . -t qmlcourse.ai-dev:latest -``` - -after that you can see new docker image with - -```shell -docker images -``` - -you could build the entire book into folder with following command: - -```shell -docker run -it qmlcourse.ai-dev:latest /bin/sh -c "conda run -n qmlcourse.ai jupyter book build TODO:" -``` - -and you could use jupyter to write lectures, and then convert them into .md files with jupyter book: - -```shell -TODO: -``` - -### Listener - -`TODO:different docker tags for listner packages and contributer packages` -`TODO:Try magma instead of conda` - -### Starting jupyter: - -#### jupyter-lab - -```shell -docker run -it qmlcourse.ai-dev:latest /bin/sh -c "conda run -n qmlcourse.ai jupyter lab" -``` diff --git a/qmlcourse/_toc.yml b/qmlcourse/_toc.yml index f1f30100ba..31d6945016 100644 --- a/qmlcourse/_toc.yml +++ b/qmlcourse/_toc.yml @@ -223,7 +223,16 @@ title: 🟦 About quantum computers - file: book/intro/en/prerequisite.md title: ⬜ Prerequisite - + +- part: Installation + chapters: + - file: book/install/en/intro.md + title: 🟩 Basic installation + - file: book/install/en/docker.md + title: 🟩 Working with docker + - file: book/install/en/advanced.md + title: 🟧 Optimization environment for production or GPU use + - part: Linear Algebra and Numpy chapters: - file: book/linalg/en/linalg_intro.md diff --git a/qmlcourse/book/install/en/advanced.md b/qmlcourse/book/install/en/advanced.md new file mode 100644 index 0000000000..e3a8000c40 --- /dev/null +++ b/qmlcourse/book/install/en/advanced.md @@ -0,0 +1,53 @@ +# Advanced install of packages + +**NOTE** + +You could also install all packages from Intel optimized repositories, but for now, we don't test this approach. This could make sense in four cases: + +- if you are using a very old Intel/AMD processor (that does not have AVX2 instructions, for example). Then with high probability, you'll need to compile some packages by yourself. Intel® Distribution for Python contains many compilers and tools to help you with this non-trivial task. +- if you are using an extra modern Intel CPU with AVX-512 or new AMX instructions. Or your CPU has more than eight cores. +- if you are using cluster and don't want to install OpenMP and other libraries manually. + In the mean case scenario with 8 cores CPU, you probably get about a 10% increase in the speed of calculations that, in my opinion, do not cost additional efforts and space on your SSD/HDD. Some users review that this actually works with an AMD processor, so if you have an AMD CPU you could message @avpronkin in ODS.ai Slack about a successful installation or ask for help. + +### Intel® Distribution for Python + +First of all, update your conda: + +```shell +conda update conda +``` + +Secondly, add the Intel channel for packages: + +```shell +conda config --add channels intel +``` + +Finally, create intel based python environment and activate it: + +```shell +conda create -n qmlcourse intelpython3_core python=3.8 --yes +conda activate qmlcourse +``` + +After you could activate your environment and continue to install all other packages, conda automatically search all repositories with the preference of the intel repo. + +If you stack with problems, you could remove the Intel channel + +```shell +conda config --remove channels intel +``` + +And remove `qmlcourse` environment: +**WARNING** +_This cannot be undone, so you remove all packages that you install in `qmlcourse` environment_ + +```shell +conda deactivate +conda env remove -n qmlcourse +``` + +## GPU + +Before installation the main packages, you could install the GPU version of TensorFlow/JAX. +See instructions here [_tensorflow-gpu_](https://www.tensorflow.org/install/gpu), [_JAX GPU_](https://github.com/google/jax#pip-installation-gpu-cuda). diff --git a/qmlcourse/book/install/en/docker.md b/qmlcourse/book/install/en/docker.md new file mode 100644 index 0000000000..e9aa486ba6 --- /dev/null +++ b/qmlcourse/book/install/en/docker.md @@ -0,0 +1,120 @@ +# Docker + +For installing a docker environment on your operating system, please read [_this official guide_](https://docs.docker.com/get-docker/). After the installation, if you are on a Linux system, please do the post-installation steps: [_Linux post-installation steps_](https://docs.docker.com/engine/install/linux-postinstall/). After that, you probably should restart your OS. You could test your installation with the following command: + +```shell +docker version +docker run hello-world +``` + +You need to see docker version and then short instructions and links to the documentation. If you see that command docker is not find, then you need to add docker to PATH, and if you see permitions issues, than you didn't do post-instalaltion steps and didn't reboot your system, see the documentation on the docker website. + +## Contributor + +Firstly, you need to git clone repository and build docker image from qmlcourse folder with Dockerfile: + +``` +git clone --recursive https://github.com/SemyonSinchenko/qmlcourse.git +cd qmlcourse +docker build . --tag qml-dev:latest --target dev +``` + +after that you can see new docker image with + +```shell +docker images +``` + +you could run interactive shell of docker image with: + +```shell +docker run -it qml-dev:latest /bin/bash +``` + +in interactive shell you could: + +- build new ipynb +- build new latex +- build new pdf from latex + +### Build ipynb lecture notebooks + +and you could use jupyter to write lectures, and then convert them into .md files with jupyter text: + +```shell +pip install jupytext +``` + +```shell +python -m jupytext lecture.md --to ipynb +``` + +or use our script that creates notebook folder and get all lectures into it. + +```shell +python scripts/convert2ipynb.py +``` + +Or copy from docker folder to your machine folder all notebooks: + +```shell +docker cp qml-dev: notebooks ./notebooks/ +``` + +### Build book + +build the entire book into folder with following command: + +```shell +poetry run jupyter-book toc migrate ./qmlcourse/_toc.yml -o ./qmlcourse/_toc.yml +poetry run jupyter-book build ./qmlcourse --keep-going +``` + +### Build latex and pdf + +Firstly, you need to build latex from md files with + +```shell +poetry run jupyter-book toc migrate ./qmlcourse/_toc.yml -o ./qmlcourse/_toc.yml +poetry run jupyter-book build ./qmlcourse --builder latex --keep-going +``` + +Then change directory to qmlcourse/\_build/latex and use xelatex: + +```shell +xelatex -interaction nonstopmode qmlcourse.tex +``` + +## Listener + +### Starting jupyter: + +Run docker in interactive regime with port forwarding: + +```shell +docker run -it -p 8989:8989 qmlcourse:latest /bin/bash +``` + +In docker bash: + +```bash +conda activate qmlcourse +jupyter lab --allow-root --port 8989 +``` + +then see forwarding ip from docker in another shell: + +### Starting Jupyter Lab + +Run docker in interactive regime with port forwarding: + +```shell +docker run -it -p 8989:8989 qmlcourse:latest /bin/bash +``` + +In docker bash: + +```bash +conda activate qmlcourse +jupyter lab --allow-root --port 8989 +``` diff --git a/qmlcourse/book/install/en/intro.md b/qmlcourse/book/install/en/intro.md new file mode 100644 index 0000000000..8953a49fa8 --- /dev/null +++ b/qmlcourse/book/install/en/intro.md @@ -0,0 +1,100 @@ +# Installation + +There are several ways to install this course: with your system installed poetry/anaconda3/miniconda3 or with docker. If you don't need to contribute or change the course, you could follow only listener instructions. The contributor environment additionally contains pre-commit hooks and the jupyter book libraries. Additionally, you could install GPU versions of the packages and use your modern Nvidia GPUs. + +## Before we start + +Clone this repository using git or manually download using GitHub web version and open folder qmlcourse: + +```shell +git clone https://github.com/SemyonSinchenko/qmlcourse.git +cd qmlcorse +``` + +## Poetry + +If you are using linux or macos, you could use poetry with all developer packages: + +```bash +pip install poetry +poetry install --no-interaction --no-root +``` + +## Conda + +First of all, install miniconda for your operating system https://docs.conda.io/en/latest/miniconda.html +Then you have to create an empty environment for the course, let's name it `qmlcourse`. For this course, we use some features of python 3.8, so you need at this version of python. + +```shell +conda create -n qmlcourse python=3.8 --yes +``` + +after that, you need to activate this env by the following command + +```shell +conda activate qmlcourse +``` + +and install listener packages. On Linux and OSX you could install a stable version of psi4: + +```shell +conda install psi4 python=3.8 -c psi4 --yes +``` + +On Windows, you need to install nightly build: + +```shell +conda install psi4 python=3.8 -c psi4/label/dev -c conda-forge --yes +``` + +Then install all other packages: + +```shell +python -m pip install -r requirements.txt +conda install -c conda-forge jupyterlab --yes +``` + +after that you could download lectures in jupyter notebooks from and start jupyter lab: + +```shell +jupyter lab +``` + +### Check the installation + +The following command prints your path to the `alias python` in the activated environment: + +```shell +python -c "import sys; print(sys.executable)" +``` + +The printed path should look like `/home/user/miniconda3/envs/qmlcourse/python` on Unix system and `C:\Users\USER\miniconda3\envs\qmlcourse\python.exe` on Windows. + +### Working with course + +I recommend you always use an explicit command like `python -m some_module` and work only inside the virtual environment. For example: + +```shell +conda activate qmlcourse.ai +python - m pip install pandas +python - m jupyter notebook +``` + +In other cases (python3, py3, pip3, poetry run, etc.), you need to know what you do, where you do, and why you do that. +You could always use aliases and macros for shortcuts like + +```bash +alias qml='conda activate qmlcourse.ai && python -m jupyter notebook' +``` + +or for Windows: + +```bat +doskey qml=conda activate qmlcourse.ai $T python -m jupyter notebook +``` + +And then printing `qml` in your terminal gives you the proper jupyter notebook kernel (do not forget to back up your ".dotfiles" somewhere. You could search on the Internet which files you need to back up to save all your aliases). + +```shell +qml +``` diff --git a/qmlcourse/book/install/en/trobleshooting.md b/qmlcourse/book/install/en/trobleshooting.md new file mode 100644 index 0000000000..ee5cc8f061 --- /dev/null +++ b/qmlcourse/book/install/en/trobleshooting.md @@ -0,0 +1,23 @@ +#### Troubleshooting + +##### Known problems + +[_Jupyter book does not work with python 3.8+ on Windows_](https://github.com/jupyter/nbclient/issues/85). So, please use docker/WSL2 for the contributing instead. + +If packages conflicts, then update conda: + +```shell +conda deactivate +conda update conda +``` + +And remove `qmlcourse` environment: +**WARNING** +_This cannot be undone, so you remove all packages that you install in `qmlcourse` environment_ + +```shell +conda deactivate +conda env remove -n qmlcourse.ai +``` + +Then try install packages by hands without "==" versions. diff --git a/requirements.txt b/requirements.txt index f9e22aa5d5..a3ebe75bc1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,3 +12,5 @@ scikit-learn>=0.24.1 sympy==1.8 tensorflow-quantum==0.6.0 tensorflow==2.7.2 +pre-commit +jupytext diff --git a/tools/toml2requirements.py b/tools/toml2requirements.py deleted file mode 100644 index 01d35efafe..0000000000 --- a/tools/toml2requirements.py +++ /dev/null @@ -1,49 +0,0 @@ - -prohibited_packages_listner = set([ - "python", - "pre-commit", - "jupyter-book", - "pyyaml", - "pylatexenc", - "paramiko", - "scp", - "", - ]) -prohibited_packages_dev = set(["python", ""]) - - -def get_packages(prohibited_packages): - packages = [] - packages_flag = False - with open("pyproject.toml", 'r') as toml_file: - for line in toml_file: - line = line.strip() - if line == "[tool.poetry.dependencies]": - packages_flag=True - continue - elif line == "[build-system]": - packages_flag=False - elif line == "": - continue - if packages_flag: - package, version = line.split(" = ") - package = package.strip() - version = version.strip()[1:-1] # remove brakets \"^version\" - if package not in prohibited_packages: - if version.startswith("^"): - if len(version.split("."))==3: - packages.append(package+">="+version[1:]) # choose major version, needed for security bugfixes - else: - packages.append(package+"=="+version[1:]) - else: - packages.append(package+"=="+version) - return sorted(packages) - - #Sorting just for penaltymodel be upper -# GPU -# Intel -if __name__=="__main__": - with open("requirements.txt", 'w') as req_file: - req_file.writelines("\n".join(get_packages(prohibited_packages=prohibited_packages_dev))) - with open("requirements-listner.txt", 'w') as req_file: - req_file.writelines("\n".join(get_packages(prohibited_packages=prohibited_packages_listner))) From 1a3f8919978524696dc913390ac85cba32c0a73c Mon Sep 17 00:00:00 2001 From: Aleksei Pronkin <31882933+alexey-pronkin@users.noreply.github.com> Date: Sun, 10 Jul 2022 12:11:58 +0300 Subject: [PATCH 22/63] start working on install lecture test --- .github/workflows/test-installation.yml | 42 +++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 .github/workflows/test-installation.yml diff --git a/.github/workflows/test-installation.yml b/.github/workflows/test-installation.yml new file mode 100644 index 0000000000..41c6865658 --- /dev/null +++ b/.github/workflows/test-installation.yml @@ -0,0 +1,42 @@ +name: test-listener-os +# This repo testing instructions from lecture book/install/{ru/en}/intro.md +on: + workflow_dispatch: + inputs: + os: + # TODO + description: 'Choose OS for test' + required: false + default: '"ubuntu-latest", "macos-latest", "windows-latest"' +jobs: + test-listener-all: + name: Listener miniconda (${{ matrix.python-version }}, ${{ matrix.os }}) + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: ["ubuntu-latest", "macos-latest", "windows-latest"] + python-version: ["3.8", "3.9"] + steps: + - uses: conda-incubator/setup-miniconda@v2 + with: + auto-update-conda: true + python-version: ${{ matrix.python-version }} + - name: conda create and activate env + shell: bash -l {0} + run: | + conda create -n qmlcourse python=3.8 --yes + conda activate qmlcourse + - name: install psi-4 Non-Windows + if: ${{ matrix.os }} != "windows-latest" + shell: bash -l {0} + run: conda install psi4 python=3.8 -c psi4 --yes + - name: install psi-4 Windows + if: ${{ matrix.os }} == "windows-latest" + run: conda install psi4 python=3.8 -c psi4/label/dev -c conda-forge --yes + - name: install all other packages + run: | + python -m pip install -r requirements.txt + conda install -c conda-forge jupyterlab --yes + - name: test jupyter + run: jupyter --version From 0830fbb310977b425b6a14195b77e2d07bf11068 Mon Sep 17 00:00:00 2001 From: Aleksei Pronkin <31882933+alexey-pronkin@users.noreply.github.com> Date: Sun, 10 Jul 2022 21:30:39 +0300 Subject: [PATCH 23/63] fix test-installation and lecture --- .github/workflows/test-installation.yml | 10 +++++----- qmlcourse/book/install/en/intro.md | 14 ++++++++++---- qmlcourse/book/install/en/trobleshooting.md | 2 +- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/.github/workflows/test-installation.yml b/.github/workflows/test-installation.yml index 41c6865658..92601dcc1c 100644 --- a/.github/workflows/test-installation.yml +++ b/.github/workflows/test-installation.yml @@ -30,13 +30,13 @@ jobs: - name: install psi-4 Non-Windows if: ${{ matrix.os }} != "windows-latest" shell: bash -l {0} - run: conda install psi4 python=3.8 -c psi4 --yes + run: conda run -n qmlcourse conda install psi4 python=3.8 -c psi4 --yes - name: install psi-4 Windows if: ${{ matrix.os }} == "windows-latest" - run: conda install psi4 python=3.8 -c psi4/label/dev -c conda-forge --yes + run: conda run -n qmlcourse conda install psi4 python=3.8 -c psi4/label/dev -c conda-forge --yes - name: install all other packages run: | - python -m pip install -r requirements.txt - conda install -c conda-forge jupyterlab --yes + conda run -n qmlcourse python -m pip install -r requirements.txt + conda run -n qmlcourse conda install -c conda-forge jupyterlab --yes - name: test jupyter - run: jupyter --version + run: conda run -n qmlcourse jupyter --version diff --git a/qmlcourse/book/install/en/intro.md b/qmlcourse/book/install/en/intro.md index 8953a49fa8..c1925f024c 100644 --- a/qmlcourse/book/install/en/intro.md +++ b/qmlcourse/book/install/en/intro.md @@ -8,7 +8,7 @@ Clone this repository using git or manually download using GitHub web version an ```shell git clone https://github.com/SemyonSinchenko/qmlcourse.git -cd qmlcorse +cd qmlcourse ``` ## Poetry @@ -29,7 +29,7 @@ Then you have to create an empty environment for the course, let's name it `qmlc conda create -n qmlcourse python=3.8 --yes ``` -after that, you need to activate this env by the following command +after that, you need to activate this env by the following command (do this also after restart of the command line) ```shell conda activate qmlcourse @@ -41,6 +41,12 @@ and install listener packages. On Linux and OSX you could install a stable versi conda install psi4 python=3.8 -c psi4 --yes ``` +**Note** : If you don't want to activate env, you could use all following command with `conda run -n qmlcourse`, e.g.: + +```shell +conda run -n qmlcourse conda install psi4 python=3.8 -c psi4 --yes +``` + On Windows, you need to install nightly build: ```shell @@ -84,13 +90,13 @@ In other cases (python3, py3, pip3, poetry run, etc.), you need to know what you You could always use aliases and macros for shortcuts like ```bash -alias qml='conda activate qmlcourse.ai && python -m jupyter notebook' +alias qml='conda activate qmlcourse && python -m jupyter notebook' ``` or for Windows: ```bat -doskey qml=conda activate qmlcourse.ai $T python -m jupyter notebook +doskey qml=conda activate qmlcourse $T python -m jupyter notebook ``` And then printing `qml` in your terminal gives you the proper jupyter notebook kernel (do not forget to back up your ".dotfiles" somewhere. You could search on the Internet which files you need to back up to save all your aliases). diff --git a/qmlcourse/book/install/en/trobleshooting.md b/qmlcourse/book/install/en/trobleshooting.md index ee5cc8f061..3f78be732d 100644 --- a/qmlcourse/book/install/en/trobleshooting.md +++ b/qmlcourse/book/install/en/trobleshooting.md @@ -4,7 +4,7 @@ [_Jupyter book does not work with python 3.8+ on Windows_](https://github.com/jupyter/nbclient/issues/85). So, please use docker/WSL2 for the contributing instead. -If packages conflicts, then update conda: +If packages conflict, then update conda: ```shell conda deactivate From abfc0ae7dce8de224a0c67e68456fa217d97391b Mon Sep 17 00:00:00 2001 From: Aleksei Pronkin <31882933+alexey-pronkin@users.noreply.github.com> Date: Mon, 11 Jul 2022 09:29:48 +0300 Subject: [PATCH 24/63] staged version --- Dockerfile | 6 +- qmlcourse/book/install/en/docker.md | 20 ++-- qmlcourse/book/install/en/intro-windows.md | 120 +++++++++++++++++++++ qmlcourse/book/install/en/intro.md | 7 +- requirements.txt | 2 +- 5 files changed, 137 insertions(+), 18 deletions(-) create mode 100644 qmlcourse/book/install/en/intro-windows.md diff --git a/Dockerfile b/Dockerfile index dc83f614f6..a92d186237 100644 --- a/Dockerfile +++ b/Dockerfile @@ -47,10 +47,10 @@ ENV CONDA_DIR=/opt/conda \ SHELL=/bin/bash ENV PATH="${SHELL}:${PATH}" ENV PATH="${CONDA_DIR}/bin:${PATH}" -EXPOSE 8989 +EXPOSE 8888 ENTRYPOINT ["bash"] # Starting jupyter lab in interactive docker shell: -# docker run -it -p 8989:8989 qmlcourse:latest /bin/bash +# docker run -it -p 8888:8888 qmlcourse:latest # conda activate qmlcourse -# jupyter lab --allow-root --port 8989 \ No newline at end of file +# jupyter lab --ip='0.0.0.0' --port=8888 --no-browser --allow-root \ No newline at end of file diff --git a/qmlcourse/book/install/en/docker.md b/qmlcourse/book/install/en/docker.md index e9aa486ba6..2d82a81e4f 100644 --- a/qmlcourse/book/install/en/docker.md +++ b/qmlcourse/book/install/en/docker.md @@ -79,7 +79,7 @@ poetry run jupyter-book toc migrate ./qmlcourse/_toc.yml -o ./qmlcourse/_toc.yml poetry run jupyter-book build ./qmlcourse --builder latex --keep-going ``` -Then change directory to qmlcourse/\_build/latex and use xelatex: +Then change directory to `qmlcourse/\_build/latex` and use xelatex: ```shell xelatex -interaction nonstopmode qmlcourse.tex @@ -87,34 +87,38 @@ xelatex -interaction nonstopmode qmlcourse.tex ## Listener -### Starting jupyter: +Build listener container: + +``` +docker build . --tag qmlcourse:latest --target listener +``` Run docker in interactive regime with port forwarding: ```shell -docker run -it -p 8989:8989 qmlcourse:latest /bin/bash +docker run -it -p 8888:8888 qmlcourse:latest ``` +### Starting jupyter: + In docker bash: ```bash conda activate qmlcourse -jupyter lab --allow-root --port 8989 +jupyter notebook --ip='0.0.0.0' --port=8888 --no-browser --allow-root ``` -then see forwarding ip from docker in another shell: - ### Starting Jupyter Lab Run docker in interactive regime with port forwarding: ```shell -docker run -it -p 8989:8989 qmlcourse:latest /bin/bash +docker run -it -p 8888:8888 qmlcourse:latest ``` In docker bash: ```bash conda activate qmlcourse -jupyter lab --allow-root --port 8989 +jupyter lab --ip='0.0.0.0' --port=8888 --no-browser --allow-root ``` diff --git a/qmlcourse/book/install/en/intro-windows.md b/qmlcourse/book/install/en/intro-windows.md new file mode 100644 index 0000000000..93c04dc705 --- /dev/null +++ b/qmlcourse/book/install/en/intro-windows.md @@ -0,0 +1,120 @@ +# Windows + +Main problems with windows - you need to install additional packages like compilator or git. + +- Firstly, install (git with git bash)[https://git-scm.com/download/win]: +- Secondly, install (miniconda)[https://docs.conda.io/en/latest/miniconda.html] in path that do not contains cyrillic symbols. + +You could choose between 3 compilators on windows: +- MinGW (git for windows already has it) +- Intel C++ +- Visual Code C++ +### MinGW +First of all open git cmd shell. In this shell promt + +```cmd +conda update conda +``` + +After that we create qmlcourse environment. + +```cmd +conda create -n qmlcourse python=3.8 --yes +``` +and activate it (we need to activate env after each reopen cmd shell): + +```cmd +conda activate qmlcourse +``` +install psi4 +```cmd +conda install psi4 python=3.8 -c psi4 -c conda-forge --yes +``` +For NetKet we need to install cmake +```cmd +conda install cmake --yes +``` +and export flags to C++ and G++ compilators: + +```cmd +cmake -DCMAKE_CXX_COMPILER= -DCMAKE_C_COMPILER=/pathto/gcc +``` + +tensorflow (cpu or gpu). For CPU version: + +```shell +conda install tensorflow +``` + +Or for gpu version: + +```shell +conda install tensorflow-gpu +``` + +After that if you have intel cpu, you could use intel C++ compiler. If not you could alse use intel compiler, however, there is no any gurantiess that this will work (if did't work go to VC tools). + +## Intel compiler + +First of all, update your conda: + +```shell +conda update conda +``` + +Secondly, add the Intel channel for packages: + +```shell +conda config --add channels intel +``` + +Finally, create intel based python environment and activate it: + +```shell +conda create -n qmlcourse intelpython3_core python=3.8 --yes +conda activate qmlcourse +``` + +Now you could install psi4 +```shell +conda install psi4 python=3.8 -c psi4 -c conda-forge +``` +tensorflow (cpu or gpu). For CPU version: + +```shell +conda install tensorflow +``` + +Or for gpu version: + +```shell +conda install tensorflow-gpu +``` + +For netket is nessesary to install cmake and export C++ compiling parts. + +#### MinGW + + +VC C++ + + [Microsoft Build Tools](https://aka.ms/vs/17/release/vs_BuildTools.exe) и + +```shell +conda install -c conda-forge netket +``` + +and all other packages: + +```shell +conda install -c conda-forge netket +``` + +## VC tools + +# Known Issues + +For windows you need to compile tensorflow with [tensorflow quantum from sources](https://www.tensorflow.org/quantum/install). For netket you could download visual code build C++ tools and activate properly cmake + + + Or just use the docker. diff --git a/qmlcourse/book/install/en/intro.md b/qmlcourse/book/install/en/intro.md index c1925f024c..6069f801e2 100644 --- a/qmlcourse/book/install/en/intro.md +++ b/qmlcourse/book/install/en/intro.md @@ -25,6 +25,7 @@ poetry install --no-interaction --no-root First of all, install miniconda for your operating system https://docs.conda.io/en/latest/miniconda.html Then you have to create an empty environment for the course, let's name it `qmlcourse`. For this course, we use some features of python 3.8, so you need at this version of python. +**If you are Windows user go to [docker](docker.md) lecture or (hard way) [windows](intro-windows.md) lecture. ```shell conda create -n qmlcourse python=3.8 --yes ``` @@ -47,12 +48,6 @@ conda install psi4 python=3.8 -c psi4 --yes conda run -n qmlcourse conda install psi4 python=3.8 -c psi4 --yes ``` -On Windows, you need to install nightly build: - -```shell -conda install psi4 python=3.8 -c psi4/label/dev -c conda-forge --yes -``` - Then install all other packages: ```shell diff --git a/requirements.txt b/requirements.txt index a3ebe75bc1..df70f5d16a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,7 +10,7 @@ penaltymodel-maxgap>=0.5.5 qiskit>=0.31.0 scikit-learn>=0.24.1 sympy==1.8 -tensorflow-quantum==0.6.0 +tensorflow-quantum tensorflow==2.7.2 pre-commit jupytext From a015f451401f980cab0d3572104ee59e58127c80 Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Fri, 15 Jul 2022 22:59:55 +0300 Subject: [PATCH 25/63] style: apply --- .github/workflows/test-docker.yml | 2 +- Dockerfile | 2 +- qmlcourse/_toc.yml | 4 ++-- qmlcourse/book/install/en/intro-windows.md | 6 +++--- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/test-docker.yml b/.github/workflows/test-docker.yml index c0d3015551..9b8cf07a14 100644 --- a/.github/workflows/test-docker.yml +++ b/.github/workflows/test-docker.yml @@ -22,4 +22,4 @@ jobs: docker build . --tag qml-dev:latest --target dev - name: test listener (qmlcourse) docker run: | - docker build . --tag qmlcourse:latest --target listener \ No newline at end of file + docker build . --tag qmlcourse:latest --target listener diff --git a/Dockerfile b/Dockerfile index a92d186237..93c22a7b14 100644 --- a/Dockerfile +++ b/Dockerfile @@ -53,4 +53,4 @@ ENTRYPOINT ["bash"] # Starting jupyter lab in interactive docker shell: # docker run -it -p 8888:8888 qmlcourse:latest # conda activate qmlcourse -# jupyter lab --ip='0.0.0.0' --port=8888 --no-browser --allow-root \ No newline at end of file +# jupyter lab --ip='0.0.0.0' --port=8888 --no-browser --allow-root diff --git a/qmlcourse/_toc.yml b/qmlcourse/_toc.yml index 969d490513..b9a2bb2f13 100644 --- a/qmlcourse/_toc.yml +++ b/qmlcourse/_toc.yml @@ -225,7 +225,7 @@ title: 🟦 About quantum computers - file: book/intro/en/prerequisite.md title: ⬜ Prerequisite - + - part: Installation chapters: - file: book/install/en/intro.md @@ -234,7 +234,7 @@ title: 🟩 Working with docker - file: book/install/en/advanced.md title: 🟧 Optimization environment for production or GPU use - + - part: Linear Algebra and Numpy chapters: - file: book/linalg/en/linalg_intro.md diff --git a/qmlcourse/book/install/en/intro-windows.md b/qmlcourse/book/install/en/intro-windows.md index 93c04dc705..6d601f01eb 100644 --- a/qmlcourse/book/install/en/intro-windows.md +++ b/qmlcourse/book/install/en/intro-windows.md @@ -91,12 +91,12 @@ Or for gpu version: conda install tensorflow-gpu ``` -For netket is nessesary to install cmake and export C++ compiling parts. +For netket is nessesary to install cmake and export C++ compiling parts. #### MinGW -VC C++ +VC C++ [Microsoft Build Tools](https://aka.ms/vs/17/release/vs_BuildTools.exe) и @@ -117,4 +117,4 @@ conda install -c conda-forge netket For windows you need to compile tensorflow with [tensorflow quantum from sources](https://www.tensorflow.org/quantum/install). For netket you could download visual code build C++ tools and activate properly cmake - Or just use the docker. + Or just use the docker. From 494779b6e57312f6ad096f9a646071e856b38898 Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Fri, 15 Jul 2022 23:07:58 +0300 Subject: [PATCH 26/63] pre-commit autoupdate & add args for mypy --- .pre-commit-config.yaml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index dea742a426..1d867d9950 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,7 @@ repos: - repo: https://github.com/asottile/reorder_python_imports - rev: v3.1.0 + rev: v3.8.1 hooks: - id: reorder-python-imports @@ -12,7 +12,7 @@ repos: args: ["--line-length=119"] - repo: https://gitlab.com/pycqa/flake8 - rev: 4.0.1 + rev: 3.9.2 hooks: - id: flake8 args: ["--ignore=E501,W503", "--max-line-length=119"] @@ -47,9 +47,10 @@ repos: rev: v0.961 hooks: - id: mypy + args: [--no-strict-optional, --ignore-missing-imports] - repo: https://github.com/ComPWA/mirrors-pyright - rev: v1.1.256 + rev: v1.1.260 hooks: - id: pyright From bf7f9c2dd25a3325b5610a5e9fa88104cc0a543a Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Fri, 15 Jul 2022 23:30:59 +0300 Subject: [PATCH 27/63] style: bump flake8 --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 1d867d9950..0b642e9373 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -12,7 +12,7 @@ repos: args: ["--line-length=119"] - repo: https://gitlab.com/pycqa/flake8 - rev: 3.9.2 + rev: 4.0.1 hooks: - id: flake8 args: ["--ignore=E501,W503", "--max-line-length=119"] From 8a05e8b22b22fa896bb0685dc1582f2031e657cd Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Fri, 15 Jul 2022 23:42:02 +0300 Subject: [PATCH 28/63] style: apply --- scripts/convert2ipynb.py | 2 +- scripts/test_convert2ipynb.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/convert2ipynb.py b/scripts/convert2ipynb.py index 49a3e423b0..1ad042b236 100644 --- a/scripts/convert2ipynb.py +++ b/scripts/convert2ipynb.py @@ -4,7 +4,7 @@ from typing import Dict from typing import List -import yaml +import yaml # type: ignore PREFIX = Path("qmlcourse") diff --git a/scripts/test_convert2ipynb.py b/scripts/test_convert2ipynb.py index f1146632bb..a5ac4e5442 100644 --- a/scripts/test_convert2ipynb.py +++ b/scripts/test_convert2ipynb.py @@ -3,7 +3,7 @@ import unittest from unittest import TestCase -import yaml +import yaml # type: ignore from convert2ipynb import convert_md2ipynb ## From 92ec1795e1ec4590fad0309fd92b06aa959c3d59 Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Sat, 16 Jul 2022 13:37:36 +0300 Subject: [PATCH 29/63] refactor: rename `scripts/` to `tools/` --- .github/workflows/pre-commit.yml | 29 ++++++++- Dockerfile | 2 +- qmlcourse/book/install/en/docker.md | 2 +- scripts/test_convert2ipynb.py | 79 ------------------------- {scripts => tools}/convert2ipynb.py | 0 {scripts => tools}/toml2requirements.py | 0 6 files changed, 29 insertions(+), 83 deletions(-) delete mode 100644 scripts/test_convert2ipynb.py rename {scripts => tools}/convert2ipynb.py (100%) rename {scripts => tools}/toml2requirements.py (100%) diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 00d961a979..03b92b0f98 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -1,4 +1,4 @@ -name: pre-commit +name: pre-commit-tests on: push: @@ -9,7 +9,7 @@ jobs: pre_commit: runs-on: ubuntu-latest - timeout-minutes: 10 + timeout-minutes: 4 steps: - name: checkout code @@ -19,8 +19,33 @@ jobs: uses: actions/setup-python@v4 with: python-version: 3.8 + cache: 'pip' - name: run pre-commit action uses: pre-commit/action@v3.0.0 with: extra_args: --all-files + + tests: + runs-on: ubuntu-latest + timeout-minutes: 2 + + steps: + - name: checkout code + uses: actions/checkout@v3 + + - name: set up py3.8 + uses: actions/setup-python@v4 + with: + python-version: 3.8 + cache: 'pip' + + - name: install dependencies + run: | + python -m pip install --upgrade pip + + pip install pytest + + - name: run tests + run: | + pytest ./tests/ diff --git a/Dockerfile b/Dockerfile index 93c22a7b14..ee9b62bfc8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -21,7 +21,7 @@ COPY . . # RUN git checkout ${GIT-BRANCH} RUN poetry install --no-interaction --no-root RUN apt update && apt install -y texlive-latex-extra texlive-fonts-extra texlive-xetex latexmk -RUN poetry run python scripts/convert2ipynb.py +RUN poetry run python tools/convert2ipynb.py RUN poetry run jupyter-book toc migrate ./qmlcourse/_toc.yml -o ./qmlcourse/_toc.yml RUN poetry run jupyter-book build ./qmlcourse --keep-going # Get latex file diff --git a/qmlcourse/book/install/en/docker.md b/qmlcourse/book/install/en/docker.md index 2d82a81e4f..59044c40ed 100644 --- a/qmlcourse/book/install/en/docker.md +++ b/qmlcourse/book/install/en/docker.md @@ -52,7 +52,7 @@ python -m jupytext lecture.md --to ipynb or use our script that creates notebook folder and get all lectures into it. ```shell -python scripts/convert2ipynb.py +python tools/convert2ipynb.py ``` Or copy from docker folder to your machine folder all notebooks: diff --git a/scripts/test_convert2ipynb.py b/scripts/test_convert2ipynb.py deleted file mode 100644 index a5ac4e5442..0000000000 --- a/scripts/test_convert2ipynb.py +++ /dev/null @@ -1,79 +0,0 @@ -import os -import pathlib -import unittest -from unittest import TestCase - -import yaml # type: ignore -from convert2ipynb import convert_md2ipynb - -## -# Test working from scripts folder -# python -m unittest -## -test_toc = """ -- file: book/index.md - -# :ru: - -- part: Test - chapters: - - file: book/test/test.md - title: 🟦 Just test -""" -test_md = """ -# Test - -Some test text - -$$ -E = mc^2 -$$ - -```python -print(2+2) -``` - -""" - -test_md_file_path = pathlib.Path("../qmlcourse/book/test/test.md") -test_ipynb_file_path = pathlib.Path("../notebooks/test/test.ipynb") - - -class TestConvertmd2ipynb(TestCase): - def setUp(self: TestCase) -> None: - try: - os.mkdir(test_md_file_path.parent) - except OSError: - print("Test path is exist, that shouldn't be. Testing teardDown don't work.") - with open(test_md_file_path, "w") as test_md_file: - test_md_file.writelines(test_md) - - def tearDown(self: TestCase) -> None: - try: - os.remove(test_md_file_path) - os.rmdir(test_md_file_path.parent) - except OSError: - print("test don't setup the md file or folder") - try: - os.remove(test_ipynb_file_path) - os.rmdir(test_ipynb_file_path.parent) - except FileNotFoundError: - print("test don't get the ipynb file or folder") - - def test_convert_md2ipynb(self: TestCase) -> None: - cwd = pathlib.Path(os.getcwd()) - os.chdir(cwd.parent) - print(os.getcwd()) - convert_md2ipynb(toc=yaml.safe_load(test_toc)) - - os.chdir("scripts") - # Test that test ipynb exists - print(os.path.exists(test_ipynb_file_path)) - # Test len ipynb - with open(test_ipynb_file_path, "r") as test_ipynb_file: - test_ipynb_readed = test_ipynb_file.read() - assert len(test_ipynb_readed) == 685 - - -if __name__ == "__main__": - unittest.main() diff --git a/scripts/convert2ipynb.py b/tools/convert2ipynb.py similarity index 100% rename from scripts/convert2ipynb.py rename to tools/convert2ipynb.py diff --git a/scripts/toml2requirements.py b/tools/toml2requirements.py similarity index 100% rename from scripts/toml2requirements.py rename to tools/toml2requirements.py From 6aaddc6c914020e92d6645e4dcede83c2fe044aa Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Sat, 16 Jul 2022 13:38:18 +0300 Subject: [PATCH 30/63] refactor: transfer from tools/ to tests/ 1 test file --- tests/test_convert2ipynb.py | 79 +++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 tests/test_convert2ipynb.py diff --git a/tests/test_convert2ipynb.py b/tests/test_convert2ipynb.py new file mode 100644 index 0000000000..a5ac4e5442 --- /dev/null +++ b/tests/test_convert2ipynb.py @@ -0,0 +1,79 @@ +import os +import pathlib +import unittest +from unittest import TestCase + +import yaml # type: ignore +from convert2ipynb import convert_md2ipynb + +## +# Test working from scripts folder +# python -m unittest +## +test_toc = """ +- file: book/index.md + +# :ru: + +- part: Test + chapters: + - file: book/test/test.md + title: 🟦 Just test +""" +test_md = """ +# Test + +Some test text + +$$ +E = mc^2 +$$ + +```python +print(2+2) +``` + +""" + +test_md_file_path = pathlib.Path("../qmlcourse/book/test/test.md") +test_ipynb_file_path = pathlib.Path("../notebooks/test/test.ipynb") + + +class TestConvertmd2ipynb(TestCase): + def setUp(self: TestCase) -> None: + try: + os.mkdir(test_md_file_path.parent) + except OSError: + print("Test path is exist, that shouldn't be. Testing teardDown don't work.") + with open(test_md_file_path, "w") as test_md_file: + test_md_file.writelines(test_md) + + def tearDown(self: TestCase) -> None: + try: + os.remove(test_md_file_path) + os.rmdir(test_md_file_path.parent) + except OSError: + print("test don't setup the md file or folder") + try: + os.remove(test_ipynb_file_path) + os.rmdir(test_ipynb_file_path.parent) + except FileNotFoundError: + print("test don't get the ipynb file or folder") + + def test_convert_md2ipynb(self: TestCase) -> None: + cwd = pathlib.Path(os.getcwd()) + os.chdir(cwd.parent) + print(os.getcwd()) + convert_md2ipynb(toc=yaml.safe_load(test_toc)) + + os.chdir("scripts") + # Test that test ipynb exists + print(os.path.exists(test_ipynb_file_path)) + # Test len ipynb + with open(test_ipynb_file_path, "r") as test_ipynb_file: + test_ipynb_readed = test_ipynb_file.read() + assert len(test_ipynb_readed) == 685 + + +if __name__ == "__main__": + unittest.main() From da9292e0f4d66acac5652c355a72907774547179 Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Sat, 16 Jul 2022 13:42:37 +0300 Subject: [PATCH 31/63] refactor: remove comment lines from makefile --- Makefile | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Makefile b/Makefile index c1d6501855..105a1eed8f 100644 --- a/Makefile +++ b/Makefile @@ -13,8 +13,6 @@ install-python-poetry-ubuntu: sudo apt install python3-distutils -y curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3 -# curl "http://vergil.chemistry.gatech.edu/psicode-download/Psi4conda-1.4rc3-py38-Linux-x86_64.sh" -o Psi4conda-1.4rc3-py38.sh --keepalive-time 2 - install-python-poetry-macos: brew update brew install zlib pyenv poetry @@ -22,13 +20,10 @@ install-python-poetry-macos: pyenv install 3.8.10 pyenv local 3.8.10 -# curl "http://vergil.chemistry.gatech.edu/psicode-download/Psi4conda-1.4rc3-py38-MacOSX-x86_64.sh" -o Psi4conda-1.4rc3-py38.sh --keepalive-time 2 - install-python-dependencies: # poetry env use python3.8 poetry env list poetry install build-linux-macos: -# cd $(HOME)/psi4conda/etc/profile.d/ && source conda.sh && conda activate && cd - && poetry run psi4 --test poetry run jupyter-book build ./qmlcourse From 6edf150d2af09cec8b331b3494b6bc07e12e50e0 Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Sat, 16 Jul 2022 13:55:13 +0300 Subject: [PATCH 32/63] refactor tests --- .github/workflows/pre-commit.yml | 2 +- tests/convert2ipynb_test.py | 34 ++++++++++++++ tests/test.md | 11 +++++ tests/test_convert2ipynb.py | 79 -------------------------------- tools/convert2ipynb.py | 4 +- 5 files changed, 48 insertions(+), 82 deletions(-) create mode 100644 tests/convert2ipynb_test.py create mode 100644 tests/test.md delete mode 100644 tests/test_convert2ipynb.py diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 03b92b0f98..c911cbf430 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -48,4 +48,4 @@ jobs: - name: run tests run: | - pytest ./tests/ + python -m pytest tests/ -v diff --git a/tests/convert2ipynb_test.py b/tests/convert2ipynb_test.py new file mode 100644 index 0000000000..40763773bc --- /dev/null +++ b/tests/convert2ipynb_test.py @@ -0,0 +1,34 @@ +import os +from pathlib import Path + +import yaml # type: ignore +from tools.convert2ipynb import convert_md2ipynb + +test_toc = """ +- file: book/index.md + +# :ru: + +- part: Test + chapters: + - file: book/test/test.md + title: 🟦 Just test +""" + + +def test_convert_md2ipynb(test_md_file_path = Path("./tests/test.md"), test_ipynb_file_path = Path("./tests/test.ipynb")) -> (None): + + cwd = Path(os.getcwd()) + os.chdir(cwd.parent) + print(os.getcwd()) + convert_md2ipynb(toc=yaml.safe_load(test_toc)) + + os.chdir("scripts") + + # Test that test ipynb exists + print(os.path.exists(test_ipynb_file_path)) + + # Test len ipynb + with open(test_ipynb_file_path, "r") as test_ipynb_file: + test_ipynb_readed = test_ipynb_file.read() + assert len(test_ipynb_readed) == 685 diff --git a/tests/test.md b/tests/test.md new file mode 100644 index 0000000000..880a92f875 --- /dev/null +++ b/tests/test.md @@ -0,0 +1,11 @@ +# Test + +Some test text + +$$ +E = mc^2 +$$ + +```python +print(2+2) +``` diff --git a/tests/test_convert2ipynb.py b/tests/test_convert2ipynb.py deleted file mode 100644 index a5ac4e5442..0000000000 --- a/tests/test_convert2ipynb.py +++ /dev/null @@ -1,79 +0,0 @@ -import os -import pathlib -import unittest -from unittest import TestCase - -import yaml # type: ignore -from convert2ipynb import convert_md2ipynb - -## -# Test working from scripts folder -# python -m unittest -## -test_toc = """ -- file: book/index.md - -# :ru: - -- part: Test - chapters: - - file: book/test/test.md - title: 🟦 Just test -""" -test_md = """ -# Test - -Some test text - -$$ -E = mc^2 -$$ - -```python -print(2+2) -``` - -""" - -test_md_file_path = pathlib.Path("../qmlcourse/book/test/test.md") -test_ipynb_file_path = pathlib.Path("../notebooks/test/test.ipynb") - - -class TestConvertmd2ipynb(TestCase): - def setUp(self: TestCase) -> None: - try: - os.mkdir(test_md_file_path.parent) - except OSError: - print("Test path is exist, that shouldn't be. Testing teardDown don't work.") - with open(test_md_file_path, "w") as test_md_file: - test_md_file.writelines(test_md) - - def tearDown(self: TestCase) -> None: - try: - os.remove(test_md_file_path) - os.rmdir(test_md_file_path.parent) - except OSError: - print("test don't setup the md file or folder") - try: - os.remove(test_ipynb_file_path) - os.rmdir(test_ipynb_file_path.parent) - except FileNotFoundError: - print("test don't get the ipynb file or folder") - - def test_convert_md2ipynb(self: TestCase) -> None: - cwd = pathlib.Path(os.getcwd()) - os.chdir(cwd.parent) - print(os.getcwd()) - convert_md2ipynb(toc=yaml.safe_load(test_toc)) - - os.chdir("scripts") - # Test that test ipynb exists - print(os.path.exists(test_ipynb_file_path)) - # Test len ipynb - with open(test_ipynb_file_path, "r") as test_ipynb_file: - test_ipynb_readed = test_ipynb_file.read() - assert len(test_ipynb_readed) == 685 - - -if __name__ == "__main__": - unittest.main() diff --git a/tools/convert2ipynb.py b/tools/convert2ipynb.py index 1ad042b236..c623cba497 100644 --- a/tools/convert2ipynb.py +++ b/tools/convert2ipynb.py @@ -9,7 +9,7 @@ PREFIX = Path("qmlcourse") -def convert_md2ipynb(toc: List[Dict[str, Dict]]) -> None: +def convert_md2ipynb(toc: List[Dict[str, Dict]]) -> (None): """ Convert MyST files from toc to ipython notebooks. toc: YAML list of the dicts with table of contents for jupyter book. @@ -35,7 +35,7 @@ def convert_md2ipynb(toc: List[Dict[str, Dict]]) -> None: if __name__ == "__main__": # Open table of content - with open("qmlcourse/_toc.yml", "r", encoding="utf-8") as f: + with open(f"{PREFIX}/_toc.yml", "r", encoding="utf-8") as f: toc = yaml.safe_load(f) # make dir for ipynbs From d126c03f6e621d7327d418d5c117e9b425fa7cbc Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Sat, 16 Jul 2022 15:06:45 +0300 Subject: [PATCH 33/63] refactor: rename `convert2ipynb` to `convert` --- tests/convert2ipynb_test.py | 34 ---------------------------- tools/convert2ipynb.py | 45 ------------------------------------- 2 files changed, 79 deletions(-) delete mode 100644 tests/convert2ipynb_test.py delete mode 100644 tools/convert2ipynb.py diff --git a/tests/convert2ipynb_test.py b/tests/convert2ipynb_test.py deleted file mode 100644 index 40763773bc..0000000000 --- a/tests/convert2ipynb_test.py +++ /dev/null @@ -1,34 +0,0 @@ -import os -from pathlib import Path - -import yaml # type: ignore -from tools.convert2ipynb import convert_md2ipynb - -test_toc = """ -- file: book/index.md - -# :ru: - -- part: Test - chapters: - - file: book/test/test.md - title: 🟦 Just test -""" - - -def test_convert_md2ipynb(test_md_file_path = Path("./tests/test.md"), test_ipynb_file_path = Path("./tests/test.ipynb")) -> (None): - - cwd = Path(os.getcwd()) - os.chdir(cwd.parent) - print(os.getcwd()) - convert_md2ipynb(toc=yaml.safe_load(test_toc)) - - os.chdir("scripts") - - # Test that test ipynb exists - print(os.path.exists(test_ipynb_file_path)) - - # Test len ipynb - with open(test_ipynb_file_path, "r") as test_ipynb_file: - test_ipynb_readed = test_ipynb_file.read() - assert len(test_ipynb_readed) == 685 diff --git a/tools/convert2ipynb.py b/tools/convert2ipynb.py deleted file mode 100644 index c623cba497..0000000000 --- a/tools/convert2ipynb.py +++ /dev/null @@ -1,45 +0,0 @@ -import os -from pathlib import Path -from subprocess import call -from typing import Dict -from typing import List - -import yaml # type: ignore - -PREFIX = Path("qmlcourse") - - -def convert_md2ipynb(toc: List[Dict[str, Dict]]) -> (None): - """ - Convert MyST files from toc to ipython notebooks. - toc: YAML list of the dicts with table of contents for jupyter book. - """ - for part in toc[1:]: - for chapter in part["chapters"]: - file_path = PREFIX / Path(chapter["file"]) - print(file_path) - call(["poetry", "run", "jupytext", file_path.absolute(), "--to", "ipynb"]) - os.makedirs( - Path("notebooks") / Path("/".join(chapter["file"].split("/")[1:-1])), - exist_ok=True, - ) - try: - os.replace( - PREFIX / Path(chapter["file"].split(".")[0] + ".ipynb"), - Path("notebooks") / Path("/".join(chapter["file"].split(".")[0].split("/")[1:]) + ".ipynb"), - ) - except FileNotFoundError: - print("Problem with", Path(chapter["file"])) - - -if __name__ == "__main__": - - # Open table of content - with open(f"{PREFIX}/_toc.yml", "r", encoding="utf-8") as f: - toc = yaml.safe_load(f) - - # make dir for ipynbs - os.makedirs("notebooks", exist_ok=True) - - # convert lectures - convert_md2ipynb(toc) From ded0cba0b23d328d4f474e3e77ed5ea77607feb9 Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Sat, 16 Jul 2022 15:07:16 +0300 Subject: [PATCH 34/63] refactorL naming --- tests/convert_test.py | 34 ++++++++++++++++++++++++++++++++ tools/convert.py | 45 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 tests/convert_test.py create mode 100644 tools/convert.py diff --git a/tests/convert_test.py b/tests/convert_test.py new file mode 100644 index 0000000000..45b0e354d8 --- /dev/null +++ b/tests/convert_test.py @@ -0,0 +1,34 @@ +import os +from pathlib import Path + +import yaml # type: md_to_ipynb +from tools.convert import convert_md2ipynb + +test_toc = """ +- file: book/index.md + +# :ru: + +- part: Test + chapters: + - file: book/test/test.md + title: 🟦 Just test +""" + + +def test_md_to_ipynb( + test_md_file_path = Path("./tests/test.md"), + test_ipynb_file_path = Path("./tests/test.ipynb"), +)-> (None): + + convert_md2ipynb(toc=yaml.safe_load(test_toc)) + + os.chdir("scripts") + + # Test that test ipynb exists + print(os.path.exists(test_ipynb_file_path)) + + # Test len ipynb + with open(test_ipynb_file_path, "r") as test_ipynb_file: + test_ipynb_readed = test_ipynb_file.read() + assert len(test_ipynb_readed) == 685 diff --git a/tools/convert.py b/tools/convert.py new file mode 100644 index 0000000000..1c6fd0e738 --- /dev/null +++ b/tools/convert.py @@ -0,0 +1,45 @@ +from pathlib import Path +from subprocess import call +from typing import Dict +from typing import List +from loguru import logger + +# fire guide: https://github.com/google/python-fire/blob/master/docs/guide.md +import fire + +import yaml # type: ignore + + +def md_to_ipynb(path_2_toc: Path = Path("./qmlcourse"), path_2_ipynb: Path = Path("./notebooks")) -> (None): + """ + Convert MyST files from toc to ipython notebooks. + toc: YAML list of the dicts with table of contents for jupyter book. + """ + + # open table of contents + with open(f"{path_2_toc}/_toc.yml", "r", encoding="utf-8") as toc_file: + toc: List[Dict[str, Dict]] = yaml.safe_load(toc_file) + + for part in toc[1:]: + for chapter in part["chapters"]: + file_path = path_2_toc / Path(chapter["file"]) + logger.info(f"convert {file_path}") + + call(["poetry", "run", "jupytext", file_path.absolute(), "--to", "ipynb"]) + + Path.mkdir( + path_2_ipynb / "/".join(chapter["file"].split("/")[1:-1]), + parents = True, + exist_ok=True, + ) + + try: + Path.replace( + path_2_toc / Path(chapter["file"].split(".")[0] + ".ipynb"), + path_2_ipynb / Path("/".join(chapter["file"].split(".")[0].split("/")[1:]) + ".ipynb"), + ) + except FileNotFoundError: + logger.error("Problem with", Path(chapter["file"])) + +if __name__ == '__main__': + fire.Fire() \ No newline at end of file From 314fa671fa9718d680d1d4171dd26edfc0357c8f Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Sat, 16 Jul 2022 15:07:39 +0300 Subject: [PATCH 35/63] refactor: update how to run convert file --- Dockerfile | 2 +- qmlcourse/book/install/en/docker.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index ee9b62bfc8..2147dbac0d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -21,7 +21,7 @@ COPY . . # RUN git checkout ${GIT-BRANCH} RUN poetry install --no-interaction --no-root RUN apt update && apt install -y texlive-latex-extra texlive-fonts-extra texlive-xetex latexmk -RUN poetry run python tools/convert2ipynb.py +RUN poetry run python tools/convert.py md_to_ipynb RUN poetry run jupyter-book toc migrate ./qmlcourse/_toc.yml -o ./qmlcourse/_toc.yml RUN poetry run jupyter-book build ./qmlcourse --keep-going # Get latex file diff --git a/qmlcourse/book/install/en/docker.md b/qmlcourse/book/install/en/docker.md index 59044c40ed..c4e46a19cc 100644 --- a/qmlcourse/book/install/en/docker.md +++ b/qmlcourse/book/install/en/docker.md @@ -52,7 +52,7 @@ python -m jupytext lecture.md --to ipynb or use our script that creates notebook folder and get all lectures into it. ```shell -python tools/convert2ipynb.py +python tools/convert.py md_to_ipynb ``` Or copy from docker folder to your machine folder all notebooks: From 298d822fba070e3698b50523b11c288ae6afa586 Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Sat, 16 Jul 2022 15:22:57 +0300 Subject: [PATCH 36/63] refactor: add version for some reqs & add fire --- requirements.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index df70f5d16a..89c3fe033a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,5 +12,6 @@ scikit-learn>=0.24.1 sympy==1.8 tensorflow-quantum tensorflow==2.7.2 -pre-commit -jupytext +pre-commit==2.20.0 +jupytext==1.10.3 +fire==0.4.0 From a3e1b655155c69472ff04f6939b05fa4ec9bfffb Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Sat, 16 Jul 2022 15:23:07 +0300 Subject: [PATCH 37/63] refactor --- tests/convert_test.py | 16 +++++++++------- tools/convert.py | 22 +++++++++++++--------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/tests/convert_test.py b/tests/convert_test.py index 45b0e354d8..896c201711 100644 --- a/tests/convert_test.py +++ b/tests/convert_test.py @@ -1,8 +1,9 @@ import os from pathlib import Path -import yaml # type: md_to_ipynb -from tools.convert import convert_md2ipynb +import yaml # type: ignore + +from tools.convert import md_to_ipynb test_toc = """ - file: book/index.md @@ -17,11 +18,12 @@ def test_md_to_ipynb( - test_md_file_path = Path("./tests/test.md"), - test_ipynb_file_path = Path("./tests/test.ipynb"), -)-> (None): - - convert_md2ipynb(toc=yaml.safe_load(test_toc)) + test_md_file_path=Path("./tests/test.md"), + test_ipynb_file_path=Path("./tests/test.ipynb"), +) -> (None): + + # todo: update args + md_to_ipynb(yaml.safe_load(test_toc)) os.chdir("scripts") diff --git a/tools/convert.py b/tools/convert.py index 1c6fd0e738..37e90c1f90 100644 --- a/tools/convert.py +++ b/tools/convert.py @@ -2,20 +2,23 @@ from subprocess import call from typing import Dict from typing import List -from loguru import logger -# fire guide: https://github.com/google/python-fire/blob/master/docs/guide.md import fire - import yaml # type: ignore +from loguru import logger + +# fire guide: https://github.com/google/python-fire/blob/master/docs/guide.md -def md_to_ipynb(path_2_toc: Path = Path("./qmlcourse"), path_2_ipynb: Path = Path("./notebooks")) -> (None): +def md_to_ipynb(dir_2_toc: str = "./qmlcourse", dir_2_ipynb: str = "./notebooks") -> (None): """ Convert MyST files from toc to ipython notebooks. toc: YAML list of the dicts with table of contents for jupyter book. """ + path_2_toc = Path(dir_2_toc) + path_2_ipynb = Path(dir_2_ipynb) + # open table of contents with open(f"{path_2_toc}/_toc.yml", "r", encoding="utf-8") as toc_file: toc: List[Dict[str, Dict]] = yaml.safe_load(toc_file) @@ -26,13 +29,13 @@ def md_to_ipynb(path_2_toc: Path = Path("./qmlcourse"), path_2_ipynb: Path = Pat logger.info(f"convert {file_path}") call(["poetry", "run", "jupytext", file_path.absolute(), "--to", "ipynb"]) - + Path.mkdir( path_2_ipynb / "/".join(chapter["file"].split("/")[1:-1]), - parents = True, + parents=True, exist_ok=True, ) - + try: Path.replace( path_2_toc / Path(chapter["file"].split(".")[0] + ".ipynb"), @@ -41,5 +44,6 @@ def md_to_ipynb(path_2_toc: Path = Path("./qmlcourse"), path_2_ipynb: Path = Pat except FileNotFoundError: logger.error("Problem with", Path(chapter["file"])) -if __name__ == '__main__': - fire.Fire() \ No newline at end of file + +if __name__ == "__main__": + fire.Fire() From 099e1a44f8850696282e05425d985cbe180fed49 Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Sat, 16 Jul 2022 15:24:39 +0300 Subject: [PATCH 38/63] ci: rename `name` pre-commit --- .github/workflows/pre-commit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index c911cbf430..4868bb3685 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -1,4 +1,4 @@ -name: pre-commit-tests +name: pre-commit-and-tests on: push: From b99537ec649b45f499b1bb1b377433f4d3634185 Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Sat, 16 Jul 2022 15:27:26 +0300 Subject: [PATCH 39/63] add todo about toml2reqs --- tools/convert.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/convert.py b/tools/convert.py index 37e90c1f90..ffa78929e8 100644 --- a/tools/convert.py +++ b/tools/convert.py @@ -10,6 +10,9 @@ # fire guide: https://github.com/google/python-fire/blob/master/docs/guide.md +# todo: add toml2requirements.py like seperate module + + def md_to_ipynb(dir_2_toc: str = "./qmlcourse", dir_2_ipynb: str = "./notebooks") -> (None): """ Convert MyST files from toc to ipython notebooks. From c88a8cc794cdc0132881046708a52189e2a32dea Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Sat, 16 Jul 2022 15:43:21 +0300 Subject: [PATCH 40/63] tests: replave some test files by conftest --- tests/conftest.py | 43 +++++++++++++++++++++++++++++++++++++++++++ tests/test.md | 11 ----------- 2 files changed, 43 insertions(+), 11 deletions(-) create mode 100644 tests/conftest.py delete mode 100644 tests/test.md diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000000..31ec001f7c --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,43 @@ +import pytest + +@pytest.fixture() +def get_toc_file() -> (None): + toc_file = """ + - file: book/index.md + + # :ru: + + - part: Test + chapters: + - file: book/test/test.md + title: 🟦 Just test + """ + + return toc_file + +@pytest.fixture() +def get_md_file() -> (None): + md_file = """ + # Test + + Some test text + + $$ + E = mc^2 + $$ + + ```python + print(2+2) + ``` + + """ + + return md_file + +@pytest.fixture() +def get_ipynb_file() -> (None): + ipynb_file = """ + + """ + + return ipynb_file diff --git a/tests/test.md b/tests/test.md deleted file mode 100644 index 880a92f875..0000000000 --- a/tests/test.md +++ /dev/null @@ -1,11 +0,0 @@ -# Test - -Some test text - -$$ -E = mc^2 -$$ - -```python -print(2+2) -``` From 016d6a6c92c30e8d237fdacbf181378e2b109ab1 Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Sat, 16 Jul 2022 15:43:32 +0300 Subject: [PATCH 41/63] test: update tests little bit --- tests/convert_test.py | 25 ++++--------------------- 1 file changed, 4 insertions(+), 21 deletions(-) diff --git a/tests/convert_test.py b/tests/convert_test.py index 896c201711..5030a3cf06 100644 --- a/tests/convert_test.py +++ b/tests/convert_test.py @@ -1,36 +1,19 @@ import os -from pathlib import Path import yaml # type: ignore from tools.convert import md_to_ipynb -test_toc = """ -- file: book/index.md -# :ru: - -- part: Test - chapters: - - file: book/test/test.md - title: 🟦 Just test -""" - - -def test_md_to_ipynb( - test_md_file_path=Path("./tests/test.md"), - test_ipynb_file_path=Path("./tests/test.ipynb"), -) -> (None): +# todo: add tests for exception +def test_md_to_ipynb(get_toc_file: str, get_ipynb_file: str) -> (None): # todo: update args - md_to_ipynb(yaml.safe_load(test_toc)) + md_to_ipynb(yaml.safe_load(get_toc_file)) os.chdir("scripts") - # Test that test ipynb exists - print(os.path.exists(test_ipynb_file_path)) - # Test len ipynb - with open(test_ipynb_file_path, "r") as test_ipynb_file: + with open(get_ipynb_file, "r") as test_ipynb_file: test_ipynb_readed = test_ipynb_file.read() assert len(test_ipynb_readed) == 685 From cc1e80ac7dcf2c99cc00d7e0b5daafed07a18e04 Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Sat, 16 Jul 2022 15:44:39 +0300 Subject: [PATCH 42/63] style: apply for conftest --- tests/conftest.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 31ec001f7c..7890e1f7c2 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,7 +1,8 @@ import pytest + @pytest.fixture() -def get_toc_file() -> (None): +def get_toc_file() -> (str): toc_file = """ - file: book/index.md @@ -15,8 +16,9 @@ def get_toc_file() -> (None): return toc_file + @pytest.fixture() -def get_md_file() -> (None): +def get_md_file() -> (str): md_file = """ # Test @@ -34,8 +36,9 @@ def get_md_file() -> (None): return md_file + @pytest.fixture() -def get_ipynb_file() -> (None): +def get_ipynb_file() -> (str): ipynb_file = """ """ From a979664303b36490aab3ea5b3b8a5130813d4a8a Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Sat, 16 Jul 2022 16:35:00 +0300 Subject: [PATCH 43/63] ci: add jupytext to runt tests --- .github/workflows/pre-commit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 4868bb3685..3e8ae8f3ee 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -44,7 +44,7 @@ jobs: run: | python -m pip install --upgrade pip - pip install pytest + pip install pytest jupytext - name: run tests run: | From 3a37698b077cd1daf68e9282eccb84a255b9f9a8 Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Sat, 16 Jul 2022 16:35:32 +0300 Subject: [PATCH 44/63] add __init__ --- tests/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/__init__.py diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 From 922d8d90e68f70db4498ddc84918d82cd5b5e76c Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Sat, 16 Jul 2022 16:36:00 +0300 Subject: [PATCH 45/63] add tools/__init__ --- tools/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tools/__init__.py diff --git a/tools/__init__.py b/tools/__init__.py new file mode 100644 index 0000000000..e69de29bb2 From 515a382965264891a588fa0e52b10bd3b985c282 Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Sat, 16 Jul 2022 16:39:36 +0300 Subject: [PATCH 46/63] fixL typing for toc file --- tools/convert.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/convert.py b/tools/convert.py index ffa78929e8..ed64adbe53 100644 --- a/tools/convert.py +++ b/tools/convert.py @@ -24,7 +24,7 @@ def md_to_ipynb(dir_2_toc: str = "./qmlcourse", dir_2_ipynb: str = "./notebooks" # open table of contents with open(f"{path_2_toc}/_toc.yml", "r", encoding="utf-8") as toc_file: - toc: List[Dict[str, Dict]] = yaml.safe_load(toc_file) + toc: List[Dict[str, Dict[List[Dict[str, str]]]]] = yaml.safe_load(toc_file) for part in toc[1:]: for chapter in part["chapters"]: From fb7008ff926d4a64154fbf352effa5b9552bb653 Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Sat, 16 Jul 2022 17:41:20 +0300 Subject: [PATCH 47/63] test: add data/ --- tests/data/_toc.yml | 8 ++++++++ tests/data/lecture.md | 30 ++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 tests/data/_toc.yml create mode 100644 tests/data/lecture.md diff --git a/tests/data/_toc.yml b/tests/data/_toc.yml new file mode 100644 index 0000000000..0d4f927a2e --- /dev/null +++ b/tests/data/_toc.yml @@ -0,0 +1,8 @@ +- file: book/index.md + +# :ru: + +- part: Test + chapters: + - file: lecture.md + title: 🟦 Just test diff --git a/tests/data/lecture.md b/tests/data/lecture.md new file mode 100644 index 0000000000..22f4ea60d9 --- /dev/null +++ b/tests/data/lecture.md @@ -0,0 +1,30 @@ +--- +jupytext: + formats: md:myst + text_representation: + extension: .md + format_name: myst +kernelspec: + display_name: Python 3 + language: python + name: python3 +--- + +(test_lec)= + +# Test + +Some test text + +$$ +E = mc^2 +$$ + +```{code-cell} ipython3 +a = 2 +b = 2 + +a + b +``` + +Some test text From f61efa7baba8b5e2afae0c8d6281c05975348418 Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Sat, 16 Jul 2022 17:41:45 +0300 Subject: [PATCH 48/63] test: update --- tests/conftest.py | 40 +--------------------------------------- tests/convert_test.py | 27 +++++++++++++++++---------- 2 files changed, 18 insertions(+), 49 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 7890e1f7c2..f50f72e745 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,46 +1,8 @@ import pytest -@pytest.fixture() -def get_toc_file() -> (str): - toc_file = """ - - file: book/index.md - - # :ru: - - - part: Test - chapters: - - file: book/test/test.md - title: 🟦 Just test - """ - - return toc_file - - -@pytest.fixture() -def get_md_file() -> (str): - md_file = """ - # Test - - Some test text - - $$ - E = mc^2 - $$ - - ```python - print(2+2) - ``` - - """ - - return md_file - - @pytest.fixture() def get_ipynb_file() -> (str): - ipynb_file = """ - - """ + ipynb_file = '{\n "cells": [\n {\n "cell_type": "markdown",\n "id": "9c9effa9",\n "metadata": {},\n "source": [\n "(test_lec)=\\n",\n "\\n",\n "# Test\\n",\n "\\n",\n "Some test text\\n",\n "\\n",\n "$$\\n",\n "E = mc^2\\n",\n "$$"\n ]\n },\n {\n "cell_type": "code",\n "execution_count": null,\n "id": "ca3a3229",\n "metadata": {},\n "outputs": [],\n "source": [\n "a = 2\\n",\n "b = 2\\n",\n "\\n",\n "a + b"\n ]\n },\n {\n "cell_type": "markdown",\n "id": "c4b7952a",\n "metadata": {},\n "source": [\n "Some test text"\n ]\n }\n ],\n "metadata": {\n "kernelspec": {\n "display_name": "Python 3",\n "language": "python",\n "name": "python3"\n }\n },\n "nbformat": 4,\n "nbformat_minor": 5\n}\n' # noqa: FS003 return ipynb_file diff --git a/tests/convert_test.py b/tests/convert_test.py index 5030a3cf06..c277a39e05 100644 --- a/tests/convert_test.py +++ b/tests/convert_test.py @@ -1,19 +1,26 @@ -import os +from pathlib import Path -import yaml # type: ignore +from loguru import logger from tools.convert import md_to_ipynb # todo: add tests for exception -def test_md_to_ipynb(get_toc_file: str, get_ipynb_file: str) -> (None): +def test_md_to_ipynb(get_ipynb_file: str) -> (None): - # todo: update args - md_to_ipynb(yaml.safe_load(get_toc_file)) + try: - os.chdir("scripts") + md_to_ipynb(dir_2_toc="./tests/data", dir_2_ipynb="./tests", testing=True) - # Test len ipynb - with open(get_ipynb_file, "r") as test_ipynb_file: - test_ipynb_readed = test_ipynb_file.read() - assert len(test_ipynb_readed) == 685 + path_to_converted_lecture_to_ipynb = Path("./tests/data/lecture.ipynb") + + # Test len ipynb + with open(path_to_converted_lecture_to_ipynb, "r") as test_ipynb_file: + converted_lecture_to_ipynb = test_ipynb_file.read() + + assert len(get_ipynb_file) == len(converted_lecture_to_ipynb) + + except FileNotFoundError: + logger.error("file not found") + finally: + path_to_converted_lecture_to_ipynb.unlink() # pyright: ignore reportUnboundVariable From 96f1078162763d01bd39fa2f78d6a73e38e7d30d Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Sat, 16 Jul 2022 17:41:54 +0300 Subject: [PATCH 49/63] refactor tools --- tools/convert.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/tools/convert.py b/tools/convert.py index ed64adbe53..0161e694a9 100644 --- a/tools/convert.py +++ b/tools/convert.py @@ -13,7 +13,7 @@ # todo: add toml2requirements.py like seperate module -def md_to_ipynb(dir_2_toc: str = "./qmlcourse", dir_2_ipynb: str = "./notebooks") -> (None): +def md_to_ipynb(dir_2_toc: str = "./qmlcourse", dir_2_ipynb: str = "./notebooks", testing: bool = False) -> (None): """ Convert MyST files from toc to ipython notebooks. toc: YAML list of the dicts with table of contents for jupyter book. @@ -24,7 +24,7 @@ def md_to_ipynb(dir_2_toc: str = "./qmlcourse", dir_2_ipynb: str = "./notebooks" # open table of contents with open(f"{path_2_toc}/_toc.yml", "r", encoding="utf-8") as toc_file: - toc: List[Dict[str, Dict[List[Dict[str, str]]]]] = yaml.safe_load(toc_file) + toc: List[Dict[str, List[Dict[str, str]]]] = yaml.safe_load(toc_file) for part in toc[1:]: for chapter in part["chapters"]: @@ -40,13 +40,16 @@ def md_to_ipynb(dir_2_toc: str = "./qmlcourse", dir_2_ipynb: str = "./notebooks" ) try: - Path.replace( - path_2_toc / Path(chapter["file"].split(".")[0] + ".ipynb"), - path_2_ipynb / Path("/".join(chapter["file"].split(".")[0].split("/")[1:]) + ".ipynb"), - ) + if not testing: + Path.replace( + path_2_toc / Path(chapter["file"].split(".")[0] + ".ipynb"), + path_2_ipynb / Path("/".join(chapter["file"].split(".")[0].split("/")[1:]) + ".ipynb"), + ) except FileNotFoundError: logger.error("Problem with", Path(chapter["file"])) if __name__ == "__main__": + + # python tools/convert.py md_to_ipynb fire.Fire() From 28f7e61c0f6b7fe97d0f7340871e919683c690f6 Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Sat, 16 Jul 2022 17:50:53 +0300 Subject: [PATCH 50/63] style --- tests/convert_test.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/convert_test.py b/tests/convert_test.py index c277a39e05..8939a0b2dc 100644 --- a/tests/convert_test.py +++ b/tests/convert_test.py @@ -12,10 +12,10 @@ def test_md_to_ipynb(get_ipynb_file: str) -> (None): md_to_ipynb(dir_2_toc="./tests/data", dir_2_ipynb="./tests", testing=True) - path_to_converted_lecture_to_ipynb = Path("./tests/data/lecture.ipynb") + path_2_converted_lecture_to_ipynb = Path("./tests/data/lecture.ipynb") # Test len ipynb - with open(path_to_converted_lecture_to_ipynb, "r") as test_ipynb_file: + with open(path_2_converted_lecture_to_ipynb, "r") as test_ipynb_file: converted_lecture_to_ipynb = test_ipynb_file.read() assert len(get_ipynb_file) == len(converted_lecture_to_ipynb) @@ -23,4 +23,4 @@ def test_md_to_ipynb(get_ipynb_file: str) -> (None): except FileNotFoundError: logger.error("file not found") finally: - path_to_converted_lecture_to_ipynb.unlink() # pyright: ignore reportUnboundVariable + path_2_converted_lecture_to_ipynb.unlink() # pyright: ignore reportUnboundVariable From 0ebcb6de5d1ff50bc331c000aef91a86315c8a8b Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Sat, 16 Jul 2022 17:51:00 +0300 Subject: [PATCH 51/63] ci: add deps --- .github/workflows/pre-commit.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 3e8ae8f3ee..27bdb045d4 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -21,12 +21,19 @@ jobs: python-version: 3.8 cache: 'pip' + - name: install dependencies + run: | + python -m pip install --upgrade pip + + pip install loguru fire jupytext + - name: run pre-commit action uses: pre-commit/action@v3.0.0 with: extra_args: --all-files tests: + needs: [pre_commit] runs-on: ubuntu-latest timeout-minutes: 2 @@ -44,7 +51,7 @@ jobs: run: | python -m pip install --upgrade pip - pip install pytest jupytext + pip install loguru fire jupytext pytest - name: run tests run: | From 22dbabb74f8ee4f41ae3e1d7c23147fa44addc40 Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Sat, 16 Jul 2022 17:53:25 +0300 Subject: [PATCH 52/63] ci: add pytests --- .github/workflows/pre-commit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 27bdb045d4..c7fca9ff48 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -25,7 +25,7 @@ jobs: run: | python -m pip install --upgrade pip - pip install loguru fire jupytext + pip install loguru fire jupytext pytest - name: run pre-commit action uses: pre-commit/action@v3.0.0 From 66e7e070a83cce3987b1ae5c9d7f8475907261f8 Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Sat, 16 Jul 2022 17:56:38 +0300 Subject: [PATCH 53/63] add loguru to reqs --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 89c3fe033a..f63dfdfcb1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,3 +15,4 @@ tensorflow==2.7.2 pre-commit==2.20.0 jupytext==1.10.3 fire==0.4.0 +loguru==0.6.0 From 5c0eef48f80bc528cb34916ddfb62332dd422fa1 Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Sat, 16 Jul 2022 18:22:27 +0300 Subject: [PATCH 54/63] refactor --- .github/workflows/pre-commit.yml | 4 ++-- tests/convert_test.py | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index c7fca9ff48..18604ea28b 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -25,7 +25,7 @@ jobs: run: | python -m pip install --upgrade pip - pip install loguru fire jupytext pytest + pip install fire jupytext pytest loguru loguru_caplog - name: run pre-commit action uses: pre-commit/action@v3.0.0 @@ -51,7 +51,7 @@ jobs: run: | python -m pip install --upgrade pip - pip install loguru fire jupytext pytest + pip install fire jupytext pytest loguru loguru_caplog - name: run tests run: | diff --git a/tests/convert_test.py b/tests/convert_test.py index 8939a0b2dc..73e4614d3d 100644 --- a/tests/convert_test.py +++ b/tests/convert_test.py @@ -6,10 +6,9 @@ # todo: add tests for exception -def test_md_to_ipynb(get_ipynb_file: str) -> (None): +def test_md_to_ipynb(get_ipynb_file: str) -> (None): # noqa: F811 try: - md_to_ipynb(dir_2_toc="./tests/data", dir_2_ipynb="./tests", testing=True) path_2_converted_lecture_to_ipynb = Path("./tests/data/lecture.ipynb") From 771fb5c224f19583c8cdfcdc34fe84488740e7a0 Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Sat, 16 Jul 2022 18:24:54 +0300 Subject: [PATCH 55/63] style --- tests/convert_test.py | 1 - tools/toml2requirements.py | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/convert_test.py b/tests/convert_test.py index 73e4614d3d..3f14ecf6e6 100644 --- a/tests/convert_test.py +++ b/tests/convert_test.py @@ -13,7 +13,6 @@ def test_md_to_ipynb(get_ipynb_file: str) -> (None): # noqa: F811 path_2_converted_lecture_to_ipynb = Path("./tests/data/lecture.ipynb") - # Test len ipynb with open(path_2_converted_lecture_to_ipynb, "r") as test_ipynb_file: converted_lecture_to_ipynb = test_ipynb_file.read() diff --git a/tools/toml2requirements.py b/tools/toml2requirements.py index 53a75a4369..62a23056f1 100644 --- a/tools/toml2requirements.py +++ b/tools/toml2requirements.py @@ -20,7 +20,7 @@ prohibited_packages_dev = set(["python", ""]) -def get_packages(prohibited_packages: Set[str]) -> List[str]: +def get_packages(prohibited_packages: Set[str]) -> (List[str]): """ Remove prohibited packages and creates text for requirements.txt prohibited_packages: set of prohibited packages From c719ca54f0123251325c7dbe98a32fa3c4abfe0b Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Sat, 16 Jul 2022 18:25:31 +0300 Subject: [PATCH 56/63] remove caplog --- .github/workflows/pre-commit.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 18604ea28b..732e5cdc6d 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -25,7 +25,7 @@ jobs: run: | python -m pip install --upgrade pip - pip install fire jupytext pytest loguru loguru_caplog + pip install fire jupytext pytest loguru - name: run pre-commit action uses: pre-commit/action@v3.0.0 @@ -51,8 +51,8 @@ jobs: run: | python -m pip install --upgrade pip - pip install fire jupytext pytest loguru loguru_caplog + pip install fire jupytext pytest loguru - name: run tests run: | - python -m pytest tests/ -v + python -m pytest tests/ -vv From c8ce44e3f4914ee1d25140911c4c944ef26fdd02 Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Sat, 16 Jul 2022 18:31:35 +0300 Subject: [PATCH 57/63] refactor --- tests/convert_test.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/convert_test.py b/tests/convert_test.py index 3f14ecf6e6..261dfa6146 100644 --- a/tests/convert_test.py +++ b/tests/convert_test.py @@ -6,13 +6,13 @@ # todo: add tests for exception -def test_md_to_ipynb(get_ipynb_file: str) -> (None): # noqa: F811 +def test_md_to_ipynb(get_ipynb_file: str) -> (None): + + path_2_converted_lecture_to_ipynb = Path("./tests/data/lecture.ipynb") try: md_to_ipynb(dir_2_toc="./tests/data", dir_2_ipynb="./tests", testing=True) - path_2_converted_lecture_to_ipynb = Path("./tests/data/lecture.ipynb") - with open(path_2_converted_lecture_to_ipynb, "r") as test_ipynb_file: converted_lecture_to_ipynb = test_ipynb_file.read() From a4cc27a3989eaa10eafd507c705a236ff6c4492f Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Sat, 16 Jul 2022 18:37:12 +0300 Subject: [PATCH 58/63] test: remove finally --- tests/convert_test.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/convert_test.py b/tests/convert_test.py index 261dfa6146..40fbfd3638 100644 --- a/tests/convert_test.py +++ b/tests/convert_test.py @@ -20,5 +20,5 @@ def test_md_to_ipynb(get_ipynb_file: str) -> (None): except FileNotFoundError: logger.error("file not found") - finally: - path_2_converted_lecture_to_ipynb.unlink() # pyright: ignore reportUnboundVariable + # finally: + # path_2_converted_lecture_to_ipynb.unlink() # pyright: ignore reportUnboundVariable From e760dfd97c4d1faeec774ae9a63009b88513bbc8 Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Sat, 16 Jul 2022 18:49:07 +0300 Subject: [PATCH 59/63] add to gitignore some tests data --- .gitignore | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 8d4b38ec84..a18e166961 100644 --- a/.gitignore +++ b/.gitignore @@ -511,8 +511,11 @@ _minted* # Jupyter Book _build* -# VSCode settings dir +# VSode settings dir .vscode # Notebooks dir -notebooks +notebooks/ + +# some tests data +tests/data/lecture.ipynb From 3cd58364b0a775f07ea64c3a2cd9aa32b8209088 Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Sat, 16 Jul 2022 18:49:21 +0300 Subject: [PATCH 60/63] ci: refactor test-installation --- .github/workflows/test-installation.yml | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test-installation.yml b/.github/workflows/test-installation.yml index 92601dcc1c..16bc1b3425 100644 --- a/.github/workflows/test-installation.yml +++ b/.github/workflows/test-installation.yml @@ -1,5 +1,6 @@ name: test-listener-os # This repo testing instructions from lecture book/install/{ru/en}/intro.md + on: workflow_dispatch: inputs: @@ -8,35 +9,38 @@ on: description: 'Choose OS for test' required: false default: '"ubuntu-latest", "macos-latest", "windows-latest"' + jobs: + test-listener-all: name: Listener miniconda (${{ matrix.python-version }}, ${{ matrix.os }}) runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: - os: ["ubuntu-latest", "macos-latest", "windows-latest"] + os: ["ubuntu-latest", "macos-latest"] python-version: ["3.8", "3.9"] + steps: - uses: conda-incubator/setup-miniconda@v2 with: auto-update-conda: true python-version: ${{ matrix.python-version }} + - name: conda create and activate env shell: bash -l {0} run: | conda create -n qmlcourse python=3.8 --yes conda activate qmlcourse + - name: install psi-4 Non-Windows - if: ${{ matrix.os }} != "windows-latest" shell: bash -l {0} run: conda run -n qmlcourse conda install psi4 python=3.8 -c psi4 --yes - - name: install psi-4 Windows - if: ${{ matrix.os }} == "windows-latest" - run: conda run -n qmlcourse conda install psi4 python=3.8 -c psi4/label/dev -c conda-forge --yes + - name: install all other packages run: | conda run -n qmlcourse python -m pip install -r requirements.txt conda run -n qmlcourse conda install -c conda-forge jupyterlab --yes + - name: test jupyter run: conda run -n qmlcourse jupyter --version From 2b3ad8e4c3ca9d70e78ce71e464e8b132aeb84c6 Mon Sep 17 00:00:00 2001 From: Aleksei Pronkin <31882933+alexey-pronkin@users.noreply.github.com> Date: Mon, 18 Jul 2022 08:59:08 +0300 Subject: [PATCH 61/63] change order of dockerfile for old docker engines. Change order in lecture too, listener instructions first --- .github/workflows/test-docker.yml | 15 +- Dockerfile | 52 +- poetry.lock | 247 +- pyproject.toml | 3 + qmlcourse/book/install/en/docker.md | 76 +- requirements.txt | 2268 ++++++++++++++++- requirements/requirements-dev.txt | 26 + requirements/requirements-listener.txt | 15 + ...quirements.py => generate_requirements.py} | 23 +- 9 files changed, 2536 insertions(+), 189 deletions(-) create mode 100644 requirements/requirements-dev.txt create mode 100644 requirements/requirements-listener.txt rename tools/{toml2requirements.py => generate_requirements.py} (70%) diff --git a/.github/workflows/test-docker.yml b/.github/workflows/test-docker.yml index 9b8cf07a14..dc4aefd94b 100644 --- a/.github/workflows/test-docker.yml +++ b/.github/workflows/test-docker.yml @@ -17,9 +17,20 @@ jobs: uses: actions/checkout@v2 - name: set up docker uses: actions/setup-docker@v1 - - name: test dev (qml-dev) docker + - name: build dev (qml-dev) docker run: | docker build . --tag qml-dev:latest --target dev - - name: test listener (qmlcourse) docker + - name: test dev (qml-dev) docker + run: | + docker run -it qml-dev:latest /bin/bash + exit + - name: build listener (qmlcourse) docker run: | docker build . --tag qmlcourse:latest --target listener + docker run -it -p 8888:8888 qmlcourse:latest + - name: test listener (qmlcourse) docker + run: | + docker run -it -p 8888:8888 qmlcourse:latest + conda activate qmlcourse + jupyter --version + exit diff --git a/Dockerfile b/Dockerfile index 2147dbac0d..2164197ca1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,30 @@ #### -# Purpose of the builder is to make all lectures, convert them into ipython notebooks (.ipynb). This operation is time costly and take a lot of space on the HDD. +# Purpose of this stage is to get all packages from lectures and jupyter lab to interact with lectures. +#### + +FROM continuumio/miniconda3:latest as listener +WORKDIR qmlcourse +COPY . . +RUN conda create -n qmlcourse python=3.8 --yes +RUN conda run -n qmlcourse conda install psi4 python=3.8 -c psi4 --yes +RUN conda run -n qmlcourse python -m pip install -r requirements/requirements-listener.txt +RUN conda run -n qmlcourse conda install -c conda-forge jupyterlab --yes + +# Configure environment +ENV CONDA_DIR=/opt/conda \ + SHELL=/bin/bash +ENV PATH="${SHELL}:${PATH}" +ENV PATH="${CONDA_DIR}/bin:${PATH}" +EXPOSE 8888 +ENTRYPOINT ["bash"] + +# Starting jupyter lab in interactive docker shell: +# docker run -it -p 8888:8888 qmlcourse:latest +# conda activate qmlcourse +# jupyter lab --ip='0.0.0.0' --port=8888 --no-browser --allow-root + +#### +# Purpose of the builder is to make all lectures, convert them into ipython notebooks (.ipynb). This operation is time costly and take a lot of space on the drive. # After that we could use lightweight environment #### @@ -29,28 +54,3 @@ RUN poetry run jupyter-book build ./qmlcourse --builder latex --keep-going # TODO: Building pdf # xelatex -interaction nonstopmode qmlcourse.tex ENTRYPOINT ["/bin/bash"] - -#### -# Purpose of this stage is to get all packages from lectures and jupyter lab to interact with lectures. -#### - -FROM continuumio/miniconda3:latest as listener -WORKDIR qmlcourse -COPY . . -RUN conda create -n qmlcourse python=3.8 --yes -RUN conda run -n qmlcourse conda install psi4 python=3.8 -c psi4 --yes -RUN conda run -n qmlcourse python -m pip install -r requirements.txt -RUN conda run -n qmlcourse conda install -c conda-forge jupyterlab --yes - -# Configure environment -ENV CONDA_DIR=/opt/conda \ - SHELL=/bin/bash -ENV PATH="${SHELL}:${PATH}" -ENV PATH="${CONDA_DIR}/bin:${PATH}" -EXPOSE 8888 -ENTRYPOINT ["bash"] - -# Starting jupyter lab in interactive docker shell: -# docker run -it -p 8888:8888 qmlcourse:latest -# conda activate qmlcourse -# jupyter lab --ip='0.0.0.0' --port=8888 --no-browser --allow-root diff --git a/poetry.lock b/poetry.lock index 4011cbc03c..72249d43cd 100644 --- a/poetry.lock +++ b/poetry.lock @@ -235,6 +235,14 @@ python-versions = "*" [package.dependencies] pycparser = "*" +[[package]] +name = "cfgv" +version = "3.3.1" +description = "Validate configuration and produce human readable error messages." +category = "main" +optional = false +python-versions = ">=3.6.1" + [[package]] name = "charset-normalizer" version = "2.0.12" @@ -417,6 +425,14 @@ category = "main" optional = false python-versions = ">=3" +[[package]] +name = "distlib" +version = "0.3.5" +description = "Distribution utilities" +category = "main" +optional = false +python-versions = "*" + [[package]] name = "dlx" version = "1.0.4" @@ -599,6 +615,30 @@ python-versions = "*" [package.extras] devel = ["colorama", "jsonschema", "json-spec", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] +[[package]] +name = "filelock" +version = "3.7.1" +description = "A platform independent file lock." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["furo (>=2021.8.17b43)", "sphinx (>=4.1)", "sphinx-autodoc-typehints (>=1.12)"] +testing = ["covdefaults (>=1.2.0)", "coverage (>=4)", "pytest (>=4)", "pytest-cov", "pytest-timeout (>=1.4.2)"] + +[[package]] +name = "fire" +version = "0.4.0" +description = "A library for automatically generating command line interfaces." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +six = "*" +termcolor = "*" + [[package]] name = "flatbuffers" version = "2.0" @@ -809,6 +849,17 @@ category = "main" optional = false python-versions = "*" +[[package]] +name = "identify" +version = "2.5.1" +description = "File identification library for Python" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.extras] +license = ["ukkonen"] + [[package]] name = "idna" version = "3.3" @@ -1311,6 +1362,21 @@ category = "main" optional = false python-versions = ">=3.7,<3.11" +[[package]] +name = "loguru" +version = "0.6.0" +description = "Python logging made (stupidly) simple" +category = "main" +optional = false +python-versions = ">=3.5" + +[package.dependencies] +colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} +win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} + +[package.extras] +dev = ["colorama (>=0.3.4)", "docutils (==0.16)", "flake8 (>=3.7.7)", "tox (>=3.9.0)", "pytest (>=4.6.2)", "pytest-cov (>=2.7.1)", "black (>=19.10b0)", "isort (>=5.1.1)", "Sphinx (>=4.1.1)", "sphinx-autobuild (>=0.7.1)", "sphinx-rtd-theme (>=0.4.3)"] + [[package]] name = "lxml" version = "4.9.1" @@ -1670,6 +1736,14 @@ python-versions = "*" [package.extras] test = ["codecov (>=2.0.5)", "coverage (>=4.2)", "flake8 (>=3.0.4)", "pytest (>=4.5.0)", "pytest-cov (>=2.7.1)", "pytest-runner (>=5.1)", "pytest-virtualenv (>=1.7.0)", "virtualenv (>=15.0.3)"] +[[package]] +name = "nodeenv" +version = "1.7.0" +description = "Node.js virtual environment builder" +category = "main" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" + [[package]] name = "notebook" version = "6.4.11" @@ -1998,6 +2072,18 @@ python-versions = ">=3.7" docs = ["olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinx-rtd-theme (>=1.0)", "sphinxext-opengraph"] tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] +[[package]] +name = "platformdirs" +version = "2.5.2" +description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"] +test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] + [[package]] name = "plucky" version = "0.4.3" @@ -2022,6 +2108,22 @@ category = "main" optional = false python-versions = "*" +[[package]] +name = "pre-commit" +version = "2.20.0" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +toml = "*" +virtualenv = ">=20.0.8" + [[package]] name = "prometheus-client" version = "0.14.1" @@ -3307,6 +3409,24 @@ brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] +[[package]] +name = "virtualenv" +version = "20.15.1" +description = "Virtual Python Environment builder" +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" + +[package.dependencies] +distlib = ">=0.3.1,<1" +filelock = ">=3.2,<4" +platformdirs = ">=2,<3" +six = ">=1.9.0,<2" + +[package.extras] +docs = ["proselint (>=0.10.2)", "sphinx (>=3)", "sphinx-argparse (>=0.2.5)", "sphinx-rtd-theme (>=0.4.3)", "towncrier (>=21.3)"] +testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", "pytest (>=4)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)", "packaging (>=20.0)"] + [[package]] name = "wcwidth" version = "0.2.5" @@ -3366,6 +3486,17 @@ python-versions = "*" [package.dependencies] notebook = ">=4.4.1" +[[package]] +name = "win32-setctime" +version = "1.1.0" +description = "A small Python utility to set file creation time on Windows" +category = "main" +optional = false +python-versions = ">=3.5" + +[package.extras] +dev = ["pytest (>=4.6.2)", "black (>=19.3b0)"] + [[package]] name = "wrapt" version = "1.14.1" @@ -3404,8 +3535,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = ">=3.8,<=3.9" - -content-hash = "cd6e0fc8cfc0bdac1af0270282c4b5b339a46e59bfaac8b2ae9a764e6340adff" +content-hash = "3b39698745eef06f481cdc8555a44188a08f57716d5031e33c2313abf8e0af4c" [metadata.files] absl-py = [ @@ -3564,6 +3694,10 @@ cffi = [ {file = "cffi-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139"}, {file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"}, ] +cfgv = [ + {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, + {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, +] charset-normalizer = [ {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"}, {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"}, @@ -3675,6 +3809,7 @@ diskcache = [ {file = "diskcache-5.4.0-py3-none-any.whl", hash = "sha256:af3ec6d7f167bbef7b6c33d9ee22f86d3e8f2dd7131eb7c4703d8d91ccdc0cc4"}, {file = "diskcache-5.4.0.tar.gz", hash = "sha256:8879eb8c9b4a2509a5e633d2008634fb2b0b35c2b36192d89655dbde02419644"}, ] +distlib = [] dlx = [ {file = "dlx-1.0.4-py2.6.egg", hash = "sha256:c9747656710125545e37c1b3d71df2b0f1fbfaf2029355c1f87beaa6ece5b6e8"}, {file = "dlx-1.0.4.tar.gz", hash = "sha256:ef75bc9d590216ebde7d4811f9ae6b2d6c6dc2a54772d94ae13384dc517a5aae"}, @@ -3793,6 +3928,8 @@ fastjsonschema = [ {file = "fastjsonschema-2.15.3-py3-none-any.whl", hash = "sha256:ddb0b1d8243e6e3abb822bd14e447a89f4ab7439342912d590444831fa00b6a0"}, {file = "fastjsonschema-2.15.3.tar.gz", hash = "sha256:0a572f0836962d844c1fc435e200b2e4f4677e4e6611a2e3bdd01ba697c275ec"}, ] +filelock = [] +fire = [] flatbuffers = [ {file = "flatbuffers-2.0-py2.py3-none-any.whl", hash = "sha256:3751954f0604580d3219ae49a85fafec9d85eec599c0b96226e1bc0b48e57474"}, {file = "flatbuffers-2.0.tar.gz", hash = "sha256:12158ab0272375eab8db2d663ae97370c33f152b27801fa6024e1d6105fd4dd2"}, @@ -3970,6 +4107,7 @@ homebase = [ {file = "homebase-1.0.1-py2.py3-none-any.whl", hash = "sha256:d64c97f60a8ddd94ce8702bac65ed5d1996aca01a17d1e53e6ad5149e2f8b5b5"}, {file = "homebase-1.0.1.tar.gz", hash = "sha256:9ee008df4298b420852d815e6df488822229c4bd8d571bcd0a454e04232c635e"}, ] +identify = [] idna = [ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, @@ -4087,10 +4225,7 @@ jsonschema = [ {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"}, {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"}, ] -jupyter-book = [ - {file = "jupyter-book-0.13.0.tar.gz", hash = "sha256:0a956677e7bbee630dd66641c09a84091277887d6dcdd381a676f00fa9de2074"}, - {file = "jupyter_book-0.13.0-py3-none-any.whl", hash = "sha256:c310a0838ed90e2fa87239856ca24bed91f12a541dedf290cc94ac4e07ead166"}, -] +jupyter-book = [] jupyter-cache = [ {file = "jupyter-cache-0.4.3.tar.gz", hash = "sha256:4c9b5431b1d320bc68440c21fa0a155bbeb29c5b979bef72222e244a7bcd54fc"}, {file = "jupyter_cache-0.4.3-py3-none-any.whl", hash = "sha256:6d5d662d81f565d18009e8dcfd3a56fb876af47eafead2a19ef0045aba8ffe3b"}, @@ -4187,7 +4322,6 @@ libclang = [ {file = "libclang-14.0.1-py2.py3-none-manylinux2014_armv7l.whl", hash = "sha256:7c7b8c7c82c0cdc088052c6b7b2be4a45b6b06f5f856e7e7058e598f05c09910"}, {file = "libclang-14.0.1-py2.py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:58b9679868b2d6b5172ded26026c2f71306c4cabd6d15b93b597446fd677eb98"}, {file = "libclang-14.0.1-py2.py3-none-win_amd64.whl", hash = "sha256:1a4f0d5959c801c975950926cffb9b45521c890d7c4b730d8a1f688d75b25de9"}, - {file = "libclang-14.0.1.tar.gz", hash = "sha256:332e539201b46cd4676bee992bbf4b3e50450fc17f71ff33d4afc9da09cf46cb"}, ] linkify-it-py = [ {file = "linkify-it-py-1.0.3.tar.gz", hash = "sha256:2b3f168d5ce75e3a425e34b341a6b73e116b5d9ed8dbbbf5dc7456843b7ce2ee"}, @@ -4223,78 +4357,8 @@ llvmlite = [ {file = "llvmlite-0.38.1-cp39-cp39-win_amd64.whl", hash = "sha256:66462d768c30d5f648ca3361d657b434efa8b09f6cf04d6b6eae66e62e993644"}, {file = "llvmlite-0.38.1.tar.gz", hash = "sha256:0622a86301fcf81cc50d7ed5b4bebe992c030580d413a8443b328ed4f4d82561"}, ] -lxml = [ - {file = "lxml-4.9.1-cp27-cp27m-macosx_10_15_x86_64.whl", hash = "sha256:98cafc618614d72b02185ac583c6f7796202062c41d2eeecdf07820bad3295ed"}, - {file = "lxml-4.9.1-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c62e8dd9754b7debda0c5ba59d34509c4688f853588d75b53c3791983faa96fc"}, - {file = "lxml-4.9.1-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:21fb3d24ab430fc538a96e9fbb9b150029914805d551deeac7d7822f64631dfc"}, - {file = "lxml-4.9.1-cp27-cp27m-win32.whl", hash = "sha256:86e92728ef3fc842c50a5cb1d5ba2bc66db7da08a7af53fb3da79e202d1b2cd3"}, - {file = "lxml-4.9.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4cfbe42c686f33944e12f45a27d25a492cc0e43e1dc1da5d6a87cbcaf2e95627"}, - {file = "lxml-4.9.1-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dad7b164905d3e534883281c050180afcf1e230c3d4a54e8038aa5cfcf312b84"}, - {file = "lxml-4.9.1-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a614e4afed58c14254e67862456d212c4dcceebab2eaa44d627c2ca04bf86837"}, - {file = "lxml-4.9.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:f9ced82717c7ec65a67667bb05865ffe38af0e835cdd78728f1209c8fffe0cad"}, - {file = "lxml-4.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:d9fc0bf3ff86c17348dfc5d322f627d78273eba545db865c3cd14b3f19e57fa5"}, - {file = "lxml-4.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e5f66bdf0976ec667fc4594d2812a00b07ed14d1b44259d19a41ae3fff99f2b8"}, - {file = "lxml-4.9.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:fe17d10b97fdf58155f858606bddb4e037b805a60ae023c009f760d8361a4eb8"}, - {file = "lxml-4.9.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8caf4d16b31961e964c62194ea3e26a0e9561cdf72eecb1781458b67ec83423d"}, - {file = "lxml-4.9.1-cp310-cp310-win32.whl", hash = "sha256:4780677767dd52b99f0af1f123bc2c22873d30b474aa0e2fc3fe5e02217687c7"}, - {file = "lxml-4.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:b122a188cd292c4d2fcd78d04f863b789ef43aa129b233d7c9004de08693728b"}, - {file = "lxml-4.9.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:be9eb06489bc975c38706902cbc6888f39e946b81383abc2838d186f0e8b6a9d"}, - {file = "lxml-4.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:f1be258c4d3dc609e654a1dc59d37b17d7fef05df912c01fc2e15eb43a9735f3"}, - {file = "lxml-4.9.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:927a9dd016d6033bc12e0bf5dee1dde140235fc8d0d51099353c76081c03dc29"}, - {file = "lxml-4.9.1-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9232b09f5efee6a495a99ae6824881940d6447debe272ea400c02e3b68aad85d"}, - {file = "lxml-4.9.1-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:04da965dfebb5dac2619cb90fcf93efdb35b3c6994fea58a157a834f2f94b318"}, - {file = "lxml-4.9.1-cp35-cp35m-win32.whl", hash = "sha256:4d5bae0a37af799207140652a700f21a85946f107a199bcb06720b13a4f1f0b7"}, - {file = "lxml-4.9.1-cp35-cp35m-win_amd64.whl", hash = "sha256:4878e667ebabe9b65e785ac8da4d48886fe81193a84bbe49f12acff8f7a383a4"}, - {file = "lxml-4.9.1-cp36-cp36m-macosx_10_15_x86_64.whl", hash = "sha256:1355755b62c28950f9ce123c7a41460ed9743c699905cbe664a5bcc5c9c7c7fb"}, - {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:bcaa1c495ce623966d9fc8a187da80082334236a2a1c7e141763ffaf7a405067"}, - {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6eafc048ea3f1b3c136c71a86db393be36b5b3d9c87b1c25204e7d397cee9536"}, - {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:13c90064b224e10c14dcdf8086688d3f0e612db53766e7478d7754703295c7c8"}, - {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:206a51077773c6c5d2ce1991327cda719063a47adc02bd703c56a662cdb6c58b"}, - {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e8f0c9d65da595cfe91713bc1222af9ecabd37971762cb830dea2fc3b3bb2acf"}, - {file = "lxml-4.9.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8f0a4d179c9a941eb80c3a63cdb495e539e064f8054230844dcf2fcb812b71d3"}, - {file = "lxml-4.9.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:830c88747dce8a3e7525defa68afd742b4580df6aa2fdd6f0855481e3994d391"}, - {file = "lxml-4.9.1-cp36-cp36m-win32.whl", hash = "sha256:1e1cf47774373777936c5aabad489fef7b1c087dcd1f426b621fda9dcc12994e"}, - {file = "lxml-4.9.1-cp36-cp36m-win_amd64.whl", hash = "sha256:5974895115737a74a00b321e339b9c3f45c20275d226398ae79ac008d908bff7"}, - {file = "lxml-4.9.1-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:1423631e3d51008871299525b541413c9b6c6423593e89f9c4cfbe8460afc0a2"}, - {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:2aaf6a0a6465d39b5ca69688fce82d20088c1838534982996ec46633dc7ad6cc"}, - {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:9f36de4cd0c262dd9927886cc2305aa3f2210db437aa4fed3fb4940b8bf4592c"}, - {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ae06c1e4bc60ee076292e582a7512f304abdf6c70db59b56745cca1684f875a4"}, - {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:57e4d637258703d14171b54203fd6822fda218c6c2658a7d30816b10995f29f3"}, - {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6d279033bf614953c3fc4a0aa9ac33a21e8044ca72d4fa8b9273fe75359d5cca"}, - {file = "lxml-4.9.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a60f90bba4c37962cbf210f0188ecca87daafdf60271f4c6948606e4dabf8785"}, - {file = "lxml-4.9.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6ca2264f341dd81e41f3fffecec6e446aa2121e0b8d026fb5130e02de1402785"}, - {file = "lxml-4.9.1-cp37-cp37m-win32.whl", hash = "sha256:27e590352c76156f50f538dbcebd1925317a0f70540f7dc8c97d2931c595783a"}, - {file = "lxml-4.9.1-cp37-cp37m-win_amd64.whl", hash = "sha256:eea5d6443b093e1545ad0210e6cf27f920482bfcf5c77cdc8596aec73523bb7e"}, - {file = "lxml-4.9.1-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:f05251bbc2145349b8d0b77c0d4e5f3b228418807b1ee27cefb11f69ed3d233b"}, - {file = "lxml-4.9.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:487c8e61d7acc50b8be82bda8c8d21d20e133c3cbf41bd8ad7eb1aaeb3f07c97"}, - {file = "lxml-4.9.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8d1a92d8e90b286d491e5626af53afef2ba04da33e82e30744795c71880eaa21"}, - {file = "lxml-4.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:b570da8cd0012f4af9fa76a5635cd31f707473e65a5a335b186069d5c7121ff2"}, - {file = "lxml-4.9.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5ef87fca280fb15342726bd5f980f6faf8b84a5287fcc2d4962ea8af88b35130"}, - {file = "lxml-4.9.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:93e414e3206779ef41e5ff2448067213febf260ba747fc65389a3ddaa3fb8715"}, - {file = "lxml-4.9.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6653071f4f9bac46fbc30f3c7838b0e9063ee335908c5d61fb7a4a86c8fd2036"}, - {file = "lxml-4.9.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:32a73c53783becdb7eaf75a2a1525ea8e49379fb7248c3eeefb9412123536387"}, - {file = "lxml-4.9.1-cp38-cp38-win32.whl", hash = "sha256:1a7c59c6ffd6ef5db362b798f350e24ab2cfa5700d53ac6681918f314a4d3b94"}, - {file = "lxml-4.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:1436cf0063bba7888e43f1ba8d58824f085410ea2025befe81150aceb123e345"}, - {file = "lxml-4.9.1-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:4beea0f31491bc086991b97517b9683e5cfb369205dac0148ef685ac12a20a67"}, - {file = "lxml-4.9.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:41fb58868b816c202e8881fd0f179a4644ce6e7cbbb248ef0283a34b73ec73bb"}, - {file = "lxml-4.9.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:bd34f6d1810d9354dc7e35158aa6cc33456be7706df4420819af6ed966e85448"}, - {file = "lxml-4.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:edffbe3c510d8f4bf8640e02ca019e48a9b72357318383ca60e3330c23aaffc7"}, - {file = "lxml-4.9.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6d949f53ad4fc7cf02c44d6678e7ff05ec5f5552b235b9e136bd52e9bf730b91"}, - {file = "lxml-4.9.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:079b68f197c796e42aa80b1f739f058dcee796dc725cc9a1be0cdb08fc45b000"}, - {file = "lxml-4.9.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9c3a88d20e4fe4a2a4a84bf439a5ac9c9aba400b85244c63a1ab7088f85d9d25"}, - {file = "lxml-4.9.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4e285b5f2bf321fc0857b491b5028c5f276ec0c873b985d58d7748ece1d770dd"}, - {file = "lxml-4.9.1-cp39-cp39-win32.whl", hash = "sha256:ef72013e20dd5ba86a8ae1aed7f56f31d3374189aa8b433e7b12ad182c0d2dfb"}, - {file = "lxml-4.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:10d2017f9150248563bb579cd0d07c61c58da85c922b780060dcc9a3aa9f432d"}, - {file = "lxml-4.9.1-pp37-pypy37_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0538747a9d7827ce3e16a8fdd201a99e661c7dee3c96c885d8ecba3c35d1032c"}, - {file = "lxml-4.9.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:0645e934e940107e2fdbe7c5b6fb8ec6232444260752598bc4d09511bd056c0b"}, - {file = "lxml-4.9.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:6daa662aba22ef3258934105be2dd9afa5bb45748f4f702a3b39a5bf53a1f4dc"}, - {file = "lxml-4.9.1-pp38-pypy38_pp73-macosx_10_15_x86_64.whl", hash = "sha256:603a464c2e67d8a546ddaa206d98e3246e5db05594b97db844c2f0a1af37cf5b"}, - {file = "lxml-4.9.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:c4b2e0559b68455c085fb0f6178e9752c4be3bba104d6e881eb5573b399d1eb2"}, - {file = "lxml-4.9.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0f3f0059891d3254c7b5fb935330d6db38d6519ecd238ca4fce93c234b4a0f73"}, - {file = "lxml-4.9.1-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:c852b1530083a620cb0de5f3cd6826f19862bafeaf77586f1aef326e49d95f0c"}, - {file = "lxml-4.9.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:287605bede6bd36e930577c5925fcea17cb30453d96a7b4c63c14a257118dbb9"}, - {file = "lxml-4.9.1.tar.gz", hash = "sha256:fe749b052bb7233fe5d072fcb549221a8cb1a16725c47c37e42b0b9cb3ff2c3f"}, -] +loguru = [] +lxml = [] markdown = [ {file = "Markdown-3.3.7-py3-none-any.whl", hash = "sha256:f5da449a6e1c989a4cea2631aa8ee67caa5a2ef855d551c88f9e309f4634c621"}, {file = "Markdown-3.3.7.tar.gz", hash = "sha256:cbb516f16218e643d8e0a95b309f77eb118cb138d39a4f27851e6a63581db874"}, @@ -4533,6 +4597,7 @@ ninja = [ {file = "ninja-1.10.2.3-py2.py3-none-win_amd64.whl", hash = "sha256:0560eea57199e41e86ac2c1af0108b63ae77c3ca4d05a9425a750e908135935a"}, {file = "ninja-1.10.2.3.tar.gz", hash = "sha256:e1b86ad50d4e681a7dbdff05fc23bb52cb773edb90bc428efba33fa027738408"}, ] +nodeenv = [] notebook = [ {file = "notebook-6.4.11-py3-none-any.whl", hash = "sha256:b4a6baf2eba21ce67a0ca11a793d1781b06b8078f34d06c710742e55f3eee505"}, {file = "notebook-6.4.11.tar.gz", hash = "sha256:709b1856a564fe53054796c80e17a67262071c86bfbdfa6b96aaa346113c555a"}, @@ -4779,6 +4844,7 @@ pillow = [ {file = "Pillow-9.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:baf3be0b9446a4083cc0c5bb9f9c964034be5374b5bc09757be89f5d2fa247b8"}, {file = "Pillow-9.1.1.tar.gz", hash = "sha256:7502539939b53d7565f3d11d87c78e7ec900d3c72945d4ee0e2f250d598309a0"}, ] +platformdirs = [] plucky = [ {file = "plucky-0.4.3-py2.py3-none-any.whl", hash = "sha256:a358878f3e45b5e51d0b4e5b5c89d704422a72c2cf8ee9aaf9acedfa53f89105"}, {file = "plucky-0.4.3.tar.gz", hash = "sha256:5bc75d43ae6b40f1b7ba42000b37e4934fa6bd2d6a6cd4e47461f803a404c194"}, @@ -4825,6 +4891,7 @@ ply = [ {file = "ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce"}, {file = "ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3"}, ] +pre-commit = [] prometheus-client = [ {file = "prometheus_client-0.14.1-py3-none-any.whl", hash = "sha256:522fded625282822a89e2773452f42df14b5a8e84a86433e3f8a189c1d54dc01"}, {file = "prometheus_client-0.14.1.tar.gz", hash = "sha256:5459c427624961076277fdc6dc50540e2bacb98eebde99886e59ec55ed92093a"}, @@ -4978,10 +5045,7 @@ pydantic = [ {file = "pydantic-1.9.1-py3-none-any.whl", hash = "sha256:4988c0f13c42bfa9ddd2fe2f569c9d54646ce84adc5de84228cfe83396f3bd58"}, {file = "pydantic-1.9.1.tar.gz", hash = "sha256:1ed987c3ff29fff7fd8c3ea3a3ea877ad310aae2ef9889a119e22d3f2db0691a"}, ] -pydata-sphinx-theme = [ - {file = "pydata_sphinx_theme-0.8.1-py3-none-any.whl", hash = "sha256:af2c99cb0b43d95247b1563860942ba75d7f1596360594fce510caaf8c4fcc16"}, - {file = "pydata_sphinx_theme-0.8.1.tar.gz", hash = "sha256:96165702253917ece13dd895e23b96ee6dce422dcc144d560806067852fe1fed"}, -] +pydata-sphinx-theme = [] pyee = [ {file = "pyee-8.2.2-py2.py3-none-any.whl", hash = "sha256:c09f56e36eb10bf23aa2aacf145f690ded75b990a3d9523fd478b005940303d2"}, {file = "pyee-8.2.2.tar.gz", hash = "sha256:5c7e60f8df95710dbe17550e16ce0153f83990c00ef744841b43f371ed53ebea"}, @@ -5450,14 +5514,8 @@ soupsieve = [ {file = "soupsieve-2.3.2.post1-py3-none-any.whl", hash = "sha256:3b2503d3c7084a42b1ebd08116e5f81aadfaea95863628c80a3b774a11b7c759"}, {file = "soupsieve-2.3.2.post1.tar.gz", hash = "sha256:fc53893b3da2c33de295667a0e19f078c14bf86544af307354de5fcf12a3f30d"}, ] -sphinx = [ - {file = "Sphinx-4.5.0-py3-none-any.whl", hash = "sha256:ebf612653238bcc8f4359627a9b7ce44ede6fdd75d9d30f68255c7383d3a6226"}, - {file = "Sphinx-4.5.0.tar.gz", hash = "sha256:7bf8ca9637a4ee15af412d1a1d9689fec70523a68ca9bb9127c2f3eeb344e2e6"}, -] -sphinx-book-theme = [ - {file = "sphinx_book_theme-0.3.2-py3-none-any.whl", hash = "sha256:4aed92f2ed9d27e002eac5dce1daa8eca42dd9e6464811533c569ee156a6f67d"}, - {file = "sphinx_book_theme-0.3.2.tar.gz", hash = "sha256:182b5657a345f3bbb2c5b86da65db9b47e27de0ab406cda168142768645121f5"}, -] +sphinx = [] +sphinx-book-theme = [] sphinx-comments = [ {file = "sphinx-comments-0.0.3.tar.gz", hash = "sha256:00170afff27019fad08e421da1ae49c681831fb2759786f07c826e89ac94cf21"}, {file = "sphinx_comments-0.0.3-py3-none-any.whl", hash = "sha256:1e879b4e9bfa641467f83e3441ac4629225fc57c29995177d043252530c21d00"}, @@ -5466,10 +5524,7 @@ sphinx-copybutton = [ {file = "sphinx-copybutton-0.5.0.tar.gz", hash = "sha256:a0c059daadd03c27ba750da534a92a63e7a36a7736dcf684f26ee346199787f6"}, {file = "sphinx_copybutton-0.5.0-py3-none-any.whl", hash = "sha256:9684dec7434bd73f0eea58dda93f9bb879d24bff2d8b187b1f2ec08dfe7b5f48"}, ] -sphinx-design = [ - {file = "sphinx_design-0.1.0-py3-none-any.whl", hash = "sha256:151ab25fda162ded010f0782d1770d014073c3f3fea8e02c45178e0ae6f7e0a0"}, - {file = "sphinx_design-0.1.0.tar.gz", hash = "sha256:68edba2453a175df5b0390d481ec0e9329112064f211860426729768b3501706"}, -] +sphinx-design = [] sphinx-external-toc = [ {file = "sphinx_external_toc-0.2.4-py3-none-any.whl", hash = "sha256:f7906620e74fbef50f0c3b8adf943da03000ab955ffe957ae4760d6cd5a09717"}, {file = "sphinx_external_toc-0.2.4.tar.gz", hash = "sha256:f073c482d959a166f844ca8caadd13e24fa43153750cc120646ded37ff622018"}, @@ -5784,6 +5839,7 @@ urllib3 = [ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"}, {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"}, ] +virtualenv = [] wcwidth = [ {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, @@ -5839,6 +5895,7 @@ widgetsnbextension = [ {file = "widgetsnbextension-3.6.0-py2.py3-none-any.whl", hash = "sha256:4fd321cad39fdcf8a8e248a657202d42917ada8e8ed5dd3f60f073e0d54ceabd"}, {file = "widgetsnbextension-3.6.0.tar.gz", hash = "sha256:e84a7a9fcb9baf3d57106e184a7389a8f8eb935bf741a5eb9d60aa18cc029a80"}, ] +win32-setctime = [] wrapt = [ {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"}, {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef"}, diff --git a/pyproject.toml b/pyproject.toml index 0d3ac02357..06b11f15e1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,6 +33,9 @@ tensorflow-quantum = "0.6.0" Jinja2 = "3.0.3" # [tool.poetry.dev-dependencies] jupytext = "^1.13.8" +fire = "^0.4.0" +loguru = "^0.6.0" +pre-commit = "^2.20.0" [build-system] diff --git a/qmlcourse/book/install/en/docker.md b/qmlcourse/book/install/en/docker.md index c4e46a19cc..d67d673067 100644 --- a/qmlcourse/book/install/en/docker.md +++ b/qmlcourse/book/install/en/docker.md @@ -9,6 +9,44 @@ docker run hello-world You need to see docker version and then short instructions and links to the documentation. If you see that command docker is not find, then you need to add docker to PATH, and if you see permitions issues, than you didn't do post-instalaltion steps and didn't reboot your system, see the documentation on the docker website. +## Listener + +Build listener container: + +``` +docker build . --tag qmlcourse:latest --target listener +``` + +Run docker in interactive regime with port forwarding: + +```shell +docker run -it -p 8888:8888 qmlcourse:latest +``` + +### Starting jupyter + +In docker bash: + +```bash +conda activate qmlcourse +jupyter notebook --ip='0.0.0.0' --port=8888 --no-browser --allow-root +``` + +### Starting Jupyter Lab + +Run docker in interactive regime with port forwarding: + +```shell +docker run -it -p 8888:8888 qmlcourse:latest +``` + +In docker bash: + +```bash +conda activate qmlcourse +jupyter lab --ip='0.0.0.0' --port=8888 --no-browser --allow-root +``` + ## Contributor Firstly, you need to git clone repository and build docker image from qmlcourse folder with Dockerfile: @@ -84,41 +122,3 @@ Then change directory to `qmlcourse/\_build/latex` and use xelatex: ```shell xelatex -interaction nonstopmode qmlcourse.tex ``` - -## Listener - -Build listener container: - -``` -docker build . --tag qmlcourse:latest --target listener -``` - -Run docker in interactive regime with port forwarding: - -```shell -docker run -it -p 8888:8888 qmlcourse:latest -``` - -### Starting jupyter: - -In docker bash: - -```bash -conda activate qmlcourse -jupyter notebook --ip='0.0.0.0' --port=8888 --no-browser --allow-root -``` - -### Starting Jupyter Lab - -Run docker in interactive regime with port forwarding: - -```shell -docker run -it -p 8888:8888 qmlcourse:latest -``` - -In docker bash: - -```bash -conda activate qmlcourse -jupyter lab --ip='0.0.0.0' --port=8888 --no-browser --allow-root -``` diff --git a/requirements.txt b/requirements.txt index f63dfdfcb1..5261397bb1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,18 +1,2250 @@ -PennyLane==0.20.0 -cirq>=0.11.0 -dwave-system>=1.10.0 -dwavebinarycsp>=0.1.3 -matplotlib>=3.3.4 -netket==3.2 -networkx>=2.6.3 -numpy>=1.19.2 -penaltymodel-maxgap>=0.5.5 -qiskit>=0.31.0 -scikit-learn>=0.24.1 -sympy==1.8 -tensorflow-quantum -tensorflow==2.7.2 -pre-commit==2.20.0 -jupytext==1.10.3 -fire==0.4.0 -loguru==0.6.0 +absl-py==1.1.0; python_version >= "3.7" \ + --hash=sha256:3aa39f898329c2156ff525dfa69ce709e42d77aab18bf4917719d6f260aa6a08 \ + --hash=sha256:db97287655e30336938f8058d2c81ed2be6af1d9b6ebbcd8df1080a6c7fcd24e +alabaster==0.7.12; python_version >= "3.7" \ + --hash=sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359 \ + --hash=sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02 +anyio==3.6.1; python_full_version >= "3.6.2" and python_version >= "3.7" \ + --hash=sha256:cb29b9c70620506a9a8f87a309591713446953302d7d995344d0d7c6c0c9a7be \ + --hash=sha256:413adf95f93886e442aea925f3ee43baa5a765a64a0f52c6081894f9992fdd0b +appdirs==1.4.4; python_full_version >= "3.6.1" and python_full_version < "4.0.0" \ + --hash=sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128 \ + --hash=sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41 +appnope==0.1.3; sys_platform == "darwin" and python_version >= "3.8" and platform_system == "Darwin" \ + --hash=sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e \ + --hash=sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24 +argon2-cffi-bindings==21.2.0; python_version >= "3.7" \ + --hash=sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3 \ + --hash=sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367 \ + --hash=sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d \ + --hash=sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae \ + --hash=sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c \ + --hash=sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86 \ + --hash=sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f \ + --hash=sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e \ + --hash=sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082 \ + --hash=sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f \ + --hash=sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93 \ + --hash=sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194 \ + --hash=sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f \ + --hash=sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5 \ + --hash=sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351 \ + --hash=sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7 \ + --hash=sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583 \ + --hash=sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d \ + --hash=sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670 \ + --hash=sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb \ + --hash=sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a +argon2-cffi==21.3.0; python_version >= "3.7" \ + --hash=sha256:d384164d944190a7dd7ef22c6aa3ff197da12962bd04b17f64d4e93d934dba5b \ + --hash=sha256:8c976986f2c5c0e5000919e6de187906cfd81fb1c72bf9d88c01177e77da7f80 +asttokens==2.0.5; python_version >= "3.8" \ + --hash=sha256:0844691e88552595a6f4a4281a9f7f79b8dd45ca4ccea82e5e05b4bbdb76705c \ + --hash=sha256:9a54c114f02c7a9480d56550932546a3f1fe71d8a02f1bc7ccd0ee3ee35cf4d5 +astunparse==1.6.3 \ + --hash=sha256:c2652417f2c8b5bb325c885ae329bdf3f86424075c4fd1a128674bc6fba4b8e8 \ + --hash=sha256:5ad93a8456f0d084c3456d059fd9a92cce667963232cbf763eac3bc5b7940872 +attrs==20.3.0; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.4.0" and python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6 \ + --hash=sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700 +autograd==1.4 \ + --hash=sha256:5cd6051bf1440643bf8f1104c933b2dedefb7610b951091768c1c680b1e0ceda \ + --hash=sha256:383de0f537ef2e38b85ff9692593b0cfae8958c9b3bd451b52c255fd9171ffce +autoray==0.3.1; python_version >= "3.6" \ + --hash=sha256:cca89a210f13bfbbea1f907108fe88f9323916e77ac64b4ab89bb3f12e102554 \ + --hash=sha256:fea7f04ee855b6badddd659b1764b5d152b81e62bb59f051fba561d973dd761d +babel==2.10.1; python_version >= "3.7" \ + --hash=sha256:3f349e85ad3154559ac4930c3918247d319f21910d5ce4b25d439ed8693b98d2 \ + --hash=sha256:98aeaca086133efb3e1e2aad0396987490c8425929ddbcfe0550184fdc54cd13 +backcall==0.2.0; python_version >= "3.8" \ + --hash=sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255 \ + --hash=sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e +bcrypt==3.2.2; python_version >= "3.6" \ + --hash=sha256:7180d98a96f00b1050e93f5b0f556e658605dd9f524d0b0e68ae7944673f525e \ + --hash=sha256:61bae49580dce88095d669226d5076d0b9d927754cedbdf76c6c9f5099ad6f26 \ + --hash=sha256:88273d806ab3a50d06bc6a2fc7c87d737dd669b76ad955f449c43095389bc8fb \ + --hash=sha256:6d2cb9d969bfca5bc08e45864137276e4c3d3d7de2b162171def3d188bf9d34a \ + --hash=sha256:2b02d6bfc6336d1094276f3f588aa1225a598e27f8e3388f4db9948cb707b521 \ + --hash=sha256:a2c46100e315c3a5b90fdc53e429c006c5f962529bc27e1dfd656292c20ccc40 \ + --hash=sha256:7d9ba2e41e330d2af4af6b1b6ec9e6128e91343d0b4afb9282e54e5508f31baa \ + --hash=sha256:cd43303d6b8a165c29ec6756afd169faba9396a9472cdff753fe9f19b96ce2fa \ + --hash=sha256:4e029cef560967fb0cf4a802bcf4d562d3d6b4b1bf81de5ec1abbe0f1adb027e \ + --hash=sha256:7ff2069240c6bbe49109fe84ca80508773a904f5a8cb960e02a977f7f519b129 \ + --hash=sha256:433c410c2177057705da2a9f2cd01dd157493b2a7ac14c8593a16b3dab6b6bfb +beautifulsoup4==4.11.1; python_full_version >= "3.6.0" and python_version >= "3.7" \ + --hash=sha256:58d5c3d29f5a36ffeb94f02f0d786cd53014cf9b3b3951d42e0080d8a9498d30 \ + --hash=sha256:ad9aa55b65ef2808eb405f46cf74df7fcb7044d5cbc26487f96eb2ef2e436693 +bleach==5.0.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7" \ + --hash=sha256:08a1fe86d253b5c88c92cc3d810fd8048a16d15762e1e5b74d502256e5926aa1 \ + --hash=sha256:c6d6cc054bdc9c83b48b8083e236e5f00f238428666d2ce2e083eaa5fd568565 +cachetools==4.2.4; python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.6.0" \ + --hash=sha256:92971d3cb7d2a97efff7c7bb1657f21a8f5fb309a37530537c71b1774189f2d1 \ + --hash=sha256:89ea6f1b638d5a73a4f9226be57ac5e4f399d22770b92355f92dcb0f7f001693 +certifi==2022.5.18.1; python_full_version >= "3.6.0" and python_version >= "3.7" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7") and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") \ + --hash=sha256:f1d53542ee8cbedbe2118b5686372fb33c297fcd6379b050cca0ef13a597382a \ + --hash=sha256:9c5705e395cd70084351dd8ad5c41e65655e08ce46f2ec9cf6c2c08390f71eb7 +cffi==1.15.0; python_full_version >= "3.7.0" and python_version >= "3.7" and implementation_name == "pypy" \ + --hash=sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962 \ + --hash=sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0 \ + --hash=sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14 \ + --hash=sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474 \ + --hash=sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6 \ + --hash=sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27 \ + --hash=sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023 \ + --hash=sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2 \ + --hash=sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e \ + --hash=sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7 \ + --hash=sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3 \ + --hash=sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c \ + --hash=sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962 \ + --hash=sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382 \ + --hash=sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55 \ + --hash=sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0 \ + --hash=sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e \ + --hash=sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39 \ + --hash=sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc \ + --hash=sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032 \ + --hash=sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8 \ + --hash=sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605 \ + --hash=sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e \ + --hash=sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc \ + --hash=sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636 \ + --hash=sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4 \ + --hash=sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997 \ + --hash=sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b \ + --hash=sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2 \ + --hash=sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7 \ + --hash=sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66 \ + --hash=sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029 \ + --hash=sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880 \ + --hash=sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20 \ + --hash=sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024 \ + --hash=sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e \ + --hash=sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728 \ + --hash=sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6 \ + --hash=sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c \ + --hash=sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443 \ + --hash=sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a \ + --hash=sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37 \ + --hash=sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a \ + --hash=sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e \ + --hash=sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796 \ + --hash=sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df \ + --hash=sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8 \ + --hash=sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a \ + --hash=sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139 \ + --hash=sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954 +charset-normalizer==2.0.12; python_version >= "3" and python_full_version >= "3.6.0" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7") and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") \ + --hash=sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597 \ + --hash=sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df +chex==0.1.3; python_version >= "3.7" \ + --hash=sha256:5ac1dde599259f9dadc819bcd87b60c8bdfc58d732951eb94a2ba21a1aadb69e \ + --hash=sha256:2cfa6ccd02addd6b113658d03bd5ce8a7b3bd24fa62e746a246073414ea1e103 +cirq-core==0.11.0; python_full_version >= "3.6.0" \ + --hash=sha256:254b4fce12e47514c550e02ef56d8920767bcf114c856bce42500987c4c87ac7 +cirq-google==0.11.0; python_full_version >= "3.6.0" \ + --hash=sha256:59e1e09fb3b39e2a32baaa6a42ef574b9a216f947cc8bbb982f4fd688eb58312 +cirq==0.11.0; python_full_version >= "3.6.0" \ + --hash=sha256:51dbb4df677924a30b90f8b8f55253d643090826d072568384ed499600f57b6c +click==8.1.3; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48 \ + --hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e +colorama==0.4.4; platform_system == "Windows" and python_version >= "3.7" and python_full_version >= "3.6.1" and sys_platform == "win32" and python_full_version < "4.0.0" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7") and (python_version >= "3.8" and python_full_version < "3.0.0" and sys_platform == "win32" or sys_platform == "win32" and python_version >= "3.8" and python_full_version >= "3.5.0") and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7") \ + --hash=sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2 \ + --hash=sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b +cryptography==37.0.2; python_version >= "3.6" \ + --hash=sha256:ef15c2df7656763b4ff20a9bc4381d8352e6640cfeb95c2972c38ef508e75181 \ + --hash=sha256:3c81599befb4d4f3d7648ed3217e00d21a9341a9a688ecdd615ff72ffbed7336 \ + --hash=sha256:2bd1096476aaac820426239ab534b636c77d71af66c547b9ddcd76eb9c79e004 \ + --hash=sha256:31fe38d14d2e5f787e0aecef831457da6cec68e0bb09a35835b0b44ae8b988fe \ + --hash=sha256:093cb351031656d3ee2f4fa1be579a8c69c754cf874206be1d4cf3b542042804 \ + --hash=sha256:59b281eab51e1b6b6afa525af2bd93c16d49358404f814fe2c2410058623928c \ + --hash=sha256:0cc20f655157d4cfc7bada909dc5cc228211b075ba8407c46467f63597c78178 \ + --hash=sha256:f8ec91983e638a9bcd75b39f1396e5c0dc2330cbd9ce4accefe68717e6779e0a \ + --hash=sha256:46f4c544f6557a2fefa7ac8ac7d1b17bf9b647bd20b16decc8fbcab7117fbc15 \ + --hash=sha256:731c8abd27693323b348518ed0e0705713a36d79fdbd969ad968fbef0979a7e0 \ + --hash=sha256:471e0d70201c069f74c837983189949aa0d24bb2d751b57e26e3761f2f782b8d \ + --hash=sha256:a68254dd88021f24a68b613d8c51d5c5e74d735878b9e32cc0adf19d1f10aaf9 \ + --hash=sha256:a7d5137e556cc0ea418dca6186deabe9129cee318618eb1ffecbd35bee55ddc1 \ + --hash=sha256:aeaba7b5e756ea52c8861c133c596afe93dd716cbcacae23b80bc238202dc023 \ + --hash=sha256:95e590dd70642eb2079d280420a888190aa040ad20f19ec8c6e097e38aa29e06 \ + --hash=sha256:1b9362d34363f2c71b7853f6251219298124aa4cc2075ae2932e64c91a3e2717 \ + --hash=sha256:e53258e69874a306fcecb88b7534d61820db8a98655662a3dd2ec7f1afd9132f \ + --hash=sha256:1f3bfbd611db5cb58ca82f3deb35e83af34bb8cf06043fa61500157d50a70982 \ + --hash=sha256:419c57d7b63f5ec38b1199a9521d77d7d1754eb97827bbb773162073ccd8c8d4 \ + --hash=sha256:dc26bb134452081859aa21d4990474ddb7e863aa39e60d1592800a8865a702de \ + --hash=sha256:3b8398b3d0efc420e777c40c16764d6870bcef2eb383df9c6dbb9ffe12c64452 \ + --hash=sha256:f224ad253cc9cea7568f49077007d2263efa57396a2f2f78114066fd54b5c68e +cycler==0.11.0; python_version >= "3.7" and python_full_version >= "3.6.0" \ + --hash=sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3 \ + --hash=sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f +debugpy==1.6.0; python_version >= "3.7" \ + --hash=sha256:eb1946efac0c0c3d411cea0b5ac772fbde744109fd9520fb0c5a51979faf05ad \ + --hash=sha256:e3513399177dd37af4c1332df52da5da1d0c387e5927dc4c0709e26ee7302e8f \ + --hash=sha256:5c492235d6b68f879df3bdbdb01f25c15be15682665517c2c7d0420e5658d71f \ + --hash=sha256:40de9ba137d355538432209d05e0f5fe5d0498dce761c39119ad4b950b51db31 \ + --hash=sha256:0d383b91efee57dbb923ba20801130cf60450a0eda60bce25bccd937de8e323a \ + --hash=sha256:1ff853e60e77e1c16f85a31adb8360bb2d98ca588d7ed645b7f0985b240bdb5e \ + --hash=sha256:8e972c717d95f56b6a3a7a29a5ede1ee8f2c3802f6f0e678203b0778eb322bf1 \ + --hash=sha256:a8aaeb53e87225141fda7b9081bd87155c1debc13e2f5a532d341112d1983b65 \ + --hash=sha256:132defb585b518955358321d0f42f6aa815aa15b432be27db654807707c70b2f \ + --hash=sha256:8ee75844242b4537beb5899f3e60a578454d1f136b99e8d57ac424573797b94a \ + --hash=sha256:a65a2499761d47df3e9ea9567109be6e73d412e00ac3ffcf74839f3ddfcdf028 \ + --hash=sha256:bd980d533d0ddfc451e03a3bb32acb2900049fec39afc3425b944ebf0889be62 \ + --hash=sha256:245c7789a012f86210847ec7ee9f38c30a30d4c2223c3e111829a76c9006a5d0 \ + --hash=sha256:0e3aa2368883e83e7b689ddff3cafb595f7b711f6a065886b46a96a7fef874e7 \ + --hash=sha256:72bcfa97f3afa0064afc77ab811f48ad4a06ac330f290b675082c24437730366 \ + --hash=sha256:30abefefd2ff5a5481162d613cb70e60e2fa80a5eb4c994717c0f008ed25d2e1 \ + --hash=sha256:4de7777842da7e08652f2776c552070bbdd758557fdec73a15d7be0e4aab95ce \ + --hash=sha256:7b79c40852991f7b6c3ea65845ed0f5f6b731c37f4f9ad9c61e2ab4bd48a9275 +decorator==5.1.1; python_version >= "3.8" \ + --hash=sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186 \ + --hash=sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330 +defusedxml==0.7.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7" \ + --hash=sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61 \ + --hash=sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69 +dill==0.3.5.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.7.0" and python_version >= "3.6" \ + --hash=sha256:33501d03270bbe410c72639b350e941882a8b0fd55357580fbc873fba0c59302 \ + --hash=sha256:d75e41f3eff1eee599d738e76ba8f4ad98ea229db8b085318aa2b3333a208c86 +dimod==0.10.17; python_version >= "3.7" \ + --hash=sha256:e6905cd9f618f596be7fbde191fb5faf0c4a5c3cfd0973616cb5238acceaa6ed \ + --hash=sha256:ef79a2fad076cf391bb0555aa8b9140678627fcde6b3cd4641e9bc7dbdb5a0bf \ + --hash=sha256:09a0b2ab51a26df9b1778590543efa094b4c4ac224ae9d79738d5a80f999e240 \ + --hash=sha256:b3e8a282f21d9abb0f3bf74c2adad2f158ce623eb82e0baedb8ab54757d081dc \ + --hash=sha256:9039dc9da6a6c0c6859a95bb72be095c010af788de3d8307d4123ecd093b3865 \ + --hash=sha256:3625e6ae26ae4d48d4254da401d7486a7de3767b508a49c1fa2c44f7218cd2f0 \ + --hash=sha256:23801a1325ee04edb8f320ab5eb0d01c0e41741535a218ed1f97663fb3d63d9b \ + --hash=sha256:b73a3848b49216863f0ad5b2b336c433cfe1b236b91f1ad941768afd0c780073 \ + --hash=sha256:c936bf332331580b480958ca67c48ab3c75b5047b470d65487a9b8482f581df2 \ + --hash=sha256:1be0121387b643ec62c2a9c353f38ff85938a2d374144881f8833691a6e89aea \ + --hash=sha256:b02cc56334585ba8286679be23cd6b002541c657c7f7c22d1f67df7a13725ab3 \ + --hash=sha256:90a021037413037d7672b4dcece95aafd356dcaa462e6a4ab44bf882431dde93 \ + --hash=sha256:65e947dd5378760f137b7c6dec3eb5678db074cf7240b5d64dd739ee1d93d020 \ + --hash=sha256:2154e25982dcdb0516e480e519b3e885ee10cdd682da3b8404acae8c623ce922 \ + --hash=sha256:e219404383ffb085e9971c9190bba7be755bd8435c8a3176cb1333aba5db1930 \ + --hash=sha256:24e01d57f87cc90f829274cb3e91411e7305f46bf6e27473afe3792d330d1899 \ + --hash=sha256:e2d79ef012eb76a3172dc674f8b6aabc53a6833a985b851996bd97b6c18910d5 \ + --hash=sha256:9297ae696e3ca294aaabb6608049d6348d918ef302a833fa30963c5d75b1f476 \ + --hash=sha256:aab9345dbe5c5cddc3cbef181ce7ec239cefd38c0ed11c673016916ddac317ba \ + --hash=sha256:db1509df46a1e1371e7949695f9ec5971e7cf78664666343f18a4023effd9675 +diskcache==5.4.0; python_version >= "3.7" \ + --hash=sha256:af3ec6d7f167bbef7b6c33d9ee22f86d3e8f2dd7131eb7c4703d8d91ccdc0cc4 \ + --hash=sha256:8879eb8c9b4a2509a5e633d2008634fb2b0b35c2b36192d89655dbde02419644 +dlx==1.0.4; python_version >= "3.6" \ + --hash=sha256:c9747656710125545e37c1b3d71df2b0f1fbfaf2029355c1f87beaa6ece5b6e8 \ + --hash=sha256:ef75bc9d590216ebde7d4811f9ae6b2d6c6dc2a54772d94ae13384dc517a5aae +dm-tree==0.1.7; python_version >= "3.7" \ + --hash=sha256:30fec8aca5b92823c0e796a2f33b875b4dccd470b57e91e6c542405c5f77fd2a \ + --hash=sha256:3fae437135b6cbbdd51e96488a35e78c3617defa0b65265e7e8752d506f933fd \ + --hash=sha256:d377bd621b485db42c4aeea0eabbd8f6274b89a9c338c2c1bf69a40c3b86a1fd \ + --hash=sha256:1410fa2f2cc8dc7c01386f4e93ddeeb56765574ffafb632a9b6bd96496195b10 \ + --hash=sha256:57edb6fbd88fcdd9908547cbf21045a9d663c0d9e5983dca7e6f9cf8b6584bb5 \ + --hash=sha256:9edc1783a08d87c4e130781f55cbd904d6a564f7cce7dfb63f9ef3bee8e38209 \ + --hash=sha256:98fce150ceebb0a818f0eace1616004031cfa5e3375f50599ad790ff52414ba9 \ + --hash=sha256:b4364fc9a5721a2b840ac8ea75b8f58b430bec9fdc8b99304d2aecb3cfe46b1b \ + --hash=sha256:a085f500b295a6bf439c538e9058c7798ecb8c7d0dc916291f3d8d79d6124d17 \ + --hash=sha256:f3e2bd9b9c05d1a0039f7c128d8b055c8a05708ef569cdbbeec0a2946e425bd4 \ + --hash=sha256:91c6240e47c9d80dbd7de5a29a2ca663143717a72c613130ba8ac4354fa741a9 \ + --hash=sha256:0f01743cc2247170e64798c6b4b31853717054bf9ceec47a1b1b8c2a4baf5792 \ + --hash=sha256:4992ac5c42af1d73042cd2d3af4e7892d3750e6c1bb8e5a4f81534aa6515f350 \ + --hash=sha256:20f24cad4decbf4c1f176a959d16e877c73df33b07d7d1f078a5b8abe72f79f8 \ + --hash=sha256:3166304411d14c50a5da1c583e24d6069b44de0c9e06479cb36cdf048a466945 \ + --hash=sha256:3b00885c21267934a3d3c68660811d3f891c9539fd53712f5b2423c6d74bf1e6 \ + --hash=sha256:7f1f3dca9d669f3c09654ff6d69cfafd86a7f967c3095405b2692ee8d8ef3cfd \ + --hash=sha256:51b9bdf1109b47cc22884b1919e6fe38edf28b5aa02e7c661bb760a0e7cf0157 \ + --hash=sha256:2a843608e078d1622ebb5e50962a8c718d3fa1ab9461b95a12395a803545b2f5 \ + --hash=sha256:7fa0740b7fbae2c3a43a3114a514891b5d6c383050828f36aa1816cf40f73a6a \ + --hash=sha256:1379a02df36e2bbff9819ceafa55ccd436b15af398803f781f372f8ead7ed871 \ + --hash=sha256:3ca0a58e219b7b0bc201fea4679971188d0a9028a2543c16803a84e8f8c7eb2c +docplex==2.23.222; python_version >= "3.6" \ + --hash=sha256:7395e97c41939288e0ce4f804c7092cf3874e33784549104281a7e94f7d2fb1e +docutils==0.16; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7" \ + --hash=sha256:0c5b78adfbf7762415433f5515cd5c9e762339e23369dbe8000d84a4bf4ab3af \ + --hash=sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc +dwave-cloud-client==0.10.1; python_version >= "3.7" \ + --hash=sha256:e69e33cfc3f6bb2f02daad0a3daa207e5348bf0355b01b5257da7b10549cf3e1 \ + --hash=sha256:c5f1d42a3ece4ca0e0e8ec7f6068c5ae674b177aac42d07b5612c8472eb18a01 +dwave-networkx==0.8.12; python_version >= "3.7" \ + --hash=sha256:291523bf3ac4f6a4481fbf079b2429239e261bed411ff97455f95a2cfeb58290 \ + --hash=sha256:74c44fdd24d41e73a4cad11034cf0de785efd508d21809f57794a08eb8f40658 +dwave-preprocessing==0.3.2; python_version >= "3.7" \ + --hash=sha256:f01f02ba5387117685afbf7d5c741a1a0ca78f99946fc24613cfac61bc85f694 \ + --hash=sha256:3032722767d1df7a3464eade807ba06286b0c63ad1da8fc57c094288b3b2a4e0 \ + --hash=sha256:18b194508ef699d3e8c86bf7da0cc5909cb98af33696424735a8af241217488f \ + --hash=sha256:d2be59080cb269e604c071468d500c1660d1c620c85fbc4ccf3be6c92771c36c \ + --hash=sha256:0ea0f3a0accba91f0da9cc72d3082708c06ec9ef64ecc16ee33ad9ab1b75209c \ + --hash=sha256:c950025ea2f87bfa7f91853a9955e057253dfcd701afad437fcc879b69181f55 \ + --hash=sha256:c75b651e457e5a4e2b6487c4bf52421ae498ec787e789a8f05da5d0e3ba124cd \ + --hash=sha256:186ef534b755326b9d9b65d2dbe8e591b47fc0d0440b0140f5f3c9b39334b370 \ + --hash=sha256:a7cb3c317535a3520649610d34d4cc325d07fbefb915153622b4f7d5798b134b \ + --hash=sha256:dbeef697934733e3bb4ec661228de33f8c58179f768be3da7f48a1f8d7623a91 \ + --hash=sha256:a149194d548fa7f901a6709364ce8c5790b0912e07fe1205432dc0693666993e \ + --hash=sha256:507b5f9d779f83cec2b9bc8cd14971be67b081757eb9cd06ea3290b6b23ce1de \ + --hash=sha256:5d91d298693d1e20ca4f9517fe693d7b09835c7f6abe35dca60c358de044bc46 \ + --hash=sha256:556668f06cf5e56423012a9e59f8f51bf6f360b9c7297c629d79f3c9dfa8eac4 \ + --hash=sha256:c459ca0881666101a78abcdb05b2af63d0c97d1feae85b5e225d2a7e7405416b \ + --hash=sha256:1682744b2ea51723beba6c5eac1aabd1840580f48070bb0f6d8d0eee9dd33996 \ + --hash=sha256:fde76420b0f5ff0249c65651c50ff0c941a442f8a04f63fa20fd01667172d00a \ + --hash=sha256:38c05e5a29fe1cc4c386045481a4aa07564bd0447c42e276e71459c72eff5753 \ + --hash=sha256:f3f29f754a91a291bb0f793cf6066d23638e53335a8d4b1dd77f6262e13129a2 \ + --hash=sha256:a523351a95bf4e22c0724177ba587f3107755cdd4556046962cf5cdc1515272b \ + --hash=sha256:587499d0bcabf30bd7310ec3fb9f3177f84982c1843442cdf521452ab9d67209 \ + --hash=sha256:9f7256607a54465bcd844d83aae5f19a4730eed56dc4eda8ccffccbcf0efe42a \ + --hash=sha256:59a00241094ca744cb74c4d1a411928890118da9618993d76128c65859dd0091 \ + --hash=sha256:0fe8bad4f6b05980a6f0c58e45020a05da14569bf6ff9f860825464de1198cee +dwave-system==1.15.0; python_version >= "3.7" \ + --hash=sha256:1f2a613522b840cc27cbd65fbc3427c4992d5a9353a5648469b73b1a5f760bd4 \ + --hash=sha256:a04ad60830ad11ef668e25056b834180b99d7146c7dbc4623d341b75d7ce37c5 +dwave-tabu==0.4.5; python_version >= "3.7" \ + --hash=sha256:110884dd5e68bb7c9a8e6813d5d1f220819ea6b49f3654e5e07e5f4b697c0ee0 \ + --hash=sha256:fbd20267e3162b7398a6d8eb5c677250978cea5cb8e928ae50f0aecb4e0d2b74 \ + --hash=sha256:57122ed151b108cd87c55e2caa09027a8ff4a4b8651d4837a078d4064205ddcf \ + --hash=sha256:cb0a044a8f5b2396bd6014e0580039304127c9107c1b5288b2ae04a10170a998 \ + --hash=sha256:a8efd04de5f68828dbba053ae99024979a8bae4f4d244845de3269144fbf15d4 \ + --hash=sha256:841d7132fb493fa01f4cb15d8e40306e3201f07669916739269281afed4e913e \ + --hash=sha256:a691677f0ac1390ffe226965769e29d0b08f1bfb8539f5b9fce5b99a851afec3 \ + --hash=sha256:c8e156baa3cbc0498da3c4c54228943b14fa90664cad424ee18378f9aa5d4593 \ + --hash=sha256:efc7faa84cb4af69b8c02a51adb15764f920ebede3c3a2913d92d1881574f5d1 \ + --hash=sha256:26bb0c1b8dc952e6be39158906ecb24b2ee1436cb51c611ac5261bd29741a657 \ + --hash=sha256:9ecae8bfe28e8bf9a37e846655cf3db06fe2be304ac4a72289a723892eb5dbcd \ + --hash=sha256:c253a4cffdd2b6e0834895db106682642045d3eea0d747fd6aed6845299bde07 \ + --hash=sha256:2fcb9b3810c7c3fc2940c1b713c62f40d6f9f054b0e4616d514a21a92640e397 \ + --hash=sha256:eaf12cd6d199436b95889cfc0a6fd82457da760625264fe9069a8a5ef159c1c0 \ + --hash=sha256:5261850c0baabbf08d5a8683bfc120135902da5e7049366247462693f2c95118 \ + --hash=sha256:4416da7ea5afd0358644ae540d38ec47d8bad4beef6d8dc27874ab09564a7ecf \ + --hash=sha256:88c5d3b2e0a0b46e057b2d2bc8fa28fdbd00429b6cef33d634b750b0a3a53eaf \ + --hash=sha256:b7ea10e90ec3c6d14a6567af6b51b8fbc430f2f74445718259d2c0ea7006ed93 \ + --hash=sha256:635f4b6a9bf98dcd00bc5c85a3433f19e0dc503ceedb0e19509809ece38909e2 +dwavebinarycsp==0.1.4; python_version >= "3.6" \ + --hash=sha256:3a88399a154a64cffec5932f3e8ad3a88c0b14ee8bb54085dfe0c8a5c676ccdb \ + --hash=sha256:55c1ec625889f1b784687c7646c5ad9093b2f2bf2be8758ff54e5aba1a266d41 +entrypoints==0.4; python_full_version >= "3.7.0" and python_version >= "3.7" \ + --hash=sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f \ + --hash=sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4 +executing==0.8.3; python_version >= "3.8" \ + --hash=sha256:d1eef132db1b83649a3905ca6dd8897f71ac6f8cac79a7e58a1a09cf137546c9 \ + --hash=sha256:c6554e21c6b060590a6d3be4b82fb78f8f0194d809de5ea7df1c093763311501 +fastdtw==0.3.4; python_version >= "3.6" \ + --hash=sha256:28918c163dce9e736e09252a02073fce712bc4c7aa18f2a45d882cca84da2dbb \ + --hash=sha256:2350fa6ec36bcad186eaf81f46eff35181baf04e324f522de8aeb43d0243f64f +fasteners==0.17.3; python_version >= "3.7" \ + --hash=sha256:cae0772df265923e71435cc5057840138f4e8b6302f888a567d06ed8e1cbca03 \ + --hash=sha256:a9a42a208573d4074c77d041447336cf4e3c1389a256fd3e113ef59cf29b7980 +fastjsonschema==2.15.3; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:ddb0b1d8243e6e3abb822bd14e447a89f4ab7439342912d590444831fa00b6a0 \ + --hash=sha256:0a572f0836962d844c1fc435e200b2e4f4677e4e6611a2e3bdd01ba697c275ec +flatbuffers==2.0; python_version >= "3.7" \ + --hash=sha256:3751954f0604580d3219ae49a85fafec9d85eec599c0b96226e1bc0b48e57474 \ + --hash=sha256:12158ab0272375eab8db2d663ae97370c33f152b27801fa6024e1d6105fd4dd2 +flax==0.4.2; python_version >= "3.7" \ + --hash=sha256:37a3293d79cf7b49ca97e2f8fb99b92949013413474e0f059d3b44eec79b5c5a \ + --hash=sha256:65d3474570f0e23d9e3cf0650a47edbc937695f276445f877addfaf5ed61913f +fonttools==4.33.3; python_version >= "3.7" and python_full_version >= "3.6.0" \ + --hash=sha256:f829c579a8678fa939a1d9e9894d01941db869de44390adb49ce67055a06cc2a \ + --hash=sha256:c0fdcfa8ceebd7c1b2021240bd46ef77aa8e7408cf10434be55df52384865f8e +future==0.18.2; python_version >= "2.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" \ + --hash=sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d +gast==0.4.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" \ + --hash=sha256:b7adcdd5adbebf1adf17378da5ba3f543684dbec47b1cda1f3997e573cd542c4 \ + --hash=sha256:40feb7b8b8434785585ab224d1568b857edb18297e5a3047f1ba012bc83b42c1 +gitdb==4.0.9; python_version >= "3.7" \ + --hash=sha256:8033ad4e853066ba6ca92050b9df2f89301b8fc8bf7e9324d412a63f8bf1a8fd \ + --hash=sha256:bac2fd45c0a1c9cf619e63a90d62bdc63892ef92387424b855792a6cabe789aa +gitpython==3.1.27; python_version >= "3.7" \ + --hash=sha256:5b68b000463593e05ff2b261acff0ff0972df8ab1b70d3cdbd41b546c8b8fc3d \ + --hash=sha256:1c885ce809e8ba2d88a29befeb385fcea06338d3640712b59ca623c220bb5704 +google-api-core==1.21.0; python_full_version >= "3.6.0" \ + --hash=sha256:fea9a434068406ddabe2704988d24d6c5bde3ecfc40823a34f43892d017b14f6 \ + --hash=sha256:7b65e8e5ee59bd7517eab2bf9b3008e7b50fd9fb591d4efd780ead6859cd904b +google-auth-oauthlib==0.4.6; python_version >= "3.6" \ + --hash=sha256:a90a072f6993f2c327067bf65270046384cda5a8ecb20b94ea9a687f1f233a7a \ + --hash=sha256:3f2a6e802eebbb6fb736a370fbf3b055edcb6b52878bf2f26330b5e041316c73 +google-auth==1.18.0; python_full_version >= "3.6.0" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") \ + --hash=sha256:d6b390d3bb0969061ffec7e5766c45c1b39e13c302691e35029f1ad1ccd8ca3b \ + --hash=sha256:5e3f540b7b0b892000d542cea6b818b837c230e9a4db9337bb2973bcae0fc078 +google-pasta==0.2.0 \ + --hash=sha256:c9f2c8dfc8f96d0d5808299920721be30c9eec37f2389f28904f454565c8a16e \ + --hash=sha256:4612951da876b1a10fe3960d7226f0c7682cf901e16ac06e473b267a5afa8954 \ + --hash=sha256:b32482794a366b5366a32c92a9a9201b107821889935a02b3e51f6b432ea84ed +googleapis-common-protos==1.52.0; python_full_version >= "3.6.0" \ + --hash=sha256:560716c807117394da12cecb0a54da5a451b5cf9866f1d37e9a5e2329a665351 \ + --hash=sha256:c8961760f5aad9a711d37b675be103e0cc4e9a39327e0d6d857872f698403e24 +greenlet==1.1.2; python_version >= "3" and python_full_version < "3.0.0" and (platform_machine == "aarch64" or platform_machine == "ppc64le" or platform_machine == "x86_64" or platform_machine == "amd64" or platform_machine == "AMD64" or platform_machine == "win32" or platform_machine == "WIN32") and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7") or python_version >= "3" and (platform_machine == "aarch64" or platform_machine == "ppc64le" or platform_machine == "x86_64" or platform_machine == "amd64" or platform_machine == "AMD64" or platform_machine == "win32" or platform_machine == "WIN32") and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7") and python_full_version >= "3.5.0" \ + --hash=sha256:58df5c2a0e293bf665a51f8a100d3e9956febfbf1d9aaf8c0677cf70218910c6 \ + --hash=sha256:aec52725173bd3a7b56fe91bc56eccb26fbdff1386ef123abb63c84c5b43b63a \ + --hash=sha256:833e1551925ed51e6b44c800e71e77dacd7e49181fdc9ac9a0bf3714d515785d \ + --hash=sha256:aa5b467f15e78b82257319aebc78dd2915e4c1436c3c0d1ad6f53e47ba6e2713 \ + --hash=sha256:40b951f601af999a8bf2ce8c71e8aaa4e8c6f78ff8afae7b808aae2dc50d4c40 \ + --hash=sha256:95e69877983ea39b7303570fa6760f81a3eec23d0e3ab2021b7144b94d06202d \ + --hash=sha256:356b3576ad078c89a6107caa9c50cc14e98e3a6c4874a37c3e0273e4baf33de8 \ + --hash=sha256:8639cadfda96737427330a094476d4c7a56ac03de7265622fcf4cfe57c8ae18d \ + --hash=sha256:97e5306482182170ade15c4b0d8386ded995a07d7cc2ca8f27958d34d6736497 \ + --hash=sha256:e6a36bb9474218c7a5b27ae476035497a6990e21d04c279884eb10d9b290f1b1 \ + --hash=sha256:abb7a75ed8b968f3061327c433a0fbd17b729947b400747c334a9c29a9af6c58 \ + --hash=sha256:b336501a05e13b616ef81ce329c0e09ac5ed8c732d9ba7e3e983fcc1a9e86965 \ + --hash=sha256:14d4f3cd4e8b524ae9b8aa567858beed70c392fdec26dbdb0a8a418392e71708 \ + --hash=sha256:17ff94e7a83aa8671a25bf5b59326ec26da379ace2ebc4411d690d80a7fbcf23 \ + --hash=sha256:9f3cba480d3deb69f6ee2c1825060177a22c7826431458c697df88e6aeb3caee \ + --hash=sha256:fa877ca7f6b48054f847b61d6fa7bed5cebb663ebc55e018fda12db09dcc664c \ + --hash=sha256:7cbd7574ce8e138bda9df4efc6bf2ab8572c9aff640d8ecfece1b006b68da963 \ + --hash=sha256:903bbd302a2378f984aef528f76d4c9b1748f318fe1294961c072bdc7f2ffa3e \ + --hash=sha256:049fe7579230e44daef03a259faa24511d10ebfa44f69411d99e6a184fe68073 \ + --hash=sha256:dd0b1e9e891f69e7675ba5c92e28b90eaa045f6ab134ffe70b52e948aa175b3c \ + --hash=sha256:7418b6bfc7fe3331541b84bb2141c9baf1ec7132a7ecd9f375912eca810e714e \ + --hash=sha256:f9d29ca8a77117315101425ec7ec2a47a22ccf59f5593378fc4077ac5b754fce \ + --hash=sha256:21915eb821a6b3d9d8eefdaf57d6c345b970ad722f856cd71739493ce003ad08 \ + --hash=sha256:eff9d20417ff9dcb0d25e2defc2574d10b491bf2e693b4e491914738b7908168 \ + --hash=sha256:b8c008de9d0daba7b6666aa5bbfdc23dcd78cafc33997c9b7741ff6353bafb7f \ + --hash=sha256:32ca72bbc673adbcfecb935bb3fb1b74e663d10a4b241aaa2f5a75fe1d1f90aa \ + --hash=sha256:f0214eb2a23b85528310dad848ad2ac58e735612929c8072f6093f3585fd342d \ + --hash=sha256:b92e29e58bef6d9cfd340c72b04d74c4b4e9f70c9fa7c78b674d1fec18896dc4 \ + --hash=sha256:fdcec0b8399108577ec290f55551d926d9a1fa6cad45882093a7a07ac5ec147b \ + --hash=sha256:93f81b134a165cc17123626ab8da2e30c0455441d4ab5576eed73a64c025b25c \ + --hash=sha256:1e12bdc622676ce47ae9abbf455c189e442afdde8818d9da983085df6312e7a1 \ + --hash=sha256:8c790abda465726cfb8bb08bd4ca9a5d0a7bd77c7ac1ca1b839ad823b948ea28 \ + --hash=sha256:f276df9830dba7a333544bd41070e8175762a7ac20350786b322b714b0e654f5 \ + --hash=sha256:8c5d5b35f789a030ebb95bff352f1d27a93d81069f2adb3182d99882e095cefe \ + --hash=sha256:64e6175c2e53195278d7388c454e0b30997573f3f4bd63697f88d855f7a6a1fc \ + --hash=sha256:b11548073a2213d950c3f671aa88e6f83cda6e2fb97a8b6317b1b5b33d850e06 \ + --hash=sha256:9633b3034d3d901f0a46b7939f8c4d64427dfba6bbc5a36b1a67364cf148a1b0 \ + --hash=sha256:eb6ea6da4c787111adf40f697b4e58732ee0942b5d3bd8f435277643329ba627 \ + --hash=sha256:f3acda1924472472ddd60c29e5b9db0cec629fbe3c5c5accb74d6d6d14773478 \ + --hash=sha256:e859fcb4cbe93504ea18008d1df98dee4f7766db66c435e4882ab35cf70cac43 \ + --hash=sha256:00e44c8afdbe5467e4f7b5851be223be68adb4272f44696ee71fe46b7036a711 \ + --hash=sha256:ec8c433b3ab0419100bd45b47c9c8551248a5aee30ca5e9d399a0b57ac04651b \ + --hash=sha256:2bde6792f313f4e918caabc46532aa64aa27a0db05d75b20edfc5c6f46479de2 \ + --hash=sha256:288c6a76705dc54fba69fbcb59904ae4ad768b4c768839b8ca5fdadec6dd8cfd \ + --hash=sha256:8d2f1fb53a421b410751887eb4ff21386d119ef9cde3797bf5e7ed49fb51a3b3 \ + --hash=sha256:166eac03e48784a6a6e0e5f041cfebb1ab400b394db188c48b3a84737f505b67 \ + --hash=sha256:572e1787d1460da79590bf44304abbc0a2da944ea64ec549188fa84d89bba7ab \ + --hash=sha256:be5f425ff1f5f4b3c1e33ad64ab994eed12fc284a6ea71c5243fd564502ecbe5 \ + --hash=sha256:b1692f7d6bc45e3200844be0dba153612103db241691088626a33ff1f24a0d88 \ + --hash=sha256:7227b47e73dedaa513cdebb98469705ef0d66eb5a1250144468e9c3097d6b59b \ + --hash=sha256:7ff61ff178250f9bb3cd89752df0f1dd0e27316a8bd1465351652b1b4a4cdfd3 \ + --hash=sha256:0051c6f1f27cb756ffc0ffbac7d2cd48cb0362ac1736871399a739b2885134d3 \ + --hash=sha256:f70a9e237bb792c7cc7e44c531fd48f5897961701cdaa06cf22fc14965c496cf \ + --hash=sha256:013d61294b6cd8fe3242932c1c5e36e5d1db2c8afb58606c5a67efce62c1f5fd \ + --hash=sha256:e30f5ea4ae2346e62cedde8794a56858a67b878dd79f7df76a0767e356b1744a +grpcio==1.46.3; python_full_version >= "3.6.0" and python_version >= "3.6" \ + --hash=sha256:4c05dbc164c2d3015109292ffeed68292807a6cb1225f9a36699bf2166634908 \ + --hash=sha256:c6a460b6aaf43428d48fececad864cc562458b944df80568e490d985d8576292 \ + --hash=sha256:707b85fa0cf606a9ab02246bd3142c76e154f1c30f00f7346b2afa3d0b315d5a \ + --hash=sha256:8c63e7c61c0b06f838e8f45ffd3a7c68a520c4c026b2e0e8b1ad29c456d0f859 \ + --hash=sha256:c6fe85e5873d9784ab82cf261d9fc07ed67a4459ba69fbe1187ef8b8e3d9e30e \ + --hash=sha256:df980c4901a92ca649e18036ff67c7c8cad239b2759c2472694f7ab0f0b4ffb9 \ + --hash=sha256:7b59982e405159385d5796aa1e0817ec83affb3eb4c2a5b7ca39413d17d7e332 \ + --hash=sha256:6d51fa98bd40d4593f819a3fec8a078a192958d24f84c3daf15b5ad7705d4c48 \ + --hash=sha256:e9bba429eb743471715e6dadf006a70a77cb6afb065aa4a6eaa9efd76b09e336 \ + --hash=sha256:a898b0f13bda2dfe786952cc1ea705762fa6c3ae799b4bb0525d7821605ae968 \ + --hash=sha256:9014aee70e29911008d2f388011cabf2c7fe4fe29918ce5f71513a660494069a \ + --hash=sha256:9c97106134de70f8323b12738ac0adf0615688b69253002910d0c5d42d202a77 \ + --hash=sha256:d41ea8efb87b1ae4e576b13d94f2b470297a1495ae6b2c9d1047952731bf168f \ + --hash=sha256:ab18e85082003d7883a4d069065436e61cb27c2c2150e7965ce93658f17bc8da \ + --hash=sha256:307ff1d6237d5c383196660a12db021c20280227f9f4423d88d6b2ab20c8b1d0 \ + --hash=sha256:8c9106ef35239767b3aa9dc1a79856ad499655f853fca9f92f9dd3182d646627 \ + --hash=sha256:e0ae8e8523308bf7ab0b7d6aa686011de59b19fb06abb253f302d0b5da2a5905 \ + --hash=sha256:4fd0aa30a938893060defd5f222604461db55f9a81a028b154479b91deac7074 \ + --hash=sha256:f7637b55662e56a64c07846bc0d2da6232a6e893b22c39790f2e41d03ac1a826 \ + --hash=sha256:97801afa96a819f911d030b490dbea95b246de02433bac69c5acf150081686e4 \ + --hash=sha256:3585a6fa3d97fc8f030bbf0e88185b5eb345a340f6732e165d5c22df54de5bc6 \ + --hash=sha256:dc6d15cbcceaebaacf2994280ed1c01d42b5772059b30afd8a76152e9d23daa4 \ + --hash=sha256:e0486485d59d5865149010966ef3df99c5df97ab8b01f10e26f8759d6e10fafc \ + --hash=sha256:5210ec7a1638daa61da16487fbfafb3dbb7b8cd44382d9262316bbb58a5b1cf7 \ + --hash=sha256:e278fa30d2b5652f7e43970c86ad34c639146443553678b746909aae204924dc \ + --hash=sha256:7d4148f1f76516b01cccf2273b45bc706847f1560ccb55aa6e29df851e9ca8cc \ + --hash=sha256:01f3f7a6cdb111cf276ffff9c892fa32624e03999bac809d3f3d8321d98b6855 \ + --hash=sha256:91aaccbe1c035ad2bcd1b8a25cebd11839070eb70fb6573e9d0197ddbca5d96b \ + --hash=sha256:26136c19d96e2138f04412101f3730d66f5f1515dc912ac0d415587c8208d826 \ + --hash=sha256:a8f40dafcdc3e0e378387953528eaf4e35758161f3b10d96199f12b11afbe2c2 \ + --hash=sha256:a6bb52df85a4bd6d3bad16b4e7cc43efe95469b74a856c87a2c5bef496c9147f \ + --hash=sha256:2334ceeab4084e80433693451452cba26afc1607a7974133af3b3635fc8aa935 \ + --hash=sha256:2c96a6103caec84985bb2cffac2b261f8cac2641e7a70d4b43b7d08754a6cfe7 \ + --hash=sha256:7a39d39da8855b03be2d7348387986bab6a322031fcc8b04fa5e72355e7b13a1 \ + --hash=sha256:4caf87a06de88e3611a4610c57ef55b78801843d1f5a9e5fd6b75e887dad3340 \ + --hash=sha256:ffbbb228e6fc6f85b34aac428eb76b4fc6591d771e487ce46eb16b4b7e18b91d \ + --hash=sha256:0c89ae010c57333dd3c692e0892199a59df1ddfd467cdfea31f98331d0e8cf87 \ + --hash=sha256:34b206cdf78dd1c14d93e10e7308750c36b4e6754d579895cba74341875e2fb5 \ + --hash=sha256:a19b3ecdb8ddf60e4b034def27636065e49ac1ee3c85854a16353cf52c2afd83 \ + --hash=sha256:aac6e66acae82be5c99a0a40ab8f5733d7df76a04f242cf42ecc34cfb1e947bd \ + --hash=sha256:aff6d961d6bc5e34e12e148383671f8da5d17e47ed606ec15f483def3053b206 \ + --hash=sha256:71d46c2f3c0512bac3d658af3193e3d645c96123af56bd07a8416474c69df2cf \ + --hash=sha256:5969f63f3cf92538f83f26949d393d9fc59de670f47cf7c2a0e1e0d30b770294 \ + --hash=sha256:5f8134d4a7e76c8c6644bd3ce728b9894933575155d02c09922986d5d8d6e48c \ + --hash=sha256:53fff69fd4d315adddda226e7b71804d1f12adf3a4162126dc520725624a483a \ + --hash=sha256:3af2cc4e41f87d3b57f624b1b14321c1d0f030b191da60f9eeeda5448d83240c \ + --hash=sha256:5fb7779ae01c20c4fad5831e98003b3f036acfe6b77697d6a9baa0f9a7f14daf \ + --hash=sha256:56636ebf8db63ba50d272dfd73c92538950525120311676246f8f6a81b0aa144 \ + --hash=sha256:0a5012ba00cf8b7ce9e6ac2312ace0b0e16fe9502c18340c8c3ecb734a759831 \ + --hash=sha256:be1679d814a292a701f45df324e25b060435dd13159e9b08a16e2a2396c4391c \ + --hash=sha256:4faaba7db078a0001a8c1a4370d56dc454c03b4613b6acec01f14b90c8dd03cf \ + --hash=sha256:f5c6393fa645183ae858ebfbf72ab94e7ebafb5cd849dcf4ae8c53a83cce4e24 \ + --hash=sha256:158b90d4f1354f40e435f4c866057acc29a4364b214c31049c8b8c903646fbab \ + --hash=sha256:4b8fd8b1cd553635274b83cd984f0755e6779886eca53c1c71d48215962eb689 +h5py==3.2.1; python_version >= "3.7" \ + --hash=sha256:6766104ed13ff40b3b7bfd49f13fced5274103ee9af53667e7a97c5236b14741 \ + --hash=sha256:4160cb0d35a83c6fb9f1cad65e826dfaeb044e001549ea78003573fb6bee4042 \ + --hash=sha256:fdabe99139a9c5e1a416b7ed38c89505f8501b376d54496e1bb737cb33df61cf \ + --hash=sha256:d8467fa56356ad2efad2b5986326e71d4d74505de6f6c7bb46dbba09b37459ac \ + --hash=sha256:a6632ac11167bbad1a8fc5c82508b97ab8c12bdfe4b659254b6f7f63d3c76744 \ + --hash=sha256:90ee8a00aca5c4e0bbd821c1f6118cb9a814c15dcfdb03572c615a4431166480 \ + --hash=sha256:25294f2690c4813475f566663a21ef1c1b11ef892b26d46454bf0a59e507d5aa \ + --hash=sha256:d791b710d3e54c4d2c32cb881b183db5674ceb03bf6a0c1f3fb3cf50d8997e0a \ + --hash=sha256:7c5b5f18c96fb63399280a724734fd91e1781c6b60e385e439ad8e654a294ba4 \ + --hash=sha256:89474be911bfcdb34cbf0d98b8ec48b578c27a89fdb1ae4ee7513f1ef8d9249e +homebase==1.0.1; python_version >= "3.7" \ + --hash=sha256:d64c97f60a8ddd94ce8702bac65ed5d1996aca01a17d1e53e6ad5149e2f8b5b5 \ + --hash=sha256:9ee008df4298b420852d815e6df488822229c4bd8d571bcd0a454e04232c635e +idna==3.3; python_version >= "3.7" and python_full_version >= "3.6.2" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7") and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") \ + --hash=sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff \ + --hash=sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d +igraph==0.9.10; python_version >= "3.7" \ + --hash=sha256:d5199f79a7400cbb32972ebe790522c1c6ed6c7418bee25a0f995e71e3e349e0 \ + --hash=sha256:e1dd5fad54c4f421dd94b5f436b1d1894fe35e1e62ff4a36d6aefe1439dd4150 \ + --hash=sha256:7e2043de85a3b0361d22b02fe63f8447d4ecb47de9f456e0352c2a226dde65cb \ + --hash=sha256:cb9a4daf03e3d5f85cb6ee99e3ef780a471ab116feefba4d274d9ffa52d3b540 \ + --hash=sha256:ffa73c18e1602cb55574ad166bc40f8dd0077fcef6343ad557c7255845206a85 \ + --hash=sha256:22a548a65c4d44831ca423693fce7075005ff63d9d2557223665a202b03f357b \ + --hash=sha256:50dd0ffc00bf9bd6d0461943419bf2d855aa140e81dc44312143c450497b4f73 \ + --hash=sha256:6f4f8727f514b9f6e27c0201052fadd62cc5aba7897f36d9940bae01d35acd50 \ + --hash=sha256:cfc3da82460bf80167c2d77794dcd7d9aad91ae4a68aa5a696c6f1b10aa85992 \ + --hash=sha256:9a283469dfcd2c6ae7d4884affda3d7351a086b710477f494581cbeebc3da791 \ + --hash=sha256:89f9db14d8074b8828ab4194039fc0f09c38888ee5e041775859a578d0b26c25 \ + --hash=sha256:f27e317fac5015593237da87c8410cae15a4f118d577aba60328c579f62a0fce \ + --hash=sha256:7d806b1464f302b01b20c7e96c39ea98673686cfd1796c3d4ec715b1bee39090 \ + --hash=sha256:2e8003527a9a3b4311e91067e20f4a27d37b0df3521c46deb30f1ec511a02296 \ + --hash=sha256:dec379021c4d7957f20699ae04703915641bc69c7330c36f2b06b521da205334 \ + --hash=sha256:ee8d8bdc4105d452e7ddd7df5f41cd713666cff103601d0b03cf175b0051d958 \ + --hash=sha256:2e739524b63b436d53ee95d99e60ade7d7eb8f8942ec4d74fd1873fc721afbaa \ + --hash=sha256:af5b2dd8263d976b39d41c8c822dae58e9cea66cc6faf9d145249328cafbec1e \ + --hash=sha256:b783d8402560c20cd2d0dd1ed73efe9f4c0e9fe2f44b3a1f68c4920a6ee9b98d \ + --hash=sha256:d5ecccf55c6c4d06597852572f81c82d4cf02ace442c7c022b8cdabce7fec790 \ + --hash=sha256:6998cc0a4afe5cb4eebea38c9e002d1102e829bfb33e1424db2957aaff117fd9 \ + --hash=sha256:031cc41e0dd2a655a6db7bc2e7a431690164b8de3f3a87ff9d90d510b4005c5e \ + --hash=sha256:8e9d288d8e833c76ba828fa507effcfc6ca3e8538da4875d666be0953be85bdb \ + --hash=sha256:f058b17b998793c0f984e076e97b4e147aa23fb98c3ea4b8d4086d27e77b421c \ + --hash=sha256:5ab168405bde6e428895d93cec98731b2ca6ca0daae6ff81873a2fd8891494e5 \ + --hash=sha256:5b55aba74f60ba82b7cfc758e4a0bc48dc47e9ab60cd8317f893f59df695e131 \ + --hash=sha256:83b788b90cee349d53b75aa8c4ff3f8d31c151dc555e30df033c0c52b93bf7d6 \ + --hash=sha256:444701536c27812f6442bd47904d0da1506dc4db913e6dddf12579d9f97282c8 \ + --hash=sha256:e866a287609755c81510d1c3fc29248874d3bc3e0ea344f2479abf05cba5afb0 \ + --hash=sha256:06cf7a2e4bf4fe469f727b891d5a5e712637645d4724c7dc786c115b231f507e \ + --hash=sha256:3ebdce56f872fabed9d3455753fbc762f58fdfc36b6a19420ab632fcc2b6f7eb \ + --hash=sha256:ca3a105ad48be4ad56e6a0b7b8f7d7afcc3d7fc3cbb0e5ed4f74a995ad657011 \ + --hash=sha256:326edb7c143d5543c57922e7d28ed943df424cbea73789c61f13ccd964fa992a \ + --hash=sha256:f9cdf627e9924b02f2108183cc2aa100700cefa8fbbbcf22a0365fad64212ea6 \ + --hash=sha256:8f4fda37e968cf9d0742e469be2fe7c0a323630d8e8de1eace551a71aeddb453 \ + --hash=sha256:fc806d2b5f75577037d9d5578b5d0d679b4d2e3e4240a752c9512ebc5c4dfd32 \ + --hash=sha256:3a7a66142222769c7b4cba8b082d1d8bee58dfa075aba5ade0d2d477b9e35125 \ + --hash=sha256:0cb10202c00356467be0ff9606426b2937fb1afa14c6b66deddcea78d2ddd309 \ + --hash=sha256:25b802e3d12c653d7a8bf97af31d749895f636002c63856c743f39033a53ef4d \ + --hash=sha256:cf100439c385df8551ab89ad98a41ae0ec47eea248c4de0b1553951c50dfdd98 \ + --hash=sha256:1c7b188f84c11b1ec93fd10ee702b5bed285b1c0c3e81a4bafd591c72cde32b5 \ + --hash=sha256:0cdd473ce627ac3d8744555f1b84a61ef94c47a9337433ac2de03118befbf3be \ + --hash=sha256:6fe02d59d7190b3676cbd7e553c9f7f13b5a50c4be2d424f980259ce3ad4aa9e \ + --hash=sha256:8101ba1f83190eeec0c078a497fb06b77e750792219f68dc5d3a416ae79c7b97 \ + --hash=sha256:bbb33d124e5680eaeb76fab45424ee5faa0f9dfe8f54d51a3c6e9ec37b01afa3 \ + --hash=sha256:9317fb9bcc37a92bd69e056e269e949e7a07d71c36fc4f5cc0bb41ae68aa71cd \ + --hash=sha256:6f9d8e1d6105b34298591820e94d4d8b3f33f38068523769e7a555bf7c96accb +imagesize==1.3.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ + --hash=sha256:1db2f82529e53c3e929e8926a1fa9235aa82d0bd0c580359c67ec31b2fddaa8c \ + --hash=sha256:cd1750d452385ca327479d45b64d9c7729ecf0b3969a58148298c77092261f9d +importlib-metadata==4.11.4; python_full_version >= "3.6.1" and python_full_version < "4.0.0" and python_version >= "3.7" and python_version < "3.10" \ + --hash=sha256:c58c8eb8a762858f49e18436ff552e83914778e50e9d2f1660535ffb364552ec \ + --hash=sha256:5d26852efe48c0a32b0509ffbc583fda1a2266545a78d104a6f4aff3db17d700 +importlib-resources==5.7.1; python_version < "3.9" and python_version >= "3.7" \ + --hash=sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8 \ + --hash=sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3 +inflection==0.5.1; python_version >= "3.6" \ + --hash=sha256:f38b2b640938a4f35ade69ac3d053042959b62a0f1076a5bbaa1b9526605a8a2 \ + --hash=sha256:1a29730d366e996aaacffb2f1f1cb9593dc38e2ddd30c91250c6dde09ea9b417 +ipykernel==6.13.1; python_version >= "3.7" \ + --hash=sha256:fedc79bebd8a438162d056e0c7662d5ac8a47d1f6ef33a702e8460248dc4517f \ + --hash=sha256:6f42070a5d87ecbf4a2fc27a7faae8d690fd3794825a090ddf6b00b9678a5b69 +ipython-genutils==0.2.0; python_version >= "3.7" \ + --hash=sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8 \ + --hash=sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8 +ipython==8.4.0; python_version >= "3.8" \ + --hash=sha256:7ca74052a38fa25fe9bedf52da0be7d3fdd2fb027c3b778ea78dfe8c212937d1 \ + --hash=sha256:f2db3a10254241d9b447232cec8b424847f338d9d36f9a577a6192c332a46abd +ipywidgets==7.7.0; python_version >= "3.7" \ + --hash=sha256:e58ff58bc94d481e91ecb6e13a5cb96a87b6b8ade135e055603d0ca24593df38 \ + --hash=sha256:ab4a5596855a88b83761921c768707d65e5847068139bc1729ddfe834703542a +jax==0.3.13; python_version >= "3.7" \ + --hash=sha256:4ab4865b7007a36e2894a4aff8baf3ffeb6e51e435403c59ba9bc3f741ca3504 +jaxlib==0.3.10; python_version >= "3.7" \ + --hash=sha256:7b6219b5cd22580ffcc723c789c248f3f62d4a395289308b99a3a9dbc0687bae \ + --hash=sha256:cd780a9509461103df8c71473f4e2333853e0f6884ad5a6362757bd42f8a481b \ + --hash=sha256:18e2464f7fc19d4996b095f8c981b36e4b5f06558c63b63a9f792208ceb93fee \ + --hash=sha256:f5eebd7be2e679a20af0b47596b46cf9cda696684cb70f233dde1c830b9f4f24 \ + --hash=sha256:153e99306f134f4efc906a9d223aeaf3777b7c46bbe4ba08243b4f63a7cf592f \ + --hash=sha256:3dec003496634685581e7039f0bfa2144efac8aa7626668b46e9d8772e5c19f2 \ + --hash=sha256:a506cd07565683185e985d2f2d71987a3b82cbe75738d78f3118878b2362e429 \ + --hash=sha256:18e005b96bf18c46bc43b46ca1681aa5a6037ef1c027359a7336eeca4a237bb4 \ + --hash=sha256:3875edc0ff7d555e9a60adb88fe7fa724d8a997a4d9610badcaa5ebfd4ebbf00 \ + --hash=sha256:cd30a9af14fdbf675e6672bb1af77be0ce3040b86fed573c5656b8fb4150d550 \ + --hash=sha256:e67d2f82f543050b682d85bf33a271a6ad365b7f96d98cc86347a2fd636b55ae +jedi==0.18.1; python_version >= "3.8" \ + --hash=sha256:637c9635fcf47945ceb91cd7f320234a7be540ded6f3e99a50cb6febdfd1ba8d \ + --hash=sha256:74137626a64a99c8eb6ae5832d99b3bdd7d29a3850fe2aa80a4126b2a7d949ab +jinja2==3.0.3; python_version >= "3.6" \ + --hash=sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8 \ + --hash=sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7 +joblib==1.1.0; python_version >= "3.6" \ + --hash=sha256:f21f109b3c7ff9d95f8387f752d0d9c34a02aa2f7060c2135f465da0e5160ff6 \ + --hash=sha256:4158fcecd13733f8be669be0683b96ebdbbd38d23559f54dca7205aea1bf1e35 +jsonschema==3.2.0; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163 \ + --hash=sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a +jupyter-book==0.13.0; python_version >= "3.7" \ + --hash=sha256:0a956677e7bbee630dd66641c09a84091277887d6dcdd381a676f00fa9de2074 \ + --hash=sha256:c310a0838ed90e2fa87239856ca24bed91f12a541dedf290cc94ac4e07ead166 +jupyter-cache==0.4.3; python_version >= "3.7" \ + --hash=sha256:4c9b5431b1d320bc68440c21fa0a155bbeb29c5b979bef72222e244a7bcd54fc \ + --hash=sha256:6d5d662d81f565d18009e8dcfd3a56fb876af47eafead2a19ef0045aba8ffe3b +jupyter-client==7.3.3; python_full_version >= "3.7.0" and python_version >= "3.7" \ + --hash=sha256:5b4f5bb9f9c3b5466ba84761312ed75f487bf3b8b0e1eeeec4bb2d0f9d855c70 \ + --hash=sha256:9e80defc0058712bf2b30327bad582f9734668aa85e90256dcba116325ce3060 +jupyter-core==4.10.0; python_version >= "3.7" and python_version < "4.0" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7") and python_full_version >= "3.7.0" \ + --hash=sha256:e7f5212177af7ab34179690140f188aa9bf3d322d8155ed972cbded19f55b6f3 \ + --hash=sha256:a6de44b16b7b31d7271130c71a6792c4040f077011961138afed5e5e73181aec +jupyter-server-mathjax==0.2.5; python_version >= "3.7" \ + --hash=sha256:d165c9ff876a1c32ccf99d309b57463fae206d9b6f0f3a9fa34ed01b3b26605e \ + --hash=sha256:64d96c8e6dfe6edba737902b2dc3a2dc058f17516776c25f4d30ca24617ee7b3 +jupyter-server==1.15.6; python_version >= "3.7" \ + --hash=sha256:e393934c19fcc324a7fca77f811eacd91201440f04c6fbb15c959c463baaa9c5 \ + --hash=sha256:56bd6f580d1f46b62294990e8e78651025729f5d3fc798f10f2c03f0cdcbf28d +jupyter-sphinx==0.3.2; python_version >= "3.7" \ + --hash=sha256:301e36d0fb3007bb5802f6b65b60c24990eb99c983332a2ab6eecff385207dc9 \ + --hash=sha256:37fc9408385c45326ac79ca0452fbd7ae2bf0e97842d626d2844d4830e30aaf2 +jupyterlab-widgets==1.1.0; python_version >= "3.7" \ + --hash=sha256:c2a9bd3789f120f64d73268c066ed3b000c56bc1dda217be5cdc43e7b4ebad3f \ + --hash=sha256:d5f41bc1713795385f718d44dcba47e1e1473c6289f28a95aa6b2c0782ee372a +jupytext==1.13.8; python_version >= "3.6" and python_version < "4.0" \ + --hash=sha256:625d2d2012763cc87d3f0dd60383516cec442c11894f53ad0c5ee5aa2a52caa2 \ + --hash=sha256:60148537de5aa08bb9cbe8797500a49360b7a8eb6667736ae5b80e3ec7ba084d +keras-preprocessing==1.1.2 \ + --hash=sha256:7b82029b130ff61cc99b55f3bd27427df4838576838c5b2f65940e4fcec99a7b \ + --hash=sha256:add82567c50c8bc648c14195bf544a5ce7c1f76761536956c3d2978970179ef3 +keras==2.7.0 \ + --hash=sha256:0c33ae1f728064ca0d35dfba999e9c316f03623bf5688c82fb83cc74a80ea248 +kiwisolver==1.4.2; python_version >= "3.7" and python_full_version >= "3.6.0" \ + --hash=sha256:6e395ece147f0692ca7cdb05a028d31b83b72c369f7b4a2c1798f4b96af1e3d8 \ + --hash=sha256:0b7f50a1a25361da3440f07c58cd1d79957c2244209e4f166990e770256b6b0b \ + --hash=sha256:3c032c41ae4c3a321b43a3650e6ecc7406b99ff3e5279f24c9b310f41bc98479 \ + --hash=sha256:1dcade8f6fe12a2bb4efe2cbe22116556e3b6899728d3b2a0d3b367db323eacc \ + --hash=sha256:0e45e780a74416ef2f173189ef4387e44b5494f45e290bcb1f03735faa6779bf \ + --hash=sha256:9d2bb56309fb75a811d81ed55fbe2208aa77a3a09ff5f546ca95e7bb5fac6eff \ + --hash=sha256:69b2d6c12f2ad5f55104a36a356192cfb680c049fe5e7c1f6620fc37f119cdc2 \ + --hash=sha256:262c248c60f22c2b547683ad521e8a3db5909c71f679b93876921549107a0c24 \ + --hash=sha256:1008346a7741620ab9cc6c96e8ad9b46f7a74ce839dbb8805ddf6b119d5fc6c2 \ + --hash=sha256:6ece2e12e4b57bc5646b354f436416cd2a6f090c1dadcd92b0ca4542190d7190 \ + --hash=sha256:b978afdb913ca953cf128d57181da2e8798e8b6153be866ae2a9c446c6162f40 \ + --hash=sha256:7f88c4b8e449908eeddb3bbd4242bd4dc2c7a15a7aa44bb33df893203f02dc2d \ + --hash=sha256:e348f1904a4fab4153407f7ccc27e43b2a139752e8acf12e6640ba683093dd96 \ + --hash=sha256:c839bf28e45d7ddad4ae8f986928dbf5a6d42ff79760d54ec8ada8fb263e097c \ + --hash=sha256:8ae5a071185f1a93777c79a9a1e67ac46544d4607f18d07131eece08d415083a \ + --hash=sha256:c222f91a45da9e01a9bc4f760727ae49050f8e8345c4ff6525495f7a164c8973 \ + --hash=sha256:a4e8f072db1d6fb7a7cc05a6dbef8442c93001f4bb604f1081d8c2db3ca97159 \ + --hash=sha256:be9a650890fb60393e60aacb65878c4a38bb334720aa5ecb1c13d0dac54dd73b \ + --hash=sha256:8ec2e55bf31b43aabe32089125dca3b46fdfe9f50afbf0756ae11e14c97b80ca \ + --hash=sha256:1d1078ba770d6165abed3d9a1be1f9e79b61515de1dd00d942fa53bba79f01ae \ + --hash=sha256:cbb5eb4a2ea1ffec26268d49766cafa8f957fe5c1b41ad00733763fae77f9436 \ + --hash=sha256:2e6cda72db409eefad6b021e8a4f964965a629f577812afc7860c69df7bdb84a \ + --hash=sha256:b1605c7c38cc6a85212dfd6a641f3905a33412e49f7c003f35f9ac6d71f67720 \ + --hash=sha256:81237957b15469ea9151ec8ca08ce05656090ffabc476a752ef5ad7e2644c526 \ + --hash=sha256:240009fdf4fa87844f805e23f48995537a8cb8f8c361e35fda6b5ac97fcb906f \ + --hash=sha256:240c2d51d098395c012ddbcb9bd7b3ba5de412a1d11840698859f51d0e643c4f \ + --hash=sha256:8b6086aa6936865962b2cee0e7aaecf01ab6778ce099288354a7229b4d9f1408 \ + --hash=sha256:0d98dca86f77b851350c250f0149aa5852b36572514d20feeadd3c6b1efe38d0 \ + --hash=sha256:91eb4916271655dfe3a952249cb37a5c00b6ba68b4417ee15af9ba549b5ba61d \ + --hash=sha256:fa4d97d7d2b2c082e67907c0b8d9f31b85aa5d3ba0d33096b7116f03f8061261 \ + --hash=sha256:71469b5845b9876b8d3d252e201bef6f47bf7456804d2fbe9a1d6e19e78a1e65 \ + --hash=sha256:8ff3033e43e7ca1389ee59fb7ecb8303abb8713c008a1da49b00869e92e3dd7c \ + --hash=sha256:89b57c2984f4464840e4b768affeff6b6809c6150d1166938ade3e22fbe22db8 \ + --hash=sha256:ffbdb9a96c536f0405895b5e21ee39ec579cb0ed97bdbd169ae2b55f41d73219 \ + --hash=sha256:8a830a03970c462d1a2311c90e05679da56d3bd8e78a4ba9985cb78ef7836c9f \ + --hash=sha256:f74f2a13af201559e3d32b9ddfc303c94ae63d63d7f4326d06ce6fe67e7a8255 \ + --hash=sha256:e677cc3626287f343de751e11b1e8a5b915a6ac897e8aecdbc996cd34de753a0 \ + --hash=sha256:b3e251e5c38ac623c5d786adb21477f018712f8c6fa54781bd38aa1c60b60fc2 \ + --hash=sha256:0c380bb5ae20d829c1a5473cfcae64267b73aaa4060adc091f6df1743784aae0 \ + --hash=sha256:484f2a5f0307bc944bc79db235f41048bae4106ffa764168a068d88b644b305d \ + --hash=sha256:0e8afdf533b613122e4bbaf3c1e42c2a5e9e2d1dd3a0a017749a7658757cb377 \ + --hash=sha256:42f6ef9b640deb6f7d438e0a371aedd8bef6ddfde30683491b2e6f568b4e884e \ + --hash=sha256:7f606d91b8a8816be476513a77fd30abe66227039bd6f8b406c348cb0247dcc9 +latexcodec==2.0.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ + --hash=sha256:c277a193638dc7683c4c30f6684e3db728a06efb0dc9cf346db8bd0aa6c5d271 \ + --hash=sha256:2aa2551c373261cefe2ad3a8953a6d6533e68238d180eb4bb91d7964adb3fe9a +libclang==14.0.1 \ + --hash=sha256:a00c5f433af032979ac0cf03bcba59cf5247cb01fa04ef2380bf9668e84d50a9 \ + --hash=sha256:52634f51635e8fc710febde1d7c59d3756b14531bd9ab60df54397ccc08cc4a8 \ + --hash=sha256:02bacd219959601c627872f2c7c7090ce57cf6bd497618388e41813c7ee75a3a \ + --hash=sha256:9d44b8e4b063ea4c7e78c925f083c05ab14440d63ed1bad13d4ca62d2908d277 \ + --hash=sha256:7c7b8c7c82c0cdc088052c6b7b2be4a45b6b06f5f856e7e7058e598f05c09910 \ + --hash=sha256:58b9679868b2d6b5172ded26026c2f71306c4cabd6d15b93b597446fd677eb98 \ + --hash=sha256:1a4f0d5959c801c975950926cffb9b45521c890d7c4b730d8a1f688d75b25de9 \ + --hash=sha256:332e539201b46cd4676bee992bbf4b3e50450fc17f71ff33d4afc9da09cf46cb +linkify-it-py==1.0.3; python_version >= "3.7" \ + --hash=sha256:2b3f168d5ce75e3a425e34b341a6b73e116b5d9ed8dbbbf5dc7456843b7ce2ee \ + --hash=sha256:11e29f00150cddaa8f434153f103c14716e7e097a8fd372d9eb1ed06ed91524d +llvmlite==0.38.1; python_version >= "3.7" and python_version < "3.11" \ + --hash=sha256:a7dd2bd1d6406e7789273e3f8a304ed5d9adcfaa5768052fca7dc233a857be98 \ + --hash=sha256:7a5e0ed215a576f0f872f47a70b8cb49864e0aefc8586aff5ce83e3bff47bc23 \ + --hash=sha256:633c9026eb43b9903cc4ffbc1c7d5293b2e3ad95d06fa9eab0f6ce6ff6ea15b3 \ + --hash=sha256:b98da8436dbc29013ea301f1fdb0d596ab53bf0ab65c976d96d00bb6faa0b479 \ + --hash=sha256:0c0adce1793d66d009c554809f27baeb6258bf13f6fbaa12eff7443500caec25 \ + --hash=sha256:8c64c90a8b0b7b7e1ed1912ba82c1a3f43cf25affbe06aa3c56c84050edee8ac \ + --hash=sha256:ab070266f0f51304789a6c20d4be91a9e69683ad9bd4861eb89980e8eb613b3a \ + --hash=sha256:ed7528b8b85de930b76407e44b080e4f376b7a007c2879749599ff8e2fe32753 \ + --hash=sha256:7db018da2863034ad9c73c946625637f3a89635bc70576068bab4bd085eea90d \ + --hash=sha256:4c1e5805c92e049b4956ed01204c6647de6160ab9aefb0d67ea83ca02a1d889a \ + --hash=sha256:5559e46c79b4017c3c25edc3b9512d11adc3689b9046120c685b0905c08d48a5 \ + --hash=sha256:ef9aa574eff2e15f8c47b255da0db5dab326dc7f76384c307ae35490e2d2489a \ + --hash=sha256:84d5a0163c172db2b2ae561d2fc0866fbd9f716cf13f92c0d41ca4338e682672 \ + --hash=sha256:a263252a68d85450110ec1f2b406c0414e49b04a4d216d31c0515ea1d59c3882 \ + --hash=sha256:de8bd61480173930f2a029673e7cd0738fbbb5171dfe490340839ad7301d4cf0 \ + --hash=sha256:fbfbe546394c39db39a6898a51972aa131c8d6b0628517728b350552f58bdc19 \ + --hash=sha256:8c4f26c6c370e134a909ac555a671fa1376e74c69af0208f25c0979472577a9d \ + --hash=sha256:f95f455697c44d7c04ef95fdfce04629f48df08a832d0a0d9eb2363186dbb969 \ + --hash=sha256:41e638a71c85a9a4a33f279c4cd812bc2f84122505b1f6ab8984ec7debb8548b \ + --hash=sha256:5c07d63df4578f31b39b764d3b4291f70157af7f42e171a8884ae7aaf989d1f7 \ + --hash=sha256:4e11bd9929dcbd55d5eb5cd7b08bf71b0097ea48cc192b69d102a90dd6e9816f \ + --hash=sha256:edfa2c761cfa56cf76e783290d82e117f829bb691d8d90aa375505204888abac \ + --hash=sha256:0e609f7312a439b53b6f622d99180c3ff6a3e1e4ceca4d18aca1c5b46f4e3664 \ + --hash=sha256:9f53c3448410cc84d0e1af84dbc0d60ad32779853d40bcc8b1ee3c67ebbe94b1 \ + --hash=sha256:9c8fac4edbadefa4dddf5dc6cca76bc2ae81df211dcd16a6638d60cc41249e56 \ + --hash=sha256:3d76c0fa42390bef56979ed213fbf0150c3fef36f5ea68d3d780d5d725da8c01 \ + --hash=sha256:66462d768c30d5f648ca3361d657b434efa8b09f6cf04d6b6eae66e62e993644 \ + --hash=sha256:0622a86301fcf81cc50d7ed5b4bebe992c030580d413a8443b328ed4f4d82561 +lxml==4.9.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6" \ + --hash=sha256:98cafc618614d72b02185ac583c6f7796202062c41d2eeecdf07820bad3295ed \ + --hash=sha256:c62e8dd9754b7debda0c5ba59d34509c4688f853588d75b53c3791983faa96fc \ + --hash=sha256:21fb3d24ab430fc538a96e9fbb9b150029914805d551deeac7d7822f64631dfc \ + --hash=sha256:86e92728ef3fc842c50a5cb1d5ba2bc66db7da08a7af53fb3da79e202d1b2cd3 \ + --hash=sha256:4cfbe42c686f33944e12f45a27d25a492cc0e43e1dc1da5d6a87cbcaf2e95627 \ + --hash=sha256:dad7b164905d3e534883281c050180afcf1e230c3d4a54e8038aa5cfcf312b84 \ + --hash=sha256:a614e4afed58c14254e67862456d212c4dcceebab2eaa44d627c2ca04bf86837 \ + --hash=sha256:f9ced82717c7ec65a67667bb05865ffe38af0e835cdd78728f1209c8fffe0cad \ + --hash=sha256:d9fc0bf3ff86c17348dfc5d322f627d78273eba545db865c3cd14b3f19e57fa5 \ + --hash=sha256:e5f66bdf0976ec667fc4594d2812a00b07ed14d1b44259d19a41ae3fff99f2b8 \ + --hash=sha256:fe17d10b97fdf58155f858606bddb4e037b805a60ae023c009f760d8361a4eb8 \ + --hash=sha256:8caf4d16b31961e964c62194ea3e26a0e9561cdf72eecb1781458b67ec83423d \ + --hash=sha256:4780677767dd52b99f0af1f123bc2c22873d30b474aa0e2fc3fe5e02217687c7 \ + --hash=sha256:b122a188cd292c4d2fcd78d04f863b789ef43aa129b233d7c9004de08693728b \ + --hash=sha256:be9eb06489bc975c38706902cbc6888f39e946b81383abc2838d186f0e8b6a9d \ + --hash=sha256:f1be258c4d3dc609e654a1dc59d37b17d7fef05df912c01fc2e15eb43a9735f3 \ + --hash=sha256:927a9dd016d6033bc12e0bf5dee1dde140235fc8d0d51099353c76081c03dc29 \ + --hash=sha256:9232b09f5efee6a495a99ae6824881940d6447debe272ea400c02e3b68aad85d \ + --hash=sha256:04da965dfebb5dac2619cb90fcf93efdb35b3c6994fea58a157a834f2f94b318 \ + --hash=sha256:4d5bae0a37af799207140652a700f21a85946f107a199bcb06720b13a4f1f0b7 \ + --hash=sha256:4878e667ebabe9b65e785ac8da4d48886fe81193a84bbe49f12acff8f7a383a4 \ + --hash=sha256:1355755b62c28950f9ce123c7a41460ed9743c699905cbe664a5bcc5c9c7c7fb \ + --hash=sha256:bcaa1c495ce623966d9fc8a187da80082334236a2a1c7e141763ffaf7a405067 \ + --hash=sha256:6eafc048ea3f1b3c136c71a86db393be36b5b3d9c87b1c25204e7d397cee9536 \ + --hash=sha256:13c90064b224e10c14dcdf8086688d3f0e612db53766e7478d7754703295c7c8 \ + --hash=sha256:206a51077773c6c5d2ce1991327cda719063a47adc02bd703c56a662cdb6c58b \ + --hash=sha256:e8f0c9d65da595cfe91713bc1222af9ecabd37971762cb830dea2fc3b3bb2acf \ + --hash=sha256:8f0a4d179c9a941eb80c3a63cdb495e539e064f8054230844dcf2fcb812b71d3 \ + --hash=sha256:830c88747dce8a3e7525defa68afd742b4580df6aa2fdd6f0855481e3994d391 \ + --hash=sha256:1e1cf47774373777936c5aabad489fef7b1c087dcd1f426b621fda9dcc12994e \ + --hash=sha256:5974895115737a74a00b321e339b9c3f45c20275d226398ae79ac008d908bff7 \ + --hash=sha256:1423631e3d51008871299525b541413c9b6c6423593e89f9c4cfbe8460afc0a2 \ + --hash=sha256:2aaf6a0a6465d39b5ca69688fce82d20088c1838534982996ec46633dc7ad6cc \ + --hash=sha256:9f36de4cd0c262dd9927886cc2305aa3f2210db437aa4fed3fb4940b8bf4592c \ + --hash=sha256:ae06c1e4bc60ee076292e582a7512f304abdf6c70db59b56745cca1684f875a4 \ + --hash=sha256:57e4d637258703d14171b54203fd6822fda218c6c2658a7d30816b10995f29f3 \ + --hash=sha256:6d279033bf614953c3fc4a0aa9ac33a21e8044ca72d4fa8b9273fe75359d5cca \ + --hash=sha256:a60f90bba4c37962cbf210f0188ecca87daafdf60271f4c6948606e4dabf8785 \ + --hash=sha256:6ca2264f341dd81e41f3fffecec6e446aa2121e0b8d026fb5130e02de1402785 \ + --hash=sha256:27e590352c76156f50f538dbcebd1925317a0f70540f7dc8c97d2931c595783a \ + --hash=sha256:eea5d6443b093e1545ad0210e6cf27f920482bfcf5c77cdc8596aec73523bb7e \ + --hash=sha256:f05251bbc2145349b8d0b77c0d4e5f3b228418807b1ee27cefb11f69ed3d233b \ + --hash=sha256:487c8e61d7acc50b8be82bda8c8d21d20e133c3cbf41bd8ad7eb1aaeb3f07c97 \ + --hash=sha256:8d1a92d8e90b286d491e5626af53afef2ba04da33e82e30744795c71880eaa21 \ + --hash=sha256:b570da8cd0012f4af9fa76a5635cd31f707473e65a5a335b186069d5c7121ff2 \ + --hash=sha256:5ef87fca280fb15342726bd5f980f6faf8b84a5287fcc2d4962ea8af88b35130 \ + --hash=sha256:93e414e3206779ef41e5ff2448067213febf260ba747fc65389a3ddaa3fb8715 \ + --hash=sha256:6653071f4f9bac46fbc30f3c7838b0e9063ee335908c5d61fb7a4a86c8fd2036 \ + --hash=sha256:32a73c53783becdb7eaf75a2a1525ea8e49379fb7248c3eeefb9412123536387 \ + --hash=sha256:1a7c59c6ffd6ef5db362b798f350e24ab2cfa5700d53ac6681918f314a4d3b94 \ + --hash=sha256:1436cf0063bba7888e43f1ba8d58824f085410ea2025befe81150aceb123e345 \ + --hash=sha256:4beea0f31491bc086991b97517b9683e5cfb369205dac0148ef685ac12a20a67 \ + --hash=sha256:41fb58868b816c202e8881fd0f179a4644ce6e7cbbb248ef0283a34b73ec73bb \ + --hash=sha256:bd34f6d1810d9354dc7e35158aa6cc33456be7706df4420819af6ed966e85448 \ + --hash=sha256:edffbe3c510d8f4bf8640e02ca019e48a9b72357318383ca60e3330c23aaffc7 \ + --hash=sha256:6d949f53ad4fc7cf02c44d6678e7ff05ec5f5552b235b9e136bd52e9bf730b91 \ + --hash=sha256:079b68f197c796e42aa80b1f739f058dcee796dc725cc9a1be0cdb08fc45b000 \ + --hash=sha256:9c3a88d20e4fe4a2a4a84bf439a5ac9c9aba400b85244c63a1ab7088f85d9d25 \ + --hash=sha256:4e285b5f2bf321fc0857b491b5028c5f276ec0c873b985d58d7748ece1d770dd \ + --hash=sha256:ef72013e20dd5ba86a8ae1aed7f56f31d3374189aa8b433e7b12ad182c0d2dfb \ + --hash=sha256:10d2017f9150248563bb579cd0d07c61c58da85c922b780060dcc9a3aa9f432d \ + --hash=sha256:0538747a9d7827ce3e16a8fdd201a99e661c7dee3c96c885d8ecba3c35d1032c \ + --hash=sha256:0645e934e940107e2fdbe7c5b6fb8ec6232444260752598bc4d09511bd056c0b \ + --hash=sha256:6daa662aba22ef3258934105be2dd9afa5bb45748f4f702a3b39a5bf53a1f4dc \ + --hash=sha256:603a464c2e67d8a546ddaa206d98e3246e5db05594b97db844c2f0a1af37cf5b \ + --hash=sha256:c4b2e0559b68455c085fb0f6178e9752c4be3bba104d6e881eb5573b399d1eb2 \ + --hash=sha256:0f3f0059891d3254c7b5fb935330d6db38d6519ecd238ca4fce93c234b4a0f73 \ + --hash=sha256:c852b1530083a620cb0de5f3cd6826f19862bafeaf77586f1aef326e49d95f0c \ + --hash=sha256:287605bede6bd36e930577c5925fcea17cb30453d96a7b4c63c14a257118dbb9 \ + --hash=sha256:fe749b052bb7233fe5d072fcb549221a8cb1a16725c47c37e42b0b9cb3ff2c3f +markdown-it-py==1.1.0; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:36be6bb3ad987bfdb839f5ba78ddf094552ca38ccbd784ae4f74a4e1419fc6e3 \ + --hash=sha256:98080fc0bc34c4f2bcf0846a096a9429acbd9d5d8e67ed34026c03c61c464389 +markdown==3.3.7; python_version >= "3.6" \ + --hash=sha256:f5da449a6e1c989a4cea2631aa8ee67caa5a2ef855d551c88f9e309f4634c621 \ + --hash=sha256:cbb516f16218e643d8e0a95b309f77eb118cb138d39a4f27851e6a63581db874 +markupsafe==2.1.1; python_version >= "3.7" \ + --hash=sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812 \ + --hash=sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a \ + --hash=sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e \ + --hash=sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5 \ + --hash=sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4 \ + --hash=sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f \ + --hash=sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e \ + --hash=sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933 \ + --hash=sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6 \ + --hash=sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417 \ + --hash=sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02 \ + --hash=sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a \ + --hash=sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37 \ + --hash=sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980 \ + --hash=sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a \ + --hash=sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3 \ + --hash=sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a \ + --hash=sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff \ + --hash=sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a \ + --hash=sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452 \ + --hash=sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003 \ + --hash=sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1 \ + --hash=sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601 \ + --hash=sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925 \ + --hash=sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f \ + --hash=sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88 \ + --hash=sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63 \ + --hash=sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1 \ + --hash=sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7 \ + --hash=sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a \ + --hash=sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f \ + --hash=sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6 \ + --hash=sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77 \ + --hash=sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603 \ + --hash=sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7 \ + --hash=sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135 \ + --hash=sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96 \ + --hash=sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c \ + --hash=sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247 \ + --hash=sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b +matplotlib-inline==0.1.3; python_version >= "3.8" \ + --hash=sha256:a04bfba22e0d1395479f866853ec1ee28eea1485c1d69a6faf00dc3e24ff34ee \ + --hash=sha256:aed605ba3b72462d64d475a21a9296f400a19c4f74a31b59103d2a99ffd5aa5c +matplotlib==3.5.2; python_version >= "3.7" \ + --hash=sha256:03bbb3f5f78836855e127b5dab228d99551ad0642918ccbf3067fcd52ac7ac5e \ + --hash=sha256:49a5938ed6ef9dda560f26ea930a2baae11ea99e1c2080c8714341ecfda72a89 \ + --hash=sha256:77157be0fc4469cbfb901270c205e7d8adb3607af23cef8bd11419600647ceed \ + --hash=sha256:5844cea45d804174bf0fac219b4ab50774e504bef477fc10f8f730ce2d623441 \ + --hash=sha256:c87973ddec10812bddc6c286b88fdd654a666080fbe846a1f7a3b4ba7b11ab78 \ + --hash=sha256:4a05f2b37222319753a5d43c0a4fd97ed4ff15ab502113e3f2625c26728040cf \ + --hash=sha256:9776e1a10636ee5f06ca8efe0122c6de57ffe7e8c843e0fb6e001e9d9256ec95 \ + --hash=sha256:b4fedaa5a9aa9ce14001541812849ed1713112651295fdddd640ea6620e6cf98 \ + --hash=sha256:ee175a571e692fc8ae8e41ac353c0e07259113f4cb063b0ec769eff9717e84bb \ + --hash=sha256:2e8bda1088b941ead50caabd682601bece983cadb2283cafff56e8fcddbf7d7f \ + --hash=sha256:9480842d5aadb6e754f0b8f4ebeb73065ac8be1855baa93cd082e46e770591e9 \ + --hash=sha256:6c623b355d605a81c661546af7f24414165a8a2022cddbe7380a31a4170fa2e9 \ + --hash=sha256:a91426ae910819383d337ba0dc7971c7cefdaa38599868476d94389a329e599b \ + --hash=sha256:c4b82c2ae6d305fcbeb0eb9c93df2602ebd2f174f6e8c8a5d92f9445baa0c1d3 \ + --hash=sha256:ebc27ad11df3c1661f4677a7762e57a8a91dd41b466c3605e90717c9a5f90c82 \ + --hash=sha256:5a32ea6e12e80dedaca2d4795d9ed40f97bfa56e6011e14f31502fdd528b9c89 \ + --hash=sha256:2a0967d4156adbd0d46db06bc1a877f0370bce28d10206a5071f9ecd6dc60b79 \ + --hash=sha256:e2b696699386766ef171a259d72b203a3c75d99d03ec383b97fc2054f52e15cf \ + --hash=sha256:7f409716119fa39b03da3d9602bd9b41142fab7a0568758cd136cd80b1bf36c8 \ + --hash=sha256:b8d3f4e71e26307e8c120b72c16671d70c5cd08ae412355c11254aa8254fb87f \ + --hash=sha256:b6c63cd01cad0ea8704f1fd586e9dc5777ccedcd42f63cbbaa3eae8dd41172a1 \ + --hash=sha256:75c406c527a3aa07638689586343f4b344fcc7ab1f79c396699eb550cd2b91f7 \ + --hash=sha256:4a44cdfdb9d1b2f18b1e7d315eb3843abb097869cd1ef89cfce6a488cd1b5182 \ + --hash=sha256:3d8e129af95b156b41cb3be0d9a7512cc6d73e2b2109f82108f566dbabdbf377 \ + --hash=sha256:364e6bca34edc10a96aa3b1d7cd76eb2eea19a4097198c1b19e89bee47ed5781 \ + --hash=sha256:ea75df8e567743207e2b479ba3d8843537be1c146d4b1e3e395319a4e1a77fe9 \ + --hash=sha256:44c6436868186564450df8fd2fc20ed9daaef5caad699aa04069e87099f9b5a8 \ + --hash=sha256:7d7705022df2c42bb02937a2a824f4ec3cca915700dd80dc23916af47ff05f1a \ + --hash=sha256:ee0b8e586ac07f83bb2950717e66cb305e2859baf6f00a9c39cc576e0ce9629c \ + --hash=sha256:c772264631e5ae61f0bd41313bbe48e1b9bcc95b974033e1118c9caa1a84d5c6 \ + --hash=sha256:751d3815b555dcd6187ad35b21736dc12ce6925fc3fa363bbc6dc0f86f16484f \ + --hash=sha256:31fbc2af27ebb820763f077ec7adc79b5a031c2f3f7af446bd7909674cd59460 \ + --hash=sha256:4fa28ca76ac5c2b2d54bc058b3dad8e22ee85d26d1ee1b116a6fd4d2277b6a04 \ + --hash=sha256:24173c23d1bcbaed5bf47b8785d27933a1ac26a5d772200a0f3e0e38f471b001 \ + --hash=sha256:48cf850ce14fa18067f2d9e0d646763681948487a8080ec0af2686468b4607a2 +mdit-py-plugins==0.2.8; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:5991cef645502e80a5388ec4fc20885d2313d4871e8b8e320ca2de14ac0c015f \ + --hash=sha256:1833bf738e038e35d89cb3a07eb0d227ed647ce7dd357579b65343740c6d249c +minorminer==0.2.8.post1; python_version >= "3.7" \ + --hash=sha256:1f7c0b1dc4d37bb730add0a4b5de89a84ad5fea62caf49e6cbd52eade0718e60 \ + --hash=sha256:38ac8deb12e980b15da0cbe81ee7eda1a3bbdf7f2972a578d57fa0d125549f9f \ + --hash=sha256:9c3488cd755fa3ec6acb1ae03f5bfe43f3e91eea88b0f0630b797dbcdb6e54d4 \ + --hash=sha256:0907994b649a468d5a9c095e2d73bef08edd51809ef2eb3d40f66f539110861b \ + --hash=sha256:59d85ba33ea4880d95a2bf486116bc5ffcb65d32d9c4caa3e17a5201042b5bee \ + --hash=sha256:d8525f1806a10235b14f5782f58b256fa007982a226523851f046f2209ff1833 \ + --hash=sha256:1c0c095f04066fdd9d68a0344cd52b34a7ac84c3c9fe30ef02d45d10ef780df6 \ + --hash=sha256:4aff8291dceb67118942c338504b36bfb5dfda3529a6125fbd3408ad6cce0714 \ + --hash=sha256:41c66cccb38fcb0c5d71dd0ec69cfd84848c115651ba4fc010c5d9fd2e57bd62 \ + --hash=sha256:0c2a502915054935eda6e8e39e1b0f1acaa00ad4143c4b252727e6c53a02b56a \ + --hash=sha256:09f19cbb20196d539ce17ba4b7d5a55436a177819e50164135d861b16626034c \ + --hash=sha256:9e96a2013f91694a2e85582a366300ad9956f6f96c4cc3fba1d433989d4c8603 \ + --hash=sha256:d104571ca632c549ec799cbce3aeebc76ad364674751f72e013c1ba9d861fae5 \ + --hash=sha256:85925ce2596cae3362a0b1dee3368fbf22746ce5d74d88799888e2d7c4629ef7 \ + --hash=sha256:2f6b6db36d3f631d5b810785ccd73e4597ef9aa2efde48d724e978ee01482b8b \ + --hash=sha256:b304f1e66615f575aaed7522fdeee59f7ed54633e8ea2d9835b7bf72bc472335 \ + --hash=sha256:91c2df43d99352dd0164a37c4d2bf9d87d36fd04cf9f59cc544f36a2c2dab4c0 \ + --hash=sha256:fa8c311fa08653fb79442811a475d6fb969421cbe977ca0fd9863d7b6604f251 \ + --hash=sha256:d61a0bcbe45467b468d1cd44c8ea19ecd59b3767466630d18de83f7d4e388889 \ + --hash=sha256:66fb007f688c53a659ccae9b4b0a2b3c6b87853fe66de6b037562f87aa17a01b +mistune==0.8.4; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7" \ + --hash=sha256:88a1051873018da288eee8538d476dffe1262495144b33ecb586c4ab266bb8d4 \ + --hash=sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e +more-itertools==8.13.0; python_version >= "3.6" \ + --hash=sha256:a42901a0a5b169d925f6f217cd5a190e32ef54360905b9c39ee7db5313bfec0f \ + --hash=sha256:c5122bffc5f104d37c1626b8615b511f3427aa5389b94d61e5ef8236bfbc3ddb +mpmath==1.2.1; python_version >= "3.6" and python_full_version >= "3.6.0" \ + --hash=sha256:604bc21bd22d2322a177c73bdb573994ef76e62edd595d17e00aff24b0667e5c \ + --hash=sha256:79ffb45cf9f4b101a807595bcb3e72e0396202e0b1d25d689134b48c4216a81a +msgpack==1.0.4; python_version >= "3.7" \ + --hash=sha256:4ab251d229d10498e9a2f3b1e68ef64cb393394ec477e3370c457f9430ce9250 \ + --hash=sha256:112b0f93202d7c0fef0b7810d465fde23c746a2d482e1e2de2aafd2ce1492c88 \ + --hash=sha256:002b5c72b6cd9b4bafd790f364b8480e859b4712e91f43014fe01e4f957b8467 \ + --hash=sha256:35bc0faa494b0f1d851fd29129b2575b2e26d41d177caacd4206d81502d4c6a6 \ + --hash=sha256:4733359808c56d5d7756628736061c432ded018e7a1dff2d35a02439043321aa \ + --hash=sha256:eb514ad14edf07a1dbe63761fd30f89ae79b42625731e1ccf5e1f1092950eaa6 \ + --hash=sha256:c23080fdeec4716aede32b4e0ef7e213c7b1093eede9ee010949f2a418ced6ba \ + --hash=sha256:49565b0e3d7896d9ea71d9095df15b7f75a035c49be733051c34762ca95bbf7e \ + --hash=sha256:aca0f1644d6b5a73eb3e74d4d64d5d8c6c3d577e753a04c9e9c87d07692c58db \ + --hash=sha256:0dfe3947db5fb9ce52aaea6ca28112a170db9eae75adf9339a1aec434dc954ef \ + --hash=sha256:4dea20515f660aa6b7e964433b1808d098dcfcabbebeaaad240d11f909298075 \ + --hash=sha256:e83f80a7fec1a62cf4e6c9a660e39c7f878f603737a0cdac8c13131d11d97f52 \ + --hash=sha256:3c11a48cf5e59026ad7cb0dc29e29a01b5a66a3e333dc11c04f7e991fc5510a9 \ + --hash=sha256:1276e8f34e139aeff1c77a3cefb295598b504ac5314d32c8c3d54d24fadb94c9 \ + --hash=sha256:6c9566f2c39ccced0a38d37c26cc3570983b97833c365a6044edef3574a00c08 \ + --hash=sha256:fcb8a47f43acc113e24e910399376f7277cf8508b27e5b88499f053de6b115a8 \ + --hash=sha256:76ee788122de3a68a02ed6f3a16bbcd97bc7c2e39bd4d94be2f1821e7c4a64e6 \ + --hash=sha256:0a68d3ac0104e2d3510de90a1091720157c319ceeb90d74f7b5295a6bee51bae \ + --hash=sha256:85f279d88d8e833ec015650fd15ae5eddce0791e1e8a59165318f371158efec6 \ + --hash=sha256:c1683841cd4fa45ac427c18854c3ec3cd9b681694caf5bff04edb9387602d661 \ + --hash=sha256:a75dfb03f8b06f4ab093dafe3ddcc2d633259e6c3f74bb1b01996f5d8aa5868c \ + --hash=sha256:9667bdfdf523c40d2511f0e98a6c9d3603be6b371ae9a238b7ef2dc4e7a427b0 \ + --hash=sha256:11184bc7e56fd74c00ead4f9cc9a3091d62ecb96e97653add7a879a14b003227 \ + --hash=sha256:ac5bd7901487c4a1dd51a8c58f2632b15d838d07ceedaa5e4c080f7190925bff \ + --hash=sha256:1e91d641d2bfe91ba4c52039adc5bccf27c335356055825c7f88742c8bb900dd \ + --hash=sha256:2a2df1b55a78eb5f5b7d2a4bb221cd8363913830145fad05374a80bf0877cb1e \ + --hash=sha256:545e3cf0cf74f3e48b470f68ed19551ae6f9722814ea969305794645da091236 \ + --hash=sha256:2cc5ca2712ac0003bcb625c96368fd08a0f86bbc1a5578802512d87bc592fe44 \ + --hash=sha256:eba96145051ccec0ec86611fe9cf693ce55f2a3ce89c06ed307de0e085730ec1 \ + --hash=sha256:7760f85956c415578c17edb39eed99f9181a48375b0d4a94076d84148cf67b2d \ + --hash=sha256:449e57cc1ff18d3b444eb554e44613cffcccb32805d16726a5494038c3b93dab \ + --hash=sha256:d603de2b8d2ea3f3bcb2efe286849aa7a81531abc52d8454da12f46235092bcb \ + --hash=sha256:48f5d88c99f64c456413d74a975bd605a9b0526293218a3b77220a2c15458ba9 \ + --hash=sha256:6916c78f33602ecf0509cc40379271ba0f9ab572b066bd4bdafd7434dee4bc6e \ + --hash=sha256:81fc7ba725464651190b196f3cd848e8553d4d510114a954681fd0b9c479d7e1 \ + --hash=sha256:d5b5b962221fa2c5d3a7f8133f9abffc114fe218eb4365e40f17732ade576c8e \ + --hash=sha256:77ccd2af37f3db0ea59fb280fa2165bf1b096510ba9fe0cc2bf8fa92a22fdb43 \ + --hash=sha256:b17be2478b622939e39b816e0aa8242611cc8d3583d1cd8ec31b249f04623243 \ + --hash=sha256:2bb8cdf50dd623392fa75525cce44a65a12a00c98e1e37bf0fb08ddce2ff60d2 \ + --hash=sha256:26b8feaca40a90cbe031b03d82b2898bf560027160d3eae1423f4a67654ec5d6 \ + --hash=sha256:462497af5fd4e0edbb1559c352ad84f6c577ffbbb708566a0abaaa84acd9f3ae \ + --hash=sha256:2999623886c5c02deefe156e8f869c3b0aaeba14bfc50aa2486a0415178fce55 \ + --hash=sha256:f0029245c51fd9473dc1aede1160b0a29f4a912e6b1dd353fa6d317085b219da \ + --hash=sha256:ed6f7b854a823ea44cf94919ba3f727e230da29feb4a99711433f25800cf747f \ + --hash=sha256:0df96d6eaf45ceca04b3f3b4b111b86b33785683d682c655063ef8057d61fd92 \ + --hash=sha256:6a4192b1ab40f8dca3f2877b70e63799d95c62c068c84dc028b40a6cb03ccd0f \ + --hash=sha256:0e3590f9fb9f7fbc36df366267870e77269c03172d086fa76bb4eba8b2b46624 \ + --hash=sha256:1576bd97527a93c44fa856770197dec00d223b0b9f36ef03f65bac60197cedf8 \ + --hash=sha256:63e29d6e8c9ca22b21846234913c3466b7e4ee6e422f205a2988083de3b08cae \ + --hash=sha256:fb62ea4b62bfcb0b380d5680f9a4b3f9a2d166d9394e9bbd9666c0ee09a3645c \ + --hash=sha256:4d5834a2a48965a349da1c5a79760d94a1a0172fbb5ab6b5b33cbf8447e109ce \ + --hash=sha256:f5d869c18f030202eb412f08b28d2afeea553d6613aee89e200d7aca7ef01f5f +multitasking==0.0.10; python_version >= "3.6" \ + --hash=sha256:810640fa6670be41f4a712b287d9307a14ad849d966f06a17d2cf1593b66c3cd +myst-nb==0.13.1; python_version >= "3.7" \ + --hash=sha256:7a2da1d30bb7d00600febb3d93abc89f1f5a05c0602ba330e83db54f154b5c08 \ + --hash=sha256:ab990e5497036774310597e6204eeb7eeaeca8bf6791fbc7263a305104395f8a +myst-parser==0.15.2; python_version >= "3.7" \ + --hash=sha256:f7f3b2d62db7655cde658eb5d62b2ec2a4631308137bd8d10f296a40d57bbbeb \ + --hash=sha256:40124b6f27a4c42ac7f06b385e23a9dcd03d84801e9c7130b59b3729a554b1f9 +nbclient==0.5.13; python_full_version >= "3.7.0" and python_version >= "3.7" \ + --hash=sha256:47ac905af59379913c1f8f541098d2550153cf8dc58553cbe18c702b181518b0 \ + --hash=sha256:40c52c9b5e3c31faecaee69f202b3f53e38d7c1c563de0fadde9d7eda0fdafe8 +nbconvert==5.6.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7" \ + --hash=sha256:f0d6ec03875f96df45aa13e21fd9b8450c42d7e1830418cccc008c0df725fcee \ + --hash=sha256:21fb48e700b43e82ba0e3142421a659d7739b65568cc832a13976a77be16b523 +nbdime==3.1.1; python_version >= "3.7" \ + --hash=sha256:ea4ddf919e3035800ef8bd5552b814522207cb154ca7512565e4539a54c74dbf \ + --hash=sha256:67767320e971374f701a175aa59abd3a554723039d39fae908e72d16330d648b +nbformat==5.4.0; python_version >= "3.7" and python_version < "4.0" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7") and python_full_version >= "3.7.0" \ + --hash=sha256:0d6072aaec95dddc39735c144ee8bbc6589c383fb462e4058abc855348152dad \ + --hash=sha256:44ba5ca6acb80c5d5a500f1e5b83ede8cbe364d5a495c4c8cf60aaf1ba656501 +nest-asyncio==1.5.5; python_full_version >= "3.7.0" and python_version >= "3.7" \ + --hash=sha256:b98e3ec1b246135e4642eceffa5a6c23a3ab12c82ff816a92c612d68205813b2 \ + --hash=sha256:e442291cd942698be619823a17a86a5759eabe1f8613084790de189fe9e16d65 +netket==3.4.3; python_version >= "3.7" \ + --hash=sha256:30d9294a7629bc296ed9ceac20ff149ae6f3b20aa0427044687fad27cb5f4eb3 \ + --hash=sha256:881780e93c2204427bd14437423c465a62270f3fc136ed3c60e11174959c627a +networkx==2.8.3; python_version >= "3.8" \ + --hash=sha256:f151edac6f9b0cf11fecce93e236ac22b499bb9ff8d6f8393b9fef5ad09506cc \ + --hash=sha256:67fab04a955a73eb660fe7bf281b6fa71a003bc6e23a92d2f6227654c5223dbe +ninja==1.10.2.3 \ + --hash=sha256:d5e0275d28997a750a4f445c00bdd357b35cc334c13cdff13edf30e544704fbd \ + --hash=sha256:5ea785bf6a15727040835256577239fa3cf5da0d60e618c307aa5efc31a1f0ce \ + --hash=sha256:29570a18d697fc84d361e7e6330f0021f34603ae0fcb0ef67ae781e9814aae8d \ + --hash=sha256:21a1d84d4c7df5881bfd86c25cce4cf7af44ba2b8b255c57bc1c434ec30a2dfc \ + --hash=sha256:9ca8dbece144366d5f575ffc657af03eb11c58251268405bc8519d11cf42f113 \ + --hash=sha256:279836285975e3519392c93c26e75755e8a8a7fafec9f4ecbb0293119ee0f9c6 \ + --hash=sha256:cc8b31b5509a2129e4d12a35fc21238c157038022560aaf22e49ef0a77039086 \ + --hash=sha256:688167841b088b6802e006f911d911ffa925e078c73e8ef2f88286107d3204f8 \ + --hash=sha256:840a0b042d43a8552c4004966e18271ec726e5996578f28345d9ce78e225b67e \ + --hash=sha256:84be6f9ec49f635dc40d4b871319a49fa49b8d55f1d9eae7cd50d8e57ddf7a85 \ + --hash=sha256:6bd76a025f26b9ae507cf8b2b01bb25bb0031df54ed685d85fc559c411c86cf4 \ + --hash=sha256:740d61fefb4ca13573704ee8fe89b973d40b8dc2a51aaa4e9e68367233743bb6 \ + --hash=sha256:0560eea57199e41e86ac2c1af0108b63ae77c3ca4d05a9425a750e908135935a \ + --hash=sha256:e1b86ad50d4e681a7dbdff05fc23bb52cb773edb90bc428efba33fa027738408 +notebook==6.4.11; python_version >= "3.7" \ + --hash=sha256:b4a6baf2eba21ce67a0ca11a793d1781b06b8078f34d06c710742e55f3eee505 \ + --hash=sha256:709b1856a564fe53054796c80e17a67262071c86bfbdfa6b96aaa346113c555a +ntlm-auth==1.5.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" \ + --hash=sha256:c9667d361dc09f6b3750283d503c689070ff7d89f2f6ff0d38088d5436ff8543 \ + --hash=sha256:f1527c581dbf149349134fc2d789d50af2a400e193206956fa0ab456ccc5a8ba +numba4jax==0.0.10; python_version >= "3.7" \ + --hash=sha256:3918602c58b86dc972a1d7a86ea5cc64dac5b7fdba6d09c9e911ec70e5fd75d6 \ + --hash=sha256:658d198eb5d2d1ad5147d4ede9b7c3b8cf85140e0bb72de8a22f743fe021aa19 +numba==0.55.2; python_version >= "3.7" and python_version < "3.11" \ + --hash=sha256:dd05f7c0ce64b6977596aa4e5a44747c6ef414d7989da1c7672337c54381a5ef \ + --hash=sha256:e36232eccd172c583b1f021c5c48744c087ae6fc9dc5c5f0dd2cb2286e517bf8 \ + --hash=sha256:25410557d0deb1d97397b71e142a36772133986a7dd4fe2935786e2dd149245f \ + --hash=sha256:676c081162cc9403706071c1d1d42e479c0741551ab28096ba13859a2e3e9b80 \ + --hash=sha256:2665ef28e900b3a55bf370daa81c12ebc64cd434116accd60c38a95a159a3182 \ + --hash=sha256:d7ac9ea5feef9536ab8bfbbb3ded1a0617ea8794d7547800d535b7857800f996 \ + --hash=sha256:29b89a68af162acf87adeb8fbf01f6bb1effae4711b28146f95108d82e905624 \ + --hash=sha256:6e0f9b5d1c8ea1bdef39b0ad921a9bbf0cc4a88e76d722d756c68f1653787c35 \ + --hash=sha256:135fb7694928f9f57b4ff5b1be58f20f4771fedd1680636a9affdead96051959 \ + --hash=sha256:de1f93bd7e2d431451aec20a52ac651a020e98a4ba46797fad860bba338a7e64 \ + --hash=sha256:3eaf53e73e700370163e58257257299ac0d46fea4f244bf5476e4635bc31d808 \ + --hash=sha256:da4485e0f0b9562f39c78887149b33d13d787aa696553c9257b95575122905ed \ + --hash=sha256:5559c6684bf6cce7a22c656d8fef3e7c38ff5fec5153abef5955f6f7cae9f102 \ + --hash=sha256:a85779adc5234f7857615d1bd2c7b514314521f9f0163c33017707ed9816e6e6 \ + --hash=sha256:16a52a0641c342b09b39f6762dcbe3846e44aa9baaaf4703b2ca42a3aee7346f \ + --hash=sha256:46715180f87d5a1f3e4077d207ade66c96fc01159f5b7d49cee2d6ffb9e6539f \ + --hash=sha256:d1c3cef3289fefb5673ceae32024ab5a8a08d4f4380bcb8348d01f1ba570ccff \ + --hash=sha256:68bb33eaef1d6155fc1ae4fa6c915b8a42e5052c89a58742254eaad072eab118 \ + --hash=sha256:dfddd633141608a09cbce275fb9fe7aa514918625ace20b0e587898a2d93c030 \ + --hash=sha256:a669212aa66ffee4ad778016ac3819add33f9bcb96b4c384d3099531dd175085 \ + --hash=sha256:dcde1a1a3a430fb5f83c7e095b0b6ac7adb5595f50a3ee05babb2964f31613c4 \ + --hash=sha256:69b2e823efa40d32b259f5c094476dde2226b92032f17015d8cd7c10472654ce \ + --hash=sha256:20de0139d2267c8f0e2470d4f88540446cd1bf40de0f29f31b7ab9bf25d49b45 \ + --hash=sha256:09ff4d690abb05ffbb8a29a96d1cf35b46887a26796d3670de104beeec73d639 \ + --hash=sha256:1105449247f338e49d63eb04a4aaa5c440bb5435df00f718c8e6e7afad841bb0 \ + --hash=sha256:32649584144c35ced239937ab2c416ab22bbc1490ef8d90609c30fff9f6aa1b8 \ + --hash=sha256:8d5760a1e6a48d98d6b9cf774e4d2a64813d981cca60d7b7356af61195a6ca17 \ + --hash=sha256:e428d9e11d9ba592849ccc9f7a009003eb7d30612007e365afe743ce7118c6f4 +numpy==1.22.4; python_version >= "3.8" \ + --hash=sha256:ba9ead61dfb5d971d77b6c131a9dbee62294a932bf6a356e48c75ae684e635b3 \ + --hash=sha256:1ce7ab2053e36c0a71e7a13a7475bd3b1f54750b4b433adc96313e127b870887 \ + --hash=sha256:7228ad13744f63575b3a972d7ee4fd61815b2879998e70930d4ccf9ec721dce0 \ + --hash=sha256:43a8ca7391b626b4c4fe20aefe79fec683279e31e7c79716863b4b25021e0e74 \ + --hash=sha256:a911e317e8c826ea632205e63ed8507e0dc877dcdc49744584dfc363df9ca08c \ + --hash=sha256:9ce7df0abeabe7fbd8ccbf343dc0db72f68549856b863ae3dd580255d009648e \ + --hash=sha256:3e1ffa4748168e1cc8d3cde93f006fe92b5421396221a02f2274aab6ac83b077 \ + --hash=sha256:59d55e634968b8f77d3fd674a3cf0b96e85147cd6556ec64ade018f27e9479e1 \ + --hash=sha256:c1d937820db6e43bec43e8d016b9b3165dcb42892ea9f106c70fb13d430ffe72 \ + --hash=sha256:d4c5d5eb2ec8da0b4f50c9a843393971f31f1d60be87e0fb0917a49133d257d6 \ + --hash=sha256:64f56fc53a2d18b1924abd15745e30d82a5782b2cab3429aceecc6875bd5add0 \ + --hash=sha256:fb7a980c81dd932381f8228a426df8aeb70d59bbcda2af075b627bbc50207cba \ + --hash=sha256:e96d7f3096a36c8754207ab89d4b3282ba7b49ea140e4973591852c77d09eb76 \ + --hash=sha256:4c6036521f11a731ce0648f10c18ae66d7143865f19f7299943c985cdc95afb5 \ + --hash=sha256:b89bf9b94b3d624e7bb480344e91f68c1c6c75f026ed6755955117de00917a7c \ + --hash=sha256:2d487e06ecbf1dc2f18e7efce82ded4f705f4bd0cd02677ffccfb39e5c284c7e \ + --hash=sha256:f3eb268dbd5cfaffd9448113539e44e2dd1c5ca9ce25576f7c04a5453edc26fa \ + --hash=sha256:37431a77ceb9307c28382c9773da9f306435135fae6b80b62a11c53cfedd8802 \ + --hash=sha256:cc7f00008eb7d3f2489fca6f334ec19ca63e31371be28fd5dad955b16ec285bd \ + --hash=sha256:f0725df166cf4785c0bc4cbfb320203182b1ecd30fee6e541c8752a92df6aa32 \ + --hash=sha256:0791fbd1e43bf74b3502133207e378901272f3c156c4df4954cad833b1380207 \ + --hash=sha256:425b390e4619f58d8526b3dcf656dde069133ae5c240229821f01b5f44ea07af +oauthlib==3.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" \ + --hash=sha256:6db33440354787f9b7f3a6dbd4febf5d0f93758354060e802f6c06cb493022fe \ + --hash=sha256:23a8208d75b902797ea29fd31fa80a15ed9dc2c6c16fe73f5d346f83f6fa27a2 +opt-einsum==3.3.0; python_version >= "3.7" \ + --hash=sha256:2455e59e3947d3c275477df7f5205b30635e266fe6dc300e3d9f9646bfcea147 \ + --hash=sha256:59f6475f77bbc37dcf7cd748519c0ec60722e91e63ca114e68821c0c54a46549 +optax==0.1.2; python_version >= "3.7" \ + --hash=sha256:4e3cb24b70e87acd65700da77c570c468e701d32a2393ae4a5ec35719d90ade6 \ + --hash=sha256:c2963ffa3b3ac47f72c2866625207c9468558ed18e6e471baac69d4de2ac3f58 +orjson==3.7.1; python_version >= "3.7" \ + --hash=sha256:4175929ca77338e6a57ff232c0e80443411ac0b489bfff755988ae70e3f62a97 \ + --hash=sha256:349514d69ce089b0e39014345907318ddba8ceca32a187635601c391c36ecdd6 \ + --hash=sha256:d4a380c164f8c40660ce8f96791695aa74d32a2a45d4038a2a4826d9ec2c61f6 \ + --hash=sha256:8457e05994081b2c586f84ab12fb3427129590e3b451498dde729b771b50c068 \ + --hash=sha256:26c64da280c9e097081d12047f13b4adba776b19885da5e488c093d4a1461056 \ + --hash=sha256:3a1e2dfa7ba8adb7511f3560e968ff2a66e7d0cd2f454219a0ab778c3c2e1a5c \ + --hash=sha256:8d877467096dc117500a5ed38238085a81518252db3991793a8468ca97445e6c \ + --hash=sha256:b71915140261916e50dbf62dec1b448c159a789e23bc89b3ad1e6516f677036f \ + --hash=sha256:033dd5f91a8a967a007d3d05cbabec67040d6ff3e159ea17d3f681c3114a0d78 \ + --hash=sha256:7e309db07b13d84bc5eb6ffdfd46f00b2301ce78871809e177f599db3f31fe24 \ + --hash=sha256:aa0919735afbdeada9687347fa7963ca9732c60b1005832ac9d4853a9cb48be9 \ + --hash=sha256:31367b5d8389373aff1742b66608c4bff318a9015d94981a8c1919e82fe983ca \ + --hash=sha256:a23292d6093748eee3f7ed85dbe6c9abd24d4d399d7044bc323ff39834966d6c \ + --hash=sha256:ad0faec8ee89cd50a486804b7d9a97016a1d2074298ceadbc75efc6691030b36 \ + --hash=sha256:43b9a44b42c67adbc02fc86efacf27a374b09971cd58e0cd9739b8a748d19be5 \ + --hash=sha256:6fdef8939f528dd9386c4941e88227a3ccf124c8278ebc7e98533294ae446ef1 \ + --hash=sha256:f65b7d87534c567136d73f9bcdff46ad5ded2aabe8e89be7ba97395129d48e72 \ + --hash=sha256:37b41c8869347388b1794a1c92c5e981ab764638f62e026252026a650b1b266c \ + --hash=sha256:6165914b1a209458201bf0a99dcf5f44f58477ba23ac71d7b5e4ca197e174f30 \ + --hash=sha256:c4d9d1edd7c92d0b35082ae3a230705206d6beb3c07a8c72ebdd980820598f9c \ + --hash=sha256:42376b0330cbbe5864b480de16a48f4c82aae95dca9cdcf81490e7ca87cc131a \ + --hash=sha256:454a4d8c81882cbff19eaed90d0a4e42602970c686c8cd34071c8097e3dfdb5c \ + --hash=sha256:f6e691fcf0e03575bef7efd24b331282ad3c1df75855be368e4c3c2cfba6967f \ + --hash=sha256:4f657a16f81b0497e5c67b3c151d9eb8c99d2d3a7ab996500e9ae453e8b0e0fe \ + --hash=sha256:fc7ecc7b38ebf6ac072efa209c5b8d02eb7af393a8a2c812fc01dcb037a86c48 \ + --hash=sha256:f7b628f4dcfc0b726ede7d2024cf79107d54851451e15edeae2f4ee55554f3c6 \ + --hash=sha256:696661c6b6e58361aba0b14a2c5977c049f481bc7fe41759a55e86b13b361905 \ + --hash=sha256:32f384ff9dd555ee21508887b12316d8bd04921b396c876b4d4c87a30a3c8a13 \ + --hash=sha256:7b03a3f32cd5fcdd8460de690579d1dfa1965bd333b89bd3d202907c7b49ada4 \ + --hash=sha256:71c285488c5f767e102a389f9efb11e93e6345247d60043efeffa616a3056945 \ + --hash=sha256:906a33c2fe834cb47daafd09d77405260caa5fa1354219bec5df9ac2b4e909fa \ + --hash=sha256:5730e44fc20891cadea7d163a2dad723f95cf81199e1a02dac339a11437a999d \ + --hash=sha256:3ae89fd45bc9c72dcc0a489aa2411f139ee8a32468c387188be21d25f20f83d3 +packaging==21.3; python_version >= "3.7" and python_full_version >= "3.6.0" \ + --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522 \ + --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb +pandas==1.4.2; python_version >= "3.8" and python_full_version >= "3.6.0" \ + --hash=sha256:be67c782c4f1b1f24c2f16a157e12c2693fd510f8df18e3287c77f33d124ed07 \ + --hash=sha256:5a206afa84ed20e07603f50d22b5f0db3fb556486d8c2462d8bc364831a4b417 \ + --hash=sha256:0010771bd9223f7afe5f051eb47c4a49534345dfa144f2f5470b27189a4dd3b5 \ + --hash=sha256:3228198333dd13c90b6434ddf61aa6d57deaca98cf7b654f4ad68a2db84f8cfe \ + --hash=sha256:5b79af3a69e5175c6fa7b4e046b21a646c8b74e92c6581a9d825687d92071b51 \ + --hash=sha256:5586cc95692564b441f4747c47c8a9746792e87b40a4680a2feb7794defb1ce3 \ + --hash=sha256:061609334a8182ab500a90fe66d46f6f387de62d3a9cb9aa7e62e3146c712167 \ + --hash=sha256:b8134651258bce418cb79c71adeff0a44090c98d955f6953168ba16cc285d9f7 \ + --hash=sha256:df82739e00bb6daf4bba4479a40f38c718b598a84654cbd8bb498fd6b0aa8c16 \ + --hash=sha256:385c52e85aaa8ea6a4c600a9b2821181a51f8be0aee3af6f2dcb41dafc4fc1d0 \ + --hash=sha256:295872bf1a09758aba199992c3ecde455f01caf32266d50abc1a073e828a7b9d \ + --hash=sha256:95c1e422ced0199cf4a34385ff124b69412c4bc912011ce895582bee620dfcaa \ + --hash=sha256:5c54ea4ef3823108cd4ec7fb27ccba4c3a775e0f83e39c5e17f5094cb17748bc \ + --hash=sha256:c072c7f06b9242c855ed8021ff970c0e8f8b10b35e2640c657d2a541c5950f59 \ + --hash=sha256:f549097993744ff8c41b5e8f2f0d3cbfaabe89b4ae32c8c08ead6cc535b80139 \ + --hash=sha256:ff08a14ef21d94cdf18eef7c569d66f2e24e0bc89350bcd7d243dd804e3b5eb2 \ + --hash=sha256:8c5bf555b6b0075294b73965adaafb39cf71c312e38c5935c93d78f41c19828a \ + --hash=sha256:51649ef604a945f781105a6d2ecf88db7da0f4868ac5d45c51cb66081c4d9c73 \ + --hash=sha256:d0d4f13e4be7ce89d7057a786023c461dd9370040bdb5efa0a7fe76b556867a0 \ + --hash=sha256:09d8be7dd9e1c4c98224c4dfe8abd60d145d934e9fc1f5f411266308ae683e6a \ + --hash=sha256:92bc1fc585f1463ca827b45535957815b7deb218c549b7c18402c322c7549a12 +pandocfilters==1.5.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7" \ + --hash=sha256:33aae3f25fd1a026079f5d27bdd52496f0e0803b3469282162bafdcbdf6ef14f \ + --hash=sha256:0b679503337d233b4339a817bfc8c50064e2eff681314376a47cb582305a7a38 +paramiko==2.11.0 \ + --hash=sha256:655f25dc8baf763277b933dfcea101d636581df8d6b9774d1fb653426b72c270 \ + --hash=sha256:003e6bee7c034c21fbb051bf83dc0a9ee4106204dd3c53054c71452cc4ec3938 +parso==0.8.3; python_version >= "3.8" \ + --hash=sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75 \ + --hash=sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0 +penaltymodel-cache==0.4.5; python_version >= "3.6" \ + --hash=sha256:84167042a62f16f47bb98286a163c365d416f23b9f2ba86a928b56d25c2d5d17 \ + --hash=sha256:4872ffc070aaba6308358fd4180ae647c01f5509173cf774e2c10294452e92d7 +penaltymodel-lp==0.1.6; python_version >= "3.6" \ + --hash=sha256:5203d6d9af3efebd0744ac984dd367fb8eb48fe5afb060b6c2273d5b62dac101 \ + --hash=sha256:6cf56a6cf91143fedd7b2e1d17fc10c5b118cfb417627e91334fd51ce9441629 +penaltymodel-maxgap==0.5.6; python_version >= "3.6" \ + --hash=sha256:83aa7625ca8c606f5759d55101ede1d7cb8451cbb191ecf27ccaa6f7e40ede9b +penaltymodel==0.16.6; python_version >= "3.6" \ + --hash=sha256:aa804609171168110f22380ba3b55feaaae62f930563bedb046eba6273b7de73 \ + --hash=sha256:00fc3ce3f798e047e9dd1316790782d13c942ebf794063f07cd69686cd0599f4 +pennylane-lightning==0.23.0 \ + --hash=sha256:a30584931f5b1cd71fec2d43def48772178ca37bd1a334ae58cd1a884ce621df \ + --hash=sha256:581c801272ff6975053731f9043bb08a628e75796ef168807486e90290812486 \ + --hash=sha256:50a3b29cfd2214b8e23e05b0e05020c51f8b7a0ddc4795df086f00a9d190b8c3 \ + --hash=sha256:1c4a26b0378c96216d551272076ff5a9176b2f64ed8b57d839a6a64d841cfe68 \ + --hash=sha256:a57065a8ee5b1aa6d787e5f9d50a9867a9c8f3833ef0a21b3fc2b5b9d40e10e1 \ + --hash=sha256:c7a2db85becd5872724706d83467d955f60551f2ac15cd83275966dea96aa3da \ + --hash=sha256:baea128e3988e7c6b828de9d1e767534756b7795f788c385e977dbe1410cbbd4 \ + --hash=sha256:23b0e08538a33931aaccdd07097ba76210a9c98dd05ca67e73f75bf0a7a2f3cf \ + --hash=sha256:da0e2ee7cee6860c7a31427f78b78a123f526a90d5eea566a5cafcc945074ccb \ + --hash=sha256:f1b2f1c5fc65eab5e32ad07dfd3e7f7ae43da4ddb96c1005fba08706a2fb553b \ + --hash=sha256:175f900c8ac760d74c2fb7df3f818db18824e366f632465f48fb2e9e3613683c \ + --hash=sha256:45cfd28068f41a90e51af4c2a905d06b730081ae9c7ad0412058173f69622979 \ + --hash=sha256:3a02a87bae4414aae27339a97abfe3342364013482b325bd852b9abeb3964a03 \ + --hash=sha256:b6d92040d8ab525908c4eea06d537d02c1d090bb0941d183520a01273198d38a \ + --hash=sha256:437e3055902c0b2f9193e4018e38d361e3c99a5b51f6a05e52ede09a8552f921 \ + --hash=sha256:b7807a7142158c0b3d5e85cf377d6fd6de9ef3ff37f6e7cd9601b5466086d549 \ + --hash=sha256:a5a1e04a50296b2b1be77237839c5a0033b26e65df876585dce9c4339ef7659d \ + --hash=sha256:c06d97a3e9ba30a0dae932b788fa69a8ed5fb29496710792c1d9730b3b7df8dd \ + --hash=sha256:72cf090c1c010a4e9b7685471af4b20fc7569cc2e8b32e4db8de00c500be22bc \ + --hash=sha256:0b38ab58e0e85e19a51a243e1c08812d3b0c608665c809c5ab721f9468f229fc \ + --hash=sha256:f6e8fc1ff54700b3de191cdff26a0e722a2998ea7c75c8d03eaf7ac404cace08 \ + --hash=sha256:98bac26d99eb72a76274a24f06bbb0bfb876e2514938ab7b13e981dbc834d313 \ + --hash=sha256:c1377d4affada497e147e296fe35c40906853575b4d84d3c200214c21203b739 \ + --hash=sha256:fe30628404715f9f8b2cb37c6a250bc69dce5be2bac7333f3516851828792c23 \ + --hash=sha256:9459c665397b0120f4944f7bd45ff9ebd1258e8520fe6df96b0ec49cb95a9893 +pennylane==0.20.0 \ + --hash=sha256:6228f06809d426397a47253de335012c830c3a469ec7525bb3b2aa1cf2174e86 \ + --hash=sha256:bae6473c86b6a52c12c040d062c4620274a9fe67ee4ffc4b0452df93b52b6d14 +pexpect==4.8.0; sys_platform != "win32" and python_version >= "3.8" \ + --hash=sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937 \ + --hash=sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c +pickleshare==0.7.5; python_version >= "3.8" \ + --hash=sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56 \ + --hash=sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca +pillow==9.1.1; python_version >= "3.7" and python_full_version >= "3.6.0" \ + --hash=sha256:42dfefbef90eb67c10c45a73a9bc1599d4dac920f7dfcbf4ec6b80cb620757fe \ + --hash=sha256:ffde4c6fabb52891d81606411cbfaf77756e3b561b566efd270b3ed3791fde4e \ + --hash=sha256:9c857532c719fb30fafabd2371ce9b7031812ff3889d75273827633bca0c4602 \ + --hash=sha256:59789a7d06c742e9d13b883d5e3569188c16acb02eeed2510fd3bfdbc1bd1530 \ + --hash=sha256:4d45dbe4b21a9679c3e8b3f7f4f42a45a7d3ddff8a4a16109dff0e1da30a35b2 \ + --hash=sha256:e9ed59d1b6ee837f4515b9584f3d26cf0388b742a11ecdae0d9237a94505d03a \ + --hash=sha256:b3fe2ff1e1715d4475d7e2c3e8dabd7c025f4410f79513b4ff2de3d51ce0fa9c \ + --hash=sha256:5b650dbbc0969a4e226d98a0b440c2f07a850896aed9266b6fedc0f7e7834108 \ + --hash=sha256:0b4d5ad2cd3a1f0d1df882d926b37dbb2ab6c823ae21d041b46910c8f8cd844b \ + --hash=sha256:9370d6744d379f2de5d7fa95cdbd3a4d92f0b0ef29609b4b1687f16bc197063d \ + --hash=sha256:b761727ed7d593e49671d1827044b942dd2f4caae6e51bab144d4accf8244a84 \ + --hash=sha256:8a66fe50386162df2da701b3722781cbe90ce043e7d53c1fd6bd801bca6b48d4 \ + --hash=sha256:2b291cab8a888658d72b575a03e340509b6b050b62db1f5539dd5cd18fd50578 \ + --hash=sha256:1d4331aeb12f6b3791911a6da82de72257a99ad99726ed6b63f481c0184b6fb9 \ + --hash=sha256:8844217cdf66eabe39567118f229e275f0727e9195635a15e0e4b9227458daaf \ + --hash=sha256:b6617221ff08fbd3b7a811950b5c3f9367f6e941b86259843eab77c8e3d2b56b \ + --hash=sha256:20d514c989fa28e73a5adbddd7a171afa5824710d0ab06d4e1234195d2a2e546 \ + --hash=sha256:088df396b047477dd1bbc7de6e22f58400dae2f21310d9e2ec2933b2ef7dfa4f \ + --hash=sha256:53c27bd452e0f1bc4bfed07ceb235663a1df7c74df08e37fd6b03eb89454946a \ + --hash=sha256:3f6c1716c473ebd1649663bf3b42702d0d53e27af8b64642be0dd3598c761fb1 \ + --hash=sha256:c67db410508b9de9c4694c57ed754b65a460e4812126e87f5052ecf23a011a54 \ + --hash=sha256:f054b020c4d7e9786ae0404278ea318768eb123403b18453e28e47cdb7a0a4bf \ + --hash=sha256:c17770a62a71718a74b7548098a74cd6880be16bcfff5f937f900ead90ca8e92 \ + --hash=sha256:f3f6a6034140e9e17e9abc175fc7a266a6e63652028e157750bd98e804a8ed9a \ + --hash=sha256:f372d0f08eff1475ef426344efe42493f71f377ec52237bf153c5713de987251 \ + --hash=sha256:09e67ef6e430f90caa093528bd758b0616f8165e57ed8d8ce014ae32df6a831d \ + --hash=sha256:66daa16952d5bf0c9d5389c5e9df562922a59bd16d77e2a276e575d32e38afd1 \ + --hash=sha256:d78ca526a559fb84faaaf84da2dd4addef5edb109db8b81677c0bb1aad342601 \ + --hash=sha256:55e74faf8359ddda43fee01bffbc5bd99d96ea508d8a08c527099e84eb708f45 \ + --hash=sha256:7c150dbbb4a94ea4825d1e5f2c5501af7141ea95825fadd7829f9b11c97aaf6c \ + --hash=sha256:769a7f131a2f43752455cc72f9f7a093c3ff3856bf976c5fb53a59d0ccc704f6 \ + --hash=sha256:488f3383cf5159907d48d32957ac6f9ea85ccdcc296c14eca1a4e396ecc32098 \ + --hash=sha256:0b525a356680022b0af53385944026d3486fc8c013638cf9900eb87c866afb4c \ + --hash=sha256:6e760cf01259a1c0a50f3c845f9cad1af30577fd8b670339b1659c6d0e7a41dd \ + --hash=sha256:a4165205a13b16a29e1ac57efeee6be2dfd5b5408122d59ef2145bc3239fa340 \ + --hash=sha256:937a54e5694684f74dcbf6e24cc453bfc5b33940216ddd8f4cd8f0f79167f765 \ + --hash=sha256:baf3be0b9446a4083cc0c5bb9f9c964034be5374b5bc09757be89f5d2fa247b8 \ + --hash=sha256:7502539939b53d7565f3d11d87c78e7ec900d3c72945d4ee0e2f250d598309a0 +plucky==0.4.3; python_version >= "3.7" \ + --hash=sha256:a358878f3e45b5e51d0b4e5b5c89d704422a72c2cf8ee9aaf9acedfa53f89105 \ + --hash=sha256:5bc75d43ae6b40f1b7ba42000b37e4934fa6bd2d6a6cd4e47461f803a404c194 +plum-dispatch==1.5.16; python_version >= "3.7" \ + --hash=sha256:ec52f17bc8756b70ffb0fcc06838f90f6a82c2490c4ef7d73bccc68e80864f48 \ + --hash=sha256:0c2ce2866f6a34f0ad0e4ce064de674cd119b7ca3e2e9cb4760d8db5143fd180 \ + --hash=sha256:92891b52e393a5cba0c5ca4a2c84a59a26cca78c190fdf2c186ac04b88013f96 \ + --hash=sha256:e651a11a61f6233c741705ed95e9387542ad614525afe614224399c72ad463a7 \ + --hash=sha256:97e35f2ed5091648042cc5d7b918007c2889beb3056a7ad82ac4c5e7d7159942 \ + --hash=sha256:dbc8c549e629c668e24efd8291227b3e7cfe465e35c980159815e68aa5d9d122 \ + --hash=sha256:396481b93a4f01c4d3c4a61dc5b3a68e0e68f8c9973a26bdc336aca634079cab \ + --hash=sha256:d820be58ef2d446d891e41315fda2e1c300015c66ddfefa08fdcd79b5534d288 \ + --hash=sha256:6dd4e7ec070402582567eab60c2f6603b7a6c0b5ddc184f0f50c1520c819bede \ + --hash=sha256:6ba90bb9cced6a7c09ccad7f40da25fca378a0c14474e215459ada93c1b09946 \ + --hash=sha256:8302c81b5070d94d48c2a13abe28a14a92eff41b75f682a38ed24c98e59875db \ + --hash=sha256:d6efc125236cde4cece0208e349fac4b4ad8f5021e28b821769da6597798c201 \ + --hash=sha256:5770911b29cc2bef49f98a19fe30fb3da5c76b56a785b4b602193fdb0f2525eb \ + --hash=sha256:fd0d6d3ec102abb1ddd9269e6562afc947e3e4c3d9c457e83d056f545a5d8c1f \ + --hash=sha256:9f2fc90de973545a06afe117376e3f89c0f78bca1cda89d26b9e43c9f5691e8b \ + --hash=sha256:8c18ebf356906db3ab7c8a46b490a6175070e2ef07d9faddf5002d27d8a0bee3 \ + --hash=sha256:0255ecfb4628154a33d77bea3484f83f91fd952122784d6c8324c00d660c9d06 \ + --hash=sha256:850fe704446dac53d2279c8dd4ac273e262f541b69823db5f4d896985de06bcd \ + --hash=sha256:880237874524b74fa5c5961110f5f7aa4b2e5d05ed154a3780cb1208f177bf4b \ + --hash=sha256:584a4dff3073d8389b0d5909bd5f0a8a3ef17f5fb646f5d84a48ae10b6fe3a40 \ + --hash=sha256:bceb80a11112235ceed24eb11a3baab3c10587536259bc983ee7989449b8c14a \ + --hash=sha256:a586ae204826e907ad4cbbb5b4e921f3950c57a18ecda3ae14ce9249c9354212 \ + --hash=sha256:bd49b71792af2fd1c7137ea56c193f98c6dacb15810403a808ff6ea0de2a84ff \ + --hash=sha256:188894bf2a4c7da4c57b70fac44cd49afed0c2ed43c054fa67a58349334a2811 \ + --hash=sha256:f4c6f7859de7a093e9db5036ca5de952a33f51b654a47c753ec443b59e554786 \ + --hash=sha256:2955e466cf144f080de6472d0fa48ab00f78a919c34f2bb5941e0b8228e92c9a \ + --hash=sha256:b2ecbd15916a7e61db7aff49b63fc3df1761260a4e6d8eea1382c0b51a0a36cd \ + --hash=sha256:2d06b3fcec9117033f63a0c1229fc29318b834b89b6adafd65edc726273a71ce \ + --hash=sha256:81680e29d21db56fda1feaf8d77370ed46b3b65c23ec4609b34e68d1da20e68c \ + --hash=sha256:7b1646e1e3d86a004d38208bfb1605b79d306e36a3a925f4aa9009f4ba0608e0 \ + --hash=sha256:bdc78f0e0ec882fc970962775afc1d4a07c0c4d6dc56a1ffdd81cb1a00568a4f \ + --hash=sha256:abaea0b4ee1fa04d0b8f1a40210b06903c26feafac0d5d4e81acdcb357b80739 \ + --hash=sha256:13ed2ed354c59819ba9d67620e789421802797be4f5bce49f763f9b5b0a21a8a \ + --hash=sha256:ecdd686106bae542afa9d7282cca2d8d2885749446b1868e06d75be9faa6b21a \ + --hash=sha256:e6f137b793026797e213d74ab63b8edd15931cf8cc46387644538cbde1c79021 \ + --hash=sha256:b0d3c7461e2e8ad1ace10de5b1f01d8885e79017f3c81450010ca5f9236fa733 +ply==3.11; python_version >= "3.6" \ + --hash=sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce \ + --hash=sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3 +prometheus-client==0.14.1; python_version >= "3.7" \ + --hash=sha256:522fded625282822a89e2773452f42df14b5a8e84a86433e3f8a189c1d54dc01 \ + --hash=sha256:5459c427624961076277fdc6dc50540e2bacb98eebde99886e59ec55ed92093a +prompt-toolkit==3.0.29; python_full_version >= "3.6.2" and python_version >= "3.8" \ + --hash=sha256:62291dad495e665fca0bda814e342c69952086afb0f4094d0893d357e5c78752 \ + --hash=sha256:bd640f60e8cecd74f0dc249713d433ace2ddc62b65ee07f96d358e0b152b6ea7 +protobuf==3.13.0; python_full_version >= "3.6.0" and python_version >= "3.6" \ + --hash=sha256:9c2e63c1743cba12737169c447374fab3dfeb18111a460a8c1a000e35836b18c \ + --hash=sha256:1e834076dfef9e585815757a2c7e4560c7ccc5962b9d09f831214c693a91b463 \ + --hash=sha256:df3932e1834a64b46ebc262e951cd82c3cf0fa936a154f0a42231140d8237060 \ + --hash=sha256:8c35bcbed1c0d29b127c886790e9d37e845ffc2725cc1db4bd06d70f4e8359f4 \ + --hash=sha256:339c3a003e3c797bc84499fa32e0aac83c768e67b3de4a5d7a5a9aa3b0da634c \ + --hash=sha256:361acd76f0ad38c6e38f14d08775514fbd241316cce08deb2ce914c7dfa1184a \ + --hash=sha256:9edfdc679a3669988ec55a989ff62449f670dfa7018df6ad7f04e8dbacb10630 \ + --hash=sha256:5db9d3e12b6ede5e601b8d8684a7f9d90581882925c96acf8495957b4f1b204b \ + --hash=sha256:c8abd7605185836f6f11f97b21200f8a864f9cb078a193fe3c9e235711d3ff1e \ + --hash=sha256:4d1174c9ed303070ad59553f435846a2f877598f59f9afc1b89757bdf846f2a7 \ + --hash=sha256:0bba42f439bf45c0f600c3c5993666fcb88e8441d011fad80a11df6f324eef33 \ + --hash=sha256:c0c5ab9c4b1eac0a9b838f1e46038c3175a95b0f2d944385884af72876bd6bc7 \ + --hash=sha256:f68eb9d03c7d84bd01c790948320b768de8559761897763731294e3bc316decb \ + --hash=sha256:91c2d897da84c62816e2f473ece60ebfeab024a16c1751aaf31100127ccd93ec \ + --hash=sha256:3dee442884a18c16d023e52e32dd34a8930a889e511af493f6dc7d4d9bf12e4f \ + --hash=sha256:e7662437ca1e0c51b93cadb988f9b353fa6b8013c0385d63a70c8a77d84da5f9 \ + --hash=sha256:d69697acac76d9f250ab745b46c725edf3e98ac24763990b24d58c16c642947a \ + --hash=sha256:6a82e0c8bb2bf58f606040cc5814e07715b2094caeba281e2e7d0b0e2e397db5 +psutil==5.9.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ + --hash=sha256:799759d809c31aab5fe4579e50addf84565e71c1dc9f1c31258f159ff70d3f87 \ + --hash=sha256:9272167b5f5fbfe16945be3db475b3ce8d792386907e673a209da686176552af \ + --hash=sha256:0904727e0b0a038830b019551cf3204dd48ef5c6868adc776e06e93d615fc5fc \ + --hash=sha256:e7e10454cb1ab62cc6ce776e1c135a64045a11ec4c6d254d3f7689c16eb3efd2 \ + --hash=sha256:56960b9e8edcca1456f8c86a196f0c3d8e3e361320071c93378d41445ffd28b0 \ + --hash=sha256:44d1826150d49ffd62035785a9e2c56afcea66e55b43b8b630d7706276e87f22 \ + --hash=sha256:c7be9d7f5b0d206f0bbc3794b8e16fb7dbc53ec9e40bbe8787c6f2d38efcf6c9 \ + --hash=sha256:abd9246e4cdd5b554a2ddd97c157e292ac11ef3e7af25ac56b08b455c829dca8 \ + --hash=sha256:29a442e25fab1f4d05e2655bb1b8ab6887981838d22effa2396d584b740194de \ + --hash=sha256:20b27771b077dcaa0de1de3ad52d22538fe101f9946d6dc7869e6f694f079329 \ + --hash=sha256:58678bbadae12e0db55186dc58f2888839228ac9f41cc7848853539b70490021 \ + --hash=sha256:3a76ad658641172d9c6e593de6fe248ddde825b5866464c3b2ee26c35da9d237 \ + --hash=sha256:a6a11e48cb93a5fa606306493f439b4aa7c56cb03fc9ace7f6bfa21aaf07c453 \ + --hash=sha256:068935df39055bf27a29824b95c801c7a5130f118b806eee663cad28dca97685 \ + --hash=sha256:0f15a19a05f39a09327345bc279c1ba4a8cfb0172cc0d3c7f7d16c813b2e7d36 \ + --hash=sha256:db417f0865f90bdc07fa30e1aadc69b6f4cad7f86324b02aa842034efe8d8c4d \ + --hash=sha256:91c7ff2a40c373d0cc9121d54bc5f31c4fa09c346528e6a08d1845bce5771ffc \ + --hash=sha256:fea896b54f3a4ae6f790ac1d017101252c93f6fe075d0e7571543510f11d2676 \ + --hash=sha256:3054e923204b8e9c23a55b23b6df73a8089ae1d075cb0bf711d3e9da1724ded4 \ + --hash=sha256:d2d006286fbcb60f0b391741f520862e9b69f4019b4d738a2a45728c7e952f1b \ + --hash=sha256:b14ee12da9338f5e5b3a3ef7ca58b3cba30f5b66f7662159762932e6d0b8f680 \ + --hash=sha256:19f36c16012ba9cfc742604df189f2f28d2720e23ff7d1e81602dbe066be9fd1 \ + --hash=sha256:944c4b4b82dc4a1b805329c980f270f170fdc9945464223f2ec8e57563139cf4 \ + --hash=sha256:4b6750a73a9c4a4e689490ccb862d53c7b976a2a35c4e1846d049dcc3f17d83b \ + --hash=sha256:a8746bfe4e8f659528c5c7e9af5090c5a7d252f32b2e859c584ef7d8efb1e689 \ + --hash=sha256:79c9108d9aa7fa6fba6e668b61b82facc067a6b81517cab34d07a84aa89f3df0 \ + --hash=sha256:28976df6c64ddd6320d281128817f32c29b539a52bdae5e192537bc338a9ec81 \ + --hash=sha256:b88f75005586131276634027f4219d06e0561292be8bd6bc7f2f00bdabd63c4e \ + --hash=sha256:645bd4f7bb5b8633803e0b6746ff1628724668681a434482546887d22c7a9537 \ + --hash=sha256:32c52611756096ae91f5d1499fe6c53b86f4a9ada147ee42db4991ba1520e574 \ + --hash=sha256:f65f9a46d984b8cd9b3750c2bdb419b2996895b005aefa6cbaba9a143b1ce2c5 \ + --hash=sha256:57f1819b5d9e95cdfb0c881a8a5b7d542ed0b7c522d575706a80bedc848c8954 +ptyprocess==0.7.0; sys_platform != "win32" and python_version >= "3.8" and os_name != "nt" \ + --hash=sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35 \ + --hash=sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220 +pure-eval==0.2.2; python_version >= "3.8" \ + --hash=sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350 \ + --hash=sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3 +py==1.11.0; python_full_version >= "3.7.0" and python_version >= "3.7" and implementation_name == "pypy" \ + --hash=sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378 \ + --hash=sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719 +pyasn1-modules==0.2.8; python_full_version >= "3.6.0" and python_version >= "3.6" \ + --hash=sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e \ + --hash=sha256:0fe1b68d1e486a1ed5473f1302bd991c1611d319bba158e98b106ff86e1d7199 \ + --hash=sha256:fe0644d9ab041506b62782e92b06b8c68cca799e1a9636ec398675459e031405 \ + --hash=sha256:a99324196732f53093a84c4369c996713eb8c89d360a496b599fb1a9c47fc3eb \ + --hash=sha256:0845a5582f6a02bb3e1bde9ecfc4bfcae6ec3210dd270522fee602365430c3f8 \ + --hash=sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74 \ + --hash=sha256:f39edd8c4ecaa4556e989147ebf219227e2cd2e8a43c7e7fcb1f1c18c5fd6a3d \ + --hash=sha256:b80486a6c77252ea3a3e9b1e360bc9cf28eaac41263d173c032581ad2f20fe45 \ + --hash=sha256:65cebbaffc913f4fe9e4808735c95ea22d7a7775646ab690518c056784bc21b4 \ + --hash=sha256:15b7c67fabc7fc240d87fb9aabf999cf82311a6d6fb2c70d00d3d0604878c811 \ + --hash=sha256:426edb7a5e8879f1ec54a1864f16b882c2837bfd06eee62f2c982315ee2473ed \ + --hash=sha256:cbac4bc38d117f2a49aeedec4407d23e8866ea4ac27ff2cf7fb3e5b570df19e0 \ + --hash=sha256:c29a5e5cc7a3f05926aff34e097e84f8589cd790ce0ed41b67aed6857b26aafd +pyasn1==0.4.8; python_full_version >= "3.6.0" and python_version >= "3.6" and python_version < "4" \ + --hash=sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3 \ + --hash=sha256:0458773cfe65b153891ac249bcf1b5f8f320b7c2ce462151f8fa74de8934becf \ + --hash=sha256:5c9414dcfede6e441f7e8f81b43b34e834731003427e5b09e4e00e3172a10f00 \ + --hash=sha256:6e7545f1a61025a4e58bb336952c5061697da694db1cae97b116e9c46abcf7c8 \ + --hash=sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d \ + --hash=sha256:78fa6da68ed2727915c4767bb386ab32cdba863caa7dbe473eaae45f9959da86 \ + --hash=sha256:08c3c53b75eaa48d71cf8c710312316392ed40899cb34710d092e96745a358b7 \ + --hash=sha256:03840c999ba71680a131cfaee6fab142e1ed9bbd9c693e285cc6aca0d555e576 \ + --hash=sha256:7ab8a544af125fb704feadb008c99a88805126fb525280b2270bb25cc1d78a12 \ + --hash=sha256:e89bf84b5437b532b0803ba5c9a5e054d21fec423a89952a74f87fa2c9b7bce2 \ + --hash=sha256:014c0e9976956a08139dc0712ae195324a75e142284d5f87f1a87ee1b068a359 \ + --hash=sha256:99fcc3c8d804d1bc6d9a099921e39d827026409a58f2a720dcdb89374ea0c776 \ + --hash=sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba +pybtex-docutils==1.0.2; python_version >= "3.7" \ + --hash=sha256:43aa353b6d498fd5ac30f0073a98e332d061d34fe619d3d50d1761f8fd4aa016 \ + --hash=sha256:6f9e3c25a37bcaac8c4f69513272706ec6253bb708a93d8b4b173f43915ba239 +pybtex==0.24.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.7" \ + --hash=sha256:e1e0c8c69998452fea90e9179aa2a98ab103f3eed894405b7264e517cc2fcc0f \ + --hash=sha256:818eae35b61733e5c007c3fcd2cfb75ed1bc8b4173c1f70b56cc4c0802d34755 +pycparser==2.21; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ + --hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \ + --hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206 +pydantic==1.9.1; python_full_version >= "3.6.1" and python_version >= "3.7" \ + --hash=sha256:c8098a724c2784bf03e8070993f6d46aa2eeca031f8d8a048dff277703e6e193 \ + --hash=sha256:c320c64dd876e45254bdd350f0179da737463eea41c43bacbee9d8c9d1021f11 \ + --hash=sha256:18f3e912f9ad1bdec27fb06b8198a2ccc32f201e24174cec1b3424dda605a310 \ + --hash=sha256:c11951b404e08b01b151222a1cb1a9f0a860a8153ce8334149ab9199cd198131 \ + --hash=sha256:8bc541a405423ce0e51c19f637050acdbdf8feca34150e0d17f675e72d119580 \ + --hash=sha256:e565a785233c2d03724c4dc55464559639b1ba9ecf091288dd47ad9c629433bd \ + --hash=sha256:a4a88dcd6ff8fd47c18b3a3709a89adb39a6373f4482e04c1b765045c7e282fd \ + --hash=sha256:447d5521575f18e18240906beadc58551e97ec98142266e521c34968c76c8761 \ + --hash=sha256:985ceb5d0a86fcaa61e45781e567a59baa0da292d5ed2e490d612d0de5796918 \ + --hash=sha256:059b6c1795170809103a1538255883e1983e5b831faea6558ef873d4955b4a74 \ + --hash=sha256:d12f96b5b64bec3f43c8e82b4aab7599d0157f11c798c9f9c528a72b9e0b339a \ + --hash=sha256:ae72f8098acb368d877b210ebe02ba12585e77bd0db78ac04a1ee9b9f5dd2166 \ + --hash=sha256:79b485767c13788ee314669008d01f9ef3bc05db9ea3298f6a50d3ef596a154b \ + --hash=sha256:494f7c8537f0c02b740c229af4cb47c0d39840b829ecdcfc93d91dcbb0779892 \ + --hash=sha256:f0f047e11febe5c3198ed346b507e1d010330d56ad615a7e0a89fae604065a0e \ + --hash=sha256:969dd06110cb780da01336b281f53e2e7eb3a482831df441fb65dd30403f4608 \ + --hash=sha256:177071dfc0df6248fd22b43036f936cfe2508077a72af0933d0c1fa269b18537 \ + --hash=sha256:9bcf8b6e011be08fb729d110f3e22e654a50f8a826b0575c7196616780683380 \ + --hash=sha256:a955260d47f03df08acf45689bd163ed9df82c0e0124beb4251b1290fa7ae728 \ + --hash=sha256:9ce157d979f742a915b75f792dbd6aa63b8eccaf46a1005ba03aa8a986bde34a \ + --hash=sha256:0bf07cab5b279859c253d26a9194a8906e6f4a210063b84b433cf90a569de0c1 \ + --hash=sha256:5d93d4e95eacd313d2c765ebe40d49ca9dd2ed90e5b37d0d421c597af830c195 \ + --hash=sha256:1542636a39c4892c4f4fa6270696902acb186a9aaeac6f6cf92ce6ae2e88564b \ + --hash=sha256:a9af62e9b5b9bc67b2a195ebc2c2662fdf498a822d62f902bf27cccb52dbbf49 \ + --hash=sha256:fe4670cb32ea98ffbf5a1262f14c3e102cccd92b1869df3bb09538158ba90fe6 \ + --hash=sha256:9f659a5ee95c8baa2436d392267988fd0f43eb774e5eb8739252e5a7e9cf07e0 \ + --hash=sha256:b83ba3825bc91dfa989d4eed76865e71aea3a6ca1388b59fc801ee04c4d8d0d6 \ + --hash=sha256:1dd8fecbad028cd89d04a46688d2fcc14423e8a196d5b0a5c65105664901f810 \ + --hash=sha256:02eefd7087268b711a3ff4db528e9916ac9aa18616da7bca69c1871d0b7a091f \ + --hash=sha256:7eb57ba90929bac0b6cc2af2373893d80ac559adda6933e562dcfb375029acee \ + --hash=sha256:4ce9ae9e91f46c344bec3b03d6ee9612802682c1551aaf627ad24045ce090761 \ + --hash=sha256:72ccb318bf0c9ab97fc04c10c37683d9eea952ed526707fabf9ac5ae59b701fd \ + --hash=sha256:61b6760b08b7c395975d893e0b814a11cf011ebb24f7d869e7118f5a339a82e1 \ + --hash=sha256:4988c0f13c42bfa9ddd2fe2f569c9d54646ce84adc5de84228cfe83396f3bd58 \ + --hash=sha256:1ed987c3ff29fff7fd8c3ea3a3ea877ad310aae2ef9889a119e22d3f2db0691a +pydata-sphinx-theme==0.8.1; python_version >= "3.7" \ + --hash=sha256:af2c99cb0b43d95247b1563860942ba75d7f1596360594fce510caaf8c4fcc16 \ + --hash=sha256:96165702253917ece13dd895e23b96ee6dce422dcc144d560806067852fe1fed +pyee==8.2.2; python_full_version >= "3.6.1" and python_full_version < "4.0.0" \ + --hash=sha256:c09f56e36eb10bf23aa2aacf145f690ded75b990a3d9523fd478b005940303d2 \ + --hash=sha256:5c7e60f8df95710dbe17550e16ce0153f83990c00ef744841b43f371ed53ebea +pygments==2.12.0; python_version >= "3.8" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.8" \ + --hash=sha256:dc9c10fb40944260f6ed4c688ece0cd2048414940f1cea51b8b226318411c519 \ + --hash=sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb +pylatexenc==2.10 \ + --hash=sha256:3dd8fd84eb46dc30bee1e23eaab8d8fb5a7f507347b23e5f38ad9675c84f40d3 +pynacl==1.5.0; python_version >= "3.6" \ + --hash=sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1 \ + --hash=sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92 \ + --hash=sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394 \ + --hash=sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d \ + --hash=sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858 \ + --hash=sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b \ + --hash=sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff \ + --hash=sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543 \ + --hash=sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93 \ + --hash=sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba +pyparsing==2.4.7; python_full_version >= "3.6.0" and python_version >= "3.7" \ + --hash=sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b \ + --hash=sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1 +pyppeteer==0.2.6; python_full_version >= "3.6.1" and python_full_version < "4.0.0" \ + --hash=sha256:85adde940cc96820725db59cbdb13384aefd0dd043858cfa4f1c086c0f9e4137 \ + --hash=sha256:4621bb890e54f43dce84f5139ea4d484a62886be1903c2fcb393af607943538f +pyrsistent==0.18.1; python_version >= "3.7" \ + --hash=sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1 \ + --hash=sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26 \ + --hash=sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e \ + --hash=sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6 \ + --hash=sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec \ + --hash=sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b \ + --hash=sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc \ + --hash=sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22 \ + --hash=sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8 \ + --hash=sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286 \ + --hash=sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6 \ + --hash=sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec \ + --hash=sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c \ + --hash=sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca \ + --hash=sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a \ + --hash=sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5 \ + --hash=sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045 \ + --hash=sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c \ + --hash=sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc \ + --hash=sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07 \ + --hash=sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96 +pysmt==0.9.5; python_version >= "3.6" \ + --hash=sha256:0f95e6baa1f5672b414bda050d7b9f1f2d4e8cbfd48c7c0dc019b00b6c975a68 \ + --hash=sha256:0c796a6d4e4c8b25ade9eca48b9876ce3a147f4e0c0b851469511f55b9a0ec47 +pysocks==1.7.1; python_full_version >= "3.6.0" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7") and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") \ + --hash=sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299 \ + --hash=sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5 \ + --hash=sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0 +python-constraint==1.4.0; python_version >= "3.6" \ + --hash=sha256:501d6f17afe0032dfc6ea6c0f8acc12e44f992733f00e8538961031ef27ccb8e +python-dateutil==2.8.2; python_full_version >= "3.7.0" and python_version >= "3.8" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6") \ + --hash=sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 \ + --hash=sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 +pytz==2022.1; python_version >= "3.8" and python_full_version >= "3.6.0" \ + --hash=sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c \ + --hash=sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7 +pywin32==304; sys_platform == "win32" and platform_python_implementation != "PyPy" and python_version >= "3.7" and python_version < "4.0" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7") \ + --hash=sha256:3c7bacf5e24298c86314f03fa20e16558a4e4138fc34615d7de4070c23e65af3 \ + --hash=sha256:4f32145913a2447736dad62495199a8e280a77a0ca662daa2332acf849f0be48 \ + --hash=sha256:d3ee45adff48e0551d1aa60d2ec066fec006083b791f5c3527c40cd8aefac71f \ + --hash=sha256:30c53d6ce44c12a316a06c153ea74152d3b1342610f1b99d40ba2795e5af0269 \ + --hash=sha256:7ffa0c0fa4ae4077e8b8aa73800540ef8c24530057768c3ac57c609f99a14fd4 \ + --hash=sha256:cbbe34dad39bdbaa2889a424d28752f1b4971939b14b1bb48cbf0182a3bcfc43 \ + --hash=sha256:be253e7b14bc601718f014d2832e4c18a5b023cbe72db826da63df76b77507a1 \ + --hash=sha256:de9827c23321dcf43d2f288f09f3b6d772fee11e809015bdae9e69fe13213988 \ + --hash=sha256:f64c0377cf01b61bd5e76c25e1480ca8ab3b73f0c4add50538d332afdf8f69c5 \ + --hash=sha256:bb2ea2aa81e96eee6a6b79d87e1d1648d3f8b87f9a64499e0b92b30d141e76df \ + --hash=sha256:94037b5259701988954931333aafd39cf897e990852115656b014ce72e052e96 \ + --hash=sha256:ead865a2e179b30fb717831f73cf4373401fc62fbc3455a0889a7ddac848f83e \ + --hash=sha256:25746d841201fd9f96b648a248f731c1dec851c9a08b8e33da8b56148e4c65cc \ + --hash=sha256:d24a3382f013b21aa24a5cfbfad5a2cd9926610c0affde3e8ab5b3d7dbcf4ac9 +pywinpty==2.0.5; os_name == "nt" and python_version >= "3.7" \ + --hash=sha256:f86c76e2881c37e69678cbbf178109f8da1fa8584db24d58e1b9369b0276cfcb \ + --hash=sha256:ff9b52f182650cfdf3db1b264a6fe0963eb9d996a7a1fa843ac406c1e32111f8 \ + --hash=sha256:651ee1467bd7eb6f64d44dbc954b7ab7d15ab6d8adacc4e13299692c67c5d5d2 \ + --hash=sha256:e59a508ae78374febada3e53b5bbc90b5ad07ae68cbfd72a2e965f9793ae04f3 \ + --hash=sha256:e125d3f1804d8804952b13e33604ad2ca8b9b2cac92b27b521c005d1604794f8 +pyyaml==5.4.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0") \ + --hash=sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922 \ + --hash=sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393 \ + --hash=sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8 \ + --hash=sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185 \ + --hash=sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253 \ + --hash=sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc \ + --hash=sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347 \ + --hash=sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541 \ + --hash=sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5 \ + --hash=sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df \ + --hash=sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018 \ + --hash=sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63 \ + --hash=sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa \ + --hash=sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0 \ + --hash=sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b \ + --hash=sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf \ + --hash=sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46 \ + --hash=sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb \ + --hash=sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247 \ + --hash=sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc \ + --hash=sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc \ + --hash=sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696 \ + --hash=sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77 \ + --hash=sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183 \ + --hash=sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122 \ + --hash=sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6 \ + --hash=sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10 \ + --hash=sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db \ + --hash=sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e +pyzmq==23.1.0; python_full_version >= "3.7.0" and python_version >= "3.7" \ + --hash=sha256:6d346e551fa64b89d57a4ac74b9bc66703413f02f50093e089e861999ec5cccc \ + --hash=sha256:9c7fb691fb07ec7ab99fd173bb0e7e0248d31bf83d484a87b917a342f63812c9 \ + --hash=sha256:cd82cca9c489e441574804dbda2dd8e114cf3be7935b03de11dade2c9478aea6 \ + --hash=sha256:28f9164fb2658b7b414fa0894c75b1a9c61375774cdc1bdb7298beb042a2cd87 \ + --hash=sha256:53b2c1326c2e484d450932d2be739f064b7cb572faabec38386098a28516a529 \ + --hash=sha256:425ba851a6f9892bde1da2024d82e2fe6796bd77e3391fb96665c50fe9d4c6a5 \ + --hash=sha256:38f778a74e3889392e949326cfd0e9b2eb37dcbb2980d98fad2c51703d523db2 \ + --hash=sha256:ddf4ad1d651e6c9234945061e1a31fe27a4be0dea21c498b87b186fadf8f5919 \ + --hash=sha256:2b08774057ae7ce8a2eb4e7d54db05358234440706ce43a85814500c5d7bd22e \ + --hash=sha256:67ec63ae3c9c1fa2e077fcb42e77035e2121a04f987464bdf9945a28535d30ad \ + --hash=sha256:f4c7d370badc60ac94a554bc571a46d03e39d8aacfba8006b334512e184aed59 \ + --hash=sha256:f6c9d30888503f2f5f87d6d41f016301352dd98da4a861bd10663c3a2d99d3b5 \ + --hash=sha256:16b832adb5d8716f46051da5533c480250bf126984ce86804db6137a3a7f931b \ + --hash=sha256:da72a384a1d7e87490ca71182f3ab469ed21d847adc16b70c34faac5a3b12801 \ + --hash=sha256:6ab4b6108e69f63c917cd7ef7217c5727955b1ac90600e44a13ed5312019a014 \ + --hash=sha256:7626e8384275a7dea6f3d1f749fb5e00299042e9c895fc3dbe24cb154909c242 \ + --hash=sha256:cbc1184349ca6e5112898aa7fc3efa1b1bbae24ab1edc774cfd09cbfd3b091d7 \ + --hash=sha256:d977df6f7c4109ed1d96ffb6795f6af77114be606ae4556efbfc9cac725db65d \ + --hash=sha256:2951c29b8649f3672af9dca8ff61d86310d3664d9629788b1c66422fb13b1239 \ + --hash=sha256:bd2a13a0f8367e50347cbac87ae230ae1953935443240238f956bf10668bead6 \ + --hash=sha256:6bd7f18bd4cf51ea8d7e54825902cf36f9d2f35cc51ef618373988d5398b8dd0 \ + --hash=sha256:fab8a7877275060f7b303e1f91c218069a2814a616b6a5ee2d8a3737deb15915 \ + --hash=sha256:894be7d17228e7328cc188096c0162697211ec91761f6812fff12790cbe11c66 \ + --hash=sha256:bba54f97578943f48f621b4a7afb8eb022370da26a88b88ccc9fee9f3ef7ce45 \ + --hash=sha256:eb0ae5dfda83bbce660179d7b41c1c38fd833a54d2e6d9b258c644f3b75ef94d \ + --hash=sha256:523ba7fd4d8fe75ad09c1e574a648892b75a97d0cfc8005727681053ac19555b \ + --hash=sha256:6cd53e861bccc0bdc4620f68fb4a91d5bcfe9f4213cf8e200fa498044d33a6dc \ + --hash=sha256:81623c67cb71b93b5f7e06c9107f3781738ae86866db830c950223d87af2a235 \ + --hash=sha256:83f1c76068faf62c32a36dd62dc4db642c2027bbbd960f8f6345b59e9d4dc472 \ + --hash=sha256:312e56799410c34797417a4060a8bd37d4db1f06d1ec0c54f7c8fd81e0d90376 \ + --hash=sha256:6ff8708fabc9f9bc2949f457d39b4088c9656c4c9ac15fbbbbaafce8f6d07833 \ + --hash=sha256:8c3abf7eab5b76ae162c4fbb16d514a947fc57fd995b64e5ea8ef8ba3b888a69 \ + --hash=sha256:4fbcd657cda75574fd1315a4c44bd322bc2e219039fb09f146bbe6f8aef039e9 \ + --hash=sha256:540d7146c3cdc9bbffab039ea067f494eba24d1abe5bd33eb9f963c01e3305d4 \ + --hash=sha256:8679bb1dd723ecbea03b1f96c98972815775fd8ec756c440a14f289c436c472e \ + --hash=sha256:cfee22e072a382b92ee0709dbb8203dabd52d54258051e770d9d2a81b162530b \ + --hash=sha256:68e22c5d3be451e87d47f956b397a7823bfbde2176341bc902fba30f96831d7e \ + --hash=sha256:97d6c676dc97d593625d9fc48154f2ffeabb619a1e6fe8d2a5b53f97e3e9bdee \ + --hash=sha256:b3bc3cf200aab74f3d758586ac50295214eda496ac6a6636e0c881c5958d9123 \ + --hash=sha256:48bbc2db041ab28eeee4a3e8ada0ed336640946dd5a8e53dbd3805f9dbdcf0dc \ + --hash=sha256:67a049bcf967a39993858beed873ed3405536019820922d4efacfe35ab3da51a \ + --hash=sha256:3955dd5bbbe02f454655296ee36a66c334c7102a29b8458223d168c0380edfd5 \ + --hash=sha256:8a0f240bf43c29be1bd82d77e602a61c798e9de02e5f8bb7bb414cb814f43236 \ + --hash=sha256:7e7346b2b33dcd4a2171dd8a9870ae283eec8f6231dcbcf237a0f41e74751a50 \ + --hash=sha256:99dd85f0ca1db8d17a01a25c2bbb7784d25a2d39497c6beddbe96bff74194e04 \ + --hash=sha256:563d4281c4dbdf647d93114420151d33f895afc4c46b7115a67a0aa5347e6624 \ + --hash=sha256:154de02b15422af28b53d29a02de72121ba503634955017255573fc1f995143d \ + --hash=sha256:8757c62f7960cd26122f7aaaf86eda1e016fa85734c3777b8054dd334d7dea4d \ + --hash=sha256:f6c378b435a26fda8996579c0e324b108d2ca0d01b4661503a75634e5155559f \ + --hash=sha256:2e2ac40f7a91c740ec68d6db07ae19ea9259c959333c68bee56ab2c799a67d66 \ + --hash=sha256:ce8ba5ed8b0a7a203922d61cff45ee6001a41a9359f04f00d055a4e988755569 \ + --hash=sha256:93332c6972e4c91522c4810e907f3aea067424338071161b39cacded022559df \ + --hash=sha256:fc32e7d7f98cac3d8d5153ed2cb583158ae3d446a6efb8e28ccb1c54a09f4169 \ + --hash=sha256:86fb683cb9a9c0bb7476988b7957393ecdd22777d87d804442c66e62c99197f9 \ + --hash=sha256:057176dd3f5ccf5aad4abd662d76b6a39bbf799baaf2f39cd4fdaf2eab326e43 \ + --hash=sha256:05ec90a8da618f2398f9d1aa20b18a9ef332992c6ac23e8c866099faad6ef0d6 \ + --hash=sha256:1df26aa854bdd3a8341bf199064dd6aa6e240f2eaa3c9fa8d217e5d8b868c73e +qiskit-aer==0.9.1; python_version >= "3.6" \ + --hash=sha256:3bf5f615aaae7cc5f816c39a4e9108aabaed0cc894fb6f841e48ffd56574e7eb \ + --hash=sha256:047f5c9660d1a9e9ff92c61b93d32aafdee1b47ceebb6e4a5c23cac0be35aa48 \ + --hash=sha256:d98755261809c3c96fc0227334a347b6d3e63883ec2a4fa0b1e796f753fcfae7 \ + --hash=sha256:781ad57cbee00d2db62385953dfa98b71debb37dad236674b007c5e96cd8a530 \ + --hash=sha256:58164dbe2991875d22f2216cd23d9ed6955bb1ec4a8cc7094215ff83515514dd \ + --hash=sha256:b979c1449f1ff86e325f05478f7d690caabadae108270189630d639a06636dad \ + --hash=sha256:9bb7fa9b4d8df0b3804e30a70b7ee824fde0e73114fd779ea0e0c278efa82e3f \ + --hash=sha256:df498de2a07e0d46f0cedb0c8dff680a297bcaadabeee7bfbf6845970d6dfcb0 \ + --hash=sha256:6f701d69905703069ee8309b670c949432b8e85cb63155fb2ef17bca0a6b3302 \ + --hash=sha256:6ef89d62b8bc93cc0087b3e3c253cef70a7b07066f45b7c6484155090d41732a \ + --hash=sha256:f18776688e41fef93e8ac472c2bf4d5cf4560556280a0fba8c787a299ae32c2e \ + --hash=sha256:be297e17ef9fed974538169283cbb33f1eaba578a80b962413c06662eec356db \ + --hash=sha256:48a01692de2252d5c6f512dbe05a2752d89e29c30d21ce3020f5f34242dd3e50 \ + --hash=sha256:1680d1bdf7ff2ce69dc2c1271f32391f5d4e3a48c036bc62708b4b56366c604e \ + --hash=sha256:4d07efad9f879ea8aafa3e4709150079787b81c4611d0ff39b6bab4370807b6f \ + --hash=sha256:ee597165320a584e1f278858c9e31e5431edcc8856f34974b3a661eae3d18323 \ + --hash=sha256:108b8ce71451a8009cf6a6e061ee6c52e307cedd4f5391df24ee32277e9baf9d \ + --hash=sha256:929d63755cf121f2670764b57fc4ddf2700ef7812af0d3353a342033020f05b3 \ + --hash=sha256:21e44a6288fcb0ebe77ff3c02a746919766855e1ff568eeb41cf04c1727f2f64 \ + --hash=sha256:9fb641642b7ced1c3c6e96acc405192c17083cc966a611911c665256c46aff1e \ + --hash=sha256:ec8760cdfb608011f1abc65426890c1669b4465d8788bf277bf6a72ef101959b \ + --hash=sha256:2665fac2b493de4457eaaa5b13e20ab96ec5e86176693ab63a35a90710cf12a7 \ + --hash=sha256:1999134aaeaaca494a5946bae024bc81a26cb14910c0bfb9251cf0968236d496 \ + --hash=sha256:0ec3dec433b0dc278b97e88575147533cf1b1904cefa9c8cfe1d9d1f30dc2039 \ + --hash=sha256:fdae2a1c67b890c8ea68cd44caccc9b15477e77374b626fbfea6f7e4fa2e6285 +qiskit-aqua==0.9.5; python_version >= "3.6" \ + --hash=sha256:3ae50cfb008726e9862a17ba49d23bf987bc918239149db36f51c0f94e9cd36d \ + --hash=sha256:881859ecfef6c10eb23d800edbfd2ef1b977dbf89de114068d05668b5c2ea577 +qiskit-ibmq-provider==0.17.0; python_version >= "3.6" \ + --hash=sha256:3ffe3e43a229191f9b9dba6c05254cd0d5687f99728ba4dee8d143c59b5f0db5 \ + --hash=sha256:85df709f62828fc92fb8a43086ff8812f171143a1b93e43a96fbc50b0ab0f40e +qiskit-ignis==0.6.0; python_version >= "3.6" \ + --hash=sha256:b41bbbc90a042f89d1a5bb01100d59d72facdfe18cb9fc336af74f0e94aae7fc \ + --hash=sha256:8f8a2c0bbecb0c5868730db8945862e73d86b57b10fb9f41884c32568429c0a5 +qiskit-terra==0.18.3; python_version >= "3.6" \ + --hash=sha256:8737c8f1f4c6f29ec2fb02d73023f4854a396c33f78f4629a861a3e48fc789cc \ + --hash=sha256:cfbfca8d538d5316e7f7068e3917822609459f37421f11bb7702b2eb5d188ca5 \ + --hash=sha256:d687008c161cbd9377755b69ed611ccb91116dbdc50205fd9b5b5cf394d6d9e8 \ + --hash=sha256:5918169ecb36b705e04e28120fed76dcd67d82274782009102211996e9e62ed1 \ + --hash=sha256:88b1cb9c065a0170bf9add05094c37f3bc62e1baf064449e5df750a5b7fc1476 \ + --hash=sha256:0862407fc190d0ae22e6f898fc09b85e2fe451cbe1b9887b1dca61bc0ef6763e \ + --hash=sha256:5b68fc558ae4f33386edc9616dc4dcd2a6415b3f07bbb3a23abd88993de4bdb9 \ + --hash=sha256:68db22e3eda4c4be4c1b3b9035e30a42fad9cbd4a4a3c743224bb140e342e145 \ + --hash=sha256:9edf38cf12ff866b301425701fad25a24842a01d768e109fe04ba5257ef71ed2 \ + --hash=sha256:859b6bca0567395b4585fede4b360c83e656851c80685033d058cb32c6677cb1 \ + --hash=sha256:32662a84f5f0cdf598bcf4af9185ca0ddf65a080ac603697161d3adb3068c544 \ + --hash=sha256:9d6efa39ec95b79afe42b70722de50e212b5e3b38e99e3269101a9481e8de776 \ + --hash=sha256:1ad4ad40d5bbef19e526a94dc5aab086ca1e5f7466acf98a0a3f647c21e1c296 \ + --hash=sha256:5720f3e41531888db56b1e21d1a33dab42cc3ffb4f8876ef4b4890edadd7aee8 \ + --hash=sha256:75b01e7c09a56c74f5615117100834aab3b50cfc8d7164bdae2681f20fc23c61 \ + --hash=sha256:54bfa5ace11aa9bda5865bff4af8ea4c7b2faa4c31ce8b9525d885fb8b1ecc2b \ + --hash=sha256:e1c2bd89477b2196735059d1acff6a5ab9f144905626449b259f307e9632bb20 \ + --hash=sha256:c6e68329cbc99a81d1ffffd1af15d3149a14bc059e63e3fc10bcd43e4b3806ba \ + --hash=sha256:0e8acc70d51ce79d69d4d62ce776c96485a1be0f1fe53d9c39c11b7d9d0d02c1 \ + --hash=sha256:bffc2687811b47674430afa9587e838d459aa8d9de4a0dab4f576d855dea0b68 \ + --hash=sha256:13c2d8b307bed774bc2d54d00f8dbcac04d5f0ccb9e87bfa2b3b6bf48be9ecb2 \ + --hash=sha256:ce0fcb2d86e40a4353f27fc8bc9d1cbc20fd7e68d6c0c4f899835fadf2357cab \ + --hash=sha256:c243b64532e88e99ccf4ddd2232df5d821d445d05ea5ac4348ebfde53f0a013f \ + --hash=sha256:999485700f7721fc86d801f5173ab4d34f775ec5a73dc64692b28a9bf869c4ce \ + --hash=sha256:ef51d48e9a912ec3d0021b00d1d844bdd113c037987ba8b5ff55898e0ddc4c7c \ + --hash=sha256:a8e5380099a2fc9878b10d1cd619f7a90623960aacc80f07dfb0bccbcea63d55 +qiskit==0.31.0; python_version >= "3.6" \ + --hash=sha256:9f5c185332ae6aa1fe02b2ec66a9b6b2442e72cc94d078c3e6c534f4db63d455 +quandl==3.7.0; python_version >= "3.6" \ + --hash=sha256:0e3e5dc60fd057c73c67380b1b0f2e3dc0e4c500fb5e6e146ac3a3c0d992cd1d \ + --hash=sha256:6e0b82fbc7861610b3577c5397277c4220e065eee0fed4e46cd6b6021655b64c +rectangle-packer==2.0.1; python_version >= "3.7" \ + --hash=sha256:dd8e70184d2af8a195d568e0c2c3cc197f0c94c2a477475411e5ea978c67b27d \ + --hash=sha256:cd7364f7e12dd031f18534e9f050d5515c9f837fd6c78e3b679f935714302027 \ + --hash=sha256:8da87310463144cf7a48ca2e5a286aaa78847daf7c506aa2640212b0801167d5 \ + --hash=sha256:06c6f1d55f12c38e11659125d86e23430e4296ccff3584b3084e4d89197f4b62 \ + --hash=sha256:9eede5c4c596a3185678c06cd7d2135d71838d2f7751f3059c0f0622472599a6 \ + --hash=sha256:8a7de73dad5e2c77932f5fc38f892797388e6468c26cbbf4c9d1b426954bd5df \ + --hash=sha256:fe71a87503424cb549ec0f80563dc9139a62531295f500b53c7e1466ac27b65a \ + --hash=sha256:4dc74c75a3f9c238b004f7827524b23354b4056166ab43e2773d8ba5d51f48d7 \ + --hash=sha256:2fdbb32ac858c6b78a4fea6883d532751fe868fd2d368d28540acfca664b1c46 \ + --hash=sha256:d112c440b537bd7dc422d309fb89f1fda7538368dc01332173ff3f9462cbb0fc \ + --hash=sha256:d1cbefb39f5dd48105930d2ed1565cfbe59cd6a58301ec9c9046f0edc25b6c4d \ + --hash=sha256:c584992dcc2c57c959bd908576151fe0c1c6e35ea01896abba314a7d0a551205 \ + --hash=sha256:d91858e0856cc431dc44c9dc2e7e6f8082df27d2ca9c1511ddf4147d5e655173 \ + --hash=sha256:d02608a10493773040c8eddbfc0b16abed6aeb79bdb13fca05e13c3e11fe690f \ + --hash=sha256:37bcb342bb9f2fdf9e6b5504f57e1bd89d642b679727e20321e768cf87aa3915 \ + --hash=sha256:3d774ed75984cd71a7a490c310ac9476e4679a44164449874327b021e57cbc6b \ + --hash=sha256:e1f1013ad3292bcb9cdf1957ccc9860a90279514cbbac99d47569e311219c2f7 \ + --hash=sha256:3fa5519921e04fc0652c1179b5d0f9f35b571ac7cce153d44800487119daabd5 \ + --hash=sha256:3863170fcd41b9ed4d23775f118bfe6db4ed24fbc60963dec59d334b3bd98c06 \ + --hash=sha256:5cb6eae9b4a660c733657fc1b30548438520df800416f9d658861322ee67e33b \ + --hash=sha256:b0608c0e1d4592166c17a7cc28731d264088aeffeef37a66cd2e867932afcc3d \ + --hash=sha256:33c8cb30c116e32a60a802d65e8ff6792a860d48d3fd4e27118cd1948b544979 \ + --hash=sha256:6d2cd91a4ff93552da92ecec93cf9938571a36a0241c92f91b8fab57e157933a \ + --hash=sha256:43d377d54cf911fb437de921f4e86d47af4ac60ff9225c08861718183eedf292 \ + --hash=sha256:1b8f5bc7c2b4df6595e8c765401b566cc5be10ddfb6226f98f024465f6664b58 \ + --hash=sha256:23b4881dfb0a1ea4c5404a017a822255f619758890ec162cefeac1a834f1d59b \ + --hash=sha256:71a823ec6380b73d3c68b43faf8e42d081535d575b94bf4b8182758fc3bf0779 \ + --hash=sha256:4bca34d91032f8e1267505c186c371956f5207e65edefc848d76cc63f3d85451 \ + --hash=sha256:86cd91c1036b76ac8b6bcc9a2d553f74304a63a69c5eb4bf2684deb2a56de203 \ + --hash=sha256:68329b3a5c8b250b9defc4bcadd71ba714964795e66cc4eee46b0d7f2a0e0d18 \ + --hash=sha256:4482d7933042d4e941ca2a4d998b3c11f5f92940ff86c89c19b2906eaff24799 \ + --hash=sha256:4650f68a54f74bc9712c3b26aab29e22bd1f6b3ecdb4991cbf94d1b150aa12e7 \ + --hash=sha256:f2d547077ee6aecf47bf3209da51d10a5bdb961159ceb1c35b6afdd278a6a75b \ + --hash=sha256:7fcbb37eb617dba22a148476d4da5ccff645309a8597f343de49714ab5954303 \ + --hash=sha256:4449265612b926dc19515015f4b8ff7d717b99dbb342e339ee34b4e7de7b893b \ + --hash=sha256:24bbb41f893e61c5e44d2ccae848a4d46b00980793350013c8480e9cd1412a1e \ + --hash=sha256:d3abff47857a63c29016b17da39fc53bdbbab4fca7743a550a3749a3f13cbecf \ + --hash=sha256:b4476775557c28619f1d0c9b7463aaa08a3c46fbe2a0bebd2bca2ad67c0bb8b6 \ + --hash=sha256:356d17ab619f210ec96e29ffda48c2387d866442c54b217d4bef918bc41cfb6b \ + --hash=sha256:fdb12f658425a1e35af5f825c42ca273903e0368fd5e702c8a5b4285e6c7c4ff +requests-ntlm==1.1.0; python_version >= "3.6" \ + --hash=sha256:1eb43d1026b64d431a8e0f1e8a8c8119ac698e72e9b95102018214411a8463ea \ + --hash=sha256:9189c92e8c61ae91402a64b972c4802b2457ce6a799d658256ebf084d5c7eb71 +requests-oauthlib==1.3.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" \ + --hash=sha256:75beac4a47881eeb94d5ea5d6ad31ef88856affe2332b9aafb52c6452ccf0d7a \ + --hash=sha256:2577c501a2fb8d05a304c09d090d6e47c306fef15809d102b327cf8364bddab5 +requests==2.27.1; python_full_version >= "3.6.0" and python_version >= "3.7" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7") and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") \ + --hash=sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d \ + --hash=sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61 +retworkx==0.11.0; python_version >= "3.6" \ + --hash=sha256:5e7af7a6149e244b891d5f5a96765e14e273afd17c7c6df14ae874ecadd0c99d \ + --hash=sha256:a63ca79ef0950fb8fbb31696eb24c8e40ac1a3acf75f542855f49ec09171a00a \ + --hash=sha256:8a088709fb4734b3c4eda93d5177b778297be1edb5b2a5fc5a9d2e971aeb39e1 \ + --hash=sha256:02eb69c81eecac6d870a557784146cfbf0694b6c17dc4be32e80d7204d965b95 \ + --hash=sha256:474e4358c6c03a8740dd3bd54b4f4e29267879c870c040776cd91f794773cb86 \ + --hash=sha256:9b1d0c76735cff05042684abcced2dc700cb96413635743a171d117e2761ba8a \ + --hash=sha256:2db4df09f3bc421e34891b3c845aa3e307c633ae3967122b486cfd9b863b2c18 \ + --hash=sha256:fcd91d6a9eab5390b0f626d06587aa35220142c1238f919ce0d074545049c709 \ + --hash=sha256:64ad370bdca831608d18b93a738b8b3d8bc059b526bc1893e4a508c06c7e673e \ + --hash=sha256:3d191d1a287bc24514089f7ea3151ca9b16fd70ad82af4afc68043a909228170 \ + --hash=sha256:99f4ed97ab5342c0f10bdec440e6b0950c1483c1c9724d82a5601a31fb941f88 \ + --hash=sha256:5a31a1e2d23ee5b57a227a71360f5c76a618e7f081117530acacca1948cb0770 \ + --hash=sha256:118e50ecbed38531072af9cc8696cc2baf2d5b24e55a170e5ea9a7136fb2b7a5 \ + --hash=sha256:f95c37a1a113f0042f0fae42af32c44bb6b460ec09595fbe82f8a11e1237257a \ + --hash=sha256:4f7d151b725b1dc471a73b87d8951019171acafcfe32f52a770a87661a249c8e \ + --hash=sha256:39834f5f8335bdbeca78cbeb4b545f8e3f3f55817a659e8599dcba56a1f91251 \ + --hash=sha256:cea524a81c9a1c449fe7fa40e33465f00d2fbc29deb44bb8ce028ef16654452f \ + --hash=sha256:ba4bbcba72200b86d93f034641e5928e3b308c8f315bc4a1732250b6e782da64 \ + --hash=sha256:83ee8fa88849a6305aec865bf09a9b638aa9b5a2e38f3b7e96327652133952ae \ + --hash=sha256:b8bf6d103a1068aeeea3b0e7ce362effb2766620a57d80c9bebbd0858db50d85 \ + --hash=sha256:ffdee65a449841c7a4432f75ec84754cd64cfaf1ab596d56e24cdfc6f0cc7644 \ + --hash=sha256:03c883dca99a69884c4d0a0e0b880ec4c1f772c29b1c081ddb2867b760c32637 \ + --hash=sha256:014f92e656d4495d5265daa70fa72ad8a012c81f92e363cc9d3c82ac7deef02d \ + --hash=sha256:add52f65d8c85e337d1c0ce23891584c556faf5e5af12f6538e35b3fe823a23e \ + --hash=sha256:3fca540e733c0b234f0506dc259a152f92e8f15f04fd37b1d7a6c890deaaed50 \ + --hash=sha256:abee9263f2d7ff61076d9911d11dd40481e6df7c6711350afba20f08abed4e5d \ + --hash=sha256:804aa25af8898a2e0a4fbf2f94fb4d13cb7543722316a09cbed0e7c4f9b445d4 \ + --hash=sha256:6eecc461f5226028011192d7421c1886121c7b6760191fe1d774d8e72d9961df \ + --hash=sha256:4b9a8f5f2c6ae01acfb8de82ae4733b2fd42d89dfa53153e5816df73c2098dd5 \ + --hash=sha256:c818c6034da670686f4e5c0aa424175ae95744b11d2abced3c6f0a9c7e7ab9e2 \ + --hash=sha256:f4537cd72e12be4c7ad74b790039fc58b2383c3ef8877f60b3ebcd715960d2cd \ + --hash=sha256:adbcd034bc7acd1aa67fd95186735ce37c318b6467c054267c53dd2e8d0a1614 \ + --hash=sha256:4f3a2d157a8f7b2331339eca644742db2476c8c5af7846c3f22d994efcc505c2 \ + --hash=sha256:a199e0374036503db8c98e45e2476896fbcaf7f620f4f81206e0ee1b19a436c5 \ + --hash=sha256:21f58c69fb68b2d9e1307a75dc239ccdca038a655127df5763e161b715e5ae71 \ + --hash=sha256:b08484348add5eff6ddf48dc4c21aa6c085c4520287fbc11bbfdf6c44c33b387 \ + --hash=sha256:c731cf468cdc9158505687124427b3f9ddc4a72ad7dfaefbe4e80bd126c792c7 \ + --hash=sha256:03d3967cc9c25c6fbee88aae99f867b1f51acedfcce7925df353f1a3ee8059f8 \ + --hash=sha256:8842fcbfecde45a4562aaa5ca61f7e4d3d60a84ffd63de3af8d1b436f7bc277d \ + --hash=sha256:05bb8c3371557e4761d974dbac9cdb3aa7435d989ebae16f12e4292db681c2cd \ + --hash=sha256:5c9ed7c1bd7dbfbdce1a309501a5863716c2bc4f937647cba80d2c22248eabdb \ + --hash=sha256:e8fd11b17e1bc456fb5f5f4a79981c51d4059b408f166b8ae4abf0d2752e64d3 \ + --hash=sha256:d11fd9254bd9865a346717acb8e7c61766eb544617377939e990d09402970314 \ + --hash=sha256:9be63746d964cf172b0f756f8727a2e5a12db6295a87891112497dd8152b44ff \ + --hash=sha256:26b0574054bd0c83e6c7f50a60a5323bed876081f364a8ba20427fffb8d93a4f \ + --hash=sha256:97b0fd2c6cb29031b21e395b1c0ac5f43b4110fb78f1fa448c1c7079180c864a \ + --hash=sha256:a4c2a5ad3f8402493d41ad20ad91a03777ea214a3636c290272bbfaf36161161 +rsa==4.8; python_version >= "3.6" and python_version < "4" and python_full_version >= "3.6.0" \ + --hash=sha256:95c5d300c4e879ee69708c428ba566c59478fd653cc3a22243eeb8ed846950bb \ + --hash=sha256:5c6bd9dc7a543b7fe4304a631f8a8a3b674e2bbfc49c2ae96200cdbe55df6b17 +scikit-learn==0.24.2; python_version >= "3.6" \ + --hash=sha256:d14701a12417930392cd3898e9646cf5670c190b933625ebe7511b1f7d7b8736 \ + --hash=sha256:d5bf9c863ba4717b3917b5227463ee06860fc43931dc9026747de416c0a10fee \ + --hash=sha256:5beaeb091071625e83f5905192d8aecde65ba2f26f8b6719845bbf586f7a04a1 \ + --hash=sha256:06ffdcaaf81e2a3b1b50c3ac6842cfb13df2d8b737d61f64643ed61da7389cde \ + --hash=sha256:fec42690a2eb646b384eafb021c425fab48991587edb412d4db77acc358b27ce \ + --hash=sha256:5ff3e4e4cf7592d36541edec434e09fb8ab9ba6b47608c4ffe30c9038d301897 \ + --hash=sha256:3cbd734e1aefc7c5080e6b6973fe062f97c26a1cdf1a991037ca196ce1c8f427 \ + --hash=sha256:f74429a07fedb36a03c159332b914e6de757176064f9fed94b5f79ebac07d913 \ + --hash=sha256:dd968a174aa82f3341a615a033fa6a8169e9320cbb46130686562db132d7f1f0 \ + --hash=sha256:49ec0b1361da328da9bb7f1a162836028e72556356adeb53342f8fae6b450d47 \ + --hash=sha256:f18c3ed484eeeaa43a0d45dc2efb4d00fc6542ccdcfa2c45d7b635096a2ae534 \ + --hash=sha256:cdf24c1b9bbeb4936456b42ac5bd32c60bb194a344951acb6bfb0cddee5439a4 \ + --hash=sha256:d177fe1ff47cc235942d628d41ee5b1c6930d8f009f1a451c39b5411e8d0d4cf \ + --hash=sha256:f3ec00f023d84526381ad0c0f2cff982852d035c921bbf8ceb994f4886c00c64 \ + --hash=sha256:ae19ac105cf7ce8c205a46166992fdec88081d6e783ab6e38ecfbe45729f3c39 \ + --hash=sha256:f0ed4483c258fb23150e31b91ea7d25ff8495dba108aea0b0d4206a777705350 \ + --hash=sha256:39b7e3b71bcb1fe46397185d6c1a5db1c441e71c23c91a31e7ad8cc3f7305f9a \ + --hash=sha256:90a297330f608adeb4d2e9786c6fda395d3150739deb3d42a86d9a4c2d15bc1d \ + --hash=sha256:f1d2108e770907540b5248977e4cff9ffaf0f73d0d13445ee938df06ca7579c6 \ + --hash=sha256:1eec963fe9ffc827442c2e9333227c4d49749a44e592f305398c1db5c1563393 \ + --hash=sha256:2db429090b98045d71218a9ba913cc9b3fe78e0ba0b6b647d8748bc6d5a44080 \ + --hash=sha256:62214d2954377fcf3f31ec867dd4e436df80121e7a32947a0b3244f58f45e455 \ + --hash=sha256:8fac72b9688176922f9f54fda1ba5f7ffd28cbeb9aad282760186e8ceba9139a \ + --hash=sha256:ae426e3a52842c6b6d77d00f906b6031c8c2cfdfabd6af7511bb4bc9a68d720e \ + --hash=sha256:038f4e9d6ef10e1f3fe82addc3a14735c299866eb10f2c77c090410904828312 \ + --hash=sha256:48f273836e19901ba2beecd919f7b352f09310ce67c762f6e53bc6b81cacf1f0 \ + --hash=sha256:a2a47449093dcf70babc930beba2ca0423cb7df2fa5fd76be5260703d67fa574 \ + --hash=sha256:0e71ce9c7cbc20f6f8b860107ce15114da26e8675238b4b82b7e7cd37ca0c087 \ + --hash=sha256:2754c85b2287333f9719db7f23fb7e357f436deed512db3417a02bf6f2830aa5 \ + --hash=sha256:7be1b88c23cfac46e06404582215a917017cd2edaa2e4d40abe6aaff5458f24b \ + --hash=sha256:4e6198675a6f9d333774671bd536668680eea78e2e81c0b19e57224f58d17f37 \ + --hash=sha256:cbdb0b3db99dd1d5f69d31b4234367d55475add31df4d84a3bd690ef017b55e2 \ + --hash=sha256:40556bea1ef26ef54bc678d00cf138a63069144a0b5f3a436eecd8f3468b903e +scipy==1.8.1; python_version >= "3.8" and python_version < "3.11" and python_full_version >= "3.6.0" \ + --hash=sha256:65b77f20202599c51eb2771d11a6b899b97989159b7975e9b5259594f1d35ef4 \ + --hash=sha256:e013aed00ed776d790be4cb32826adb72799c61e318676172495383ba4570aa4 \ + --hash=sha256:02b567e722d62bddd4ac253dafb01ce7ed8742cf8031aea030a41414b86c1125 \ + --hash=sha256:1da52b45ce1a24a4a22db6c157c38b39885a990a566748fc904ec9f03ed8c6ba \ + --hash=sha256:a0aa8220b89b2e3748a2836fbfa116194378910f1a6e78e4675a095bcd2c762d \ + --hash=sha256:4e53a55f6a4f22de01ffe1d2f016e30adedb67a699a310cdcac312806807ca81 \ + --hash=sha256:28d2cab0c6ac5aa131cc5071a3a1d8e1366dad82288d9ec2ca44df78fb50e649 \ + --hash=sha256:6311e3ae9cc75f77c33076cb2794fb0606f14c8f1b1c9ff8ce6005ba2c283621 \ + --hash=sha256:3b69b90c9419884efeffaac2c38376d6ef566e6e730a231e15722b0ab58f0328 \ + --hash=sha256:6cc6b33139eb63f30725d5f7fa175763dc2df6a8f38ddf8df971f7c345b652dc \ + --hash=sha256:9c4e3ae8a716c8b3151e16c05edb1daf4cb4d866caa385e861556aff41300c14 \ + --hash=sha256:23b22fbeef3807966ea42d8163322366dd89da9bebdc075da7034cee3a1441ca \ + --hash=sha256:4b93ec6f4c3c4d041b26b5f179a6aab8f5045423117ae7a45ba9710301d7e462 \ + --hash=sha256:70ebc84134cf0c504ce6a5f12d6db92cb2a8a53a49437a6bb4edca0bc101f11c \ + --hash=sha256:f3e7a8867f307e3359cc0ed2c63b61a1e33a19080f92fe377bc7d49f646f2ec1 \ + --hash=sha256:2ef0fbc8bcf102c1998c1f16f15befe7cffba90895d6e84861cd6c6a33fb54f6 \ + --hash=sha256:83606129247e7610b58d0e1e93d2c5133959e9cf93555d3c27e536892f1ba1f2 \ + --hash=sha256:93d07494a8900d55492401917a119948ed330b8c3f1d700e0b904a578f10ead4 \ + --hash=sha256:d3b3c8924252caaffc54d4a99f1360aeec001e61267595561089f8b5900821bb \ + --hash=sha256:70de2f11bf64ca9921fda018864c78af7147025e467ce9f4a11bc877266900a6 \ + --hash=sha256:1166514aa3bbf04cb5941027c6e294a000bba0cf00f5cdac6c77f2dad479b434 \ + --hash=sha256:9dd4012ac599a1e7eb63c114d1eee1bcfc6dc75a29b589ff0ad0bb3d9412034f \ + --hash=sha256:9e3fb1b0e896f14a85aa9a28d5f755daaeeb54c897b746df7a55ccb02b340f33 +scp==0.14.4 \ + --hash=sha256:29ddaafbfba60793a8a779694c97d8c150d365668a4ef67616c515b80a69ef2f \ + --hash=sha256:54699b92cb68ae34b5928c48a888eab9722a212502cba89aa795bd56597505bd +semantic-version==2.6.0 \ + --hash=sha256:2d06ab7372034bcb8b54f2205370f4aa0643c133b7e6dbd129c5200b83ab394b \ + --hash=sha256:2a4328680073e9b243667b201119772aefc5fc63ae32398d6afafff07c4f54c0 +send2trash==1.8.0; python_version >= "3.7" \ + --hash=sha256:f20eaadfdb517eaca5ce077640cb261c7d2698385a6a0f072a4a5447fd49fa08 \ + --hash=sha256:d2c24762fd3759860a0aff155e45871447ea58d2be6bdd39b5c8f966a0c99c2d +setuptools-scm==6.4.2; python_version >= "3.7" and python_full_version >= "3.6.0" \ + --hash=sha256:acea13255093849de7ccb11af9e1fb8bde7067783450cee9ef7a93139bddf6d4 \ + --hash=sha256:6833ac65c6ed9711a4d5d2266f8024cfa07c533a0e55f4c12f6eff280a5a9e30 +six==1.16.0; python_full_version >= "3.6.0" and python_version >= "3.7" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.7") and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6") and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7") and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7") and (python_version >= "3.8" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.8") \ + --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 \ + --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 +smmap==5.0.0; python_version >= "3.7" \ + --hash=sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94 \ + --hash=sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936 +sniffio==1.2.0; python_full_version >= "3.6.2" and python_version >= "3.7" \ + --hash=sha256:471b71698eac1c2112a40ce2752bb2f4a4814c22a54a3eed3676bc0f5ca9f663 \ + --hash=sha256:c4666eecec1d3f50960c6bdf61ab7bc350648da6c126e3cf6898d8cd4ddcd3de +snowballstemmer==2.2.0; python_version >= "3.7" \ + --hash=sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a \ + --hash=sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1 +sortedcontainers==2.4.0; python_full_version >= "3.6.0" \ + --hash=sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 \ + --hash=sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 +soupsieve==2.3.2.post1; python_full_version >= "3.6.0" and python_version >= "3.7" \ + --hash=sha256:3b2503d3c7084a42b1ebd08116e5f81aadfaea95863628c80a3b774a11b7c759 \ + --hash=sha256:fc53893b3da2c33de295667a0e19f078c14bf86544af307354de5fcf12a3f30d +sphinx-book-theme==0.3.2; python_version >= "3.7" \ + --hash=sha256:4aed92f2ed9d27e002eac5dce1daa8eca42dd9e6464811533c569ee156a6f67d \ + --hash=sha256:182b5657a345f3bbb2c5b86da65db9b47e27de0ab406cda168142768645121f5 +sphinx-comments==0.0.3; python_version >= "3.7" \ + --hash=sha256:00170afff27019fad08e421da1ae49c681831fb2759786f07c826e89ac94cf21 \ + --hash=sha256:1e879b4e9bfa641467f83e3441ac4629225fc57c29995177d043252530c21d00 +sphinx-copybutton==0.5.0; python_version >= "3.7" \ + --hash=sha256:a0c059daadd03c27ba750da534a92a63e7a36a7736dcf684f26ee346199787f6 \ + --hash=sha256:9684dec7434bd73f0eea58dda93f9bb879d24bff2d8b187b1f2ec08dfe7b5f48 +sphinx-design==0.1.0; python_version >= "3.7" \ + --hash=sha256:151ab25fda162ded010f0782d1770d014073c3f3fea8e02c45178e0ae6f7e0a0 \ + --hash=sha256:68edba2453a175df5b0390d481ec0e9329112064f211860426729768b3501706 +sphinx-external-toc==0.2.4; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:f7906620e74fbef50f0c3b8adf943da03000ab955ffe957ae4760d6cd5a09717 \ + --hash=sha256:f073c482d959a166f844ca8caadd13e24fa43153750cc120646ded37ff622018 +sphinx-jupyterbook-latex==0.4.6; python_version >= "3.6" \ + --hash=sha256:75b8f7654ac1eff5419f71017491ecdc50a4723e3305dd6f61b183099f46600f \ + --hash=sha256:8ff3775b11ab4798e6e8ec983601d7aea4c3b8e8b5d28ca758578ede3a791334 +sphinx-multitoc-numbering==0.1.3; python_version >= "3.7" \ + --hash=sha256:c9607671ac511236fa5d61a7491c1031e700e8d498c9d2418e6c61d1251209ae \ + --hash=sha256:33d2e707a9b2b8ad636b3d4302e658a008025106fe0474046c651144c26d8514 +sphinx-sitemap==2.2.0 \ + --hash=sha256:65adda39233cb17c0da10ba1cebaa2df73e271cdb6f8efd5cec8eef3b3cf7737 +sphinx-thebe==0.1.2; python_version >= "3.7" \ + --hash=sha256:756f1dd6643f5abb491f8a27b22825b04f47e05c5d214bbb2e6b5d42b621b85e \ + --hash=sha256:42bb15287bba3459a1faf6081d1bb7a6a426c77a6ba41ac8d3aa98e8f75baa6b +sphinx-togglebutton==0.2.3; python_version >= "3.7" \ + --hash=sha256:41cbe2f87459eade8dc5718bb56146e8e113a05fb97459b90472470f0d357b55 \ + --hash=sha256:8a3707154b1b3480a7918f189f43b7eee0d34ffa552895af77bb273476b8d5e0 +sphinx==4.5.0; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:ebf612653238bcc8f4359627a9b7ce44ede6fdd75d9d30f68255c7383d3a6226 \ + --hash=sha256:7bf8ca9637a4ee15af412d1a1d9689fec70523a68ca9bb9127c2f3eeb344e2e6 +sphinxcontrib-applehelp==1.0.2; python_version >= "3.7" \ + --hash=sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58 \ + --hash=sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a +sphinxcontrib-bibtex==2.4.2; python_version >= "3.7" \ + --hash=sha256:65b023ee47f35f1f03ac4d71c824e67c624c7ecac1bb26e83623271a01f9da86 \ + --hash=sha256:608512afde6b732148cdc9123550bd560bf48e071d1fb7bb1bab4f4437ff04f4 +sphinxcontrib-devhelp==1.0.2; python_version >= "3.7" \ + --hash=sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4 \ + --hash=sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e +sphinxcontrib-htmlhelp==2.0.0; python_version >= "3.7" \ + --hash=sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2 \ + --hash=sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07 +sphinxcontrib-jsmath==1.0.1; python_version >= "3.7" \ + --hash=sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8 \ + --hash=sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178 +sphinxcontrib-qthelp==1.0.3; python_version >= "3.7" \ + --hash=sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72 \ + --hash=sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6 +sphinxcontrib-serializinghtml==1.1.5; python_version >= "3.7" \ + --hash=sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952 \ + --hash=sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd +sqlalchemy==1.4.37; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7" \ + --hash=sha256:d9050b0c4a7f5538650c74aaba5c80cd64450e41c206f43ea6d194ae6d060ff9 \ + --hash=sha256:b4c92823889cf9846b972ee6db30c0e3a92c0ddfc76c6060a6cda467aa5fb694 \ + --hash=sha256:b55932fd0e81b43f4aff397c8ad0b3c038f540af37930423ab8f47a20b117e4c \ + --hash=sha256:4a17c1a1152ca4c29d992714aa9df3054da3af1598e02134f2e7314a32ef69d8 \ + --hash=sha256:ffe487570f47536b96eff5ef2b84034a8ba4e19aab5ab7647e677d94a119ea55 \ + --hash=sha256:78363f400fbda80f866e8e91d37d36fe6313ff847ded08674e272873c1377ea5 \ + --hash=sha256:7ee34c85cbda7779d66abac392c306ec78c13f5c73a1f01b8b767916d4895d23 \ + --hash=sha256:8b38e088659b30c2ca0af63e5d139fad1779a7925d75075a08717a21c406c0f6 \ + --hash=sha256:6629c79967a6c92e33fad811599adf9bc5cee6e504a1027bbf9cc1b6fb2d276d \ + --hash=sha256:2aac2a685feb9882d09f457f4e5586c885d578af4e97a2b759e91e8c457cbce5 \ + --hash=sha256:7a44683cf97744a405103ef8fdd31199e9d7fc41b4a67e9044523b29541662b0 \ + --hash=sha256:cffc67cdd07f0e109a1fc83e333972ae423ea5ad414585b63275b66b870ea62b \ + --hash=sha256:17417327b87a0f703c9a20180f75e953315207d048159aff51822052f3e33e69 \ + --hash=sha256:aaa0e90e527066409c2ea5676282cf4afb4a40bb9dce0f56c8ec2768bff22a6e \ + --hash=sha256:4c1d9fb3931e27d59166bb5c4dcc911400fee51082cfba66ceb19ac954ade068 \ + --hash=sha256:0e7fd52e48e933771f177c2a1a484b06ea03774fc7741651ebdf19985a34037c \ + --hash=sha256:eec39a17bab3f69c44c9df4e0ed87c7306f2d2bf1eca3070af644927ec4199fa \ + --hash=sha256:caca6acf3f90893d7712ae2c6616ecfeac3581b4cc677c928a330ce6fbad4319 \ + --hash=sha256:50c8eaf44c3fed5ba6758d375de25f163e46137c39fda3a72b9ee1d1bb327dfc \ + --hash=sha256:139c50b9384e6d32a74fc4dcd0e9717f343ed38f95dbacf832c782c68e3862f3 \ + --hash=sha256:d4c3b009c9220ae6e33f17b45f43fb46b9a1d281d76118405af13e26376f2e11 \ + --hash=sha256:9785d6f962d2c925aeb06a7539ac9d16608877da6aeaaf341984b3693ae80a02 \ + --hash=sha256:3197441772dc3b1c6419f13304402f2418a18d7fe78000aa5a026e7100836739 \ + --hash=sha256:3862a069a24f354145e01a76c7c720c263d62405fe5bed038c46a7ce900f5dd6 \ + --hash=sha256:4e8706919829d455a9fa687c6bbd1b048e36fec3919a59f2d366247c2bfdbd9c \ + --hash=sha256:06ec11a5e6a4b6428167d3ce33b5bd455c020c867dabe3e6951fa98836e0741d \ + --hash=sha256:d58f2d9d1a4b1459e8956a0153a4119da80f54ee5a9ea623cd568e99459a3ef1 \ + --hash=sha256:d6927c9e3965b194acf75c8e0fb270b4d54512db171f65faae15ef418721996e \ + --hash=sha256:a91d0668cada27352432f15b92ac3d43e34d8f30973fa8b86f5e9fddee928f3b \ + --hash=sha256:f9940528bf9c4df9e3c3872d23078b6b2da6431c19565637c09f1b88a427a684 \ + --hash=sha256:29a742c29fea12259f1d2a9ee2eb7fe4694a85d904a4ac66d15e01177b17ad7f \ + --hash=sha256:7e579d6e281cc937bdb59917017ab98e618502067e04efb1d24ac168925e1d2a \ + --hash=sha256:a940c551cfbd2e1e646ceea2777944425f5c3edff914bc808fe734d9e66f8d71 \ + --hash=sha256:5e4e517ce72fad35cce364a01aff165f524449e9c959f1837dc71088afa2824c \ + --hash=sha256:c37885f83b59e248bebe2b35beabfbea398cb40960cdc6d3a76eac863d4e1938 \ + --hash=sha256:3688f92c62db6c5df268e2264891078f17ecb91e3141b400f2e28d0f75796dea +stack-data==0.2.0; python_version >= "3.8" \ + --hash=sha256:999762f9c3132308789affa03e9271bbbe947bf78311851f4d485d8402ed858e \ + --hash=sha256:45692d41bd633a9503a5195552df22b583caf16f0b27c4e58c98d88c8b648e12 +symengine==0.9.2; python_version >= "3.7" and python_version < "4" and (platform_machine == "x86_64" and python_version >= "3.6" or platform_machine == "aarch64" and python_version >= "3.6" or platform_machine == "ppc64le" and python_version >= "3.6" or platform_machine == "amd64" and python_version >= "3.6" or platform_machine == "arm64" and python_version >= "3.6") \ + --hash=sha256:c57b542a88d88bf716f2ac15b928d37587030d5347d45aa3af18c741c07e04e2 \ + --hash=sha256:201a6c33a2c391d4b9350e9f171e05ca54011599bb9fa9cd188548f0a26d2f31 \ + --hash=sha256:dee0df899abeb78c08fff6471f4d979dad7d3d235e00303c7a641da7b92b025b \ + --hash=sha256:dfb3c764a52f2ade33c90c64baa14175103b6527773f2e23c961906159515725 \ + --hash=sha256:2ca84ce89c27788e9675fad31c8fa05317acd7ec7e034b562f3d3a6e72bf8004 \ + --hash=sha256:eaf3604c469af16c1aa9d8f4287295e616840d7d14eeaab13228dd11c5e5fe75 \ + --hash=sha256:4bd4e32bd3208477e5da0fa1c0a23f1f54c32bfc9d4fa25c433af03dfbb92342 \ + --hash=sha256:dd2b06fcb133bbbb41428a94c6c07f8f151a02c18deb26382b7e878a808971ba \ + --hash=sha256:aa6e193701d244e49a141782cd87248c00d78cff398cd395d46db632bec41cf4 \ + --hash=sha256:eb4be488f1a8d9a04c813af342ab5c8cb69a7d0898df6619f67a4eafad722d2a \ + --hash=sha256:e70728b93653c1787267e300d05ee696e067bc324d58ac0858d744c71a14e648 \ + --hash=sha256:f6907a6b306d0b485d210557f99f1c2fbcba83aba88da5ec9b84a0a3f34165f8 \ + --hash=sha256:05608329bfb776de1390bb7981c074f866157792a7b4e2af60073b790e051520 \ + --hash=sha256:51d590cb488e7ff05e96896baa555f41feee0eec1cafb43756b46b966fb2eb57 \ + --hash=sha256:690f84811812ae5502c0852cad3a60dae9a9b45874f71caafe90b0bd3e6f887c \ + --hash=sha256:a54aa2151b09ef4460d9142446d5404adb4c01ef8107d4060a7dc8673ca93cc4 \ + --hash=sha256:b97d6005c528a1935ad15c661f262e525f12dfb707ea30d2af32397ba534387b \ + --hash=sha256:fdea89508505882e2c7a802836810b552e7b79e73ff5daf5f8f4dda95b79be83 \ + --hash=sha256:ee122c716be397cf455f01e90a731636d9f6389179b207737e99b91d5e0baa8a \ + --hash=sha256:f709947e17c97e6ad18d6f4a2703b0360092d7193636f9a220a75b09ea262581 \ + --hash=sha256:0a46099e3c1ed27dbeac28f1318b2da030170a001f3672d34a39dc2966d4a180 \ + --hash=sha256:614ac3807944c7ae3158f2a1600a31a3f6195b4b6805113f49352f52d2535082 \ + --hash=sha256:add5dd16568a82fbf7c8ad8f68776040ece19a8f02380121a65c6610b5849ec1 \ + --hash=sha256:516ce80e73de94e1952cdf8ecbb75c581c6512b61f05979b92d3ad09867663ed \ + --hash=sha256:0698bc5a95784f791feae5c6afbf49c4ccc2ce64531e4db505a2c0d1276fd015 \ + --hash=sha256:0f7e45f5bba3fa844f7de7aa8d6640faaacb1075df76d8e4996e82b0ec6a4f62 +sympy==1.8; python_version >= "3.6" \ + --hash=sha256:3b0b3776e357f789951bb14776c6a841f931680f20d5f8fe55977885657c9b7a \ + --hash=sha256:1ca588a9f6ce6a323c5592f9635159c2093572826668a1022c75c75bdf0297cb +tensorboard-data-server==0.6.1; python_version >= "3.6" \ + --hash=sha256:809fe9887682d35c1f7d1f54f0f40f98bb1f771b14265b453ca051e2ce58fca7 \ + --hash=sha256:fa8cef9be4fcae2f2363c88176638baf2da19c5ec90addb49b1cde05c95c88ee \ + --hash=sha256:d8237580755e58eff68d1f3abefb5b1e39ae5c8b127cc40920f9c4fb33f4b98a +tensorboard-plugin-wit==1.8.1; python_version >= "3.6" \ + --hash=sha256:ff26bdd583d155aa951ee3b152b3d0cffae8005dc697f72b44a8e8c2a77a8cbe +tensorboard==2.9.0; python_version >= "3.6" \ + --hash=sha256:bd78211076dca5efa27260afacfaa96cd05c7db12a6c09cc76a1d6b2987ca621 +tensorflow-estimator==2.7.0 \ + --hash=sha256:325b5a224864379242b7b76c6987ca544239be82579d33e68ec7c2bda57abc9d +tensorflow-io-gcs-filesystem==0.26.0; python_version >= "3.7" and python_version < "3.11" \ + --hash=sha256:4222a9d0c0ddeca2fd2bfd70f5ed149346f5ba12ffe65d817d8e18393341d8e2 \ + --hash=sha256:5457eeef1f0f5f294225808b2290a251a2e4639ec66db9d32aa4ae62e807d7e8 \ + --hash=sha256:4c71cebb26ce10e6e48dc46e6fc0acef5329b01f75a5e76c7defb77175bf97f7 \ + --hash=sha256:1c165595c7a67668b44c7ffb9746ffb351c630940d9cca7f2b31f8adf7a36b94 \ + --hash=sha256:c20e1f95b904f43ac86fdb251f222be2c3e7026e9ddbde2a3b6a456f26a83944 \ + --hash=sha256:1cccdc12ec304a7ab3e6f85919ba5a77c2bf751b3d0f9e62196ee7df11a8136a \ + --hash=sha256:94645cac4449dd2ccc40327c23d0256cf4e96597e5a55116a91076e9dc96023e \ + --hash=sha256:ce0d7eaaebfcb5fdcff161af0e8a4b94d5dc346299111c08373d66058011a16d \ + --hash=sha256:e9569dadd79b2d4b28dbe5be47c378a884414a85c89eaeae6115bcba4f3cbb96 \ + --hash=sha256:84a463e228cde296fc63672902a2eceac9fec5f8ae7605e9f18824db591e7f5c \ + --hash=sha256:531214e48ef64a96f565550b283e75cf0119abff14048a11a25453b47ec5b61c \ + --hash=sha256:44b28c9c6a9e25774a53ec2e85ed4d0b5c4db3a7d3a4011ade94fa9ee636393c \ + --hash=sha256:09f9df13737e2b4d92b73653509281d77732ef9a90a1ebef824511ce5431eb0a \ + --hash=sha256:c71438e6459f52462b95f98ab17b20cd1a269a1efe837e4df426a0b79359f3b7 \ + --hash=sha256:bd285595afe03740553710ccdbd1397d69a8e48d758c731c0de1f1c5a71a9fe5 \ + --hash=sha256:2940b4ab6848ef5ec34dc3c140b5ae9eba0da13453da839c30ebe3461a6eb51d +tensorflow-quantum==0.6.0 \ + --hash=sha256:9826ec0b0d98dc84bd44f5686e62ec04891734704f154dd8c8e7cfae159ededd \ + --hash=sha256:b3d349dae8ce476c77f80920e8f8c59443fe5deab67ba7d1b3924cdf493639d1 \ + --hash=sha256:71009181112ff8a723c8f4d8acc37e9d30107496b0b0902f6d3741aa77faabbb \ + --hash=sha256:6871e6849d9384cb8d044ba044e659035ba96c18e59c65ce6350df7f2c4e439d \ + --hash=sha256:e3ed5e0195de4ee710f6d2cc7d28618e917f8f4b2d21c28d4342efe4de8b6288 +tensorflow==2.7.2 \ + --hash=sha256:050c2ef8d432eb60f2cb6fc75d751fcb3008af6a86ad1147faea30cb59c275b1 \ + --hash=sha256:3c72b8653a539789ef36f8c1ad8266b9e676dff2293f0f7a68d9b26fc77a37f3 \ + --hash=sha256:1db663f9f59ba54a294b1f6530f131e90c7a0e6ea49fda5b2c6900e57b0c306a \ + --hash=sha256:cb66d4a998af1ca979d6da33e925281596f52e5a9ba67b2295c53677f8379eee \ + --hash=sha256:d4dbfab1568564b30bab876424fafd74c8a8715238b76284b5dd1cfe86c7881b \ + --hash=sha256:b9a7f344b93b953cab4c3f6ec3b6c1799eb538b6a1978d3a4b579d7a81ee7439 \ + --hash=sha256:99a85258505130b1f3ce203f11b3bb3c95442edefec96c0b221ce0d6541a92c8 \ + --hash=sha256:bb2115796e2e7738de1844aead493bc1f1122ff1fae65fc691bb1ce5a0fdd2aa \ + --hash=sha256:3e35d046d0be677239b5e832854bcb291ca79388fa406d9d7547bc3377a7efbb +termcolor==1.1.0 \ + --hash=sha256:1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b +terminado==0.15.0; python_version >= "3.7" \ + --hash=sha256:0d5f126fbfdb5887b25ae7d9d07b0d716b1cc0ccaacc71c1f3c14d228e065197 \ + --hash=sha256:ab4eeedccfcc1e6134bfee86106af90852c69d602884ea3a1e8ca6d4486e9bfe +testpath==0.6.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7" \ + --hash=sha256:8ada9f80a2ac6fb0391aa7cdb1a7d11cfa8429f693eda83f74dde570fe6fa639 \ + --hash=sha256:2f1b97e6442c02681ebe01bd84f531028a7caea1af3825000f52345c30285e0f +texttable==1.6.4; python_version >= "3.7" \ + --hash=sha256:dd2b0eaebb2a9e167d1cefedab4700e5dcbdb076114eed30b58b97ed6b37d6f2 \ + --hash=sha256:42ee7b9e15f7b225747c3fa08f43c5d6c83bc899f80ff9bae9319334824076e9 +threadpoolctl==3.1.0; python_version >= "3.6" \ + --hash=sha256:8b99adda265feb6773280df41eece7b2e6561b772d21ffd52e372f999024907b \ + --hash=sha256:a335baacfaa4400ae1f0d8e3a58d6674d2f8828e3716bb2802c44955ad391380 +toml==0.10.2; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.3.0" \ + --hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b \ + --hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f +tomli==2.0.1; python_version >= "3.7" \ + --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ + --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f +toolz==0.11.2; python_version >= "3.7" \ + --hash=sha256:a5700ce83414c64514d82d60bcda8aabfde092d1c1a8663f9200c07fdcc6da8f \ + --hash=sha256:6b312d5e15138552f1bda8a4e66c30e236c831b612b2bf0005f8a1df10a4bc33 +tornado==6.1; python_full_version >= "3.7.0" and python_version >= "3.7" \ + --hash=sha256:d371e811d6b156d82aa5f9a4e08b58debf97c302a35714f6f45e35139c332e32 \ + --hash=sha256:0d321a39c36e5f2c4ff12b4ed58d41390460f798422c4504e09eb5678e09998c \ + --hash=sha256:9de9e5188a782be6b1ce866e8a51bc76a0fbaa0e16613823fc38e4fc2556ad05 \ + --hash=sha256:61b32d06ae8a036a6607805e6720ef00a3c98207038444ba7fd3d169cd998910 \ + --hash=sha256:3e63498f680547ed24d2c71e6497f24bca791aca2fe116dbc2bd0ac7f191691b \ + --hash=sha256:6c77c9937962577a6a76917845d06af6ab9197702a42e1346d8ae2e76b5e3675 \ + --hash=sha256:6286efab1ed6e74b7028327365cf7346b1d777d63ab30e21a0f4d5b275fc17d5 \ + --hash=sha256:fa2ba70284fa42c2a5ecb35e322e68823288a4251f9ba9cc77be04ae15eada68 \ + --hash=sha256:0a00ff4561e2929a2c37ce706cb8233b7907e0cdc22eab98888aca5dd3775feb \ + --hash=sha256:748290bf9112b581c525e6e6d3820621ff020ed95af6f17fedef416b27ed564c \ + --hash=sha256:e385b637ac3acaae8022e7e47dfa7b83d3620e432e3ecb9a3f7f58f150e50921 \ + --hash=sha256:25ad220258349a12ae87ede08a7b04aca51237721f63b1808d39bdb4b2164558 \ + --hash=sha256:65d98939f1a2e74b58839f8c4dab3b6b3c1ce84972ae712be02845e65391ac7c \ + --hash=sha256:e519d64089b0876c7b467274468709dadf11e41d65f63bba207e04217f47c085 \ + --hash=sha256:b87936fd2c317b6ee08a5741ea06b9d11a6074ef4cc42e031bc6403f82a32575 \ + --hash=sha256:cc0ee35043162abbf717b7df924597ade8e5395e7b66d18270116f8745ceb795 \ + --hash=sha256:7250a3fa399f08ec9cb3f7b1b987955d17e044f1ade821b32e5f435130250d7f \ + --hash=sha256:ed3ad863b1b40cd1d4bd21e7498329ccaece75db5a5bf58cd3c9f130843e7102 \ + --hash=sha256:dcef026f608f678c118779cd6591c8af6e9b4155c44e0d1bc0c87c036fb8c8c4 \ + --hash=sha256:70dec29e8ac485dbf57481baee40781c63e381bebea080991893cd297742b8fd \ + --hash=sha256:d3f7594930c423fd9f5d1a76bee85a2c36fd8b4b16921cae7e965f22575e9c01 \ + --hash=sha256:3447475585bae2e77ecb832fc0300c3695516a47d46cefa0528181a34c5b9d3d \ + --hash=sha256:e7229e60ac41a1202444497ddde70a48d33909e484f96eb0da9baf8dc68541df \ + --hash=sha256:cb5ec8eead331e3bb4ce8066cf06d2dfef1bfb1b2a73082dfe8a161301b76e37 \ + --hash=sha256:20241b3cb4f425e971cb0a8e4ffc9b0a861530ae3c52f2b0434e6c1b57e9fd95 \ + --hash=sha256:c77da1263aa361938476f04c4b6c8916001b90b2c2fdd92d8d535e1af48fba5a \ + --hash=sha256:fba85b6cd9c39be262fcd23865652920832b61583de2a2ca907dbd8e8a8c81e5 \ + --hash=sha256:1e8225a1070cd8eec59a996c43229fe8f95689cb16e552d130b9793cb570a288 \ + --hash=sha256:d14d30e7f46a0476efb0deb5b61343b1526f73ebb5ed84f23dc794bdb88f9d9f \ + --hash=sha256:8f959b26f2634a091bb42241c3ed8d3cedb506e7c27b8dd5c7b9f745318ddbb6 \ + --hash=sha256:34ca2dac9e4d7afb0bed4677512e36a52f09caa6fded70b4e3e1c89dbd92c326 \ + --hash=sha256:6196a5c39286cc37c024cd78834fb9345e464525d8991c21e908cc046d1cc02c \ + --hash=sha256:f0ba29bafd8e7e22920567ce0d232c26d4d47c8b5cf4ed7b562b5db39fa199c5 \ + --hash=sha256:33892118b165401f291070100d6d09359ca74addda679b60390b09f8ef325ffe \ + --hash=sha256:7da13da6f985aab7f6f28debab00c67ff9cbacd588e8477034c0652ac141feea \ + --hash=sha256:e0791ac58d91ac58f694d8d2957884df8e4e2f6687cdf367ef7eb7497f79eaa2 \ + --hash=sha256:66324e4e1beede9ac79e60f88de548da58b1f8ab4b2f1354d8375774f997e6c0 \ + --hash=sha256:a48900ecea1cbb71b8c71c620dee15b62f85f7c14189bdeee54966fbd9a0c5bd \ + --hash=sha256:d3d20ea5782ba63ed13bc2b8c291a053c8d807a8fa927d941bd718468f7b950c \ + --hash=sha256:548430be2740e327b3fe0201abe471f314741efcb0067ec4f2d7dcfb4825f3e4 \ + --hash=sha256:33c6e81d7bd55b468d2e793517c909b139960b6c790a60b7991b9b6b76fb9791 +tqdm==4.64.0; python_full_version >= "3.6.1" and python_full_version < "4.0.0" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7") \ + --hash=sha256:74a2cdefe14d11442cedf3ba4e21a3b84ff9a2dbdc6cfae2c34addb2a14a5ea6 \ + --hash=sha256:40be55d30e200777a307a7585aee69e4eabb46b4ec6a4b4a5f2d9f11e7d5408d +traitlets==5.2.2.post1; python_version >= "3.8" and python_version < "4.0" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7") and python_full_version >= "3.7.0" \ + --hash=sha256:1530d04badddc6a73d50b7ee34667d4b96914da352109117b4280cb56523a51b \ + --hash=sha256:74803a1baa59af70f023671d86d5c7a834c931186df26d50d362ee6a1ff021fd +tweedledum==1.1.1; python_version >= "3.6" \ + --hash=sha256:b563c8324bbf5ed9ed57399a1eca34d8a82cb146b3011154e3df749753b75fe5 \ + --hash=sha256:a5d734fed09a479afc0ec8fa91764ac9411821c27396e1b7d4a64393e689271d \ + --hash=sha256:a7dc0a9674e90808b26e24410bff7e5385d2b21ddf7068fc9c7d020ac46cefd8 \ + --hash=sha256:be97848edb19473eb653c58515605a636da1dc4a4650e291f3f05824c9dac005 \ + --hash=sha256:eae6a32207f3f8daf17806b90b2390e13f418b00a62384d029e13f215249df6b \ + --hash=sha256:ab7a800d6266c98a30b0e8dc3e13cf49c8145012dfa199c9cc4d58d598a54218 \ + --hash=sha256:6b8fa90b5303a6534ef332019ccdbb93ba969993cd7b78395ab31cb4c48a718e \ + --hash=sha256:cad30654036a36afee0fb879a9cc3f26b33655d8a833425704b6dbb6d4caddfb \ + --hash=sha256:4943f5d628f9adb95244b8bac79b7978f810bdaa5025e9930a625161a0d72dad \ + --hash=sha256:09dbf20f792e97211270dfa2b3033ead0ce11fd65cc03781a542f36bccd7f1c1 \ + --hash=sha256:0bbe9a20d71576465051720eac72aa7f95fae39b4e4feea44f690e1ba856e99a \ + --hash=sha256:57687300cca24c2f8fb340d6fa2233450a054647c736dc84958aac4d235b8542 \ + --hash=sha256:828808a47c2c67a10e1cf8692ede0bcf2732e5ace8b910bdcb7a2c0bb82440d8 \ + --hash=sha256:451a10c32c58bf4726ce03f6cce9a93fb5332e679b7dbf48ef69c6fa93493243 \ + --hash=sha256:f0500f8088cf142bfc4dd07a81f3a344603755602dc5f51acde588a36e538ed5 \ + --hash=sha256:86fac8e040d1645cfb3d623d949523eb1d367c2eee51fd5843536955104fd1ed \ + --hash=sha256:fdee0b3b044db8e5d74001fbe25201e0db31be529d47785d2a70e22b7ff63f4a \ + --hash=sha256:0fd7ca92719fcb6a2437a16fd0281809fc57acb8a86ebf41fd06fe8faca1e14d \ + --hash=sha256:003d92abb1c49e824b8c05857ae745959981174a082dd8c5a66ab1f55855ced3 \ + --hash=sha256:b6b2fb3d20e21dbe97e9776d0c0b33c0a3dab8e4ac03a5434e9bfd11c9b3a998 \ + --hash=sha256:157392c983762e8a3f7ab523b0cfa4c78fbe83e28e0f1eee59e623636ddfe1ec \ + --hash=sha256:cdb3c526f86fcd3d2c8794d1a3d5836ece2cf6f6c9d8e1ee8036b30d24ce29b1 \ + --hash=sha256:57201c605b1d9045c135e72c521cbe537d8da6d534daa76e349c27fc1177681c \ + --hash=sha256:099b1826f213bd4006dcd02526377b81134538fe1377e4cb70a07ba223ae958a \ + --hash=sha256:80f99d7f9dee78f73796b9df2bc836c02f9bfc5a55eec65dda20899d96d09754 \ + --hash=sha256:6f8cbd4cb6933d867e28ff7efc6030eceb1e4caef5c1bed5dfe7d097f63e6c28 \ + --hash=sha256:86da69130494c972d751ab61fdb209d40f079b77d5b3b833e83f26cee3c1a2fc \ + --hash=sha256:4385265171ee53d12d64429d65f0609f57a171d646a61366e3354eddc5c95778 \ + --hash=sha256:956f34ca2f6edaaafeaeef5f08db2abd54e4b5371a861ad68065d88b63d157b2 \ + --hash=sha256:9a3d4686fd1a8e8c86300e004acd73dd21e35a65f66625d784b2292280e46269 \ + --hash=sha256:a08c535ef2ebcb326d2388bb4430d52f630ce43386f8b21a42e761e9e30394c4 \ + --hash=sha256:a032f0b6f6143dccee115b14a72780bc5813ccc552f3b1e9d519cb41e2d3ee50 \ + --hash=sha256:0da0905cd6c08b99d772b2b97f15ccfa80758c49143c3eff131b9480eba6f3fd \ + --hash=sha256:1c73247309b6853b19906df594f7d0a8664bf3490ee2fb25621f617099525ffc \ + --hash=sha256:cd6cd64ccfc10db296f17e20713265bd91899774a34bcdf788c002c48514469e \ + --hash=sha256:b6aeba18fad932e7dd7715758c97f5aaa287b2726cb4ca9eea7d769fcd607f90 \ + --hash=sha256:3e243c2f70a4e4758cbdd45b31cdd72eb4816ace7029bdfe7e706cc37015f72e \ + --hash=sha256:52f60f04dcc6e6162c3ce9eb058bb6853cfdd7c8dfefb1f1b428e94d0633a7cc \ + --hash=sha256:f4710519655c55c0b74b6c8abc39f24493f3a8a6c7854af362f4c7953d16036b \ + --hash=sha256:9c305fe9365f449cc3ad379ecf823f1ba6b734cdec56a618fbef11c83a54cede \ + --hash=sha256:d4bf1f03d11cdc02c32a7771fa23c7de136e7cfa2920f508b2b3bc93d8b29c50 \ + --hash=sha256:98818ca8cae7a1d95ca05b219ffbcaf92a4fec200ff245e3ddf3ffc616977490 \ + --hash=sha256:58d6f7a988b10c31be3faa1faf3e58288ef7e8159584bfa6ded45742f390309f +typing-extensions==4.2.0; python_version >= "3.7" and python_full_version >= "3.6.1" \ + --hash=sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708 \ + --hash=sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376 +uc-micro-py==1.0.1; python_version >= "3.7" \ + --hash=sha256:b7cdf4ea79433043ddfe2c82210208f26f7962c0cfbe3bacb05ee879a7fdb596 \ + --hash=sha256:316cfb8b6862a0f1d03540f0ae6e7b033ff1fa0ddbe60c12cbe0d4cec846a69f +urllib3==1.26.9; python_full_version >= "3.6.1" and python_version < "4" and python_full_version < "4.0.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4" and python_version >= "3.6") and python_version >= "3.7" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7") and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") \ + --hash=sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14 \ + --hash=sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e +wcwidth==0.2.5; python_full_version >= "3.6.2" and python_version >= "3.8" \ + --hash=sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784 \ + --hash=sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83 +webencodings==0.5.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7" \ + --hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 \ + --hash=sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923 +websocket-client==1.3.2; python_version >= "3.7" \ + --hash=sha256:50b21db0058f7a953d67cc0445be4b948d7fc196ecbeb8083d68d94628e4abf6 \ + --hash=sha256:722b171be00f2b90e1d4fb2f2b53146a536ca38db1da8ff49c972a4e1365d0ef +websockets==9.1; python_full_version >= "3.6.1" and python_full_version < "4.0.0" \ + --hash=sha256:d144b350045c53c8ff09aa1cfa955012dd32f00c7e0862c199edcabb1a8b32da \ + --hash=sha256:b4ad84b156cf50529b8ac5cc1638c2cf8680490e3fccb6121316c8c02620a2e4 \ + --hash=sha256:2cf04601633a4ec176b9cc3d3e73789c037641001dbfaf7c411f89cd3e04fcaf \ + --hash=sha256:5c8f0d82ea2468282e08b0cf5307f3ad022290ed50c45d5cb7767957ca782880 \ + --hash=sha256:caa68c95bc1776d3521f81eeb4d5b9438be92514ec2a79fececda814099c8314 \ + --hash=sha256:d2c2d9b24d3c65b5a02cac12cbb4e4194e590314519ed49db2f67ef561c3cf58 \ + --hash=sha256:f31722f1c033c198aa4a39a01905951c00bd1c74f922e8afc1b1c62adbcdd56a \ + --hash=sha256:3ddff38894c7857c476feb3538dd847514379d6dc844961dc99f04b0384b1b1b \ + --hash=sha256:51d04df04ed9d08077d10ccbe21e6805791b78eac49d16d30a1f1fe2e44ba0af \ + --hash=sha256:f68c352a68e5fdf1e97288d5cec9296664c590c25932a8476224124aaf90dbcd \ + --hash=sha256:b43b13e5622c5a53ab12f3272e6f42f1ce37cd5b6684b2676cb365403295cd40 \ + --hash=sha256:9147868bb0cc01e6846606cd65cbf9c58598f187b96d14dd1ca17338b08793bb \ + --hash=sha256:836d14eb53b500fd92bd5db2fc5894f7c72b634f9c2a28f546f75967503d8e25 \ + --hash=sha256:48c222feb3ced18f3dc61168ca18952a22fb88e5eb8902d2bf1b50faefdc34a2 \ + --hash=sha256:900589e19200be76dd7cbaa95e9771605b5ce3f62512d039fb3bc5da9014912a \ + --hash=sha256:ab5ee15d3462198c794c49ccd31773d8a2b8c17d622aa184f669d2b98c2f0857 \ + --hash=sha256:85e701a6c316b7067f1e8675c638036a796fe5116783a4c932e7eb8e305a3ffe \ + --hash=sha256:b2e71c4670ebe1067fa8632f0d081e47254ee2d3d409de54168b43b0ba9147e0 \ + --hash=sha256:230a3506df6b5f446fed2398e58dcaafdff12d67fe1397dff196411a9e820d02 \ + --hash=sha256:7df3596838b2a0c07c6f6d67752c53859a54993d4f062689fdf547cb56d0f84f \ + --hash=sha256:826ccf85d4514609219725ba4a7abd569228c2c9f1968e8be05be366f68291ec \ + --hash=sha256:0dd4eb8e0bbf365d6f652711ce21b8fd2b596f873d32aabb0fbb53ec604418cc \ + --hash=sha256:1d0971cc7251aeff955aa742ec541ee8aaea4bb2ebf0245748fbec62f744a37e \ + --hash=sha256:7189e51955f9268b2bdd6cc537e0faa06f8fffda7fb386e5922c6391de51b077 \ + --hash=sha256:e9e5fd6dbdf95d99bc03732ded1fc8ef22ebbc05999ac7e0c7bf57fe6e4e5ae2 \ + --hash=sha256:9e7fdc775fe7403dbd8bc883ba59576a6232eac96dacb56512daacf7af5d618d \ + --hash=sha256:597c28f3aa7a09e8c070a86b03107094ee5cdafcc0d55f2f2eac92faac8dc67d \ + --hash=sha256:ad893d889bc700a5835e0a95a3e4f2c39e91577ab232a3dc03c262a0f8fc4b5c \ + --hash=sha256:1d6b4fddb12ab9adf87b843cd4316c4bd602db8d5efd2fb83147f0458fe85135 \ + --hash=sha256:ebf459a1c069f9866d8569439c06193c586e72c9330db1390af7c6a0a32c4afd \ + --hash=sha256:be5fd35e99970518547edc906efab29afd392319f020c3c58b0e1a158e16ed20 \ + --hash=sha256:85db8090ba94e22d964498a47fdd933b8875a1add6ebc514c7ac8703eb97bbf0 \ + --hash=sha256:276d2339ebf0df4f45df453923ebd2270b87900eda5dfd4a6b0cfa15f82111c3 +werkzeug==2.1.2; python_version >= "3.7" \ + --hash=sha256:72a4b735692dd3135217911cbeaa1be5fa3f62bffb8745c5215420a03dc55255 \ + --hash=sha256:1ce08e8093ed67d638d63879fd1ba3735817f7a80de3674d293f5984f25fb6e6 +widgetsnbextension==3.6.0; python_version >= "3.7" \ + --hash=sha256:4fd321cad39fdcf8a8e248a657202d42917ada8e8ed5dd3f60f073e0d54ceabd \ + --hash=sha256:e84a7a9fcb9baf3d57106e184a7389a8f8eb935bf741a5eb9d60aa18cc029a80 +wrapt==1.14.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" \ + --hash=sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3 \ + --hash=sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef \ + --hash=sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28 \ + --hash=sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59 \ + --hash=sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87 \ + --hash=sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1 \ + --hash=sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b \ + --hash=sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462 \ + --hash=sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1 \ + --hash=sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320 \ + --hash=sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2 \ + --hash=sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4 \ + --hash=sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069 \ + --hash=sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310 \ + --hash=sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f \ + --hash=sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656 \ + --hash=sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c \ + --hash=sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8 \ + --hash=sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164 \ + --hash=sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907 \ + --hash=sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3 \ + --hash=sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3 \ + --hash=sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d \ + --hash=sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7 \ + --hash=sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00 \ + --hash=sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4 \ + --hash=sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1 \ + --hash=sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1 \ + --hash=sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff \ + --hash=sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d \ + --hash=sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1 \ + --hash=sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569 \ + --hash=sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed \ + --hash=sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471 \ + --hash=sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248 \ + --hash=sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68 \ + --hash=sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d \ + --hash=sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77 \ + --hash=sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7 \ + --hash=sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015 \ + --hash=sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a \ + --hash=sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853 \ + --hash=sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c \ + --hash=sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456 \ + --hash=sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f \ + --hash=sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc \ + --hash=sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1 \ + --hash=sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af \ + --hash=sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b \ + --hash=sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0 \ + --hash=sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57 \ + --hash=sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5 \ + --hash=sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d \ + --hash=sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383 \ + --hash=sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7 \ + --hash=sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86 \ + --hash=sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735 \ + --hash=sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b \ + --hash=sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3 \ + --hash=sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3 \ + --hash=sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe \ + --hash=sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5 \ + --hash=sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb \ + --hash=sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d +yfinance==0.1.70; python_version >= "3.6" \ + --hash=sha256:949d527544a88c09602753050d2e1fb08f7896f79198cd71b891af5e3cc49249 \ + --hash=sha256:a42190dd3b3fce1b00aec273db36392b8f100cc8c73dc7881bb558117cbf7c69 +zipp==3.8.0; python_full_version >= "3.6.1" and python_full_version < "4.0.0" and python_version >= "3.7" and python_version < "3.9" \ + --hash=sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099 \ + --hash=sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad diff --git a/requirements/requirements-dev.txt b/requirements/requirements-dev.txt new file mode 100644 index 0000000000..c38292341f --- /dev/null +++ b/requirements/requirements-dev.txt @@ -0,0 +1,26 @@ +Jinja2==3.0.3 +PennyLane==0.20.0 +cirq==0.11.0 +dwave-system==1.10.0 +dwavebinarycsp==0.1.3 +fire==0.4.0 +jupyter-book==0.13 +jupytext==1.13.8 +loguru==0.6.0 +matplotlib==3.3.4 +netket==3.2 +networkx==2.6.3 +numpy==1.19.2 +paramiko==2.10.1 +penaltymodel-maxgap==0.5.5 +pylatexenc==2.10 +pyppeteer==0.2.6 +pyyaml==5.4.1 +qiskit==0.31.0 +scikit-learn==0.24.1 +scp==0.14.1 +sphinx-jupyterbook-latex==0.4.6 +sphinx-sitemap==2.2.0 +sympy==1.8 +tensorflow-quantum==0.6.0 +tensorflow==2.7.2 diff --git a/requirements/requirements-listener.txt b/requirements/requirements-listener.txt new file mode 100644 index 0000000000..1fd7bd87d5 --- /dev/null +++ b/requirements/requirements-listener.txt @@ -0,0 +1,15 @@ +PennyLane==0.20.0 +cirq==0.11.0 +dwave-system==1.10.0 +dwavebinarycsp==0.1.3 +jupytext==1.13.8 +matplotlib==3.3.4 +netket==3.2 +networkx==2.6.3 +numpy==1.19.2 +penaltymodel-maxgap==0.5.5 +qiskit==0.31.0 +scikit-learn==0.24.1 +sympy==1.8 +tensorflow-quantum==0.6.0 +tensorflow==2.7.2 diff --git a/tools/toml2requirements.py b/tools/generate_requirements.py similarity index 70% rename from tools/toml2requirements.py rename to tools/generate_requirements.py index 62a23056f1..d3f4b4df63 100644 --- a/tools/toml2requirements.py +++ b/tools/generate_requirements.py @@ -1,6 +1,8 @@ +from pathlib import Path from typing import List from typing import Set + prohibited_packages_listner = set( [ "python", @@ -14,6 +16,8 @@ "paramiko", "scp", "Jinja2", + "fire", + "loguru", "", ], ) @@ -30,10 +34,10 @@ def get_packages(prohibited_packages: Set[str]) -> (List[str]): with open("pyproject.toml", "r") as toml_file: for line in toml_file: line = line.strip() - if line == "[tool.poetry.dependencies]": + if line in ["[tool.poetry.dependencies]", "# [tool.poetry.dev-dependencies]"]: packages_flag = True continue - elif line in ["[build-system]", "# [tool.poetry.dev-dependencies]"]: + elif line in ["[build-system]"]: packages_flag = False elif line == "": continue @@ -45,21 +49,20 @@ def get_packages(prohibited_packages: Set[str]) -> (List[str]): if version.startswith("^"): if len(version.split(".")) == 3: packages.append( - package + ">=" + version[1:], - ) # choose major version, needed for security bugfixes + package + "==" + version[1:], # remove ^ + ) else: - packages.append(package + ">=" + version[1:]) + packages.append(package + "==" + version[1:]) # remove ^ else: packages.append(package + "==" + version) return sorted(packages) if __name__ == "__main__": - with open("requirements.txt", "w") as req_file: + with open(Path("requirements/requirements-listener.txt"), "w") as req_file: req_file.writelines("\n".join(get_packages(prohibited_packages=prohibited_packages_listner))) req_file.writelines("\n") - # Devs now only with poetry - # with open("requirements-dev.txt", 'w') as req_file: - # req_file.writelines("\n".join(get_packages(prohibited_packages=prohibited_packages_dev))) - # req_file.writelines("\n") + with open(Path("requirements/requirements-dev.txt"), "w") as req_file: + req_file.writelines("\n".join(get_packages(prohibited_packages=prohibited_packages_dev))) + req_file.writelines("\n") From 99ec43c2b543dc0d4c62dff1ef89a1e7b754f27a Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Fri, 19 Aug 2022 20:12:23 +0300 Subject: [PATCH 62/63] resolve conflict --- .github/workflows/ci.yml | 27 ++ .github/workflows/pre-commit.yml | 58 ---- .pre-commit-config.yaml | 20 +- poetry.lock | 441 ++++++++++++++----------------- 4 files changed, 231 insertions(+), 315 deletions(-) create mode 100644 .github/workflows/ci.yml delete mode 100644 .github/workflows/pre-commit.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000000..239cf1a8c4 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,27 @@ +name: ci + +on: + workflow_dispatch: + push: + branches: [ master ] + pull_request: + +jobs: + + pre-commit: + runs-on: ubuntu-latest + timeout-minutes: 10 + + steps: + - name: checkout code + uses: actions/checkout@v3 + + - name: set up py3.8 + uses: actions/setup-python@v4 + with: + python-version: 3.8 + + - name: run pre-commit action + uses: pre-commit/action@v3.0.0 + with: + extra_args: --all-files \ No newline at end of file diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml deleted file mode 100644 index 732e5cdc6d..0000000000 --- a/.github/workflows/pre-commit.yml +++ /dev/null @@ -1,58 +0,0 @@ -name: pre-commit-and-tests - -on: - push: - branches: [ master ] - pull_request: - -jobs: - - pre_commit: - runs-on: ubuntu-latest - timeout-minutes: 4 - - steps: - - name: checkout code - uses: actions/checkout@v3 - - - name: set up py3.8 - uses: actions/setup-python@v4 - with: - python-version: 3.8 - cache: 'pip' - - - name: install dependencies - run: | - python -m pip install --upgrade pip - - pip install fire jupytext pytest loguru - - - name: run pre-commit action - uses: pre-commit/action@v3.0.0 - with: - extra_args: --all-files - - tests: - needs: [pre_commit] - runs-on: ubuntu-latest - timeout-minutes: 2 - - steps: - - name: checkout code - uses: actions/checkout@v3 - - - name: set up py3.8 - uses: actions/setup-python@v4 - with: - python-version: 3.8 - cache: 'pip' - - - name: install dependencies - run: | - python -m pip install --upgrade pip - - pip install fire jupytext pytest loguru - - - name: run tests - run: | - python -m pytest tests/ -vv diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 0b642e9373..44a60847ae 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,7 @@ repos: - repo: https://github.com/asottile/reorder_python_imports - rev: v3.8.1 + rev: v3.8.2 hooks: - id: reorder-python-imports @@ -9,13 +9,17 @@ repos: rev: 22.6.0 hooks: - id: black - args: ["--line-length=119"] + args: + - --line-length=119 - repo: https://gitlab.com/pycqa/flake8 - rev: 4.0.1 + rev: 3.9.2 hooks: - id: flake8 - args: ["--ignore=E501,W503", "--max-line-length=119"] + args: + - --ignore=E501,W503 + - --per-file-ignores=*/__init__.py:F401 + - --max-line-length=119 additional_dependencies: - flake8-bugbear==22.7.1 - flake8-builtins==1.5.3 @@ -41,16 +45,16 @@ repos: - id: detect-private-key - id: end-of-file-fixer - id: trailing-whitespace - args: ["--markdown-linebreak-ext=md"] + args: + - --markdown-linebreak-ext=md - repo: https://github.com/pre-commit/mirrors-mypy - rev: v0.961 + rev: v0.971 hooks: - id: mypy - args: [--no-strict-optional, --ignore-missing-imports] - repo: https://github.com/ComPWA/mirrors-pyright - rev: v1.1.260 + rev: v1.1.267 hooks: - id: pyright diff --git a/poetry.lock b/poetry.lock index 72249d43cd..f16ebde8de 100644 --- a/poetry.lock +++ b/poetry.lock @@ -141,7 +141,7 @@ python-versions = ">=3.6" numpy = "*" [package.extras] -tests = ["coverage", "pytest", "pytest-cov"] +tests = ["pytest-cov", "pytest", "coverage"] [[package]] name = "babel" @@ -235,14 +235,6 @@ python-versions = "*" [package.dependencies] pycparser = "*" -[[package]] -name = "cfgv" -version = "3.3.1" -description = "Validate configuration and produce human readable error messages." -category = "main" -optional = false -python-versions = ">=3.6.1" - [[package]] name = "charset-normalizer" version = "2.0.12" @@ -283,7 +275,7 @@ cirq-core = "0.11.0" cirq-google = "0.11.0" [package.extras] -dev_env = ["asv", "virtualenv", "black (==20.8b1)", "mypy (>=0.782.0,<0.783.0)", "pylint (>=2.6.0,<2.7.0)", "pytest (>=6.2.2,<6.3.0)", "pytest-asyncio (>=0.12.0,<0.13.0)", "pytest-cov (>=2.5.0,<2.6.0)", "filelock (>=3.0.12,<3.1.0)", "flynt (>=0.60,<1.0)", "grpcio-tools (>=1.26.0,<1.27.0)", "mypy-protobuf (==1.10)", "twine", "pyquil (>=2.21.0,<2.22.0)", "qiskit-aer (>=0.7.6,<0.8.0)", "ipython", "ipykernel", "notebook", "rstcheck (>=3.3.1,<3.4.0)", "freezegun (>=0.3.15,<0.4.0)", "importlib-metadata"] +dev_env = ["importlib-metadata", "freezegun (>=0.3.15,<0.4.0)", "rstcheck (>=3.3.1,<3.4.0)", "notebook", "ipykernel", "ipython", "qiskit-aer (>=0.7.6,<0.8.0)", "pyquil (>=2.21.0,<2.22.0)", "twine", "mypy-protobuf (==1.10)", "grpcio-tools (>=1.26.0,<1.27.0)", "flynt (>=0.60,<1.0)", "filelock (>=3.0.12,<3.1.0)", "pytest-cov (>=2.5.0,<2.6.0)", "pytest-asyncio (>=0.12.0,<0.13.0)", "pytest (>=6.2.2,<6.3.0)", "pylint (>=2.6.0,<2.7.0)", "mypy (>=0.782.0,<0.783.0)", "black (==20.8b1)", "virtualenv", "asv"] [[package]] name = "cirq-core" @@ -306,7 +298,7 @@ tqdm = "*" typing-extensions = "*" [package.extras] -contrib = ["ply (>=3.4)", "pylatex (>=1.3.0,<1.4.0)", "quimb", "opt-einsum", "autoray", "pyquil (>=2.21.0,<2.22.0)"] +contrib = ["pyquil (>=2.21.0,<2.22.0)", "autoray", "opt-einsum", "quimb", "pylatex (>=1.3.0,<1.4.0)", "ply (>=3.4)"] [[package]] name = "cirq-google" @@ -425,14 +417,6 @@ category = "main" optional = false python-versions = ">=3" -[[package]] -name = "distlib" -version = "0.3.5" -description = "Distribution utilities" -category = "main" -optional = false -python-versions = "*" - [[package]] name = "dlx" version = "1.0.4" @@ -566,8 +550,8 @@ penaltymodel-cache = ">=0.4.0,<0.5.0" penaltymodel-lp = ">=0.1.0,<0.2.0" [package.extras] -maxgap = ["penaltymodel-maxgap (>=0.5.0,<0.6.0)"] mip = ["penaltymodel-mip (>=0.2.0,<0.3.0)"] +maxgap = ["penaltymodel-maxgap (>=0.5.0,<0.6.0)"] [[package]] name = "entrypoints" @@ -615,30 +599,6 @@ python-versions = "*" [package.extras] devel = ["colorama", "jsonschema", "json-spec", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] -[[package]] -name = "filelock" -version = "3.7.1" -description = "A platform independent file lock." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.extras] -docs = ["furo (>=2021.8.17b43)", "sphinx (>=4.1)", "sphinx-autodoc-typehints (>=1.12)"] -testing = ["covdefaults (>=1.2.0)", "coverage (>=4)", "pytest (>=4)", "pytest-cov", "pytest-timeout (>=1.4.2)"] - -[[package]] -name = "fire" -version = "0.4.0" -description = "A library for automatically generating command line interfaces." -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -six = "*" -termcolor = "*" - [[package]] name = "flatbuffers" version = "2.0" @@ -664,7 +624,7 @@ optax = "*" typing-extensions = ">=4.1.1" [package.extras] -testing = ["atari-py (==0.2.5)", "clu", "gym (==0.18.3)", "jaxlib", "jraph", "ml-collections", "opencv-python", "pytest", "pytest-cov", "pytest-xdist (==1.34.0)", "pytype", "sentencepiece", "svn", "tensorflow-text (>=2.4.0)", "tensorflow-datasets", "tensorflow", "torch"] +testing = ["torch", "tensorflow", "tensorflow-datasets", "tensorflow-text (>=2.4.0)", "svn", "sentencepiece", "pytype", "pytest-xdist (==1.34.0)", "pytest-cov", "pytest", "opencv-python", "ml-collections", "jraph", "jaxlib", "gym (==0.18.3)", "clu", "atari-py (==0.2.5)"] [[package]] name = "fonttools" @@ -849,17 +809,6 @@ category = "main" optional = false python-versions = "*" -[[package]] -name = "identify" -version = "2.5.1" -description = "File identification library for Python" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.extras] -license = ["ukkonen"] - [[package]] name = "idna" version = "3.3" @@ -1159,10 +1108,10 @@ nbformat = "*" sqlalchemy = ">=1.3.12,<1.5" [package.extras] -cli = ["click", "click-completion", "click-log", "tabulate", "pyyaml"] -code_style = ["flake8 (>=3.7.0,<3.8.0)", "black", "pre-commit (==1.17.0)"] -rtd = ["myst-nb (>=0.7,<1.0)", "sphinx-copybutton", "pydata-sphinx-theme"] -testing = ["ipykernel", "coverage", "pytest (>=3.6,<4)", "pytest-cov", "pytest-regressions", "matplotlib", "numpy", "sympy", "pandas", "nbformat (>=5.1)"] +testing = ["nbformat (>=5.1)", "pandas", "sympy", "numpy", "matplotlib", "pytest-regressions", "pytest-cov", "pytest (>=3.6,<4)", "coverage", "ipykernel"] +rtd = ["pydata-sphinx-theme", "sphinx-copybutton", "myst-nb (>=0.7,<1.0)"] +code_style = ["pre-commit (==1.17.0)", "black", "flake8 (>=3.7.0,<3.8.0)"] +cli = ["pyyaml", "tabulate", "click-log", "click-completion", "click"] [[package]] name = "jupyter-client" @@ -1241,7 +1190,7 @@ python-versions = ">=3.7" jupyter-server = ">=1.1,<2.0" [package.extras] -test = ["jupyter-server", "pytest"] +test = ["pytest", "jupyter-server"] [[package]] name = "jupyter-sphinx" @@ -1259,31 +1208,20 @@ nbformat = "*" Sphinx = ">=2" [[package]] -name = "jupyterlab-widgets" -version = "1.1.0" -description = "A JupyterLab extension." +name = "jupyterlab-pygments" +version = "0.2.2" +description = "Pygments theme using JupyterLab CSS variables" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] -name = "jupytext" -version = "1.13.8" -description = "Jupyter notebooks as Markdown documents, Julia, Python or R scripts" +name = "jupyterlab-widgets" +version = "1.1.0" +description = "A JupyterLab extension." category = "main" optional = false -python-versions = "~=3.6" - -[package.dependencies] -markdown-it-py = ">=1.0.0,<3.0.0" -mdit-py-plugins = "*" -nbformat = "*" -pyyaml = "*" -toml = "*" - -[package.extras] -rst2md = ["sphinx-gallery (>=0.7.0,<0.8.0)"] -toml = ["toml"] +python-versions = ">=3.6" [[package]] name = "keras" @@ -1306,9 +1244,9 @@ numpy = ">=1.9.1" six = ">=1.9.0" [package.extras] -image = ["scipy (>=0.14)", "Pillow (>=5.2.0)"] +tests = ["pytest-cov", "pytest-xdist", "pytest", "keras", "tensorflow", "pillow", "pandas"] pep8 = ["flake8"] -tests = ["pandas", "pillow", "tensorflow", "keras", "pytest", "pytest-xdist", "pytest-cov"] +image = ["Pillow (>=5.2.0)", "scipy (>=0.14)"] [[package]] name = "kiwisolver" @@ -1349,10 +1287,10 @@ python-versions = ">=3.6" uc-micro-py = "*" [package.extras] -benchmark = ["pytest", "pytest-benchmark"] -dev = ["pre-commit", "isort", "flake8", "black"] -doc = ["sphinx", "sphinx-book-theme", "myst-parser"] -test = ["coverage", "pytest", "pytest-cov"] +test = ["pytest-cov", "pytest", "coverage"] +doc = ["myst-parser", "sphinx-book-theme", "sphinx"] +dev = ["black", "flake8", "isort", "pre-commit"] +benchmark = ["pytest-benchmark", "pytest"] [[package]] name = "llvmlite" @@ -1362,21 +1300,6 @@ category = "main" optional = false python-versions = ">=3.7,<3.11" -[[package]] -name = "loguru" -version = "0.6.0" -description = "Python logging made (stupidly) simple" -category = "main" -optional = false -python-versions = ">=3.5" - -[package.dependencies] -colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} -win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} - -[package.extras] -dev = ["colorama (>=0.3.4)", "docutils (==0.16)", "flake8 (>=3.7.7)", "tox (>=3.9.0)", "pytest (>=4.6.2)", "pytest-cov (>=2.7.1)", "black (>=19.10b0)", "isort (>=5.1.1)", "Sphinx (>=4.1.1)", "sphinx-autobuild (>=0.7.1)", "sphinx-rtd-theme (>=0.4.3)"] - [[package]] name = "lxml" version = "4.9.1" @@ -1417,12 +1340,12 @@ python-versions = "~=3.6" attrs = ">=19,<22" [package.extras] -code_style = ["pre-commit (==2.6)"] -compare = ["commonmark (>=0.9.1,<0.10.0)", "markdown (>=3.2.2,<3.3.0)", "mistletoe-ebp (>=0.10.0,<0.11.0)", "mistune (>=0.8.4,<0.9.0)", "panflute (>=1.12,<2.0)"] -linkify = ["linkify-it-py (>=1.0,<2.0)"] +testing = ["pytest-regressions", "pytest-cov", "pytest-benchmark (>=3.2,<4.0)", "pytest (>=3.6,<4)", "psutil", "coverage"] +rtd = ["sphinx-book-theme", "sphinx-panels (>=0.4.0,<0.5.0)", "sphinx-copybutton", "sphinx (>=2,<4)", "pyyaml", "myst-nb (==0.13.0a1)"] plugins = ["mdit-py-plugins"] -rtd = ["myst-nb (==0.13.0a1)", "pyyaml", "sphinx (>=2,<4)", "sphinx-copybutton", "sphinx-panels (>=0.4.0,<0.5.0)", "sphinx-book-theme"] -testing = ["coverage", "psutil", "pytest (>=3.6,<4)", "pytest-benchmark (>=3.2,<4.0)", "pytest-cov", "pytest-regressions"] +linkify = ["linkify-it-py (>=1.0,<2.0)"] +compare = ["panflute (>=1.12,<2.0)", "mistune (>=0.8.4,<0.9.0)", "mistletoe-ebp (>=0.10.0,<0.11.0)", "markdown (>=3.2.2,<3.3.0)", "commonmark (>=0.9.1,<0.10.0)"] +code_style = ["pre-commit (==2.6)"] [[package]] name = "markupsafe" @@ -1474,9 +1397,9 @@ python-versions = "~=3.6" markdown-it-py = ">=1.0,<2.0" [package.extras] +testing = ["pytest-regressions", "pytest-cov", "pytest (>=3.6,<4)", "coverage"] +rtd = ["sphinx-book-theme (>=0.1.0,<0.2.0)", "myst-parser (==0.14.0a3)"] code_style = ["pre-commit (==2.6)"] -rtd = ["myst-parser (==0.14.0a3)", "sphinx-book-theme (>=0.1.0,<0.2.0)"] -testing = ["coverage", "pytest (>=3.6,<4)", "pytest-cov", "pytest-regressions"] [[package]] name = "minorminer" @@ -1520,8 +1443,8 @@ optional = false python-versions = "*" [package.extras] -develop = ["pytest (>=4.6)", "pycodestyle", "pytest-cov", "codecov", "wheel"] tests = ["pytest (>=4.6)"] +develop = ["wheel", "codecov", "pytest-cov", "pycodestyle", "pytest (>=4.6)"] [[package]] name = "msgpack" @@ -1608,11 +1531,11 @@ test = ["ipython (<8.0.0)", "ipykernel", "ipywidgets (<8.0.0)", "pytest (>=4.1)" [[package]] name = "nbconvert" -version = "5.6.1" +version = "6.3.0" description = "Converting Jupyter Notebooks" category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.7" [package.dependencies] bleach = "*" @@ -1620,19 +1543,21 @@ defusedxml = "*" entrypoints = ">=0.2.2" jinja2 = ">=2.4" jupyter-core = "*" +jupyterlab-pygments = "*" mistune = ">=0.8.1,<2" +nbclient = ">=0.5.0,<0.6.0" nbformat = ">=4.4" pandocfilters = ">=1.4.1" -pygments = "*" +pygments = ">=2.4.1" testpath = "*" -traitlets = ">=4.2" +traitlets = ">=5.0" [package.extras] -all = ["pytest", "pytest-cov", "ipykernel", "jupyter-client (>=5.3.1)", "ipywidgets (>=7)", "pebble", "tornado (>=4.0)", "sphinx (>=1.5.1)", "sphinx-rtd-theme", "nbsphinx (>=0.2.12)", "sphinxcontrib-github-alt", "ipython", "mock"] -docs = ["sphinx (>=1.5.1)", "sphinx-rtd-theme", "nbsphinx (>=0.2.12)", "sphinxcontrib-github-alt", "ipython", "jupyter-client (>=5.3.1)"] -execute = ["jupyter-client (>=5.3.1)"] +all = ["pytest", "pytest-cov", "pytest-dependency", "ipykernel", "ipywidgets (>=7)", "pyppeteer (==0.2.6)", "tornado (>=4.0)", "sphinx (>=1.5.1)", "sphinx-rtd-theme", "nbsphinx (>=0.2.12)", "ipython"] +docs = ["sphinx (>=1.5.1)", "sphinx-rtd-theme", "nbsphinx (>=0.2.12)", "ipython"] serve = ["tornado (>=4.0)"] -test = ["pytest", "pytest-cov", "ipykernel", "jupyter-client (>=5.3.1)", "ipywidgets (>=7)", "pebble", "mock"] +test = ["pytest", "pytest-cov", "pytest-dependency", "ipykernel", "ipywidgets (>=7)", "pyppeteer (==0.2.6)"] +webpdf = ["pyppeteer (==0.2.6)"] [[package]] name = "nbdime" @@ -1736,14 +1661,6 @@ python-versions = "*" [package.extras] test = ["codecov (>=2.0.5)", "coverage (>=4.2)", "flake8 (>=3.0.4)", "pytest (>=4.5.0)", "pytest-cov (>=2.7.1)", "pytest-runner (>=5.1)", "pytest-virtualenv (>=1.7.0)", "virtualenv (>=15.0.3)"] -[[package]] -name = "nodeenv" -version = "1.7.0" -description = "Node.js virtual environment builder" -category = "main" -optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" - [[package]] name = "notebook" version = "6.4.11" @@ -1783,7 +1700,7 @@ optional = false python-versions = ">=2.6,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" [package.extras] -cryptography = ["cryptography (<2.2)", "cryptography"] +cryptography = ["cryptography", "cryptography (<2.2)"] [[package]] name = "numba" @@ -1813,7 +1730,7 @@ numba = ">=0.52,<0.57" numpy = ">=1.18,<2.0" [package.extras] -dev = ["pytest (>=6)", "pytest-xdist (>=2)", "coverage (>=5)", "pytest-cov (>=2.10.1)", "networkx (>=2.4,<3.0)", "flaky (>=3.7)", "pre-commit", "black (==21.6b0)", "flakehell (>=0.9)"] +dev = ["flakehell (>=0.9)", "black (==21.6b0)", "pre-commit", "flaky (>=3.7)", "networkx (>=2.4,<3.0)", "pytest-cov (>=2.10.1)", "coverage (>=5)", "pytest-xdist (>=2)", "pytest (>=6)"] [[package]] name = "numpy" @@ -2072,18 +1989,6 @@ python-versions = ">=3.7" docs = ["olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinx-rtd-theme (>=1.0)", "sphinxext-opengraph"] tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] -[[package]] -name = "platformdirs" -version = "2.5.2" -description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.extras] -docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"] -test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] - [[package]] name = "plucky" version = "0.4.3" @@ -2108,22 +2013,6 @@ category = "main" optional = false python-versions = "*" -[[package]] -name = "pre-commit" -version = "2.20.0" -description = "A framework for managing and maintaining multi-language pre-commit hooks." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -cfgv = ">=2.0.0" -identify = ">=1.0.0" -nodeenv = ">=0.11.1" -pyyaml = ">=5.1" -toml = "*" -virtualenv = ">=20.0.8" - [[package]] name = "prometheus-client" version = "0.14.1" @@ -2280,10 +2169,10 @@ packaging = "*" sphinx = ">=3.5.4,<5" [package.extras] -doc = ["numpydoc", "myst-parser", "pandas", "pytest", "pytest-regressions", "sphinxext-rediraffe", "sphinx-sitemap", "jupyter-sphinx", "plotly", "numpy", "xarray"] -test = ["pytest", "pydata-sphinx-theme"] -coverage = ["pytest-cov", "codecov", "pydata-sphinx-theme"] -dev = ["pyyaml", "pre-commit", "nox", "pydata-sphinx-theme"] +dev = ["pydata-sphinx-theme", "nox", "pre-commit", "pyyaml"] +coverage = ["pydata-sphinx-theme", "codecov", "pytest-cov"] +test = ["pydata-sphinx-theme", "pytest"] +doc = ["xarray", "numpy", "plotly", "jupyter-sphinx", "sphinx-sitemap", "sphinxext-rediraffe", "pytest-regressions", "pytest", "pandas", "myst-parser", "numpydoc"] [[package]] name = "pyee" @@ -2471,6 +2360,11 @@ category = "main" optional = false python-versions = ">=3.6" +[package.dependencies] +numpy = ">=1.16.3" +qiskit-terra = ">=0.17.0" +scipy = ">=1.0" + [package.extras] dask = ["dask", "distributed"] @@ -2541,10 +2435,10 @@ retworkx = ">=0.8.0" scipy = ">=0.19,<0.19.1 || >0.19.1" [package.extras] -cvx = ["cvxpy (>=1.0.15)"] -iq = ["scikit-learn (>=0.17)"] -jit = ["numba"] visualization = ["matplotlib (>=2.1)"] +jit = ["numba"] +iq = ["scikit-learn (>=0.17)"] +cvx = ["cvxpy (>=1.0.15)"] [[package]] name = "qiskit-terra" @@ -2659,9 +2553,9 @@ python-versions = ">=3.6" numpy = ">=1.16.0" [package.extras] -all = ["matplotlib (>=3.0)", "pillow (>=5.4)"] -graphviz = ["pillow (>=5.4)"] mpl = ["matplotlib (>=3.0)"] +graphviz = ["pillow (>=5.4)"] +all = ["pillow (>=5.4)", "matplotlib (>=3.0)"] [[package]] name = "rsa" @@ -2847,9 +2741,9 @@ pyyaml = "*" sphinx = ">=3,<5" [package.extras] +test = ["sphinx-thebe", "pytest-regressions (>=2.0.1,<2.1.0)", "pytest-cov", "pytest (>=6.0.1,<6.1.0)", "myst_nb (>=0.13,<1.0)", "coverage", "beautifulsoup4 (>=4.6.1,<5)"] +doc = ["sphinxext-opengraph", "sphinxcontrib-youtube", "sphinxcontrib-bibtex (>=2.2,<3.0)", "sphinx-thebe (>=0.1.1)", "sphinx-togglebutton (>=0.2.1)", "sphinx-tabs", "sphinx-copybutton", "sphinx-design", "sphinx (>=4.0,<5.0)", "plotly", "pandas", "nbclient", "myst-nb (>=0.13,<1.0)", "numpydoc", "matplotlib", "numpy", "folium", "ipywidgets", "ablog (>=0.10.13,<0.11.0)"] code_style = ["pre-commit (>=2.7.0,<2.8.0)"] -doc = ["ablog (>=0.10.13,<0.11.0)", "ipywidgets", "folium", "numpy", "matplotlib", "numpydoc", "myst-nb (>=0.13,<1.0)", "nbclient", "pandas", "plotly", "sphinx (>=4.0,<5.0)", "sphinx-design", "sphinx-copybutton", "sphinx-tabs", "sphinx-togglebutton (>=0.2.1)", "sphinx-thebe (>=0.1.1)", "sphinxcontrib-bibtex (>=2.2,<3.0)", "sphinxcontrib-youtube", "sphinxext-opengraph"] -test = ["beautifulsoup4 (>=4.6.1,<5)", "coverage", "myst_nb (>=0.13,<1.0)", "pytest (>=6.0.1,<6.1.0)", "pytest-cov", "pytest-regressions (>=2.0.1,<2.1.0)", "sphinx-thebe"] [[package]] name = "sphinx-comments" @@ -2863,9 +2757,9 @@ python-versions = "*" sphinx = ">=1.8" [package.extras] -code_style = ["flake8 (>=3.7.0,<3.8.0)", "black", "pre-commit (==1.17.0)"] -sphinx = ["sphinx (>=2)", "sphinx-book-theme", "myst-parser"] -testing = ["beautifulsoup4", "myst-parser", "pytest", "pytest-regressions", "sphinx (>=2)", "sphinx-book-theme"] +testing = ["sphinx-book-theme", "sphinx (>=2)", "pytest-regressions", "pytest", "myst-parser", "beautifulsoup4"] +sphinx = ["myst-parser", "sphinx-book-theme", "sphinx (>=2)"] +code_style = ["pre-commit (==1.17.0)", "black", "flake8 (>=3.7.0,<3.8.0)"] [[package]] name = "sphinx-copybutton" @@ -2879,8 +2773,8 @@ python-versions = ">=3.6" sphinx = ">=1.8" [package.extras] +rtd = ["sphinx-book-theme", "myst-nb", "ipython", "sphinx"] code_style = ["pre-commit (==2.12.1)"] -rtd = ["sphinx", "ipython", "myst-nb", "sphinx-book-theme"] [[package]] name = "sphinx-design" @@ -2894,13 +2788,13 @@ python-versions = ">=3.7" sphinx = ">=3,<5" [package.extras] -code_style = ["pre-commit (>=2.12,<3.0)"] -rtd = ["myst-parser (>=0.17.0,<0.18.0)"] -testing = ["myst-parser (>=0.17.0,<0.18.0)", "pytest (>=6.2,<7.0)", "pytest-cov", "pytest-regressions"] -theme_furo = ["furo (==2022.04.07)"] -theme_pydata = ["pydata-sphinx-theme (>=0.8.1,<0.9.0)"] -theme_rtd = ["sphinx-rtd-theme (>=1.0,<2.0)"] theme_sbt = ["sphinx-book-theme (>=0.3.0,<0.4.0)"] +theme_rtd = ["sphinx-rtd-theme (>=1.0,<2.0)"] +theme_pydata = ["pydata-sphinx-theme (>=0.8.1,<0.9.0)"] +theme_furo = ["furo (==2022.04.07)"] +testing = ["pytest-regressions", "pytest-cov", "pytest (>=6.2,<7.0)", "myst-parser (>=0.17.0,<0.18.0)"] +rtd = ["myst-parser (>=0.17.0,<0.18.0)"] +code_style = ["pre-commit (>=2.12,<3.0)"] [[package]] name = "sphinx-external-toc" @@ -2917,9 +2811,9 @@ pyyaml = "*" sphinx = ">=3,<5" [package.extras] +testing = ["pytest-regressions", "pytest-cov", "pytest (>=3.6,<4)", "coverage"] +rtd = ["sphinx-book-theme (>=0.0.36)", "myst-parser (>=0.15.0,<0.16.0)"] code_style = ["pre-commit (>=2.12,<3.0)"] -rtd = ["myst-parser (>=0.15.0,<0.16.0)", "sphinx-book-theme (>=0.0.36)"] -testing = ["coverage", "pytest (>=3.6,<4)", "pytest-cov", "pytest-regressions"] [[package]] name = "sphinx-jupyterbook-latex" @@ -2951,9 +2845,9 @@ python-versions = "*" sphinx = ">=3" [package.extras] -code_style = ["flake8 (>=3.7.0,<3.8.0)", "black", "pre-commit (==1.17.0)"] -rtd = ["sphinx (>=3.0)", "sphinx-book-theme", "myst-parser"] -testing = ["pytest (>=5.4,<6.0)", "pytest-cov (>=2.8,<3.0)", "coverage (<5.0)", "pytest-regressions", "jupyter-book"] +testing = ["jupyter-book", "pytest-regressions", "coverage (<5.0)", "pytest-cov (>=2.8,<3.0)", "pytest (>=5.4,<6.0)"] +rtd = ["myst-parser", "sphinx-book-theme", "sphinx (>=3.0)"] +code_style = ["pre-commit (==1.17.0)", "black", "flake8 (>=3.7.0,<3.8.0)"] [[package]] name = "sphinx-sitemap" @@ -2979,8 +2873,8 @@ python-versions = "*" sphinx = ">=3.5,<5" [package.extras] -sphinx = ["matplotlib", "myst-nb", "sphinx-book-theme", "sphinx-copybutton", "sphinx-panels"] -testing = ["matplotlib", "pytest", "pytest-regressions", "beautifulsoup4"] +testing = ["beautifulsoup4", "pytest-regressions", "pytest", "matplotlib"] +sphinx = ["sphinx-panels", "sphinx-copybutton", "sphinx-book-theme", "myst-nb", "matplotlib"] [[package]] name = "sphinx-togglebutton" @@ -2995,7 +2889,7 @@ docutils = "*" sphinx = "*" [package.extras] -sphinx = ["myst-nb", "sphinx-book-theme"] +sphinx = ["sphinx-book-theme", "myst-nb"] [[package]] name = "sphinxcontrib-applehelp" @@ -3006,8 +2900,8 @@ optional = false python-versions = ">=3.5" [package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] test = ["pytest"] +lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "sphinxcontrib-bibtex" @@ -3032,8 +2926,8 @@ optional = false python-versions = ">=3.5" [package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] test = ["pytest"] +lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "sphinxcontrib-htmlhelp" @@ -3044,8 +2938,8 @@ optional = false python-versions = ">=3.6" [package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] -test = ["pytest", "html5lib"] +test = ["html5lib", "pytest"] +lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "sphinxcontrib-jsmath" @@ -3056,7 +2950,7 @@ optional = false python-versions = ">=3.5" [package.extras] -test = ["pytest", "flake8", "mypy"] +test = ["mypy", "flake8", "pytest"] [[package]] name = "sphinxcontrib-qthelp" @@ -3067,8 +2961,8 @@ optional = false python-versions = ">=3.5" [package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] test = ["pytest"] +lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "sphinxcontrib-serializinghtml" @@ -3079,8 +2973,8 @@ optional = false python-versions = ">=3.5" [package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] test = ["pytest"] +lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "sqlalchemy" @@ -3128,7 +3022,7 @@ executing = "*" pure-eval = "*" [package.extras] -tests = ["pytest", "typeguard", "pygments", "littleutils", "cython"] +tests = ["cython", "littleutils", "pygments", "typeguard", "pytest"] [[package]] name = "symengine" @@ -3394,7 +3288,7 @@ optional = false python-versions = ">=3.6" [package.extras] -test = ["coverage", "pytest", "pytest-cov"] +test = ["pytest-cov", "pytest", "coverage"] [[package]] name = "urllib3" @@ -3409,24 +3303,6 @@ brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] -[[package]] -name = "virtualenv" -version = "20.15.1" -description = "Virtual Python Environment builder" -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" - -[package.dependencies] -distlib = ">=0.3.1,<1" -filelock = ">=3.2,<4" -platformdirs = ">=2,<3" -six = ">=1.9.0,<2" - -[package.extras] -docs = ["proselint (>=0.10.2)", "sphinx (>=3)", "sphinx-argparse (>=0.2.5)", "sphinx-rtd-theme (>=0.4.3)", "towncrier (>=21.3)"] -testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", "pytest (>=4)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)", "packaging (>=20.0)"] - [[package]] name = "wcwidth" version = "0.2.5" @@ -3486,17 +3362,6 @@ python-versions = "*" [package.dependencies] notebook = ">=4.4.1" -[[package]] -name = "win32-setctime" -version = "1.1.0" -description = "A small Python utility to set file creation time on Windows" -category = "main" -optional = false -python-versions = ">=3.5" - -[package.extras] -dev = ["pytest (>=4.6.2)", "black (>=19.3b0)"] - [[package]] name = "wrapt" version = "1.14.1" @@ -3535,7 +3400,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = ">=3.8,<=3.9" -content-hash = "3b39698745eef06f481cdc8555a44188a08f57716d5031e33c2313abf8e0af4c" +content-hash = "db653c737a0772a7c655a9661dec1b8864bc725e302f0952cc486f31977a1e72" [metadata.files] absl-py = [ @@ -3694,10 +3559,6 @@ cffi = [ {file = "cffi-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139"}, {file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"}, ] -cfgv = [ - {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, - {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, -] charset-normalizer = [ {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"}, {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"}, @@ -3809,7 +3670,6 @@ diskcache = [ {file = "diskcache-5.4.0-py3-none-any.whl", hash = "sha256:af3ec6d7f167bbef7b6c33d9ee22f86d3e8f2dd7131eb7c4703d8d91ccdc0cc4"}, {file = "diskcache-5.4.0.tar.gz", hash = "sha256:8879eb8c9b4a2509a5e633d2008634fb2b0b35c2b36192d89655dbde02419644"}, ] -distlib = [] dlx = [ {file = "dlx-1.0.4-py2.6.egg", hash = "sha256:c9747656710125545e37c1b3d71df2b0f1fbfaf2029355c1f87beaa6ece5b6e8"}, {file = "dlx-1.0.4.tar.gz", hash = "sha256:ef75bc9d590216ebde7d4811f9ae6b2d6c6dc2a54772d94ae13384dc517a5aae"}, @@ -3887,19 +3747,23 @@ dwave-tabu = [ {file = "dwave-tabu-0.4.5.tar.gz", hash = "sha256:110884dd5e68bb7c9a8e6813d5d1f220819ea6b49f3654e5e07e5f4b697c0ee0"}, {file = "dwave_tabu-0.4.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fbd20267e3162b7398a6d8eb5c677250978cea5cb8e928ae50f0aecb4e0d2b74"}, {file = "dwave_tabu-0.4.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:57122ed151b108cd87c55e2caa09027a8ff4a4b8651d4837a078d4064205ddcf"}, + {file = "dwave_tabu-0.4.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b8db6306156f77d9824ec1e74dbd491c3d2d32cf7fc994488baac356e6d38ab"}, {file = "dwave_tabu-0.4.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb0a044a8f5b2396bd6014e0580039304127c9107c1b5288b2ae04a10170a998"}, {file = "dwave_tabu-0.4.5-cp310-cp310-win_amd64.whl", hash = "sha256:a8efd04de5f68828dbba053ae99024979a8bae4f4d244845de3269144fbf15d4"}, {file = "dwave_tabu-0.4.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:841d7132fb493fa01f4cb15d8e40306e3201f07669916739269281afed4e913e"}, + {file = "dwave_tabu-0.4.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2712e7f5de2a434effbbd8fd8268f1fbea58ae57bff1e7e7b8e1b355571e56f"}, {file = "dwave_tabu-0.4.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a691677f0ac1390ffe226965769e29d0b08f1bfb8539f5b9fce5b99a851afec3"}, {file = "dwave_tabu-0.4.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:c8e156baa3cbc0498da3c4c54228943b14fa90664cad424ee18378f9aa5d4593"}, {file = "dwave_tabu-0.4.5-cp37-cp37m-win_amd64.whl", hash = "sha256:efc7faa84cb4af69b8c02a51adb15764f920ebede3c3a2913d92d1881574f5d1"}, {file = "dwave_tabu-0.4.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:26bb0c1b8dc952e6be39158906ecb24b2ee1436cb51c611ac5261bd29741a657"}, {file = "dwave_tabu-0.4.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9ecae8bfe28e8bf9a37e846655cf3db06fe2be304ac4a72289a723892eb5dbcd"}, + {file = "dwave_tabu-0.4.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf9a2b4ce2c62debbb122302dd2a50a5c2d7b89381be190416b241c97dc2d636"}, {file = "dwave_tabu-0.4.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c253a4cffdd2b6e0834895db106682642045d3eea0d747fd6aed6845299bde07"}, {file = "dwave_tabu-0.4.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2fcb9b3810c7c3fc2940c1b713c62f40d6f9f054b0e4616d514a21a92640e397"}, {file = "dwave_tabu-0.4.5-cp38-cp38-win_amd64.whl", hash = "sha256:eaf12cd6d199436b95889cfc0a6fd82457da760625264fe9069a8a5ef159c1c0"}, {file = "dwave_tabu-0.4.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5261850c0baabbf08d5a8683bfc120135902da5e7049366247462693f2c95118"}, {file = "dwave_tabu-0.4.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4416da7ea5afd0358644ae540d38ec47d8bad4beef6d8dc27874ab09564a7ecf"}, + {file = "dwave_tabu-0.4.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:288b37c95da149646ef88b9ad83fcc95353ce4caebaebc1a47dd7d4fc8eb54dd"}, {file = "dwave_tabu-0.4.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88c5d3b2e0a0b46e057b2d2bc8fa28fdbd00429b6cef33d634b750b0a3a53eaf"}, {file = "dwave_tabu-0.4.5-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b7ea10e90ec3c6d14a6567af6b51b8fbc430f2f74445718259d2c0ea7006ed93"}, {file = "dwave_tabu-0.4.5-cp39-cp39-win_amd64.whl", hash = "sha256:635f4b6a9bf98dcd00bc5c85a3433f19e0dc503ceedb0e19509809ece38909e2"}, @@ -3928,8 +3792,6 @@ fastjsonschema = [ {file = "fastjsonschema-2.15.3-py3-none-any.whl", hash = "sha256:ddb0b1d8243e6e3abb822bd14e447a89f4ab7439342912d590444831fa00b6a0"}, {file = "fastjsonschema-2.15.3.tar.gz", hash = "sha256:0a572f0836962d844c1fc435e200b2e4f4677e4e6611a2e3bdd01ba697c275ec"}, ] -filelock = [] -fire = [] flatbuffers = [ {file = "flatbuffers-2.0-py2.py3-none-any.whl", hash = "sha256:3751954f0604580d3219ae49a85fafec9d85eec599c0b96226e1bc0b48e57474"}, {file = "flatbuffers-2.0.tar.gz", hash = "sha256:12158ab0272375eab8db2d663ae97370c33f152b27801fa6024e1d6105fd4dd2"}, @@ -4107,7 +3969,6 @@ homebase = [ {file = "homebase-1.0.1-py2.py3-none-any.whl", hash = "sha256:d64c97f60a8ddd94ce8702bac65ed5d1996aca01a17d1e53e6ad5149e2f8b5b5"}, {file = "homebase-1.0.1.tar.gz", hash = "sha256:9ee008df4298b420852d815e6df488822229c4bd8d571bcd0a454e04232c635e"}, ] -identify = [] idna = [ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, @@ -4225,7 +4086,10 @@ jsonschema = [ {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"}, {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"}, ] -jupyter-book = [] +jupyter-book = [ + {file = "jupyter-book-0.13.0.tar.gz", hash = "sha256:0a956677e7bbee630dd66641c09a84091277887d6dcdd381a676f00fa9de2074"}, + {file = "jupyter_book-0.13.0-py3-none-any.whl", hash = "sha256:c310a0838ed90e2fa87239856ca24bed91f12a541dedf290cc94ac4e07ead166"}, +] jupyter-cache = [ {file = "jupyter-cache-0.4.3.tar.gz", hash = "sha256:4c9b5431b1d320bc68440c21fa0a155bbeb29c5b979bef72222e244a7bcd54fc"}, {file = "jupyter_cache-0.4.3-py3-none-any.whl", hash = "sha256:6d5d662d81f565d18009e8dcfd3a56fb876af47eafead2a19ef0045aba8ffe3b"}, @@ -4250,14 +4114,14 @@ jupyter-sphinx = [ {file = "jupyter_sphinx-0.3.2-py3-none-any.whl", hash = "sha256:301e36d0fb3007bb5802f6b65b60c24990eb99c983332a2ab6eecff385207dc9"}, {file = "jupyter_sphinx-0.3.2.tar.gz", hash = "sha256:37fc9408385c45326ac79ca0452fbd7ae2bf0e97842d626d2844d4830e30aaf2"}, ] +jupyterlab-pygments = [ + {file = "jupyterlab_pygments-0.2.2-py2.py3-none-any.whl", hash = "sha256:2405800db07c9f770863bcf8049a529c3dd4d3e28536638bd7c1c01d2748309f"}, + {file = "jupyterlab_pygments-0.2.2.tar.gz", hash = "sha256:7405d7fde60819d905a9fa8ce89e4cd830e318cdad22a0030f7a901da705585d"}, +] jupyterlab-widgets = [ {file = "jupyterlab_widgets-1.1.0-py3-none-any.whl", hash = "sha256:c2a9bd3789f120f64d73268c066ed3b000c56bc1dda217be5cdc43e7b4ebad3f"}, {file = "jupyterlab_widgets-1.1.0.tar.gz", hash = "sha256:d5f41bc1713795385f718d44dcba47e1e1473c6289f28a95aa6b2c0782ee372a"}, ] -jupytext = [ - {file = "jupytext-1.13.8-py3-none-any.whl", hash = "sha256:625d2d2012763cc87d3f0dd60383516cec442c11894f53ad0c5ee5aa2a52caa2"}, - {file = "jupytext-1.13.8.tar.gz", hash = "sha256:60148537de5aa08bb9cbe8797500a49360b7a8eb6667736ae5b80e3ec7ba084d"}, -] keras = [ {file = "keras-2.7.0-py2.py3-none-any.whl", hash = "sha256:0c33ae1f728064ca0d35dfba999e9c316f03623bf5688c82fb83cc74a80ea248"}, ] @@ -4322,6 +4186,8 @@ libclang = [ {file = "libclang-14.0.1-py2.py3-none-manylinux2014_armv7l.whl", hash = "sha256:7c7b8c7c82c0cdc088052c6b7b2be4a45b6b06f5f856e7e7058e598f05c09910"}, {file = "libclang-14.0.1-py2.py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:58b9679868b2d6b5172ded26026c2f71306c4cabd6d15b93b597446fd677eb98"}, {file = "libclang-14.0.1-py2.py3-none-win_amd64.whl", hash = "sha256:1a4f0d5959c801c975950926cffb9b45521c890d7c4b730d8a1f688d75b25de9"}, + {file = "libclang-14.0.1-py2.py3-none-win_arm64.whl", hash = "sha256:7c344b16d32e80c06cd7d42bfad0ef3ffeadc96fd77b6674dd66d97bf23889ea"}, + {file = "libclang-14.0.1.tar.gz", hash = "sha256:332e539201b46cd4676bee992bbf4b3e50450fc17f71ff33d4afc9da09cf46cb"}, ] linkify-it-py = [ {file = "linkify-it-py-1.0.3.tar.gz", hash = "sha256:2b3f168d5ce75e3a425e34b341a6b73e116b5d9ed8dbbbf5dc7456843b7ce2ee"}, @@ -4357,8 +4223,78 @@ llvmlite = [ {file = "llvmlite-0.38.1-cp39-cp39-win_amd64.whl", hash = "sha256:66462d768c30d5f648ca3361d657b434efa8b09f6cf04d6b6eae66e62e993644"}, {file = "llvmlite-0.38.1.tar.gz", hash = "sha256:0622a86301fcf81cc50d7ed5b4bebe992c030580d413a8443b328ed4f4d82561"}, ] -loguru = [] -lxml = [] +lxml = [ + {file = "lxml-4.9.1-cp27-cp27m-macosx_10_15_x86_64.whl", hash = "sha256:98cafc618614d72b02185ac583c6f7796202062c41d2eeecdf07820bad3295ed"}, + {file = "lxml-4.9.1-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c62e8dd9754b7debda0c5ba59d34509c4688f853588d75b53c3791983faa96fc"}, + {file = "lxml-4.9.1-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:21fb3d24ab430fc538a96e9fbb9b150029914805d551deeac7d7822f64631dfc"}, + {file = "lxml-4.9.1-cp27-cp27m-win32.whl", hash = "sha256:86e92728ef3fc842c50a5cb1d5ba2bc66db7da08a7af53fb3da79e202d1b2cd3"}, + {file = "lxml-4.9.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4cfbe42c686f33944e12f45a27d25a492cc0e43e1dc1da5d6a87cbcaf2e95627"}, + {file = "lxml-4.9.1-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dad7b164905d3e534883281c050180afcf1e230c3d4a54e8038aa5cfcf312b84"}, + {file = "lxml-4.9.1-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a614e4afed58c14254e67862456d212c4dcceebab2eaa44d627c2ca04bf86837"}, + {file = "lxml-4.9.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:f9ced82717c7ec65a67667bb05865ffe38af0e835cdd78728f1209c8fffe0cad"}, + {file = "lxml-4.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:d9fc0bf3ff86c17348dfc5d322f627d78273eba545db865c3cd14b3f19e57fa5"}, + {file = "lxml-4.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e5f66bdf0976ec667fc4594d2812a00b07ed14d1b44259d19a41ae3fff99f2b8"}, + {file = "lxml-4.9.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:fe17d10b97fdf58155f858606bddb4e037b805a60ae023c009f760d8361a4eb8"}, + {file = "lxml-4.9.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8caf4d16b31961e964c62194ea3e26a0e9561cdf72eecb1781458b67ec83423d"}, + {file = "lxml-4.9.1-cp310-cp310-win32.whl", hash = "sha256:4780677767dd52b99f0af1f123bc2c22873d30b474aa0e2fc3fe5e02217687c7"}, + {file = "lxml-4.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:b122a188cd292c4d2fcd78d04f863b789ef43aa129b233d7c9004de08693728b"}, + {file = "lxml-4.9.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:be9eb06489bc975c38706902cbc6888f39e946b81383abc2838d186f0e8b6a9d"}, + {file = "lxml-4.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:f1be258c4d3dc609e654a1dc59d37b17d7fef05df912c01fc2e15eb43a9735f3"}, + {file = "lxml-4.9.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:927a9dd016d6033bc12e0bf5dee1dde140235fc8d0d51099353c76081c03dc29"}, + {file = "lxml-4.9.1-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9232b09f5efee6a495a99ae6824881940d6447debe272ea400c02e3b68aad85d"}, + {file = "lxml-4.9.1-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:04da965dfebb5dac2619cb90fcf93efdb35b3c6994fea58a157a834f2f94b318"}, + {file = "lxml-4.9.1-cp35-cp35m-win32.whl", hash = "sha256:4d5bae0a37af799207140652a700f21a85946f107a199bcb06720b13a4f1f0b7"}, + {file = "lxml-4.9.1-cp35-cp35m-win_amd64.whl", hash = "sha256:4878e667ebabe9b65e785ac8da4d48886fe81193a84bbe49f12acff8f7a383a4"}, + {file = "lxml-4.9.1-cp36-cp36m-macosx_10_15_x86_64.whl", hash = "sha256:1355755b62c28950f9ce123c7a41460ed9743c699905cbe664a5bcc5c9c7c7fb"}, + {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:bcaa1c495ce623966d9fc8a187da80082334236a2a1c7e141763ffaf7a405067"}, + {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6eafc048ea3f1b3c136c71a86db393be36b5b3d9c87b1c25204e7d397cee9536"}, + {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:13c90064b224e10c14dcdf8086688d3f0e612db53766e7478d7754703295c7c8"}, + {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:206a51077773c6c5d2ce1991327cda719063a47adc02bd703c56a662cdb6c58b"}, + {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e8f0c9d65da595cfe91713bc1222af9ecabd37971762cb830dea2fc3b3bb2acf"}, + {file = "lxml-4.9.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8f0a4d179c9a941eb80c3a63cdb495e539e064f8054230844dcf2fcb812b71d3"}, + {file = "lxml-4.9.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:830c88747dce8a3e7525defa68afd742b4580df6aa2fdd6f0855481e3994d391"}, + {file = "lxml-4.9.1-cp36-cp36m-win32.whl", hash = "sha256:1e1cf47774373777936c5aabad489fef7b1c087dcd1f426b621fda9dcc12994e"}, + {file = "lxml-4.9.1-cp36-cp36m-win_amd64.whl", hash = "sha256:5974895115737a74a00b321e339b9c3f45c20275d226398ae79ac008d908bff7"}, + {file = "lxml-4.9.1-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:1423631e3d51008871299525b541413c9b6c6423593e89f9c4cfbe8460afc0a2"}, + {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:2aaf6a0a6465d39b5ca69688fce82d20088c1838534982996ec46633dc7ad6cc"}, + {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:9f36de4cd0c262dd9927886cc2305aa3f2210db437aa4fed3fb4940b8bf4592c"}, + {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ae06c1e4bc60ee076292e582a7512f304abdf6c70db59b56745cca1684f875a4"}, + {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:57e4d637258703d14171b54203fd6822fda218c6c2658a7d30816b10995f29f3"}, + {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6d279033bf614953c3fc4a0aa9ac33a21e8044ca72d4fa8b9273fe75359d5cca"}, + {file = "lxml-4.9.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a60f90bba4c37962cbf210f0188ecca87daafdf60271f4c6948606e4dabf8785"}, + {file = "lxml-4.9.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6ca2264f341dd81e41f3fffecec6e446aa2121e0b8d026fb5130e02de1402785"}, + {file = "lxml-4.9.1-cp37-cp37m-win32.whl", hash = "sha256:27e590352c76156f50f538dbcebd1925317a0f70540f7dc8c97d2931c595783a"}, + {file = "lxml-4.9.1-cp37-cp37m-win_amd64.whl", hash = "sha256:eea5d6443b093e1545ad0210e6cf27f920482bfcf5c77cdc8596aec73523bb7e"}, + {file = "lxml-4.9.1-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:f05251bbc2145349b8d0b77c0d4e5f3b228418807b1ee27cefb11f69ed3d233b"}, + {file = "lxml-4.9.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:487c8e61d7acc50b8be82bda8c8d21d20e133c3cbf41bd8ad7eb1aaeb3f07c97"}, + {file = "lxml-4.9.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8d1a92d8e90b286d491e5626af53afef2ba04da33e82e30744795c71880eaa21"}, + {file = "lxml-4.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:b570da8cd0012f4af9fa76a5635cd31f707473e65a5a335b186069d5c7121ff2"}, + {file = "lxml-4.9.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5ef87fca280fb15342726bd5f980f6faf8b84a5287fcc2d4962ea8af88b35130"}, + {file = "lxml-4.9.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:93e414e3206779ef41e5ff2448067213febf260ba747fc65389a3ddaa3fb8715"}, + {file = "lxml-4.9.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6653071f4f9bac46fbc30f3c7838b0e9063ee335908c5d61fb7a4a86c8fd2036"}, + {file = "lxml-4.9.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:32a73c53783becdb7eaf75a2a1525ea8e49379fb7248c3eeefb9412123536387"}, + {file = "lxml-4.9.1-cp38-cp38-win32.whl", hash = "sha256:1a7c59c6ffd6ef5db362b798f350e24ab2cfa5700d53ac6681918f314a4d3b94"}, + {file = "lxml-4.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:1436cf0063bba7888e43f1ba8d58824f085410ea2025befe81150aceb123e345"}, + {file = "lxml-4.9.1-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:4beea0f31491bc086991b97517b9683e5cfb369205dac0148ef685ac12a20a67"}, + {file = "lxml-4.9.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:41fb58868b816c202e8881fd0f179a4644ce6e7cbbb248ef0283a34b73ec73bb"}, + {file = "lxml-4.9.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:bd34f6d1810d9354dc7e35158aa6cc33456be7706df4420819af6ed966e85448"}, + {file = "lxml-4.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:edffbe3c510d8f4bf8640e02ca019e48a9b72357318383ca60e3330c23aaffc7"}, + {file = "lxml-4.9.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6d949f53ad4fc7cf02c44d6678e7ff05ec5f5552b235b9e136bd52e9bf730b91"}, + {file = "lxml-4.9.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:079b68f197c796e42aa80b1f739f058dcee796dc725cc9a1be0cdb08fc45b000"}, + {file = "lxml-4.9.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9c3a88d20e4fe4a2a4a84bf439a5ac9c9aba400b85244c63a1ab7088f85d9d25"}, + {file = "lxml-4.9.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4e285b5f2bf321fc0857b491b5028c5f276ec0c873b985d58d7748ece1d770dd"}, + {file = "lxml-4.9.1-cp39-cp39-win32.whl", hash = "sha256:ef72013e20dd5ba86a8ae1aed7f56f31d3374189aa8b433e7b12ad182c0d2dfb"}, + {file = "lxml-4.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:10d2017f9150248563bb579cd0d07c61c58da85c922b780060dcc9a3aa9f432d"}, + {file = "lxml-4.9.1-pp37-pypy37_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0538747a9d7827ce3e16a8fdd201a99e661c7dee3c96c885d8ecba3c35d1032c"}, + {file = "lxml-4.9.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:0645e934e940107e2fdbe7c5b6fb8ec6232444260752598bc4d09511bd056c0b"}, + {file = "lxml-4.9.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:6daa662aba22ef3258934105be2dd9afa5bb45748f4f702a3b39a5bf53a1f4dc"}, + {file = "lxml-4.9.1-pp38-pypy38_pp73-macosx_10_15_x86_64.whl", hash = "sha256:603a464c2e67d8a546ddaa206d98e3246e5db05594b97db844c2f0a1af37cf5b"}, + {file = "lxml-4.9.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:c4b2e0559b68455c085fb0f6178e9752c4be3bba104d6e881eb5573b399d1eb2"}, + {file = "lxml-4.9.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0f3f0059891d3254c7b5fb935330d6db38d6519ecd238ca4fce93c234b4a0f73"}, + {file = "lxml-4.9.1-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:c852b1530083a620cb0de5f3cd6826f19862bafeaf77586f1aef326e49d95f0c"}, + {file = "lxml-4.9.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:287605bede6bd36e930577c5925fcea17cb30453d96a7b4c63c14a257118dbb9"}, + {file = "lxml-4.9.1.tar.gz", hash = "sha256:fe749b052bb7233fe5d072fcb549221a8cb1a16725c47c37e42b0b9cb3ff2c3f"}, +] markdown = [ {file = "Markdown-3.3.7-py3-none-any.whl", hash = "sha256:f5da449a6e1c989a4cea2631aa8ee67caa5a2ef855d551c88f9e309f4634c621"}, {file = "Markdown-3.3.7.tar.gz", hash = "sha256:cbb516f16218e643d8e0a95b309f77eb118cb138d39a4f27851e6a63581db874"}, @@ -4558,8 +4494,8 @@ nbclient = [ {file = "nbclient-0.5.13.tar.gz", hash = "sha256:40c52c9b5e3c31faecaee69f202b3f53e38d7c1c563de0fadde9d7eda0fdafe8"}, ] nbconvert = [ - {file = "nbconvert-5.6.1-py2.py3-none-any.whl", hash = "sha256:f0d6ec03875f96df45aa13e21fd9b8450c42d7e1830418cccc008c0df725fcee"}, - {file = "nbconvert-5.6.1.tar.gz", hash = "sha256:21fb48e700b43e82ba0e3142421a659d7739b65568cc832a13976a77be16b523"}, + {file = "nbconvert-6.3.0-py3-none-any.whl", hash = "sha256:8f23fbeabda4a500685d788ee091bf22cf34119304314304fb39f16e2fc32f37"}, + {file = "nbconvert-6.3.0.tar.gz", hash = "sha256:5e77d6203854944520105e38f2563a813a4a3708e8563aa598928a3b5ee1081a"}, ] nbdime = [ {file = "nbdime-3.1.1-py2.py3-none-any.whl", hash = "sha256:ea4ddf919e3035800ef8bd5552b814522207cb154ca7512565e4539a54c74dbf"}, @@ -4597,7 +4533,6 @@ ninja = [ {file = "ninja-1.10.2.3-py2.py3-none-win_amd64.whl", hash = "sha256:0560eea57199e41e86ac2c1af0108b63ae77c3ca4d05a9425a750e908135935a"}, {file = "ninja-1.10.2.3.tar.gz", hash = "sha256:e1b86ad50d4e681a7dbdff05fc23bb52cb773edb90bc428efba33fa027738408"}, ] -nodeenv = [] notebook = [ {file = "notebook-6.4.11-py3-none-any.whl", hash = "sha256:b4a6baf2eba21ce67a0ca11a793d1781b06b8078f34d06c710742e55f3eee505"}, {file = "notebook-6.4.11.tar.gz", hash = "sha256:709b1856a564fe53054796c80e17a67262071c86bfbdfa6b96aaa346113c555a"}, @@ -4844,7 +4779,6 @@ pillow = [ {file = "Pillow-9.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:baf3be0b9446a4083cc0c5bb9f9c964034be5374b5bc09757be89f5d2fa247b8"}, {file = "Pillow-9.1.1.tar.gz", hash = "sha256:7502539939b53d7565f3d11d87c78e7ec900d3c72945d4ee0e2f250d598309a0"}, ] -platformdirs = [] plucky = [ {file = "plucky-0.4.3-py2.py3-none-any.whl", hash = "sha256:a358878f3e45b5e51d0b4e5b5c89d704422a72c2cf8ee9aaf9acedfa53f89105"}, {file = "plucky-0.4.3.tar.gz", hash = "sha256:5bc75d43ae6b40f1b7ba42000b37e4934fa6bd2d6a6cd4e47461f803a404c194"}, @@ -4891,7 +4825,6 @@ ply = [ {file = "ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce"}, {file = "ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3"}, ] -pre-commit = [] prometheus-client = [ {file = "prometheus_client-0.14.1-py3-none-any.whl", hash = "sha256:522fded625282822a89e2773452f42df14b5a8e84a86433e3f8a189c1d54dc01"}, {file = "prometheus_client-0.14.1.tar.gz", hash = "sha256:5459c427624961076277fdc6dc50540e2bacb98eebde99886e59ec55ed92093a"}, @@ -5045,7 +4978,10 @@ pydantic = [ {file = "pydantic-1.9.1-py3-none-any.whl", hash = "sha256:4988c0f13c42bfa9ddd2fe2f569c9d54646ce84adc5de84228cfe83396f3bd58"}, {file = "pydantic-1.9.1.tar.gz", hash = "sha256:1ed987c3ff29fff7fd8c3ea3a3ea877ad310aae2ef9889a119e22d3f2db0691a"}, ] -pydata-sphinx-theme = [] +pydata-sphinx-theme = [ + {file = "pydata_sphinx_theme-0.8.1-py3-none-any.whl", hash = "sha256:af2c99cb0b43d95247b1563860942ba75d7f1596360594fce510caaf8c4fcc16"}, + {file = "pydata_sphinx_theme-0.8.1.tar.gz", hash = "sha256:96165702253917ece13dd895e23b96ee6dce422dcc144d560806067852fe1fed"}, +] pyee = [ {file = "pyee-8.2.2-py2.py3-none-any.whl", hash = "sha256:c09f56e36eb10bf23aa2aacf145f690ded75b990a3d9523fd478b005940303d2"}, {file = "pyee-8.2.2.tar.gz", hash = "sha256:5c7e60f8df95710dbe17550e16ce0153f83990c00ef744841b43f371ed53ebea"}, @@ -5514,8 +5450,14 @@ soupsieve = [ {file = "soupsieve-2.3.2.post1-py3-none-any.whl", hash = "sha256:3b2503d3c7084a42b1ebd08116e5f81aadfaea95863628c80a3b774a11b7c759"}, {file = "soupsieve-2.3.2.post1.tar.gz", hash = "sha256:fc53893b3da2c33de295667a0e19f078c14bf86544af307354de5fcf12a3f30d"}, ] -sphinx = [] -sphinx-book-theme = [] +sphinx = [ + {file = "Sphinx-4.5.0-py3-none-any.whl", hash = "sha256:ebf612653238bcc8f4359627a9b7ce44ede6fdd75d9d30f68255c7383d3a6226"}, + {file = "Sphinx-4.5.0.tar.gz", hash = "sha256:7bf8ca9637a4ee15af412d1a1d9689fec70523a68ca9bb9127c2f3eeb344e2e6"}, +] +sphinx-book-theme = [ + {file = "sphinx_book_theme-0.3.2-py3-none-any.whl", hash = "sha256:4aed92f2ed9d27e002eac5dce1daa8eca42dd9e6464811533c569ee156a6f67d"}, + {file = "sphinx_book_theme-0.3.2.tar.gz", hash = "sha256:182b5657a345f3bbb2c5b86da65db9b47e27de0ab406cda168142768645121f5"}, +] sphinx-comments = [ {file = "sphinx-comments-0.0.3.tar.gz", hash = "sha256:00170afff27019fad08e421da1ae49c681831fb2759786f07c826e89ac94cf21"}, {file = "sphinx_comments-0.0.3-py3-none-any.whl", hash = "sha256:1e879b4e9bfa641467f83e3441ac4629225fc57c29995177d043252530c21d00"}, @@ -5524,7 +5466,10 @@ sphinx-copybutton = [ {file = "sphinx-copybutton-0.5.0.tar.gz", hash = "sha256:a0c059daadd03c27ba750da534a92a63e7a36a7736dcf684f26ee346199787f6"}, {file = "sphinx_copybutton-0.5.0-py3-none-any.whl", hash = "sha256:9684dec7434bd73f0eea58dda93f9bb879d24bff2d8b187b1f2ec08dfe7b5f48"}, ] -sphinx-design = [] +sphinx-design = [ + {file = "sphinx_design-0.1.0-py3-none-any.whl", hash = "sha256:151ab25fda162ded010f0782d1770d014073c3f3fea8e02c45178e0ae6f7e0a0"}, + {file = "sphinx_design-0.1.0.tar.gz", hash = "sha256:68edba2453a175df5b0390d481ec0e9329112064f211860426729768b3501706"}, +] sphinx-external-toc = [ {file = "sphinx_external_toc-0.2.4-py3-none-any.whl", hash = "sha256:f7906620e74fbef50f0c3b8adf943da03000ab955ffe957ae4760d6cd5a09717"}, {file = "sphinx_external_toc-0.2.4.tar.gz", hash = "sha256:f073c482d959a166f844ca8caadd13e24fa43153750cc120646ded37ff622018"}, @@ -5839,7 +5784,6 @@ urllib3 = [ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"}, {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"}, ] -virtualenv = [] wcwidth = [ {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, @@ -5895,7 +5839,6 @@ widgetsnbextension = [ {file = "widgetsnbextension-3.6.0-py2.py3-none-any.whl", hash = "sha256:4fd321cad39fdcf8a8e248a657202d42917ada8e8ed5dd3f60f073e0d54ceabd"}, {file = "widgetsnbextension-3.6.0.tar.gz", hash = "sha256:e84a7a9fcb9baf3d57106e184a7389a8f8eb935bf741a5eb9d60aa18cc029a80"}, ] -win32-setctime = [] wrapt = [ {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"}, {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef"}, From 7deea990af94c5e7a086ab33d28170e40f6848ee Mon Sep 17 00:00:00 2001 From: viktor trokhymenko Date: Fri, 19 Aug 2022 20:20:55 +0300 Subject: [PATCH 63/63] ci: add instaling deps & tests --- .github/workflows/ci.yml | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index da5ac7fb86..dc97804c72 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,7 +10,7 @@ jobs: pre-commit: runs-on: ubuntu-latest - timeout-minutes: 10 + timeout-minutes: 4 steps: - name: checkout code @@ -20,8 +20,40 @@ jobs: uses: actions/setup-python@v4 with: python-version: 3.8 + cache: 'pip' + + - name: install dependencies + run: | + python -m pip install --upgrade pip + + pip install fire jupytext pytest loguru - name: run pre-commit action uses: pre-commit/action@v3.0.0 with: extra_args: --all-files + + tests: + needs: pre-commit + runs-on: ubuntu-latest + timeout-minutes: 2 + + steps: + - name: checkout code + uses: actions/checkout@v3 + + - name: set up py3.8 + uses: actions/setup-python@v4 + with: + python-version: 3.8 + cache: 'pip' + + - name: install dependencies + run: | + python -m pip install --upgrade pip + + pip install fire jupytext pytest loguru + + - name: run tests + run: | + python -m pytest tests/ -vv