From 715fff1c434e46aaa0db02f53a8054495926fd24 Mon Sep 17 00:00:00 2001 From: Cian Hughes Date: Fri, 11 Feb 2022 17:39:53 +0000 Subject: [PATCH] First draft of basic application finished --- Icons/app-icon.ico | Bin 0 -> 83956 bytes Icons/app-icon.svg | 1 + Main/Main_Desktop.py | 11 +- Melter.py | 4 +- README.md | 13 + README.rst | 0 Templates/melter_desktop.kv | 37 +- melter/__init__.py | 1 + poetry.lock | 942 ++++++++++++++++++++++++++++++++++++ pyproject.toml | 23 + setup.py | 6 + tests/__init__.py | 0 tests/test_melter.py | 5 + 13 files changed, 1037 insertions(+), 6 deletions(-) create mode 100644 Icons/app-icon.ico create mode 100644 Icons/app-icon.svg create mode 100644 README.rst create mode 100644 melter/__init__.py create mode 100644 poetry.lock create mode 100644 pyproject.toml create mode 100644 setup.py create mode 100644 tests/__init__.py create mode 100644 tests/test_melter.py diff --git a/Icons/app-icon.ico b/Icons/app-icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..d3bac7d34dc3c66a5c92683170468e56420b85ce GIT binary patch literal 83956 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�o4>kPh-5vNj`dwBSNb8mk+XlH2 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

+=yvJ4m5aRw1 z_Ue%)llLI(r3+Ao;ss}P1DZuj`04GwFtS*(4SxFrmbJ60AZ4WqVxII)JRXbUf98ZS zVKQYwCCsLTlTgDgNnImv-oRvrL&G-=OQ_;-&1 zbVvSd?Svo^<_Q|dCL{qhJ|t!(zcjB(-?_O{%$)|= z0D4pm#bk&vryt-e&R;@;UwwhCvDEwb9w(N%G+G0a>zkzW=2Ybw<2R8CXerK3Cm`Jp zd%icK+FU09mvZ194+>&ViT8iiXr#t91VN{1O^l#uA!oRp8jpYBf86oM+^b%L0d#9$ z6|vpL_<-0{kbI3!o;uJF=0C{YcrciO3J{Q;0chW$=&SwzV^RM;q0TmK+8e|>ah6+0 zOLuaZ(mhvwpzcbDLWPP7tDzF%5A}$fg7U0}DVB6M)v_TKJ%PYN545??tf8}P&1$q! za-9(&Mm?c+4j@B4`1RqLnj?t4uU7r;WdyBIkAxoD=6+Z(eUe#UfG%dpcOU;`6O@1M zUpDn0ikOqno1Rrmx9$!F6znet?QBIibweCiQBqP~y)85jah$0TAKFh9p*+5ex6-zg zd0h4vtY z%gO^xAJ^$>Ic42m{%OB-ykXU<)Tl0OaaJaMU z>d7}#%k=uW$##ab4I&9nMg`8rg_rxrf;Du6%o7*qy9l;zLa@gLgf~Zum5D*;%+rqW z%^Wiqz2<%YDC*Zbx$VNLv9c>>S97v|^Cp+VPz&&(Q!Mjzr zyy#M)rwPg;`&MJil5Vc8ygi}SEeHjjb$ie7{Qdf(Z=k=jf16s|pRkkmQ?TLVdZ$Cb zq|wqB;T|ZzC3>w-D&2l7{p;jaewFOy&Ru!$D?n>-8ytumY7zbE>%bN|_Ou$6g4p#D zCJJHd+svnhPjDciY%6wz1t|&n&l(lwU*$lSqrnDZP2uuxBm-HQVu3&nfCA`=8m{lv06iXU$wG)t(lz>T!N^Rv+rin& z;Ke;-ZJ}VttdC)op`H%!_NSy~Bf$l$m0zO2Q@uL5*|VLc!}vjw8no8klssuRHX&Z3 zXRUbwg+dK*>gQ5hpsB8%gpODmC4BMtVbtRaO-0ZRtt~XgHXp%kAn!eb7|*p%+CZU| z6=~R=lvwl*q?cXdffm*kXP}O&^qo;*%+JeFj{59czqmI!GPch1V%Orj!GSxPZPt`p zZw`AnhT8TFmE%$zsRZ+~#|&-{cc0A7b9XEPv=e756%0Dw8qN7Ge&+COuSb!+rAGQ= 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 b4uA5FUU@;qF; literal 0 HcmV?d00001 diff --git a/Icons/app-icon.svg b/Icons/app-icon.svg new file mode 100644 index 0000000..9db4206 --- /dev/null +++ b/Icons/app-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Main/Main_Desktop.py b/Main/Main_Desktop.py index b8a2ad1..b8d5ee2 100644 --- a/Main/Main_Desktop.py +++ b/Main/Main_Desktop.py @@ -8,6 +8,7 @@ from kivy.uix.screenmanager import Screen # Other python module imports from Common.MTPy_Modified import MT_Modded as MeltpoolTomography from Common.threading_decorators import run_in_thread +from pathlib import Path from types import SimpleNamespace import operator as op from ast import literal_eval @@ -45,10 +46,11 @@ class Main(Screen): self.mtpy.progress_bars["separate_samples"] = self.ids.kmeans_separate_samples_progbar # noqa # self.mtpy.progress_bars["threshold_all_layers"] = self.ids.avgspeed_threshold_progbar # noqa # self.mtpy.progress_bars["threshold_all_layers"] = self.ids.avgtemp_threshold_progbar # noqa + self.mtpy.progress_bars["temp_data_to_csv"] = self.ids.kmeans_separate_samples_progbar # noqa # Starting items in cache starting_cache = {"shared_io_choosers": shared_io_choosers, - "in_path": "~", # path to input data - "out_path": "~", # path to output data + "in_path": str(Path("~").expanduser()), # path to input data + "out_path": str(Path("~").expanduser()), # path to output data "last_loaded_path": False, # path to last loaded "calibration_curve": False, # last cal curve used "static_fileformats": # Allowed static formats @@ -376,3 +378,8 @@ class Main(Screen): self.mtpy.separate_samples() # Finally, update the status string self.update_data_status() + + # This function generates datasheets + @run_in_thread + def temp_data_to_csv(self): + self.mtpy.temp_data_to_csv(f"{self.cache.out_path}") diff --git a/Melter.py b/Melter.py index 76f89db..322afd2 100755 --- a/Melter.py +++ b/Melter.py @@ -8,8 +8,8 @@ from kivy.app import App mode = "desktop" if mode == "desktop": from Main.Main_Desktop import Main -elif mode == "phone": - from Main.Main_Phone import Main +# elif mode == "phone": +# from Main.Main_Phone import Main # Create application class diff --git a/README.md b/README.md index 4ee9f53..7524772 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,15 @@ # Melter Generates meltpool tomographs and layer maps from SLM printing pyrometry data + +########################################################################### + +Currently, this source code is compiled using nuitka. The "compile.sh" +script contains the command for correct compilation. Code is written in +Python 3.9+ and is dependant on the following packages (which must be +installed manually by the user if wishing to compile): + +- MTPy +- Kivy + +In addition to the python standard library and, obviously, the associated +dependancies of these packages. diff --git a/README.rst b/README.rst new file mode 100644 index 0000000..e69de29 diff --git a/Templates/melter_desktop.kv b/Templates/melter_desktop.kv index c1ad2ae..609ec1e 100644 --- a/Templates/melter_desktop.kv +++ b/Templates/melter_desktop.kv @@ -501,7 +501,7 @@ size_hint_x: 1. size_hint_y: 0.5 hint_text: "Plot parameters..." - # This button an progress bar trigger and track the + # This button is a progress bar trigger that tracks the # generation of figures Button: text: "Generate interactive 3d\nbuidplate figures" @@ -721,7 +721,7 @@ size_hint_x: 1. size_hint_y: 0.5 hint_text: "Plot parameters..." - # This button an progress bar trigger and track the + # This button is a progress bar trigger that tracks the # generation of figures Button: text: "Generate interactive 3d\nsample figures" @@ -733,3 +733,36 @@ size_hint_x: 0.75 size_hint_y: row_y_hint value: 0 + + # Fifth tab is for generating datasheets + TabbedPanelItem: + id: datasheet_tab + text: "Datasheet\nGeneration" + + # Items are stacked from bottom to top. UI made of floating sub-layouts + FloatLayout: + + # First item is an InputOutputChooser + InputOutputChooser: + id: io_chooser_persample + size_hint_x: 1.0 + pos_hint: {"x": 0., "y": 0.875} + + # Button, below, is in a simple grid layout + GridLayout: + size_hint_x: 0.9 + size_hint_y: 0.15 + pos_hint: {"x": 0.05, "y": 0.6} + rows: 1 + # This button is a progress bar trigger that tracks the + # generation of datasheets + Button: + text: "Generate\nDatasheets" + size_hint_x: 0.25 + size_hint_y: 1 + on_press: root.temp_data_to_csv() + ProgressBar: + id: temp_data_to_csv_progbar + size_hint_x: 0.75 + size_hint_y: 1 + value: 0 diff --git a/melter/__init__.py b/melter/__init__.py new file mode 100644 index 0000000..b794fd4 --- /dev/null +++ b/melter/__init__.py @@ -0,0 +1 @@ +__version__ = '0.1.0' diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..63f3e11 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,942 @@ +[[package]] +name = "altgraph" +version = "0.17.2" +description = "Python graph (network) package" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "atomicwrites" +version = "1.4.0" +description = "Atomic file writes." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "attrs" +version = "21.4.0" +description = "Classes Without Boilerplate" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.extras] +dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] +docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] +tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"] + +[[package]] +name = "certifi" +version = "2021.10.8" +description = "Python package for providing Mozilla's CA Bundle." +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "charset-normalizer" +version = "2.0.11" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "main" +optional = false +python-versions = ">=3.5.0" + +[package.extras] +unicode_backport = ["unicodedata2"] + +[[package]] +name = "colorama" +version = "0.4.4" +description = "Cross-platform colored terminal text." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "cycler" +version = "0.11.0" +description = "Composable style cycles" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "docutils" +version = "0.18.1" +description = "Docutils -- Python Documentation Utilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "fonttools" +version = "4.29.1" +description = "Tools to manipulate font files" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.extras] +all = ["fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "zopfli (>=0.1.4)", "lz4 (>=1.7.4.2)", "matplotlib", "sympy", "skia-pathops (>=0.5.0)", "brotlicffi (>=0.8.0)", "scipy", "brotli (>=1.0.1)", "munkres", "unicodedata2 (>=14.0.0)", "xattr"] +graphite = ["lz4 (>=1.7.4.2)"] +interpolatable = ["scipy", "munkres"] +lxml = ["lxml (>=4.0,<5)"] +pathops = ["skia-pathops (>=0.5.0)"] +plot = ["matplotlib"] +symfont = ["sympy"] +type1 = ["xattr"] +ufo = ["fs (>=2.2.0,<3)"] +unicode = ["unicodedata2 (>=14.0.0)"] +woff = ["zopfli (>=0.1.4)", "brotlicffi (>=0.8.0)", "brotli (>=1.0.1)"] + +[[package]] +name = "future" +version = "0.18.2" +description = "Clean single-source support for Python 3 and 2" +category = "main" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "idna" +version = "3.3" +description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "kivy" +version = "2.0.0" +description = "A software library for rapid development of hardware-accelerated multitouch applications." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +docutils = "*" +"kivy-deps.angle" = {version = ">=0.3.0,<0.4.0", markers = "sys_platform == \"win32\""} +"kivy-deps.glew" = {version = ">=0.3.0,<0.4.0", markers = "sys_platform == \"win32\""} +"kivy-deps.sdl2" = {version = ">=0.3.1,<0.4.0", markers = "sys_platform == \"win32\""} +Kivy-Garden = ">=0.1.4" +pygments = "*" +pypiwin32 = {version = "*", markers = "sys_platform == \"win32\""} + +[package.extras] +angle = ["kivy-deps.angle (>=0.3.0,<0.4.0)"] +base = ["pillow", "docutils", "pygments", "kivy-deps.angle (>=0.3.0,<0.4.0)", "kivy-deps.sdl2 (>=0.3.1,<0.4.0)", "kivy-deps.glew (>=0.3.0,<0.4.0)", "pypiwin32"] +dev = ["pytest (>=3.6)", "pytest-cov", "pytest-asyncio (!=0.11.0)", "pytest-timeout", "pyinstaller", "sphinx", "sphinxcontrib-blockdiag", "sphinxcontrib-seqdiag", "sphinxcontrib-actdiag", "sphinxcontrib-nwdiag", "flake8", "kivy-deps.gstreamer-dev (>=0.3.1,<0.4.0)", "kivy-deps.sdl2-dev (>=0.3.1,<0.4.0)", "kivy-deps.glew-dev (>=0.3.0,<0.4.0)"] +full = ["pillow", "docutils", "pygments", "ffpyplayer", "kivy-deps.gstreamer (>=0.3.1,<0.4.0)", "kivy-deps.angle (>=0.3.0,<0.4.0)", "kivy-deps.sdl2 (>=0.3.1,<0.4.0)", "kivy-deps.glew (>=0.3.0,<0.4.0)", "pypiwin32"] +glew = ["kivy-deps.glew (>=0.3.0,<0.4.0)"] +gstreamer = ["kivy-deps.gstreamer (>=0.3.1,<0.4.0)"] +media = ["ffpyplayer", "kivy-deps.gstreamer (>=0.3.1,<0.4.0)"] +sdl2 = ["kivy-deps.sdl2 (>=0.3.1,<0.4.0)"] +tuio = ["oscpy"] + +[[package]] +name = "kivy-deps.angle" +version = "0.3.1" +description = "Repackaged binary dependency of Kivy." +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "kivy-deps.glew" +version = "0.3.0" +description = "Repackaged binary dependency of Kivy." +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "kivy-deps.sdl2" +version = "0.3.1" +description = "Repackaged binary dependency of Kivy." +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "kivy-garden" +version = "0.1.4" +description = "Garden tool for kivy flowers." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +requests = "*" + +[[package]] +name = "kiwisolver" +version = "1.3.2" +description = "A fast implementation of the Cassowary constraint solver" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "macholib" +version = "1.15.2" +description = "Mach-O header analysis and editing" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +altgraph = ">=0.15" + +[[package]] +name = "matplotlib" +version = "3.5.1" +description = "Python plotting package" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +cycler = ">=0.10" +fonttools = ">=4.22.0" +kiwisolver = ">=1.0.1" +numpy = ">=1.17" +packaging = ">=20.0" +pillow = ">=6.2.0" +pyparsing = ">=2.2.1" +python-dateutil = ">=2.7" +setuptools_scm = ">=4" + +[[package]] +name = "more-itertools" +version = "8.12.0" +description = "More routines for operating on iterables, beyond itertools" +category = "dev" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "numpy" +version = "1.22.2" +description = "NumPy is the fundamental package for array computing with Python." +category = "main" +optional = false +python-versions = ">=3.8" + +[[package]] +name = "packaging" +version = "21.3" +description = "Core utilities for Python packages" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" + +[[package]] +name = "pandas" +version = "1.4.0" +description = "Powerful data structures for data analysis, time series, and statistics" +category = "main" +optional = false +python-versions = ">=3.8" + +[package.dependencies] +numpy = [ + {version = ">=1.18.5", markers = "platform_machine != \"aarch64\" and platform_machine != \"arm64\" and python_version < \"3.10\""}, + {version = ">=1.19.2", markers = "platform_machine == \"aarch64\" and python_version < \"3.10\""}, + {version = ">=1.20.0", markers = "platform_machine == \"arm64\" and python_version < \"3.10\""}, +] +python-dateutil = ">=2.8.1" +pytz = ">=2020.1" + +[package.extras] +test = ["hypothesis (>=5.5.3)", "pytest (>=6.0)", "pytest-xdist (>=1.31)"] + +[[package]] +name = "pefile" +version = "2021.9.3" +description = "Python PE parsing module" +category = "main" +optional = false +python-versions = ">=3.6.0" + +[package.dependencies] +future = "*" + +[[package]] +name = "pillow" +version = "9.0.1" +description = "Python Imaging Library (Fork)" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "plotly" +version = "5.5.0" +description = "An open-source, interactive data visualization library for Python" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +six = "*" +tenacity = ">=6.2.0" + +[[package]] +name = "pluggy" +version = "0.13.1" +description = "plugin and hook calling mechanisms for python" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[package.extras] +dev = ["pre-commit", "tox"] + +[[package]] +name = "py" +version = "1.11.0" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "pygments" +version = "2.11.2" +description = "Pygments is a syntax highlighting package written in Python." +category = "main" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "pyinstaller" +version = "4.9" +description = "PyInstaller bundles a Python application and all its dependencies into a single package." +category = "main" +optional = false +python-versions = "<3.11,>=3.6" + +[package.dependencies] +altgraph = "*" +macholib = {version = ">=1.8", markers = "sys_platform == \"darwin\""} +pefile = {version = ">=2017.8.1", markers = "sys_platform == \"win32\""} +pyinstaller-hooks-contrib = ">=2020.6" +pywin32-ctypes = {version = ">=0.2.0", markers = "sys_platform == \"win32\""} + +[package.extras] +encryption = ["tinyaes (>=1.0.0)"] +hook_testing = ["pytest (>=2.7.3)", "execnet (>=1.5.0)", "psutil"] + +[[package]] +name = "pyinstaller-hooks-contrib" +version = "2022.0" +description = "Community maintained hooks for PyInstaller" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "pyparsing" +version = "3.0.7" +description = "Python parsing module" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + +[[package]] +name = "pypiwin32" +version = "223" +description = "" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +pywin32 = ">=223" + +[[package]] +name = "pytest" +version = "5.4.3" +description = "pytest: simple powerful testing with Python" +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.dependencies] +atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} +attrs = ">=17.4.0" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +more-itertools = ">=4.0.0" +packaging = "*" +pluggy = ">=0.12,<1.0" +py = ">=1.5.0" +wcwidth = "*" + +[package.extras] +checkqa-mypy = ["mypy (==v0.761)"] +testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "pytz" +version = "2021.3" +description = "World timezone definitions, modern and historical" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "pywin32" +version = "303" +description = "Python for Window Extensions" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "pywin32-ctypes" +version = "0.2.0" +description = "" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "requests" +version = "2.27.1" +description = "Python HTTP for Humans." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""} +idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""} +urllib3 = ">=1.21.1,<1.27" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] +use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"] + +[[package]] +name = "scipy" +version = "1.8.0" +description = "SciPy: Scientific Library for Python" +category = "main" +optional = false +python-versions = ">=3.8,<3.11" + +[package.dependencies] +numpy = ">=1.17.3,<1.25.0" + +[[package]] +name = "setuptools-scm" +version = "6.4.2" +description = "the blessed package to manage your versions by scm tags" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +packaging = ">=20.0" +tomli = ">=1.0.0" + +[package.extras] +test = ["pytest (>=6.2)", "virtualenv (>20)"] +toml = ["setuptools (>=42)"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "tenacity" +version = "8.0.1" +description = "Retry code until it succeeds" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +doc = ["reno", "sphinx", "tornado (>=4.5)"] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "tqdm" +version = "4.62.3" +description = "Fast, Extensible Progress Meter" +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["py-make (>=0.1.0)", "twine", "wheel"] +notebook = ["ipywidgets (>=6)"] +telegram = ["requests"] + +[[package]] +name = "urllib3" +version = "1.26.8" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" + +[package.extras] +brotli = ["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 = "wcwidth" +version = "0.2.5" +description = "Measures the displayed width of unicode strings in a terminal" +category = "dev" +optional = false +python-versions = "*" + +[metadata] +lock-version = "1.1" +python-versions = "3.9.10" +content-hash = "961a9255a4647cabcc421c9186c857f14df4610c02ed688d86ed31e030adc455" + +[metadata.files] +altgraph = [ + {file = "altgraph-0.17.2-py2.py3-none-any.whl", hash = "sha256:743628f2ac6a7c26f5d9223c91ed8ecbba535f506f4b6f558885a8a56a105857"}, + {file = "altgraph-0.17.2.tar.gz", hash = "sha256:ebf2269361b47d97b3b88e696439f6e4cbc607c17c51feb1754f90fb79839158"}, +] +atomicwrites = [ + {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, + {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, +] +attrs = [ + {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, + {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, +] +certifi = [ + {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"}, + {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"}, +] +charset-normalizer = [ + {file = "charset-normalizer-2.0.11.tar.gz", hash = "sha256:98398a9d69ee80548c762ba991a4728bfc3836768ed226b3945908d1a688371c"}, + {file = "charset_normalizer-2.0.11-py3-none-any.whl", hash = "sha256:2842d8f5e82a1f6aa437380934d5e1cd4fcf2003b06fed6940769c164a480a45"}, +] +colorama = [ + {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, + {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, +] +cycler = [ + {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, + {file = "cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"}, +] +docutils = [ + {file = "docutils-0.18.1-py2.py3-none-any.whl", hash = "sha256:23010f129180089fbcd3bc08cfefccb3b890b0050e1ca00c867036e9d161b98c"}, + {file = "docutils-0.18.1.tar.gz", hash = "sha256:679987caf361a7539d76e584cbeddc311e3aee937877c87346f31debc63e9d06"}, +] +fonttools = [ + {file = "fonttools-4.29.1-py3-none-any.whl", hash = "sha256:1933415e0fbdf068815cb1baaa1f159e17830215f7e8624e5731122761627557"}, + {file = "fonttools-4.29.1.zip", hash = "sha256:2b18a172120e32128a80efee04cff487d5d140fe7d817deb648b2eee023a40e4"}, +] +future = [ + {file = "future-0.18.2.tar.gz", hash = "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d"}, +] +idna = [ + {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, + {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, +] +kivy = [ + {file = "Kivy-2.0.0-cp36-cp36m-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:256846daa1a35b54b00426f7468423a962c3d8f909d7e8c713acab55c3281dee"}, + {file = "Kivy-2.0.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:bfb6b801599eac5aa9388308119d42a637a495945c79e2e2a3f6ef60c563c770"}, + {file = "Kivy-2.0.0-cp36-cp36m-win32.whl", hash = "sha256:aae542f2c030d4d95f5a717b7c862cd9537b74b99010b08807db63fdd9b029e0"}, + {file = "Kivy-2.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:5bd7dba6b0bc1f71623fa734fd63e38038772336995a334718cf8474a877eb40"}, + {file = "Kivy-2.0.0-cp37-cp37m-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:ed1c3076d9ef1171f6076b3b97215e5c0bcea831ca308722677611a551f16b1b"}, + {file = "Kivy-2.0.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:eb1cc4c1e223e290d413a383ac864d29d098b8abba8e881159c7d1177c6579af"}, + {file = "Kivy-2.0.0-cp37-cp37m-win32.whl", hash = "sha256:ef3727a47a565e6ea486365ee310bfb0445fcf7f0ab40c1461cbf304973637eb"}, + {file = "Kivy-2.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:a4a693d6d1fc26928498512b9da797581e407543a644b4e0c92b9297ea2fbec9"}, + {file = "Kivy-2.0.0-cp38-cp38-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:eca7bde37a2cffffdcdde85ac385c2e55d776333db00be0497bf884f61022d24"}, + {file = "Kivy-2.0.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:98ed5f46f05707a80e32a4fdd7e9fce4ac5f15da8fc83f91d5769dc66f137e20"}, + {file = "Kivy-2.0.0-cp38-cp38-win32.whl", hash = "sha256:7d736474c8075d6ee17203bd5bd42d74307239409442b27d5bcb3f3641ab0414"}, + {file = "Kivy-2.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:86cf1f0e40ef411872c9dbc75fc1e17ec6579d1e55cafe286da6c67c07dba4cb"}, + {file = "Kivy-2.0.0-cp39-cp39-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:23a7538f9c02e5d7f82f0b92d7fd313fa21ee8f0bd9890283fc7e7b02090f101"}, + {file = "Kivy-2.0.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:802982bbc7ff45bc2fa8af3816008252a3e63ded949a9f5ed6d361ecb3cfc2b7"}, + {file = "Kivy-2.0.0-cp39-cp39-win32.whl", hash = "sha256:3e739c04d3a2f38cb76779d721487131cff8ed84dbc1730d5025d62306bf6e52"}, + {file = "Kivy-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:8973ed9f0cb0d9ef0f3a520841c61c0093788a7382e8ebe7c108ec03766d9fef"}, + {file = "Kivy-2.0.0.tar.gz", hash = "sha256:d25e44eb44e43762b2fd0c5874e51954e0f1181fd9800d8a6756be6d084812d8"}, +] +"kivy-deps.angle" = [ + {file = "kivy_deps.angle-0.3.1-cp310-cp310-win32.whl", hash = "sha256:5e03805148f52ed7dd9fab63b231c6bdd8a49f5be57cd206d3b8d83eec837551"}, + {file = "kivy_deps.angle-0.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:555bdfec11cdb06c74ac298678a5637fa0ed7fb12fbd85ed80e6c3c942461bee"}, + {file = "kivy_deps.angle-0.3.1-cp37-cp37m-win32.whl", hash = "sha256:d48d0e306a261a37c3c1951d4161940edc29d86dad242082c31f49a65de7a54a"}, + {file = "kivy_deps.angle-0.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:dc6043775a2a472762a37e302350ab49df6a6b5e5bad86c5827eca9d2da52099"}, + {file = "kivy_deps.angle-0.3.1-cp38-cp38-win32.whl", hash = "sha256:e3462556908b5265d1bfe51944bfbd3809bd0118ea14f5307895e4cd3dad1d6c"}, + {file = "kivy_deps.angle-0.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:e4cd37bb5735efc3e739a2aaedf3ff841b32555e2f36c4f594da2fdb687441cb"}, + {file = "kivy_deps.angle-0.3.1-cp39-cp39-win32.whl", hash = "sha256:04dde57a46b08fb8c2fa5724617e2e9c11c058263b8b3f8770dbd7b4029bfdef"}, + {file = "kivy_deps.angle-0.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:b94c24e86dc8a6afd1a77f809bf253c2ebc2665f00e575f165549b9b71125e76"}, +] +"kivy-deps.glew" = [ + {file = "kivy_deps.glew-0.3.0-cp310-cp310-win32.whl", hash = "sha256:ba7618c56d10745064bb953fd10957a9169c42a67d1d840773535a91b3dd82a4"}, + {file = "kivy_deps.glew-0.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:c2758ed67aeb5211d963aa6bd3078a72841080b95f17a5810c99af87c5433bf6"}, + {file = "kivy_deps.glew-0.3.0-cp36-cp36m-win32.whl", hash = "sha256:5a63e3dd0affef2613410fe5b9b8572f1932ae2285db60071446d62f37961825"}, + {file = "kivy_deps.glew-0.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:28aa195875a767314b12091842bdcf832401077f9e65dd9975059ddb978f2f75"}, + {file = "kivy_deps.glew-0.3.0-cp37-cp37m-win32.whl", hash = "sha256:6c941f321fa8fd34083054f74b9a810bc2a1f3e2560e4fa3df31995c9971f94a"}, + {file = "kivy_deps.glew-0.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:f836e249970b2e1fc0a0d1bd3716892165ee5180214c071c0f804a934c363396"}, + {file = "kivy_deps.glew-0.3.0-cp38-cp38-win32.whl", hash = "sha256:4166c62999ed8a68036540bf154e25cc92ec1563fe78111926238f59b44a9af3"}, + {file = "kivy_deps.glew-0.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:3e6f3376ea65b3ced19f07c63f831aa8d3028fac6970d01b400b031fbb8bbe4d"}, + {file = "kivy_deps.glew-0.3.0-cp39-cp39-win32.whl", hash = "sha256:a79cc62489b1fc8dbe62aab7482865c670e1e781ec9b3f0d93f5bc87423af435"}, + {file = "kivy_deps.glew-0.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:a57fece21c313c90c0f51a0c2b3e172a2f807bee867e0e5fad1cc014213a3543"}, +] +"kivy-deps.sdl2" = [ + {file = "kivy_deps.sdl2-0.3.1-cp36-cp36m-win32.whl", hash = "sha256:549e6423f55216bc761a11ec91508eb6fe836ffb984c7a3c7a58b7543d8f8f77"}, + {file = "kivy_deps.sdl2-0.3.1-cp36-cp36m-win_amd64.whl", hash = "sha256:560de04f15f59e8e94955442b72d1a1164989d3d502b5a9d132437a4c229e52f"}, + {file = "kivy_deps.sdl2-0.3.1-cp37-cp37m-win32.whl", hash = "sha256:a7cee2215eb428b0be34c1da0fad806036b1382804c0e4ef62b19b11320c8462"}, + {file = "kivy_deps.sdl2-0.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:3e37948c010681e3f58c408940e62106226a2b1e5a2bf7764469cfd683025698"}, + {file = "kivy_deps.sdl2-0.3.1-cp38-cp38-win32.whl", hash = "sha256:e9ad50f2f469c8bd92720f547ab722cc36ef13c1a25ef78154b6ab90d48bd960"}, + {file = "kivy_deps.sdl2-0.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:984e7fa9e1fe06fd902bb745e986300b65e00ba0eb4ecfe278f52a1915370cd0"}, + {file = "kivy_deps.sdl2-0.3.1-cp39-cp39-win32.whl", hash = "sha256:50726d6aeba460be1a9bd944ff0e763e58e122ef04b82ccbd03947ae7585cde4"}, + {file = "kivy_deps.sdl2-0.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:4a5550410e2649b72984d294fb45564bc8d76fc0bef009406d8cb328d994855c"}, +] +kivy-garden = [ + {file = "Kivy Garden-0.1.4.tar.gz", hash = "sha256:9b7d9de5efacbcd0c4b3dd873b30622a86093c9965aa47b523c7a32f3eb34610"}, + {file = "kivy-garden-0.1.4.tar.gz", hash = "sha256:c256f42788421273a08fbb0a228f0fb0e80dd86b629fb8c0920507f645be6c72"}, +] +kiwisolver = [ + {file = "kiwisolver-1.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1d819553730d3c2724582124aee8a03c846ec4362ded1034c16fb3ef309264e6"}, + {file = "kiwisolver-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8d93a1095f83e908fc253f2fb569c2711414c0bfd451cab580466465b235b470"}, + {file = "kiwisolver-1.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c4550a359c5157aaf8507e6820d98682872b9100ce7607f8aa070b4b8af6c298"}, + {file = "kiwisolver-1.3.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2210f28778c7d2ee13f3c2a20a3a22db889e75f4ec13a21072eabb5693801e84"}, + {file = "kiwisolver-1.3.2-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:82f49c5a79d3839bc8f38cb5f4bfc87e15f04cbafa5fbd12fb32c941cb529cfb"}, + {file = "kiwisolver-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9661a04ca3c950a8ac8c47f53cbc0b530bce1b52f516a1e87b7736fec24bfff0"}, + {file = "kiwisolver-1.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ddb500a2808c100e72c075cbb00bf32e62763c82b6a882d403f01a119e3f402"}, + {file = "kiwisolver-1.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:72be6ebb4e92520b9726d7146bc9c9b277513a57a38efcf66db0620aec0097e0"}, + {file = "kiwisolver-1.3.2-cp310-cp310-win32.whl", hash = "sha256:83d2c9db5dfc537d0171e32de160461230eb14663299b7e6d18ca6dca21e4977"}, + {file = "kiwisolver-1.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:cba430db673c29376135e695c6e2501c44c256a81495da849e85d1793ee975ad"}, + {file = "kiwisolver-1.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4116ba9a58109ed5e4cb315bdcbff9838f3159d099ba5259c7c7fb77f8537492"}, + {file = "kiwisolver-1.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19554bd8d54cf41139f376753af1a644b63c9ca93f8f72009d50a2080f870f77"}, + {file = "kiwisolver-1.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a7a4cf5bbdc861987a7745aed7a536c6405256853c94abc9f3287c3fa401b174"}, + {file = "kiwisolver-1.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0007840186bacfaa0aba4466d5890334ea5938e0bb7e28078a0eb0e63b5b59d5"}, + {file = "kiwisolver-1.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ec2eba188c1906b05b9b49ae55aae4efd8150c61ba450e6721f64620c50b59eb"}, + {file = "kiwisolver-1.3.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:3dbb3cea20b4af4f49f84cffaf45dd5f88e8594d18568e0225e6ad9dec0e7967"}, + {file = "kiwisolver-1.3.2-cp37-cp37m-win32.whl", hash = "sha256:5326ddfacbe51abf9469fe668944bc2e399181a2158cb5d45e1d40856b2a0589"}, + {file = "kiwisolver-1.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:c6572c2dab23c86a14e82c245473d45b4c515314f1f859e92608dcafbd2f19b8"}, + {file = "kiwisolver-1.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b5074fb09429f2b7bc82b6fb4be8645dcbac14e592128beeff5461dcde0af09f"}, + {file = "kiwisolver-1.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:22521219ca739654a296eea6d4367703558fba16f98688bd8ce65abff36eaa84"}, + {file = "kiwisolver-1.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c358721aebd40c243894298f685a19eb0491a5c3e0b923b9f887ef1193ddf829"}, + {file = "kiwisolver-1.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ba5a1041480c6e0a8b11a9544d53562abc2d19220bfa14133e0cdd9967e97af"}, + {file = "kiwisolver-1.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44e6adf67577dbdfa2d9f06db9fbc5639afefdb5bf2b4dfec25c3a7fbc619536"}, + {file = "kiwisolver-1.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1d45d1c74f88b9f41062716c727f78f2a59a5476ecbe74956fafb423c5c87a76"}, + {file = "kiwisolver-1.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:70adc3658138bc77a36ce769f5f183169bc0a2906a4f61f09673f7181255ac9b"}, + {file = "kiwisolver-1.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b6a5431940f28b6de123de42f0eb47b84a073ee3c3345dc109ad550a3307dd28"}, + {file = "kiwisolver-1.3.2-cp38-cp38-win32.whl", hash = "sha256:ee040a7de8d295dbd261ef2d6d3192f13e2b08ec4a954de34a6fb8ff6422e24c"}, + {file = "kiwisolver-1.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:8dc3d842fa41a33fe83d9f5c66c0cc1f28756530cd89944b63b072281e852031"}, + {file = "kiwisolver-1.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a498bcd005e8a3fedd0022bb30ee0ad92728154a8798b703f394484452550507"}, + {file = "kiwisolver-1.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:80efd202108c3a4150e042b269f7c78643420cc232a0a771743bb96b742f838f"}, + {file = "kiwisolver-1.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f8eb7b6716f5b50e9c06207a14172cf2de201e41912ebe732846c02c830455b9"}, + {file = "kiwisolver-1.3.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f441422bb313ab25de7b3dbfd388e790eceb76ce01a18199ec4944b369017009"}, + {file = "kiwisolver-1.3.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:30fa008c172355c7768159983a7270cb23838c4d7db73d6c0f6b60dde0d432c6"}, + {file = "kiwisolver-1.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f8f6c8f4f1cff93ca5058d6ec5f0efda922ecb3f4c5fb76181f327decff98b8"}, + {file = "kiwisolver-1.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba677bcaff9429fd1bf01648ad0901cea56c0d068df383d5f5856d88221fe75b"}, + {file = "kiwisolver-1.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7843b1624d6ccca403a610d1277f7c28ad184c5aa88a1750c1a999754e65b439"}, + {file = "kiwisolver-1.3.2-cp39-cp39-win32.whl", hash = "sha256:e6f5eb2f53fac7d408a45fbcdeda7224b1cfff64919d0f95473420a931347ae9"}, + {file = "kiwisolver-1.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:eedd3b59190885d1ebdf6c5e0ca56828beb1949b4dfe6e5d0256a461429ac386"}, + {file = "kiwisolver-1.3.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:dedc71c8eb9c5096037766390172c34fb86ef048b8e8958b4e484b9e505d66bc"}, + {file = "kiwisolver-1.3.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:bf7eb45d14fc036514c09554bf983f2a72323254912ed0c3c8e697b62c4c158f"}, + {file = "kiwisolver-1.3.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2b65bd35f3e06a47b5c30ea99e0c2b88f72c6476eedaf8cfbc8e66adb5479dcf"}, + {file = "kiwisolver-1.3.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25405f88a37c5f5bcba01c6e350086d65e7465fd1caaf986333d2a045045a223"}, + {file = "kiwisolver-1.3.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:bcadb05c3d4794eb9eee1dddf1c24215c92fb7b55a80beae7a60530a91060560"}, + {file = "kiwisolver-1.3.2.tar.gz", hash = "sha256:fc4453705b81d03568d5b808ad8f09c77c47534f6ac2e72e733f9ca4714aa75c"}, +] +macholib = [ + {file = "macholib-1.15.2-py2.py3-none-any.whl", hash = "sha256:885613dd02d3e26dbd2b541eb4cc4ce611b841f827c0958ab98656e478b9e6f6"}, + {file = "macholib-1.15.2.tar.gz", hash = "sha256:1542c41da3600509f91c165cb897e7e54c0e74008bd8da5da7ebbee519d593d2"}, +] +matplotlib = [ + {file = "matplotlib-3.5.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:456cc8334f6d1124e8ff856b42d2cc1c84335375a16448189999496549f7182b"}, + {file = "matplotlib-3.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8a77906dc2ef9b67407cec0bdbf08e3971141e535db888974a915be5e1e3efc6"}, + {file = "matplotlib-3.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e70ae6475cfd0fad3816dcbf6cac536dc6f100f7474be58d59fa306e6e768a4"}, + {file = "matplotlib-3.5.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53273c5487d1c19c3bc03b9eb82adaf8456f243b97ed79d09dded747abaf1235"}, + {file = "matplotlib-3.5.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3b6f3fd0d8ca37861c31e9a7cab71a0ef14c639b4c95654ea1dd153158bf0df"}, + {file = "matplotlib-3.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8c87cdaf06fd7b2477f68909838ff4176f105064a72ca9d24d3f2a29f73d393"}, + {file = "matplotlib-3.5.1-cp310-cp310-win32.whl", hash = "sha256:e2f28a07b4f82abb40267864ad7b3a4ed76f1b1663e81c7efc84a9b9248f672f"}, + {file = "matplotlib-3.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:d70a32ee1f8b55eed3fd4e892f0286df8cccc7e0475c11d33b5d0a148f5c7599"}, + {file = "matplotlib-3.5.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:68fa30cec89b6139dc559ed6ef226c53fd80396da1919a1b5ef672c911aaa767"}, + {file = "matplotlib-3.5.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e3484d8455af3fdb0424eae1789af61f6a79da0c80079125112fd5c1b604218"}, + {file = "matplotlib-3.5.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e293b16cf303fe82995e41700d172a58a15efc5331125d08246b520843ef21ee"}, + {file = "matplotlib-3.5.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e3520a274a0e054e919f5b3279ee5dbccf5311833819ccf3399dab7c83e90a25"}, + {file = "matplotlib-3.5.1-cp37-cp37m-win32.whl", hash = "sha256:2252bfac85cec7af4a67e494bfccf9080bcba8a0299701eab075f48847cca907"}, + {file = "matplotlib-3.5.1-cp37-cp37m-win_amd64.whl", hash = "sha256:abf67e05a1b7f86583f6ebd01f69b693b9c535276f4e943292e444855870a1b8"}, + {file = "matplotlib-3.5.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6c094e4bfecd2fa7f9adffd03d8abceed7157c928c2976899de282f3600f0a3d"}, + {file = "matplotlib-3.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:506b210cc6e66a0d1c2bb765d055f4f6bc2745070fb1129203b67e85bbfa5c18"}, + {file = "matplotlib-3.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b04fc29bcef04d4e2d626af28d9d892be6aba94856cb46ed52bcb219ceac8943"}, + {file = "matplotlib-3.5.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:577ed20ec9a18d6bdedb4616f5e9e957b4c08563a9f985563a31fd5b10564d2a"}, + {file = "matplotlib-3.5.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e486f60db0cd1c8d68464d9484fd2a94011c1ac8593d765d0211f9daba2bd535"}, + {file = "matplotlib-3.5.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b71f3a7ca935fc759f2aed7cec06cfe10bc3100fadb5dbd9c435b04e557971e1"}, + {file = "matplotlib-3.5.1-cp38-cp38-win32.whl", hash = "sha256:d24e5bb8028541ce25e59390122f5e48c8506b7e35587e5135efcb6471b4ac6c"}, + {file = "matplotlib-3.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:778d398c4866d8e36ee3bf833779c940b5f57192fa0a549b3ad67bc4c822771b"}, + {file = "matplotlib-3.5.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bb1c613908f11bac270bc7494d68b1ef6e7c224b7a4204d5dacf3522a41e2bc3"}, + {file = "matplotlib-3.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:edf5e4e1d5fb22c18820e8586fb867455de3b109c309cb4fce3aaed85d9468d1"}, + {file = "matplotlib-3.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:40e0d7df05e8efe60397c69b467fc8f87a2affeb4d562fe92b72ff8937a2b511"}, + {file = "matplotlib-3.5.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a350ca685d9f594123f652ba796ee37219bf72c8e0fc4b471473d87121d6d34"}, + {file = "matplotlib-3.5.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3e66497cd990b1a130e21919b004da2f1dc112132c01ac78011a90a0f9229778"}, + {file = "matplotlib-3.5.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:87900c67c0f1728e6db17c6809ec05c025c6624dcf96a8020326ea15378fe8e7"}, + {file = "matplotlib-3.5.1-cp39-cp39-win32.whl", hash = "sha256:b8a4fb2a0c5afbe9604f8a91d7d0f27b1832c3e0b5e365f95a13015822b4cd65"}, + {file = "matplotlib-3.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:fe8d40c434a8e2c68d64c6d6a04e77f21791a93ff6afe0dce169597c110d3079"}, + {file = "matplotlib-3.5.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:34a1fc29f8f96e78ec57a5eff5e8d8b53d3298c3be6df61e7aa9efba26929522"}, + {file = "matplotlib-3.5.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b19a761b948e939a9e20173aaae76070025f0024fc8f7ba08bef22a5c8573afc"}, + {file = "matplotlib-3.5.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6803299cbf4665eca14428d9e886de62e24f4223ac31ab9c5d6d5339a39782c7"}, + {file = "matplotlib-3.5.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:14334b9902ec776461c4b8c6516e26b450f7ebe0b3ef8703bf5cdfbbaecf774a"}, + {file = "matplotlib-3.5.1.tar.gz", hash = "sha256:b2e9810e09c3a47b73ce9cab5a72243a1258f61e7900969097a817232246ce1c"}, +] +more-itertools = [ + {file = "more-itertools-8.12.0.tar.gz", hash = "sha256:7dc6ad46f05f545f900dd59e8dfb4e84a4827b97b3cfecb175ea0c7d247f6064"}, + {file = "more_itertools-8.12.0-py3-none-any.whl", hash = "sha256:43e6dd9942dffd72661a2c4ef383ad7da1e6a3e968a927ad7a6083ab410a688b"}, +] +numpy = [ + {file = "numpy-1.22.2-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:515a8b6edbb904594685da6e176ac9fbea8f73a5ebae947281de6613e27f1956"}, + {file = "numpy-1.22.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:76a4f9bce0278becc2da7da3b8ef854bed41a991f4226911a24a9711baad672c"}, + {file = "numpy-1.22.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:168259b1b184aa83a514f307352c25c56af111c269ffc109d9704e81f72e764b"}, + {file = "numpy-1.22.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3556c5550de40027d3121ebbb170f61bbe19eb639c7ad0c7b482cd9b560cd23b"}, + {file = "numpy-1.22.2-cp310-cp310-win_amd64.whl", hash = "sha256:aafa46b5a39a27aca566198d3312fb3bde95ce9677085efd02c86f7ef6be4ec7"}, + {file = "numpy-1.22.2-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:55535c7c2f61e2b2fc817c5cbe1af7cb907c7f011e46ae0a52caa4be1f19afe2"}, + {file = "numpy-1.22.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:60cb8e5933193a3cc2912ee29ca331e9c15b2da034f76159b7abc520b3d1233a"}, + {file = "numpy-1.22.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b536b6840e84c1c6a410f3a5aa727821e6108f3454d81a5cd5900999ef04f89"}, + {file = "numpy-1.22.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2638389562bda1635b564490d76713695ff497242a83d9b684d27bb4a6cc9d7a"}, + {file = "numpy-1.22.2-cp38-cp38-win32.whl", hash = "sha256:6767ad399e9327bfdbaa40871be4254d1995f4a3ca3806127f10cec778bd9896"}, + {file = "numpy-1.22.2-cp38-cp38-win_amd64.whl", hash = "sha256:03ae5850619abb34a879d5f2d4bb4dcd025d6d8fb72f5e461dae84edccfe129f"}, + {file = "numpy-1.22.2-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:d76a26c5118c4d96e264acc9e3242d72e1a2b92e739807b3b69d8d47684b6677"}, + {file = "numpy-1.22.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:15efb7b93806d438e3bc590ca8ef2f953b0ce4f86f337ef4559d31ec6cf9d7dd"}, + {file = "numpy-1.22.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:badca914580eb46385e7f7e4e426fea6de0a37b9e06bec252e481ae7ec287082"}, + {file = "numpy-1.22.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94dd11d9f13ea1be17bac39c1942f527cbf7065f94953cf62dfe805653da2f8f"}, + {file = "numpy-1.22.2-cp39-cp39-win32.whl", hash = "sha256:8cf33634b60c9cef346663a222d9841d3bbbc0a2f00221d6bcfd0d993d5543f6"}, + {file = "numpy-1.22.2-cp39-cp39-win_amd64.whl", hash = "sha256:59153979d60f5bfe9e4c00e401e24dfe0469ef8da6d68247439d3278f30a180f"}, + {file = "numpy-1.22.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a176959b6e7e00b5a0d6f549a479f869829bfd8150282c590deee6d099bbb6e"}, + {file = "numpy-1.22.2.zip", hash = "sha256:076aee5a3763d41da6bef9565fdf3cb987606f567cd8b104aded2b38b7b47abf"}, +] +packaging = [ + {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, + {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, +] +pandas = [ + {file = "pandas-1.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:de62cf699122dcef175988f0714678e59c453dc234c5b47b7136bfd7641e3c8c"}, + {file = "pandas-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:46a18572f3e1cb75db59d9461940e9ba7ee38967fa48dd58f4139197f6e32280"}, + {file = "pandas-1.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:73f7da2ccc38cc988b74e5400b430b7905db5f2c413ff215506bea034eaf832d"}, + {file = "pandas-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5229c95db3a907451dacebc551492db6f7d01743e49bbc862f4a6010c227d187"}, + {file = "pandas-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe454180ad31bbbe1e5d111b44443258730467f035e26b4e354655ab59405871"}, + {file = "pandas-1.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:784cca3f69cfd7f6bd7c7fdb44f2bbab17e6de55725e9ff36d6f382510dfefb5"}, + {file = "pandas-1.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:de8f8999864399529e8514a2e6bfe00fd161f0a667903655552ed12e583ae3cb"}, + {file = "pandas-1.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0f19504f2783526fb5b4de675ea69d68974e21c1624f4b92295d057a31d5ec5f"}, + {file = "pandas-1.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f045bb5c6bfaba536089573bf97d6b8ccc7159d951fe63904c395a5e486fbe14"}, + {file = "pandas-1.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5280d057ddae06fe4a3cd6aa79040b8c205cd6dd21743004cf8635f39ed01712"}, + {file = "pandas-1.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f3b74335390dda49f5d5089fab71958812bf56f42aa27663ee4c16d19f4f1c5"}, + {file = "pandas-1.4.0-cp38-cp38-win32.whl", hash = "sha256:51e5da3802aaee1aa4254108ffaf1129a15fb3810b7ce8da1ec217c655b418f5"}, + {file = "pandas-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:f103a5cdcd66cb18882ccdc18a130c31c3cfe3529732e7f10a8ab3559164819c"}, + {file = "pandas-1.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4a8d5a200f8685e7ea562b2f022c77ab7cb82c1ca5b240e6965faa6f84e5c1e9"}, + {file = "pandas-1.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b5af258c7b090cca7b742cf2bd67ad1919aa9e4e681007366c9edad2d6a3d42b"}, + {file = "pandas-1.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:156aac90dd7b303bf0b91bae96c0503212777f86c731e41929c571125d26c8e9"}, + {file = "pandas-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dad075089e17a72391de33021ad93720aff258c3c4b68c78e1cafce7e447045"}, + {file = "pandas-1.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d59c958d6b8f96fdf850c7821571782168d5acfe75ccf78cd8d1ac15fb921df"}, + {file = "pandas-1.4.0-cp39-cp39-win32.whl", hash = "sha256:55ec0e192eefa26d823fc25a1f213d6c304a3592915f368e360652994cdb8d9a"}, + {file = "pandas-1.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:23c04dab11f3c6359cfa7afa83d3d054a8f8c283d773451184d98119ef54da97"}, + {file = "pandas-1.4.0.tar.gz", hash = "sha256:cdd76254c7f0a1583bd4e4781fb450d0ebf392e10d3f12e92c95575942e37df5"}, +] +pefile = [ + {file = "pefile-2021.9.3.tar.gz", hash = "sha256:344a49e40a94e10849f0fe34dddc80f773a12b40675bf2f7be4b8be578bdd94a"}, +] +pillow = [ + {file = "Pillow-9.0.1-1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a5d24e1d674dd9d72c66ad3ea9131322819ff86250b30dc5821cbafcfa0b96b4"}, + {file = "Pillow-9.0.1-1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2632d0f846b7c7600edf53c48f8f9f1e13e62f66a6dbc15191029d950bfed976"}, + {file = "Pillow-9.0.1-1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b9618823bd237c0d2575283f2939655f54d51b4527ec3972907a927acbcc5bfc"}, + {file = "Pillow-9.0.1-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:9bfdb82cdfeccec50aad441afc332faf8606dfa5e8efd18a6692b5d6e79f00fd"}, + {file = "Pillow-9.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5100b45a4638e3c00e4d2320d3193bdabb2d75e79793af7c3eb139e4f569f16f"}, + {file = "Pillow-9.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:528a2a692c65dd5cafc130de286030af251d2ee0483a5bf50c9348aefe834e8a"}, + {file = "Pillow-9.0.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f29d831e2151e0b7b39981756d201f7108d3d215896212ffe2e992d06bfe049"}, + {file = "Pillow-9.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:855c583f268edde09474b081e3ddcd5cf3b20c12f26e0d434e1386cc5d318e7a"}, + {file = "Pillow-9.0.1-cp310-cp310-win32.whl", hash = "sha256:d9d7942b624b04b895cb95af03a23407f17646815495ce4547f0e60e0b06f58e"}, + {file = "Pillow-9.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:81c4b81611e3a3cb30e59b0cf05b888c675f97e3adb2c8672c3154047980726b"}, + {file = "Pillow-9.0.1-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:413ce0bbf9fc6278b2d63309dfeefe452835e1c78398efb431bab0672fe9274e"}, + {file = "Pillow-9.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80fe64a6deb6fcfdf7b8386f2cf216d329be6f2781f7d90304351811fb591360"}, + {file = "Pillow-9.0.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cef9c85ccbe9bee00909758936ea841ef12035296c748aaceee535969e27d31b"}, + {file = "Pillow-9.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d19397351f73a88904ad1aee421e800fe4bbcd1aeee6435fb62d0a05ccd1030"}, + {file = "Pillow-9.0.1-cp37-cp37m-win32.whl", hash = "sha256:d21237d0cd37acded35154e29aec853e945950321dd2ffd1a7d86fe686814669"}, + {file = "Pillow-9.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:ede5af4a2702444a832a800b8eb7f0a7a1c0eed55b644642e049c98d589e5092"}, + {file = "Pillow-9.0.1-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:b5b3f092fe345c03bca1e0b687dfbb39364b21ebb8ba90e3fa707374b7915204"}, + {file = "Pillow-9.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:335ace1a22325395c4ea88e00ba3dc89ca029bd66bd5a3c382d53e44f0ccd77e"}, + {file = "Pillow-9.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db6d9fac65bd08cea7f3540b899977c6dee9edad959fa4eaf305940d9cbd861c"}, + {file = "Pillow-9.0.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f154d173286a5d1863637a7dcd8c3437bb557520b01bddb0be0258dcb72696b5"}, + {file = "Pillow-9.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14d4b1341ac07ae07eb2cc682f459bec932a380c3b122f5540432d8977e64eae"}, + {file = "Pillow-9.0.1-cp38-cp38-win32.whl", hash = "sha256:effb7749713d5317478bb3acb3f81d9d7c7f86726d41c1facca068a04cf5bb4c"}, + {file = "Pillow-9.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:7f7609a718b177bf171ac93cea9fd2ddc0e03e84d8fa4e887bdfc39671d46b00"}, + {file = "Pillow-9.0.1-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:80ca33961ced9c63358056bd08403ff866512038883e74f3a4bf88ad3eb66838"}, + {file = "Pillow-9.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1c3c33ac69cf059bbb9d1a71eeaba76781b450bc307e2291f8a4764d779a6b28"}, + {file = "Pillow-9.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12875d118f21cf35604176872447cdb57b07126750a33748bac15e77f90f1f9c"}, + {file = "Pillow-9.0.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:514ceac913076feefbeaf89771fd6febde78b0c4c1b23aaeab082c41c694e81b"}, + {file = "Pillow-9.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3c5c79ab7dfce6d88f1ba639b77e77a17ea33a01b07b99840d6ed08031cb2a7"}, + {file = "Pillow-9.0.1-cp39-cp39-win32.whl", hash = "sha256:718856856ba31f14f13ba885ff13874be7fefc53984d2832458f12c38205f7f7"}, + {file = "Pillow-9.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:f25ed6e28ddf50de7e7ea99d7a976d6a9c415f03adcaac9c41ff6ff41b6d86ac"}, + {file = "Pillow-9.0.1-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:011233e0c42a4a7836498e98c1acf5e744c96a67dd5032a6f666cc1fb97eab97"}, + {file = "Pillow-9.0.1-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:253e8a302a96df6927310a9d44e6103055e8fb96a6822f8b7f514bb7ef77de56"}, + {file = "Pillow-9.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6295f6763749b89c994fcb6d8a7f7ce03c3992e695f89f00b741b4580b199b7e"}, + {file = "Pillow-9.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:a9f44cd7e162ac6191491d7249cceb02b8116b0f7e847ee33f739d7cb1ea1f70"}, + {file = "Pillow-9.0.1.tar.gz", hash = "sha256:6c8bc8238a7dfdaf7a75f5ec5a663f4173f8c367e5a39f87e720495e1eed75fa"}, +] +plotly = [ + {file = "plotly-5.5.0-py2.py3-none-any.whl", hash = "sha256:bc7d19272560f73fe4c2c989c31b00774a35d3a76891fab0b72c17616862d0e0"}, + {file = "plotly-5.5.0.tar.gz", hash = "sha256:20b8a1a0f0434f9b8d10eb7caa66e947a9a1d698e5a53d40d447bbc0d2ae41f0"}, +] +pluggy = [ + {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, + {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, +] +py = [ + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, +] +pygments = [ + {file = "Pygments-2.11.2-py3-none-any.whl", hash = "sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65"}, + {file = "Pygments-2.11.2.tar.gz", hash = "sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"}, +] +pyinstaller = [ + {file = "pyinstaller-4.9-py3-none-macosx_10_13_universal2.whl", hash = "sha256:e2f165cea4470ce8a8349112cd78f48a61413805adc17792a91997a11cfe1d80"}, + {file = "pyinstaller-4.9-py3-none-manylinux2014_aarch64.whl", hash = "sha256:24035eb9fffa2e3e288b4c1c9710043819efc7203cae5c8c573bec16f4a8e98f"}, + {file = "pyinstaller-4.9-py3-none-manylinux2014_i686.whl", hash = "sha256:a0b988cfc197d40e3d773b3aa1c7d3e918fc0933b4c15ec3fc5d156f222d82cb"}, + {file = "pyinstaller-4.9-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:62c97cbbdbee30974d607eb1de9afb081eb3adba787c203b00438e21027b829b"}, + {file = "pyinstaller-4.9-py3-none-manylinux2014_s390x.whl", hash = "sha256:7f46ab11ec986e4c525b93251063144e12d432a132dbc0070e3030e34c76537a"}, + {file = "pyinstaller-4.9-py3-none-manylinux2014_x86_64.whl", hash = "sha256:b5f1a94150315ea75bf3501be6c8476d65a7209580bb662da06dbdbc4454f375"}, + {file = "pyinstaller-4.9-py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:ebeb87cdbadb2b4e8f991ffd9945ebd4fb3a7303180e63682c3e1ce01b3fdd22"}, + {file = "pyinstaller-4.9-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:59372b950d176fdc5ecea29719a8ab3f194b73a15b7f9875ac2a1de9a3daf5ed"}, + {file = "pyinstaller-4.9-py3-none-win32.whl", hash = "sha256:ec3ca331d565ffca1b6470c5aaf798885a03708c3d0b15c1b19009126f84c1d4"}, + {file = "pyinstaller-4.9-py3-none-win_amd64.whl", hash = "sha256:bec57b3b2b6178907255557ec0fc4b5ce5a0474013414cdadea853205c74ed26"}, + {file = "pyinstaller-4.9.tar.gz", hash = "sha256:75a180a658871bc41f9cf94b6f90ffa54e98f5d6a7cdb02d7530f0360afe24f9"}, +] +pyinstaller-hooks-contrib = [ + {file = "pyinstaller-hooks-contrib-2022.0.tar.gz", hash = "sha256:61b667f51b2525377fae30793f38fd9752a08032c72b209effabf707c840cc38"}, + {file = "pyinstaller_hooks_contrib-2022.0-py2.py3-none-any.whl", hash = "sha256:29f0bd8fbb2ff6f2df60a0c147e5b5ad65ae5c1a982d90641a5f712de03fa161"}, +] +pyparsing = [ + {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"}, + {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"}, +] +pypiwin32 = [ + {file = "pypiwin32-223-py3-none-any.whl", hash = "sha256:67adf399debc1d5d14dffc1ab5acacb800da569754fafdc576b2a039485aa775"}, + {file = "pypiwin32-223.tar.gz", hash = "sha256:71be40c1fbd28594214ecaecb58e7aa8b708eabfa0125c8a109ebd51edbd776a"}, +] +pytest = [ + {file = "pytest-5.4.3-py3-none-any.whl", hash = "sha256:5c0db86b698e8f170ba4582a492248919255fcd4c79b1ee64ace34301fb589a1"}, + {file = "pytest-5.4.3.tar.gz", hash = "sha256:7979331bfcba207414f5e1263b5a0f8f521d0f457318836a7355531ed1a4c7d8"}, +] +python-dateutil = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] +pytz = [ + {file = "pytz-2021.3-py2.py3-none-any.whl", hash = "sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c"}, + {file = "pytz-2021.3.tar.gz", hash = "sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326"}, +] +pywin32 = [ + {file = "pywin32-303-cp310-cp310-win32.whl", hash = "sha256:6fed4af057039f309263fd3285d7b8042d41507343cd5fa781d98fcc5b90e8bb"}, + {file = "pywin32-303-cp310-cp310-win_amd64.whl", hash = "sha256:51cb52c5ec6709f96c3f26e7795b0bf169ee0d8395b2c1d7eb2c029a5008ed51"}, + {file = "pywin32-303-cp311-cp311-win32.whl", hash = "sha256:d9b5d87ca944eb3aa4cd45516203ead4b37ab06b8b777c54aedc35975dec0dee"}, + {file = "pywin32-303-cp311-cp311-win_amd64.whl", hash = "sha256:fcf44032f5b14fcda86028cdf49b6ebdaea091230eb0a757282aa656e4732439"}, + {file = "pywin32-303-cp36-cp36m-win32.whl", hash = "sha256:aad484d52ec58008ca36bd4ad14a71d7dd0a99db1a4ca71072213f63bf49c7d9"}, + {file = "pywin32-303-cp36-cp36m-win_amd64.whl", hash = "sha256:2a09632916b6bb231ba49983fe989f2f625cea237219530e81a69239cd0c4559"}, + {file = "pywin32-303-cp37-cp37m-win32.whl", hash = "sha256:b1675d82bcf6dbc96363fca747bac8bff6f6e4a447a4287ac652aa4b9adc796e"}, + {file = "pywin32-303-cp37-cp37m-win_amd64.whl", hash = "sha256:c268040769b48a13367221fced6d4232ed52f044ffafeda247bd9d2c6bdc29ca"}, + {file = "pywin32-303-cp38-cp38-win32.whl", hash = "sha256:5f9ec054f5a46a0f4dfd72af2ce1372f3d5a6e4052af20b858aa7df2df7d355b"}, + {file = "pywin32-303-cp38-cp38-win_amd64.whl", hash = "sha256:793bf74fce164bcffd9d57bb13c2c15d56e43c9542a7b9687b4fccf8f8a41aba"}, + {file = "pywin32-303-cp39-cp39-win32.whl", hash = "sha256:7d3271c98434617a11921c5ccf74615794d97b079e22ed7773790822735cc352"}, + {file = "pywin32-303-cp39-cp39-win_amd64.whl", hash = "sha256:79cbb862c11b9af19bcb682891c1b91942ec2ff7de8151e2aea2e175899cda34"}, +] +pywin32-ctypes = [ + {file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"}, + {file = "pywin32_ctypes-0.2.0-py2.py3-none-any.whl", hash = "sha256:9dc2d991b3479cc2df15930958b674a48a227d5361d413827a4cfd0b5876fc98"}, +] +requests = [ + {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"}, + {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"}, +] +scipy = [ + {file = "scipy-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:87b01c7d5761e8a266a0fbdb9d88dcba0910d63c1c671bdb4d99d29f469e9e03"}, + {file = "scipy-1.8.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:ae3e327da323d82e918e593460e23babdce40d7ab21490ddf9fc06dec6b91a18"}, + {file = "scipy-1.8.0-cp310-cp310-macosx_12_0_universal2.macosx_10_9_x86_64.whl", hash = "sha256:16e09ef68b352d73befa8bcaf3ebe25d3941fe1a58c82909d5589856e6bc8174"}, + {file = "scipy-1.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c17a1878d00a5dd2797ccd73623ceca9d02375328f6218ee6d921e1325e61aff"}, + {file = "scipy-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:937d28722f13302febde29847bbe554b89073fbb924a30475e5ed7b028898b5f"}, + {file = "scipy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:8f4d059a97b29c91afad46b1737274cb282357a305a80bdd9e8adf3b0ca6a3f0"}, + {file = "scipy-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:38aa39b6724cb65271e469013aeb6f2ce66fd44f093e241c28a9c6bc64fd79ed"}, + {file = "scipy-1.8.0-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:559a8a4c03a5ba9fe3232f39ed24f86457e4f3f6c0abbeae1fb945029f092720"}, + {file = "scipy-1.8.0-cp38-cp38-macosx_12_0_universal2.macosx_10_9_x86_64.whl", hash = "sha256:f4a6d3b9f9797eb2d43938ac2c5d96d02aed17ef170c8b38f11798717523ddba"}, + {file = "scipy-1.8.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:92b2c2af4183ed09afb595709a8ef5783b2baf7f41e26ece24e1329c109691a7"}, + {file = "scipy-1.8.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a279e27c7f4566ef18bab1b1e2c37d168e365080974758d107e7d237d3f0f484"}, + {file = "scipy-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad5be4039147c808e64f99c0e8a9641eb5d2fa079ff5894dcd8240e94e347af4"}, + {file = "scipy-1.8.0-cp38-cp38-win32.whl", hash = "sha256:3d9dd6c8b93a22bf9a3a52d1327aca7e092b1299fb3afc4f89e8eba381be7b59"}, + {file = "scipy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:5e73343c5e0d413c1f937302b2e04fb07872f5843041bcfd50699aef6e95e399"}, + {file = "scipy-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:de2e80ee1d925984c2504812a310841c241791c5279352be4707cdcd7c255039"}, + {file = "scipy-1.8.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:c2bae431d127bf0b1da81fc24e4bba0a84d058e3a96b9dd6475dfcb3c5e8761e"}, + {file = "scipy-1.8.0-cp39-cp39-macosx_12_0_universal2.macosx_10_9_x86_64.whl", hash = "sha256:723b9f878095ed994756fa4ee3060c450e2db0139c5ba248ee3f9628bd64e735"}, + {file = "scipy-1.8.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:011d4386b53b933142f58a652aa0f149c9b9242abd4f900b9f4ea5fbafc86b89"}, + {file = "scipy-1.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6f0cd9c0bd374ef834ee1e0f0999678d49dcc400ea6209113d81528958f97c7"}, + {file = "scipy-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3720d0124aced49f6f2198a6900304411dbbeed12f56951d7c66ebef05e3df6"}, + {file = "scipy-1.8.0-cp39-cp39-win32.whl", hash = "sha256:3d573228c10a3a8c32b9037be982e6440e411b443a6267b067cac72f690b8d56"}, + {file = "scipy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:bb7088e89cd751acf66195d2f00cf009a1ea113f3019664032d9075b1e727b6c"}, + {file = "scipy-1.8.0.tar.gz", hash = "sha256:31d4f2d6b724bc9a98e527b5849b8a7e589bf1ea630c33aa563eda912c9ff0bd"}, +] +setuptools-scm = [ + {file = "setuptools_scm-6.4.2-py3-none-any.whl", hash = "sha256:acea13255093849de7ccb11af9e1fb8bde7067783450cee9ef7a93139bddf6d4"}, + {file = "setuptools_scm-6.4.2.tar.gz", hash = "sha256:6833ac65c6ed9711a4d5d2266f8024cfa07c533a0e55f4c12f6eff280a5a9e30"}, +] +six = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] +tenacity = [ + {file = "tenacity-8.0.1-py3-none-any.whl", hash = "sha256:f78f4ea81b0fabc06728c11dc2a8c01277bfc5181b321a4770471902e3eb844a"}, + {file = "tenacity-8.0.1.tar.gz", hash = "sha256:43242a20e3e73291a28bcbcacfd6e000b02d3857a9a9fff56b297a27afdc932f"}, +] +tomli = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] +tqdm = [ + {file = "tqdm-4.62.3-py2.py3-none-any.whl", hash = "sha256:8dd278a422499cd6b727e6ae4061c40b48fce8b76d1ccbf5d34fca9b7f925b0c"}, + {file = "tqdm-4.62.3.tar.gz", hash = "sha256:d359de7217506c9851b7869f3708d8ee53ed70a1b8edbba4dbcb47442592920d"}, +] +urllib3 = [ + {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"}, + {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"}, +] +wcwidth = [ + {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, + {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, +] diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..01548b4 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,23 @@ +[tool.poetry] +name = "Melter" +version = "0.1.0" +description = "A GUI over the MTPy module" +authors = ["Cian Hughes "] + +[tool.poetry.dependencies] +python = "3.9.10" +Kivy = "^2.0.0" +numpy = "^1.22.2" +pandas = "^1.4.0" +matplotlib = "^3.5.1" +plotly = "^5.5.0" +scipy = "^1.8.0" +tqdm = "^4.62.3" +pyinstaller = "^4.9" + +[tool.poetry.dev-dependencies] +pytest = "^5.2" + +[build-system] +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api" diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..ad4a015 --- /dev/null +++ b/setup.py @@ -0,0 +1,6 @@ +import PyInstaller.__main__ + + +PyInstaller.__main__.run([ + "spec/Melter-Desktop.spec" +]) diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_melter.py b/tests/test_melter.py new file mode 100644 index 0000000..f13794a --- /dev/null +++ b/tests/test_melter.py @@ -0,0 +1,5 @@ +from melter import __version__ + + +def test_version(): + assert __version__ == '0.1.0'