From ca40e04a909769dce10f43e8db94ea7c484b2072 Mon Sep 17 00:00:00 2001 From: Simeon Doetsch Date: Thu, 30 Sep 2021 15:41:01 +0200 Subject: [PATCH 01/41] Fixed slice bound issues --- plutoplot/grid.py | 76 ++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 62 insertions(+), 14 deletions(-) diff --git a/plutoplot/grid.py b/plutoplot/grid.py index fa628f3..a563491 100644 --- a/plutoplot/grid.py +++ b/plutoplot/grid.py @@ -166,15 +166,17 @@ def read_gridfile(self, gridfile_path: Path, coordinates: str = None) -> None: self.data_shape = tuple(reversed(dims)) if self.indexing == "ijk": + self.shape = self.dims self.rmask = tuple(slice(None) if dim > 1 else 0 for dim in self.dims) else: + self.shape = tuple(reversed(self.dims)) self.rmask = tuple(slice(None) if dim > 1 else 0 for dim in self.data_shape) self.size = np.product(self.dims) @cached_property def mesh_center(self): - """ + """n.dohrmann1300@gmail.com 2D cell center mesh in native coordinates Returns: X, Y with shape for each: (dim[1],dim[0]) @@ -254,9 +256,7 @@ def __dir__(self): class GridSlice(Grid): def __init__(self, grid: Grid, slice_): - self.slice = tuple( - s if isinstance(s, slice) else slice(s, s + 1) for s in slice_ - ) + self.slice = normalize_slice(slice_, grid.shape) self.slicer = None self.gridfile_path = None @@ -265,17 +265,14 @@ def __init__(self, grid: Grid, slice_): self.T = grid.T self.indexing = grid.indexing - sl_ind = (lambda i: i) if self.indexing == "ijk" else (lambda i: 2 - i) - self.xn = tuple(x[self.slice[sl_ind(i)]] for i, x in enumerate(grid.xn)) - self.xni = [] - for i in range(3): - stop = self.slice[sl_ind(i)].stop - step = self.slice[sl_ind(i)].step - if stop is not None: - stop += 1 if step is None else step - self.xni.append(grid.xni[i][self.slice[sl_ind(i)].start : stop : step]) + # reverse slice depending on indexing + slice_ijk = reversed(self.slice) if self.indexing == "kji" else self.slice - self.xni = tuple(self.xni) + self.xn = tuple(x[sl] for sl, x in zip(slice_ijk, grid.xn)) + self.xni = tuple( + x[sl.start : sl.stop + sl.step : sl.step] + for sl, x in zip(slice_ijk, grid.xni) + ) self.dxn = tuple(x[1:] - x[:-1] for x in self.xni) self.L = tuple(x[-1] - x[0] for x in self.xni) @@ -301,3 +298,54 @@ def __init__(self, grid: Grid, slice_): self.size = grid.size # TODO repr and str + + +def normalize_slice(slice_: tuple, shape: tuple) -> tuple: + """Check bounds of 3D slice, and preserve 3d structure of array + for 1-high direction slice + + Args: + slice_ (tuple): 3D slice, consisting of `int` and `slice` + shape (tuple): dimensions of domain + + Returns: + tuple + + Raises: + IndexError: if any of the bounds check don't work + """ + if len(slice_) != 3: + raise IndexError("Please specify 3D slice for clarity") + + newslice = [] + for dimslice, dimsize in zip(slice_, shape): + if isinstance(dimslice, slice): + if dimslice.start is None: + start = 0 + elif dimslice.start >= dimsize or dimslice.start < -dimsize: + raise IndexError("Slice out of bounds") + elif dimslice.start < 0: + start = dimsize + dimslice.start + + if dimslice.stop is None: + stop = dimsize + elif dimslice.stop > dimsize or dimslice.stop < -dimsize: + raise IndexError("Slice out of bounds") + elif dimslice.stop < 0: + stop = dimsize + dimslice.stop + + if dimslice.step is None: + step = 1 + + newslice.append(slice(start, stop, step)) + + else: + start = dimslice + if start < 0: + start = dimsize + dimslice + if not (0 <= start < dimsize): + raise IndexError("Slice out of bounds") + + newslice.append(slice(start, start + 1, 1)) + + return tuple(newslice) From 2e46a3f5761d3228423e016e02f2880d77103197 Mon Sep 17 00:00:00 2001 From: Simeon Doetsch Date: Fri, 1 Oct 2021 17:21:30 +0200 Subject: [PATCH 02/41] Setup testing with tox and pytest --- .gitignore | 1 + pyproject.toml | 3 +++ test/test_io.py | 33 --------------------------------- tox.ini | 6 ++++++ 4 files changed, 10 insertions(+), 33 deletions(-) create mode 100644 pyproject.toml delete mode 100644 test/test_io.py create mode 100644 tox.ini diff --git a/.gitignore b/.gitignore index 40cc3a0..0dfcd71 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ build/ dist/ .vscode/ test.ipynb +.tox diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..74231b9 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["setuptools", "wheel", "versioneer-518"] +build-backend = "setuptools.build_meta" diff --git a/test/test_io.py b/test/test_io.py deleted file mode 100644 index 6cfdecf..0000000 --- a/test/test_io.py +++ /dev/null @@ -1,33 +0,0 @@ -import os -import unittest - -import numpy as np -from generate_testdata import generate_gridfile - -from plutoplot.grid import Grid - - -class TestGrid(unittest.TestCase): - def setUp(self): - self.file = "gridtest.out" - self.dims = (10, 11, 12) - generate_gridfile(self.file, self.dims) - self.grid = Grid(self.file) - - def tearDown(self): - os.remove(self.file) - - def testDimensions(self): - self.assertEqual(self.dims, self.grid.dims) - self.assertEqual(self.dims, self.grid.data_shape) - - def testData(self): - for i, res in enumerate(self.dims, start=1): - x = getattr(self.grid, f"x{i}") - dx = getattr(self.grid, f"dx{i}") - np.testing.assert_array_almost_equal_nulp(x, np.arange(0.5, res, 1)) - np.testing.assert_array_almost_equal_nulp(dx, np.ones(res)) - - -if __name__ == "__main__": - unittest.main() diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..b05359a --- /dev/null +++ b/tox.ini @@ -0,0 +1,6 @@ +[tox] +envlist = py39 + +[testenv] +deps = pytest +commands = pytest From 4c9a6654be01af10794f75d4a183fcf2fcdcf4f3 Mon Sep 17 00:00:00 2001 From: Simeon Doetsch Date: Fri, 1 Oct 2021 17:22:59 +0200 Subject: [PATCH 03/41] Fix normalize_slice() and add tests --- plutoplot/grid.py | 18 +++++++------ test/test_grid.py | 64 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 8 deletions(-) create mode 100644 test/test_grid.py diff --git a/plutoplot/grid.py b/plutoplot/grid.py index a563491..17668a7 100644 --- a/plutoplot/grid.py +++ b/plutoplot/grid.py @@ -320,21 +320,23 @@ def normalize_slice(slice_: tuple, shape: tuple) -> tuple: newslice = [] for dimslice, dimsize in zip(slice_, shape): if isinstance(dimslice, slice): - if dimslice.start is None: + start, stop, step = dimslice.start, dimslice.stop, dimslice.step + + if start is None: start = 0 - elif dimslice.start >= dimsize or dimslice.start < -dimsize: + elif start >= dimsize or start < -dimsize: raise IndexError("Slice out of bounds") - elif dimslice.start < 0: + elif start < 0: start = dimsize + dimslice.start - if dimslice.stop is None: + if stop is None: stop = dimsize - elif dimslice.stop > dimsize or dimslice.stop < -dimsize: + elif stop > dimsize or stop < -dimsize: raise IndexError("Slice out of bounds") - elif dimslice.stop < 0: - stop = dimsize + dimslice.stop + elif stop < 0: + stop = dimsize + stop - if dimslice.step is None: + if step is None: step = 1 newslice.append(slice(start, stop, step)) diff --git a/test/test_grid.py b/test/test_grid.py new file mode 100644 index 0000000..75e5798 --- /dev/null +++ b/test/test_grid.py @@ -0,0 +1,64 @@ +import random + +import numpy as np +import pytest + +from plutoplot.grid import Grid, normalize_slice + +random.seed(23951305348253) + + +class TestNormaliceSlice: + @pytest.fixture + def dims(self): + return tuple(random.randint(10, 1000) for _ in range(3)) + + def test_empty(self, dims): + assert normalize_slice(np.s_[:, :, :], dims) == tuple( + slice(0, dim, 1) for dim in dims + ) + + def test_inbounds(self, dims): + starts = tuple(random.randint(0, dim) for dim in dims) + stops = tuple(random.randint(start, dim) for start, dim in zip(starts, dims)) + assert ( + normalize_slice( + np.s_[starts[0] : stops[0], starts[1] : stops[1], starts[2] : stops[2]], + dims, + ) + == tuple(slice(start, stop, 1) for start, stop in zip(starts, stops)) + ) + + def test_outofbounds(self, dims): + with pytest.raises(IndexError): + normalize_slice(np.s_[0 : dims[0] + 1, :, :], dims) + with pytest.raises(IndexError): + normalize_slice(np.s_[dims[0] :, :, :], dims) + + def test_negative(self, dims): + starts = tuple(-random.randint(0, dim - 1) for dim in dims) + stops = tuple(random.randint(start, 0) for start in starts) + + assert normalize_slice( + np.s_[starts[0] : stops[0], starts[1] : stops[1], starts[2] : stops[2]], + dims, + ) == tuple( + slice(dim + start, dim + stop, 1) + for dim, start, stop in zip(dims, starts, stops) + ) + + def test_1high_slice(self, dims): + starts = tuple(random.randint(0, dim) for dim in dims) + stops = ( + random.randint(starts[0], dims[0]), + starts[1] + 1, + random.randint(starts[2], dims[2]), + ) + + assert ( + normalize_slice( + np.s_[starts[0] : stops[0], starts[1], starts[2] : stops[2]], + dims, + ) + == tuple(slice(start, stop, 1) for start, stop in zip(starts, stops)) + ) From a32ea2f2569dbb57bffa4702aa3a7dcef7839f6b Mon Sep 17 00:00:00 2001 From: Simeon Doetsch Date: Fri, 1 Oct 2021 17:27:30 +0200 Subject: [PATCH 04/41] Added Github workflow for tox --- .github/workflows/tox.yml | 26 ++++++++++++++++++++++++++ tox.ini | 4 ++++ 2 files changed, 30 insertions(+) create mode 100644 .github/workflows/tox.yml diff --git a/.github/workflows/tox.yml b/.github/workflows/tox.yml new file mode 100644 index 0000000..da60291 --- /dev/null +++ b/.github/workflows/tox.yml @@ -0,0 +1,26 @@ +--- +name: pytest testing with tox + +on: + - push + - pull_request + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: [3.9] + + steps: + - uses: actions/checkout@v1 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install tox tox-gh-actions + - name: Test with tox + run: tox diff --git a/tox.ini b/tox.ini index b05359a..0e0dfd6 100644 --- a/tox.ini +++ b/tox.ini @@ -1,6 +1,10 @@ [tox] envlist = py39 +[gh-actions] +python = + 3.9: py39 + [testenv] deps = pytest commands = pytest From 3205350ac0615000092fc2761f43cf6731d739d3 Mon Sep 17 00:00:00 2001 From: Simeon Doetsch Date: Fri, 1 Oct 2021 17:32:08 +0200 Subject: [PATCH 05/41] Test for multiple Python versions --- .github/workflows/tox.yml | 4 ++-- tox.ini | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/tox.yml b/.github/workflows/tox.yml index da60291..8818c39 100644 --- a/.github/workflows/tox.yml +++ b/.github/workflows/tox.yml @@ -1,5 +1,5 @@ --- -name: pytest testing with tox +name: pytest with tox on: - push @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.9] + python-version: [3.6, 3.7, 3.8, 3.9] steps: - uses: actions/checkout@v1 diff --git a/tox.ini b/tox.ini index 0e0dfd6..c4e908c 100644 --- a/tox.ini +++ b/tox.ini @@ -1,8 +1,11 @@ [tox] -envlist = py39 +envlist = py36,py37,py38,py39 [gh-actions] python = + 3.6: py36 + 3.7: py37 + 3.8: py38 3.9: py39 [testenv] From f7c2e580479655abb0cd1ff8a1de03779b444c77 Mon Sep 17 00:00:00 2001 From: Simeon Doetsch Date: Fri, 1 Oct 2021 18:01:29 +0200 Subject: [PATCH 06/41] Fix lru_cache invocation for Python <3.8 --- plutoplot/coordinates.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plutoplot/coordinates.py b/plutoplot/coordinates.py index 229226b..04b141a 100644 --- a/plutoplot/coordinates.py +++ b/plutoplot/coordinates.py @@ -12,7 +12,7 @@ } -@lru_cache +@lru_cache() def mapping_grid(coordinates: str) -> Dict[str, str]: """Generate variable name mapping for specified coordinate system. @@ -38,7 +38,7 @@ def mapping_grid(coordinates: str) -> Dict[str, str]: return mapping -@lru_cache +@lru_cache() def mapping_vars(coordinates: str) -> Dict[str, str]: """Coordinate name mapping for velocity components @@ -78,7 +78,7 @@ def mapping_vars(coordinates: str) -> Dict[str, str]: } -@lru_cache +@lru_cache() def mapping_tex(coordinates: str) -> Dict[str, str]: """Coordinate and variable mapping to LaTeX math mode symbols. From 84793793431918d640c80efdab03e18fe8a7f9eb Mon Sep 17 00:00:00 2001 From: Simeon Doetsch Date: Fri, 1 Oct 2021 19:28:06 +0200 Subject: [PATCH 07/41] gh-actions: only run pull request or push on main/dev branch --- .github/workflows/tox.yml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/tox.yml b/.github/workflows/tox.yml index 8818c39..3706697 100644 --- a/.github/workflows/tox.yml +++ b/.github/workflows/tox.yml @@ -1,14 +1,18 @@ --- -name: pytest with tox +name: Unittests with tox/pytest on: - - push - - pull_request + push: + branches: + - main + - dev + pull_request: jobs: - build: + tox: runs-on: ubuntu-latest strategy: + fail-fast: false matrix: python-version: [3.6, 3.7, 3.8, 3.9] From 764a95d497b467dfcba3d840d5ba68fdb1f5fd02 Mon Sep 17 00:00:00 2001 From: Simeon Doetsch Date: Sat, 2 Oct 2021 22:29:53 +0200 Subject: [PATCH 08/41] Match SimulationSlice & PlutoDataSlice interface --- plutoplot/plutodata.py | 21 ++++----------------- plutoplot/simulation.py | 8 +++++--- 2 files changed, 9 insertions(+), 20 deletions(-) diff --git a/plutoplot/plutodata.py b/plutoplot/plutodata.py index 58d800b..6b350f5 100644 --- a/plutoplot/plutodata.py +++ b/plutoplot/plutodata.py @@ -46,9 +46,7 @@ def __init__( self._data = {} self.slicer = Slicer( - lambda slice_: PlutoDataSlice( - self, - ) + lambda slice_: PlutoDataSlice(self, self.grid.slicer[slice_]) ) def __getattr__(self, attr: str): @@ -253,7 +251,7 @@ def __dir__(self) -> list: class PlutoDataSlice(PlutoData): - def __init__(self, parent: PlutoData, *, sliced_grid: Grid = None, slice_=None): + def __init__(self, parent: PlutoData, sliced_grid: Grid = None): self.parent = parent self.n = parent.n self.metadata = parent.metadata @@ -265,20 +263,9 @@ def __init__(self, parent: PlutoData, *, sliced_grid: Grid = None, slice_=None): parent.metadata.nstep[self.n], ) - self.slicer = None + self.grid = sliced_grid - if sliced_grid is not None and slice_ is None: - self.grid = sliced_grid - elif slice_ is not None and sliced_grid is None: - self.grid = self.parent.slicer[slice_] - elif sliced_grid is not None and slice_ is not None: - raise RuntimeError( - "PlutoDataSlice: Only one of sliced_grid or slice_ can be set" - ) - else: - raise RuntimeError( - "PlutoDataSlice: Either sliced_grid or slice_ must be set" - ) + self.slicer = None def __getitem__(self, var: str) -> np.memmap: return self.parent[var][self.grid.slice] diff --git a/plutoplot/simulation.py b/plutoplot/simulation.py index 4b94971..1c97853 100644 --- a/plutoplot/simulation.py +++ b/plutoplot/simulation.py @@ -85,7 +85,9 @@ def __init__( self.grid = Grid(self.data_path / "grid.out", coordinates, indexing=indexing) # slicer - self.slicer = Slicer(lambda slice_: SimulationSlice(self, slice_)) + self.slicer = Slicer( + lambda slice_: SimulationSlice(self, self.grid.slicer[slice_]) + ) # PlutoData cache self._data = {} @@ -404,14 +406,14 @@ def __repr__(self) -> str: class SimulationSlice(Simulation): - def __init__(self, parent, slice_): + def __init__(self, parent, sliced_grid): self.parent = parent self.path = self.parent.path self.data_path = self.parent.data_path self.format = self.parent.format self.metadata = self.parent.metadata - self.grid = self.parent.grid.slicer[slice_] + self.grid = sliced_grid self.slicer = None From 97b0c3b80a95e2c2ea8a25e44524623dc89910a6 Mon Sep 17 00:00:00 2001 From: Simeon Doetsch Date: Sat, 2 Oct 2021 23:22:53 +0200 Subject: [PATCH 09/41] Plotting function cleanup --- plutoplot/plotting.py | 23 +++++++++++++---------- plutoplot/plutodata.py | 2 -- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/plutoplot/plotting.py b/plutoplot/plotting.py index 39210e6..a29599f 100644 --- a/plutoplot/plotting.py +++ b/plutoplot/plotting.py @@ -3,24 +3,27 @@ from matplotlib.ticker import ScalarFormatter from mpl_toolkits.axes_grid1 import make_axes_locatable -from .grid import Grid +from .grid import Grid, GridSlice def plot( data: np.ndarray, grid: Grid, + *, ax=None, label: str = None, figsize=None, cbar=True, - vmin=None, - vmax=None, - cmap=None, projection: bool = True, - **pcolormesh_kwargs, + **mpl_kwargs, ) -> None: """Simple colorplot for 2-dim data""" + if data.shape != grid.shape and not ( + isinstance(grid, GridSlice) and data.shape == grid.shape + ): + raise RuntimeError("Plotting: Grid shape not compatible with data") + if len(grid.rdims) == 1: if ax is None: if figsize is None: @@ -31,7 +34,7 @@ def plot( ax.set_ylabel(label) ax.grid() - ax.plot(grid.xn[grid.rdims_ind[0]], data[grid.rmask], label=label) + ax.plot(grid.xn[grid.rdims_ind[0]], data[grid.rmask], label=label, **mpl_kwargs) elif len(grid.rdims) == 2: if projection: @@ -58,17 +61,17 @@ def plot( ax.set_xlabel(f"${xlabel}$") ax.set_ylabel(f"${ylabel}$") - im = ax.pcolormesh( - X, Y, data[grid.rmask], vmin=vmin, vmax=vmax, cmap=cmap, **pcolormesh_kwargs - ) + im = ax.pcolormesh(X, Y, data[grid.rmask], **mpl_kwargs) ax.set_aspect(1) if cbar: formatter = ScalarFormatter() formatter.set_powerlimits((-2, 2)) divider = make_axes_locatable(ax) - cax = divider.append_axes("right", size="10%", pad=0.05) + cax = divider.append_axes("right", size=0.05, pad=0.05) plt.colorbar(im, label=label, format=formatter, cax=cax) + # plt.colorbar(im, label=label, format=formatter, ax=ax, pad=0.05) + elif len(grid.rdims) == 3: raise NotImplementedError("3D plotting not supported (yet)") diff --git a/plutoplot/plutodata.py b/plutoplot/plutodata.py index 6b350f5..919284e 100644 --- a/plutoplot/plutodata.py +++ b/plutoplot/plutodata.py @@ -198,8 +198,6 @@ def plot( self, var: str, grid=None, label: str = None, show_title: bool = True, **kwargs ): """TODO""" - if var is None: - var = self.vars[0] if isinstance(var, str): varname = var var = getattr(self, var) From 5a0b054197e1af9360d49db2953669263b12280a Mon Sep 17 00:00:00 2001 From: Simeon Doetsch Date: Sun, 3 Oct 2021 12:55:22 +0200 Subject: [PATCH 10/41] Update setup.cfg for distribution on Pypi --- setup.cfg | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/setup.cfg b/setup.cfg index 9b2692c..3320b7c 100644 --- a/setup.cfg +++ b/setup.cfg @@ -2,23 +2,36 @@ name = plutoplot author = Simeon Doetsch author_email = science@simske.com -url = https://gitlab.com/simske/plutoplot +description = PLUTO code data lodaing and plotting for Python +url = https://github.com/Simske/plutoplot +long_description = file: README.md +long_description_content_type = text/markdown +project_urls = + Bug Tracker = https://github.com/Simske/plutoplot/issues +classifiers = + Programming Language :: Python :: 3 :: Only + Operating System :: OS Independent + License :: OSI Approved :: GNU General Public License v3 (GPLv3) + Development Status :: 4 - Beta + Topic :: Scientific/Engineering :: Physics + Topic :: Scientific/Engineering :: Astronomy [options] packages = plutoplot +python_requires = >=3.6 install_requires = numpy matplotlib +[options.extras_require] +interactive = ipywidgets +hdf5 = h5py + [options.entry_points] console_scripts = pluto-format-ini = plutoplot.scripts:format_ini pluto-info = plutoplot.info:main -[options.extras_require] -interactive = ipywidgets -hdf5 = h5py - [versioneer] VCS = git style = pep440 From a8d69cedafe4fdbf340c9fd6be21c46f6e399e37 Mon Sep 17 00:00:00 2001 From: Simeon Doetsch Date: Sun, 3 Oct 2021 13:20:46 +0200 Subject: [PATCH 11/41] README: cleanup outdated and added badges --- README.md | 124 +++++++++--------------------------------------------- 1 file changed, 19 insertions(+), 105 deletions(-) diff --git a/README.md b/README.md index 7f1e345..a530211 100644 --- a/README.md +++ b/README.md @@ -1,114 +1,28 @@ -# plutoplot - Plutocode Plotting library +# plutoplot - Plutocode data loading and plotting library +![PyPI](https://img.shields.io/pypi/v/plutoplot) +[![pre-commit](https://github.com/Simske/plutoplot/actions/workflows/pre-commit.yml/badge.svg)](https://github.com/Simske/plutoplot/actions/workflows/pre-commit.yml) +![License](https://img.shields.io/github/license/simske/plutoplot) +[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) +[![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336)](https://pycqa.github.io/isort/) -This is a Python 3 library for plotting output data from the [PLUTO code](http://plutocode.ph.unito.it/) -This library is under development and mostly specialized on the functionality I personally need. Nonetheless I will try to make the code as widely applicable and documented as possible. ## Requirements -``` -Python >=3.6 -numpy -matplotlib -``` +- Python >= 3.6 +- `numpy` +- `matplotlib` -## Installation -Install it with pip: -``` -pip install git+https://gitlab.mpcdf.mpg.de/sdoetsch/plutoplot.git -``` - -Or download repository (as archive or with git) -``` -python setup.py install -``` - -If you downloaded via git and want to keep updating via git, you can also use -``` -python setup.py develop -``` -This way the package is always read in from the git directory. - -## Example -```python -import plutoplot as pp - -sim = pp.Simulation("path_to_simulation") -print(sim.grid) - -# Access to grid coordinates -sim.x1 -sim.vx1 - -# Access to simulation steps -sim[3].rho +Optional requirements: +- interactive plotting: + - `ipywidgets` +- reading "dbl.h5" and "flt.h5" formats: + - `h5py` -# time evolution of mean pressure -mean_prs = sim.reduce(lambda D : D.prs.mean()) -``` - -## Concepts -`plutoplot` offers three main classes for handling simulation data: - - `Simulation`: for a simulation - - `PlutoData`: for a single simulation data frame - - `Grid`: for the PLUTO domain grid - -For data loading the user only has to instantiate a `Simulation`, the grid -and the `PlutoData` objects are created from the `Simulation` when needed. -`PlutoData` uses lazy loading for the actual data, which means the data is -loaded when is first needed, not on object instantiation. -Each variable is loaded seperately (independent of PLUTO save format), -e.g. when only density is needed, pressure is never put into memory. - -## Simulation instantiation -A `Simulation` can be instantiated with: -```python -Simulation(sim_dir='', format=None, coordinates=None) -``` -- `sim_dir`: Simulation directory (directory with `pluto.ini` and `definitions.h`). - plutoplot searchs for the gridfile and simulation data first in `sim_dir`, - then in `sim_dir/data`, and then looks up the data directory in `pluto.ini`. - Default: Current working directory -- `format`: file format of the simulation data, currently supports `dbl`, `flt`, `vtk` - in both `single_file` and `multiple_files` mode. - Default: `dbl`, `flt`, `vtk`, are tried in that order -- `coordinates`: coordinate system of the simulation grid. - Supports `cartesian`, `spherical`, `polar`, `cylindrical`. - Only necessary for projecting the grind into a cartesian system (e.g. for plotting). - Default: Read coordinate system from `definitions.h`, using `cartesian` as fallback - -## Access `pluto.ini` and `definitions.h` -`plutoplot` can load the PLUTO configuration files: -```python -sim = Simulation('sim_dir') -sim.ini['section']['option'] -sim.definitions['options'] -``` -The returned objects for `pluto.ini` (`Pluto_ini`) and `definitions.h` (`Definitions_H`) -are thin wrappers around `OrderedDict`s. - -## Data access -The simulation steps can be optained from the `Simulation` object with the subscript syntax: -```python -sim = Simulation('sim_dir') -initial = sim[0] -last = sim[-1] -``` -It supports the Python conventions for indexing (zero indexed, negative numbers -are handled as `len(sim)-i`) +## Installation -Which variables are saved by PLUTO are accesible with -```python -sim.vars -# or -sim[i].vars -# e.g. ['rho', 'vx1', 'vx2', 'vx3', 'prs'] -``` +## Quick Start -The variable names in this list can be then accessed from the `PlutoData` objects: -```python -sim[0].rho -sim[-1].vx1 -``` -The data is then returned as Numpy arrays, and can be used as usual. +## Contributing -## Plotting +## License +GPLv3 From ad770ae7aff0bb5d8ed722230984d12fd9e2bab6 Mon Sep 17 00:00:00 2001 From: Simeon Doetsch Date: Sun, 3 Oct 2021 13:23:34 +0200 Subject: [PATCH 12/41] rename testing workflow for badge --- .github/workflows/tox.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tox.yml b/.github/workflows/tox.yml index 3706697..f72ae2a 100644 --- a/.github/workflows/tox.yml +++ b/.github/workflows/tox.yml @@ -1,5 +1,5 @@ --- -name: Unittests with tox/pytest +name: testing on: push: From c139e11ddb039eb96840d8730da9f521424c82c3 Mon Sep 17 00:00:00 2001 From: Simeon Doetsch Date: Sun, 3 Oct 2021 13:25:02 +0200 Subject: [PATCH 13/41] add testing badge --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a530211..b5f9d9a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # plutoplot - Plutocode data loading and plotting library ![PyPI](https://img.shields.io/pypi/v/plutoplot) [![pre-commit](https://github.com/Simske/plutoplot/actions/workflows/pre-commit.yml/badge.svg)](https://github.com/Simske/plutoplot/actions/workflows/pre-commit.yml) +[![testing](https://github.com/Simske/plutoplot/actions/workflows/tox.yml/badge.svg)](https://github.com/Simske/plutoplot/actions/workflows/tox.yml) ![License](https://img.shields.io/github/license/simske/plutoplot) [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) [![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336)](https://pycqa.github.io/isort/) From 46cebeddbb86ffbbfa643f004a182c03a69c7ce6 Mon Sep 17 00:00:00 2001 From: Simeon Doetsch Date: Sun, 3 Oct 2021 15:14:13 +0200 Subject: [PATCH 14/41] Setup mkdocs --- .readthedocs.yaml | 11 +++++++++++ README.md | 1 + docs/.gitignore | 1 + docs/docs/index.md | 3 +++ docs/mkdocs.yml | 8 ++++++++ docs/requirements.txt | 2 ++ 6 files changed, 26 insertions(+) create mode 100644 .readthedocs.yaml create mode 100644 docs/.gitignore create mode 100644 docs/docs/index.md create mode 100644 docs/mkdocs.yml create mode 100644 docs/requirements.txt diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 0000000..330c39f --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,11 @@ +version: 2 + +mkdocs: + configuration: docs/mkdocs.yml + +python: + version: "3.8" + install: + - method: pip + path: . + - requirements: docs/requirements.txt diff --git a/README.md b/README.md index b5f9d9a..12b8a06 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # plutoplot - Plutocode data loading and plotting library ![PyPI](https://img.shields.io/pypi/v/plutoplot) +[![Documentation](https://readthedocs.org/projects/plutoplot/badge/?version=latest)](https://plutoplot.readthedocs.io/en/latest/?badge=latest) [![pre-commit](https://github.com/Simske/plutoplot/actions/workflows/pre-commit.yml/badge.svg)](https://github.com/Simske/plutoplot/actions/workflows/pre-commit.yml) [![testing](https://github.com/Simske/plutoplot/actions/workflows/tox.yml/badge.svg)](https://github.com/Simske/plutoplot/actions/workflows/tox.yml) ![License](https://img.shields.io/github/license/simske/plutoplot) diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..45ddf0a --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1 @@ +site/ diff --git a/docs/docs/index.md b/docs/docs/index.md new file mode 100644 index 0000000..9588da4 --- /dev/null +++ b/docs/docs/index.md @@ -0,0 +1,3 @@ +# Home + +Documentation for the PLUTO code Python library diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml new file mode 100644 index 0000000..6cc69fb --- /dev/null +++ b/docs/mkdocs.yml @@ -0,0 +1,8 @@ +site_name: plutoplot Documentation + +theme: + name: material + +plugins: + - search +# - mkdocstrings diff --git a/docs/requirements.txt b/docs/requirements.txt new file mode 100644 index 0000000..e89e086 --- /dev/null +++ b/docs/requirements.txt @@ -0,0 +1,2 @@ +mkdocs-material +mkdocstrings From 9116f64bf6d048fce0abc2bc1ee1e6462f01f5b6 Mon Sep 17 00:00:00 2001 From: Simeon Doetsch Date: Mon, 4 Oct 2021 12:51:52 +0200 Subject: [PATCH 15/41] pluto-info: don't show path to data dir --- plutoplot/info.py | 1 - 1 file changed, 1 deletion(-) diff --git a/plutoplot/info.py b/plutoplot/info.py index a90cb47..5c24f3f 100644 --- a/plutoplot/info.py +++ b/plutoplot/info.py @@ -34,7 +34,6 @@ def info(simulationpath): sim = sims[0] output = ( f"PLUTO simulation at '{sim.path}'\n" - f"Data directory at '$SIM_DIR/{sim.data_path.relative_to(sim.path)}'\n" f"{sim.grid.coordinates.capitalize()} grid with dimensions {sim.dims}\n" f"Domain: x1: {sim.x1i[0]:.2e} .. {sim.x1i[-1]:.2e} (Lx1 = {sim.Lx1:.2e})\n" f" x2: {sim.x2i[0]:.2e} .. {sim.x2i[-1]:.2e} (Lx2 = {sim.Lx2:.2e})\n" From 1d61b4b895f860825d0edd6051bd2e9618628bea Mon Sep 17 00:00:00 2001 From: Simeon Doetsch Date: Mon, 4 Oct 2021 15:24:52 +0200 Subject: [PATCH 16/41] Updated README with quick start --- README.md | 158 +++++++++++++++++- docs/docs/img/quick_start_iplot.gif | Bin 0 -> 116006 bytes .../img/quick_start_plot_not-projected.png | Bin 0 -> 23938 bytes docs/docs/img/quick_start_plot_projected.png | Bin 0 -> 70711 bytes 4 files changed, 149 insertions(+), 9 deletions(-) create mode 100644 docs/docs/img/quick_start_iplot.gif create mode 100644 docs/docs/img/quick_start_plot_not-projected.png create mode 100644 docs/docs/img/quick_start_plot_projected.png diff --git a/README.md b/README.md index 12b8a06..3b8edf3 100644 --- a/README.md +++ b/README.md @@ -7,24 +7,164 @@ [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) [![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336)](https://pycqa.github.io/isort/) +`plutoplot` is a Python package for loading, analyzing and plotting data from the [astrophysical gas dynamics simulation code PLUTO](http://plutocode.ph.unito.it/). +By handling simulations as a whole and loading data only when needed (lazy loading), it is fast and easy to use. +It features: +- Loading on data actually needed (by lazy loading in memory mapping) +- easy slicing into large datasets (e.g. plotting 2D slice of 3D dataset) +- plotting non-cartesian coordinates projected into cartesian space +- interactive plotting in Jupyter Notebooks +- CLI tool to quickly acquire information about simulations +- Access to parameters set in `definitions.h` and `pluto.ini` +- Access to simulation metadata and grid properties +- Indexing with `ijk` (like `pyPLUTO`) and `kji` (like PLUTO internally) schemes -## Requirements -- Python >= 3.6 -- `numpy` -- `matplotlib` +There is currently no support for: +- Particles +- Adaptive grids (AMR) +- 3D plotting (only plotting 2D slices of 3D data is supported.) -Optional requirements: -- interactive plotting: - - `ipywidgets` -- reading "dbl.h5" and "flt.h5" formats: - - `h5py` +To get started with `plutoplot` check out the [documentation](https://plutoplot.readthedocs.io/en/latest/) and [examples](https://github.com/Simske/plutoplot/tree/main/test). ## Installation +`plutoplot` requires Python >=3.6. Make sure for installation to install in the right environment, and/or adapt the pip commands accordingly (e.g. `pip3`). + +The base version of plutoplot can be installed from Pypi with: +```bash +pip install --upgrade plutoplot +``` + +To keep the installation size small the dependencies for interactive plotting and loading of HDF5 data are declared as optional dependencies. +To install the optional dependencies use either of the following, depeding on your needs: +```bash +pip install --upgrade plutoplot[interactive] +pip install --upgrade plutoplot[hdf5] +pip install --upgrade plutoplot[interactive,hdf5] +``` + +To install the current development version from this branch: +```bash +pip install --upgrade "plutoplot @ git+https://github.com/simske/plutoplot" +``` ## Quick Start +### CLI: check simulation info +To quickly check the status of a PLUTO simulation, you can use the `pluto-info` command line tool: +```bash +pluto-info /path/to/simulation +``` +Sample: +``` +>> pluto-info test-problems/HD/Jet/01/ +PLUTO simulation at 'test-problems/HD/Jet/01' +Polar grid with dimensions (160, 1, 640) +Domain: x1: 0.00e+00 .. 1.00e+01 (Lx1 = 1.00e+01) + x2: 0.00e+00 .. 1.00e+00 (Lx2 = 1.00e+00) + x2: 0.00e+00 .. 4.00e+01 (Lx3 = 4.00e+01) +Available variables: rho vx1 vx2 vx3 prs +Data files: + Format dbl: 16 files, last time 15.0, data timestep 1.00e+00 + Format flt: 61 files, last time 15.0, data timestep 2.50e-01 + +``` +(note: depending on your Python environment, the entrypoint `pluto-info` might not be installed correctly. Check the [documentation for more details](https://plutoplot.readthedocs.io/en/latest/cli-tools)). + +### Quick start in Python scripts / Jupyter notebooks +```python +import plutoplot as pp +``` +#### Basics +Simulations can be loaded by just providing the path to the simulation directory (directory with `definitions.h` and `pluto.ini`). +The data directory is the found automatically, as well as the grid geometry. +The formats are searched in the order (dbl, flt, vtk, dbl.h5, flt.h5) and the first found loaded, this can be overriden. +```python +sim = pp.Simulation("/path/to/simulation", format="flt") +``` +The simulation object provides access to all outputs (of this format), the grid and simulation metadata. +A few examples of accesible attributes: +```python +sim.dims # domain resolution +sim.x1, sim.x2, sim.x3 # cell centered coordinates, redirect to sim.grid.x{1,2,3} +sim.x1i, sim.x2i, sim.x3i # cell interface coordinates +sim.Lx1, sim.Lx2, sim.Lx3 + +sim.t # simulation output times +sim.vars # simulation output variables +``` + +The data at the specific output steps can be accessed with the `sim[n]` syntax. +This results in a `PlutoData` object, which can be used to access the data: +```python +sim[-1].rho +``` +The data object as well as the data array are generated when needed, and the data arrays are memory mapped, which means only data actually accessed is read from disk. +The names of the data variables can be found with `sim.vars`. + +Be aware that data arrays are always 3-dimensional, even if the domain has a resolution of 1 in some directions. +This is for clarity and consistency, so that an axis always has a direct correspondence to its coordinates in the grid. + +Simulations are iterable: +```python +for step in sim: + print("Total mean squared velocity at t={step.t}: ", (step.vx1**2 + step.vx2**2 + step.vx3**2).mean()) +``` +And also provide a `reduce()` function to run over the whole simulation: +```python +prs_mean = sim.reduce(lambda step: step.prs.mean()) +``` +This results in an array containing the output of the supplied function for each step, in the example the mean pressure. + +#### Working with simulation slices +To only look at a part of a simulation we can slice into it. +This can be particularly useful for analyzing and plotting 2D slices of 3D data, as full 3D plotting is not supported yet. +To slice into a simulation the usual slicing syntax on `Simulation.slicer`: +```python +sliced_sim = sim.slicer[:,0,32:64] +``` +This sliced simulation object can now be used as the normal simulation object. +The grid and data arrays will automatically return the data for this slice. +(Note: for clarity a 3D slice is always required. The data arrays will still always be 3D, see above). + +#### Plotting +`plutoplot` provides automatic plotting for 1D & 2D simulations. +To plot slices of 3D simulations, first create a simulation slice (section above), then just follow normally. + +The PlutoData object provides a `plot()` function, which will automatically project the data onto a cartesian grid, and annotating the axes and colorbar correctly: +```python +sim[-1].plot('rho') +``` +![Density plot](docs/docs/img/quick_start_plot_projected.png) + +The projection can also be turned off, an arbitrary options which will be passed to matplotlib can be given: +```python +sim[-1].plot('rho', projection=False) +``` +![Density plot](docs/docs/img/quick_start_plot_not-projected.png) + +If a plot of a custom quantitity is needed, a array instead of a variable name can be given: +``` +step = sim[-1] +step.plot(step.prs / step.rho, label="T") +``` + +In Jupyter Notebooks interactive plotting can be used to step through the simulation steps. +`Simulation.iplot()` has the same interface as `PlutoData.plot()`, but it will show a slider to step through simulation steps: +``` +sim.iplot("rho") +``` +![Interactive plot](docs/docs/img/quick_start_iplot.gif) + +## Testing +The test suite for `plutoplot` can be found in `test/` and is run by Github actions using `tox` and `pytest`. + +The test suite is currently minimal and has low code coverage. It will be expanded in the future to ensure correctness. ## Contributing +If you have any questions, suggestions or find a bug, feel free to open an [issue](https://github.com/Simske/plutoplot/issues) +or [Pull Request](https://github.com/Simske/plutoplot/pulls), I am happy to accept contributions to make plutoplot better. + +`plutoplot` uses [pre-commit](https://pre-commit.com/) to ensure a consistend code style, please use it when opening a Pull Request. ## License GPLv3 diff --git a/docs/docs/img/quick_start_iplot.gif b/docs/docs/img/quick_start_iplot.gif new file mode 100644 index 0000000000000000000000000000000000000000..18d383a67d10d18f8ba05bf2a2dc7958a448c344 GIT binary patch literal 116006 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 KqM}Pc0029wgvsmx literal 0 HcmV?d00001 diff --git a/docs/docs/img/quick_start_plot_not-projected.png b/docs/docs/img/quick_start_plot_not-projected.png new file mode 100644 index 0000000000000000000000000000000000000000..dc12a93141bdd602de640f2e9666c80dc22ce2ba GIT binary patch literal 23938 zcmaI7Wmr_*8#g*bH`1lFL&MM_NDn!HbR#WY(m6^9L(dRHD_w%L2vSN6q0%WJAS%s> z0!qBw=Xw6`Ip@pyz{Pbjd$VWlwbp(AY9-y**Q6w4B?Ey#l-gSAMj#NF83e+!BOwC* z;`@-*9{42}2(t(@_H_*maR_h$={W@YdHDu473l&jrRbINkPQ09(;E@O@;J2|Z+eF#ShLH$`uR7fh0_t2+v#m{tDcRk z5vK==Z@Nxbzn<3YM0B10Ioa%pIply5AWQje?SrGh$kG%h1}L&LFoBF2W_VYPFr}2g z=sBK-Vb=Tm;4*%lht&u}`U**tK8hQt7;T(1+nx8z+N)|f#8y|X*B=`c2j{skR*COi zslM4xE)O0O1s?Ut=mxD5f)3XDKC|N;8GtTCKvlrCqM)ZBJCb#2P;|-GL-nnmoZW0X z5@~eEos38p#0T&Kz8_&97{P=bxxfrx@_~HlGkYJjTnQuiK#{qLk&9w~m_S!X>Z_ez zm;McUEHWP4lq57^puTIo^(gKDef44{awb%-Cayp_eNBF-=9&y4OhWzPA*j3gOZb<# zQpnU%s5By?&Ma{xJuvY7BTz9s=N{>L(K(t0gD-)4Uv~U5vyV{}kK`iu6k{RcUs+B{KSFYZrA(+vFA! zbfcXirsrD_L+eI6wgc_Fd=eBX!T3S@6vRn~pZEJ~!ZQX;?6`Mv_>}+Wr{bD;kK7#6R!HxNam3Eql2A(=`BAa|PFA>!=f&$) zAEe54w?qE1KQ#!$Y%deL_W=Z2l&n|I=iwb8dD>Oqj4?2s$ z!8#*XGaMeXI#%f6DD;hc*f9wcLNW7w5b z{8&a;amUkjby`{@3G6he!na4(`f^h<=Yz~ zCl7_@8gwp!*X+cbr?SMy+lIyLGzGd_;iQiKitlYQNbTRG&leXvl(NEoC!s;q+ELJ= z_yn`Z`k`@SRvvBH19K`%3%I+Pybp+ycRx#{yBtJ8H5s$Cds6R74?6EuOhnp=^-=87 zt9HSg`OS(IY1t_a zb`ri&z7XFp77_v~_dSdKSI7VgA})KprW-V4Q@$Dg5Z||AZ>V!j^z#?l#B@8{)vAN? z$?q_Y6f;4M@#VgZ5f$$nm^E%NKcaWPj|b6+dufM)ch6WzHii69S9N$U*oDWHd|x`X z?wO5gEGfg1A8Se;`QCW1n6c`wR#ELm#aN&qOArw#SF*yd{q{`;Y#)r~b?g0kVO02v z>bSqIwmh>zvol)Y%xPe)9SK37wl}?plU)hoFBltsE-Up)S|w+Gn_tZC-sH3u`#rU0 zMqM!S33}el#Hxc{qW>luZokcVgCoB(~rAS%)N0Udm2c;UWV& z#n5HfqDN+d4=uD_|JYZ~)b7$UI&r=KF21&91iQP7g0dZGDryjXRKVC8=ADdI`L)EXfY;~2h%JJ?u8ZI1pitex9=3-Cc-yoHU2Yud_3tP@ zysEfF8~RLZ^{pJ^`Jx6TtBtJ*$uRiuL*mx7YtiPC# zpvi0mp9x|QkCLy55MojXCJgsR(}yFcJo&@-ykw@3O7Efk>0w*G`SP*|;Te+Sxe>f2xzul%z@j{K%*@=#{ zL9*z`nhs8%)8$~DMqR=j8r7LF)1MYGVqq0Qu`=|s#0C-xdCq@yra5IRJ^(L19slem zHsZ3mg!sr2bR$z9yh6GD6s!PRm*{3wRo~`aqgsCpf`ATaGylBqSyv%vhOyjz@+&Nh z8#inbz{WrWKAM)^JxHKawsz{ns~o8w^L-D$I>hgKoijq*azyznJ{?0bplU`mjv$2F zD8L){pCY$zx&Dy36U;V7h-%XEl#bOQ)KQeIS=ke#er^D%D^Xj#<9#8f2J>|QFy+v? z6eci`^v3D-&#{6h61Oz2tWW=VPw5*`y5&LWTC-dAv5bEt(9K2+?Ua*^G_ndi@(tfl zL!~jR zAg5SjKicmIL_+DD>fX+b`B167HZ;#Bi*xaJ^<62Z^P8v|&_Y8Q2}M7@m)=3rp3u9* zQdsw$t>u&}VqV2BYpV#`zsbmZX#=~pBn|q~;nJ+ZM&eSI@(Ei9K>;9o(vuRBy-RLb znt@Fo9jutQO{ikCG*_#ZwB8xV)M{shl@_r%ZP@YtsU~VMCQz5z_!9}h2p<0o-d68# zKYU$`U$E_D@S8YauD7o@H?@}*^oqJfPoM{|mX`p?;hO5Grh zQ#7%3P~i~$fNRpR-c)hYT!@ms@ejWw4bpcsb*8LoLPeV>@}au^lv6QddY7*NG!e+; zU1Dg{TBu>9voZ=;&d&1RpDe!#qg_KiwwzfW=xg&NiE`LOb?WNyxzX1&Y8}T2EH-f0 z7sZ~KpoeM}Kl|w=}TX{S+WUbx%d*6MnD3QKW zEZynXHvZig9^CskhP19!R;g2_rP*W2a%I$NRmVd<&qgbtP`9#IWD%3QudssYEs`Z5w z^bXiKNsNJ{myR}*!}WN$<1<}l5zG>|NVYEc55sfD3o4(@fL2~4vfrAv zepE-_(+;a%qIM7pnjnv6E;4=Lg;8+>z>911>S{&WhjjvY5Pj0%H&mnpE@rl=``0v! zXQZ#y&&?N3&*l7Kv~~(cjDC0PAxi?c#P5L7=rl2HczI>P!25)kgyiMB^?zEuI47QJ z6B=Ih26rqAI&pN%toFhUvx+2bC?QYq7Fg*7#3FCLrOYGBFhx7uAB`1&W#ZU}k|1SX z4DuTa7!?wXk#x|kud-1=^;5mxuAbsbmO1AyBy^9-7%Qv+NSDLyC&E@MSQ~P=iT%*4 z9>239Mz?LIyZG6&Oh2M4x>29gsS(C{_@I)1^!;}Lv@YE-5TxDLD71Qc*ZtL9>8b&5 z4ax9q%IOF&oiVLUjkGhHD^Kbmmb_KA(?}3!&p6&J1;0g*rbkH2l>22jMW4?C4Av}i ztNN!vi1SlcCViwM@>}fje_KPRVpA>0I!?fd`RE6%?v{ zlN6T|6&CVd@YcS}WErg7d5Yd)=PZ03&T(s?(klZPYsIVl(*T|hXAPq-Qct*?EZE)F za)9T1%Cc6j-sS$7U<{D{-H)D>mFEdoJrUEgSE7u(*S@jdLZCW~LFb&KuH_r@;bd}- zwsn8<`@=aWMWx?OvL<#X%8ed&iASde>2*1A=w$!s5ag)*9*S%xdNT*$>OGR7{n+ns z5ZaoUi5t=#psnfhm}-_3&1&sK;``dEagj8!=T@o&`LPXRx)MRj&EwV;-LD z$k+H@Yv*SFt17bp)iKrB8lEDPCl;~p)heuBCLeEDI0;YT$t3aWCHziE0drfcOhCez z5FFs6#KcJR!QUnLM5BDZwcwC)TD@RES8a@5Et#{e|Z?{Bpl%W{}*Z&V#+X29u&5xHc#CJ*)ks7zpzPlmB_3dHxl1iw&$ytIIw+CyyJK!?@hd zCR%t)EaFCAoq2bwQ`x^epMvwZOL{%%8c zcH5AL(=%uC7O-Yh zk#YLXlumn5cvHj>KOf{wtvWKO(PU{KPvm_-tHz(F zgmO$x`C^v^3-kqa2(ABAdc9t#RroUb;a>Y-S$7ltlS;9H%AsDa6Nx`Cqh8G*V{U1v z?_kYUzUWJyU;PxKa9dd>(!`=};cLbX`053RI=Mdob5Q{jUecmz1{X;R{XYIt%nfjJ z=I;jxaEE90N&N2-8WE(#j#k8?fUUf5U0SdEL(lAKb8AmQN($9j@u2n?y&6!d`^`@6 z^4{3+jnd&-F0X##>8)iJC;SEx@i`J&s68bhxL!$;P`a|5Q*yeASbpAO7&t9-30tO5 zMcpyMUlbIjcI`er2UeQBXlK)H>}YpB>uqfbN6M44A4&Cu5V}(v6pIlu08Yebzocw^ z=Jdp`hQj!C5ZtX-%NjBKsAf}m74w?0aI^`lAv`l&R{%`^BcPbvFnkKYVXQi`LrvS$ z(Bp={(=Owdy|<3*`0ISx;dc-2XOdi0b+C$?sf z*cdD_8nW)(OXFEyM*}Zi@1~qAXN)U`a@X$Mq^2}J%z$a%AIC!v+|JnUf9K#~g%FO@ zQQ&cZYc5Zc53j16Y&zZza^-d3JfhS7KsX-$POoaf{Pn49Qqaxng0soWv`>{^tf)Sc zIu-9NoR$=o^5eU{WKGeD+n~ zg<mqJHl!z??f1tpQ2e!FDN(+Ket&%*(d$VZO#-VZWg)W>x(rG3$DNsRXVi*!}op+wCKXKd9otT^>91-Px3yd%0p zUdo|Ca)x-?_z7C}SJT$6*LlpumThdM4AtE@J@@`+fG0sw)RapGXr5ZJNSdeBOsz}; zc*0?mPPR%IDkW>Ke!Z2?n|_a~!B%b8IyXu0`kYyn-P6%c*x&Ldk^7nrcCS%RRHQtv zoD2%>p6D*m;yh}7da$%W^K}3qbo|IE&mk^*!2ri6&5jaTUe#wB&#BhP<}my(efrCc zTE}nJ5lwq?z!|(I(M-zX8o|#WXvbz)DlCr9%d$>w8}Eb|&e;Q6sH=laP`7A9B_sXo zrTdp+qi&OMJD6dXG;Mfz=v;=6VcMT~@&QbpV|6K_(Vws0*XPw? z!dd9~@xk+2*L6L`yw?hBFEEP!|Ln7eCswiGomovtrT)^__}g>>`RXGZJ_?Q#CM+aQ zVhqfML{9t_$4zaYJvi<;GQzTMke0swU{VI3t@m7FE_>rFLxSzn0y^~%>D@JDoHpw8 z_pq4yt`E=oZ4`AzkrwI2`BIwuetve6O3r(jWcPqRGg*jza~jlR zs$R@>{uXp4jVLg@+&{P=m*fYmD<^fN{AL+=#m1O<- zW?>!WrA%f{bt)Hfrj^AzYl2NL?54l7Ux%9krbrbBD{o2HUL`wai=pV_1Fyhw6}+dQ z6{_`E+Xn`R(wI5P2)0tKChE%f*QI!xiwt%2@~B8^glu1)aW3eB8^Hof94P`tQ}h{R z7UI9cTMwq80X;(b5+6B$=s+P!BT)qx^0j|av3TN=^w#I?bwA6MVwrp#b35t80QT1t z7~y^Cozq1@07Kl~jbRW?v28o>0fmJ4+XnsDf<%H>ZoN26?KCrT`NOMMm2>8mMP?)d zyA;;Z1#M4WwTr__O|xh5SAiv+mcjI33VQ41N*syhVaiG)T?v` zfW*Pz?{+uZP8OcZ{mi9di{yq2i0K2dP+*$;h~1*Vl7un9NA-xR`U$2g*D9{3y+x44 zYr3sDhAAwI65PS(8amQ->3AIUfJmA8)CN5VLP?-+9|yY5e^g>h>T0iTe6ZW_*h}{qJ-d07s{T6TpguN4u78XW{Ji zkuOP=PMn^(PHx|DV~2~011!&HK11fZ9rRV(yvwzv0*JL#CL`57MhD4C z`b#?Kp}R1LDMLQC4zOZQ>|)*V1-`JBWxe`tvhq3?rt&3m!oK2biX5^vh%#X-ZYu_I z9#MDT$$##2+y`5bvt`TI_owaZn=-w@+fbOjUiec;X zZT(aw8pkv=lmPZhwQ{vfj~h@&{yAgURQnP-yPW+}BK)BjQ{o*u_j=cz(?7lo_Rjw@yQIK7-mn;0&Y2Mo{&JxnRX( z8Dj&MykYo9-R#)XkM>V8ET?E1J5DOV!A08=+h@B(O%kilUEa}Z52)9Bxy~6thlEG- z+E-(NJT(8|zliyw)r~IzE^%*%*sE`GAV*TUakQWg{Id>j+-c7Kd~H_I*hG;%_vBRD z;tOk3XMsk0g%b#t?Ff3}84q)1)apmW#z z!nV!!WkNIV+M%Q}!I)f@aU#r6CdIy64%!DIfU`|OgJ!?NVyawn?miq93#vtwdZifx z6p2N`Nk(G$wtaqW&1IF_HuhK0WhC2*IM1A$>{}|w2C2AerRtCqyS`Tm#>uz3m?CgF zmjX4u6@EAk;^${afz9cqUgRtx^fi2)+kicv38+uXQLr}4jRg@JO*HS4Cd^CP+RIei ziF5d7g@l`i*CM5ApYUz`3S&k?lC_E=^{&Y5WImMovEFH!;9VV0kldZzkX* z#w1cHbh!~mv&AXYZk#r3QTOYv^SJ&hAh^nGRp5z?7kvyQJ7So$d%CO@($(`EO`Cm7 zk_?P5_3$`1+;EZGIknw(--@g#p_T|%<1&tW5cM}ZpaB%b*9pc=zL1!qfli}`a}pAn zISlecQu)~0c79Lp`yAuYXRV{}q*;(To73AL+a>%|KRE6Wbx02J01`qXiAGciTO7i2 zE>|{{+cetFsMV81gw5G(E_~|i=H){6i>ci2)bh_x@hXGZ;il43jPaC`N{WoD4AUx* zM%w2r-MTD~=xczFNh>95m$&+zH*UV^a|~0-VtPA>ckqIX_fD(tr;iQhi)68kfI3B{ zAzYxzWnT!H7DcL)`zcPbLmhZ)W$cW?2LN+WND01SP%{zR1T&Y{fJ}aiOO?1W^y%c! z*6R)i*!RC$pm&+pm@Chhk&SPto$H!3T^IS3GtapQFn(N5w~J$&gm+iQD6fMFjMIJ7 zw?j1r(&I(Qu*669uh<9ZV=t1Bw~Wzz^|U18nIE>YRhLOwmS0?YJ9IJlj5s_2%RZ;` zZF<-+#l=%12z3J+%b=|iY6xMaMbCs2hyKW&=F@#Tir6|?Rc{`+nAD1;u8ezy^q|ur zLQ$+jYNZPMS0YFDKg^l+Pg1FP>S4BQc{#Yw&+~uAyxrPq~Hab(rq6p zASf4%)_5s}f?lg}@Q1R3qtuK@ z2E-cZ2tpGkEX^LTVs>B7Tym}zk;GklwEi|&?nZh?zm)=C{FL9?jFXZ zN6PvPf28yiOtRROarZ#0pojXlct^<~R}d$62;LbX=mY+dXP|6K=R6X~z~DzO()al$ zk8lJ=y}A6mB7@Dmev5GXS~g#KgI3L&E>u8`b}MDp;bQiV(<8jc8&h7q19~3tnvbpn z&YJH@7ju{P15b7mCQpywO-6vH86lTJ1wErGeHb~Uhllsoi@ikgu}>;@!WdvIkiRAe zygaMjN{c-&?e{>Uz#(7d$3UsqrGcY~(ijy|%)(d4e%LH3`6^5BnkA|rw)?ze?O{bQ zWe_u-Wrn@q;y~2f&_UB=n(VZ{ib~dd<~X8hq=~2HR5KVfZus-++%;%0%}F(aI(HGq z^(8U+6CkW^s18>iJn-6$O)As63U#FIZ&h8(wYec(VrHm+Gxi2FNSLIc`*FzPXKV9Z z=k286=5b>5oyXw4z<2c$R73S#b<}?oNWhbf8DKi|Xrn}39Va(AYMF^lPsy4jUc;wY znl<|@+m?RSVMPfNuraJn41yiCeUkU5r~3$!?%v^B6VrItZcd{hD!t_2PF=#H~q@w)k^E_pEhrPfc7B*WbXWHaGklYdMj7mDO=6Sp0=2>{c@=}x{ik56vC zt#M(>mW9x^ym2RpvT9>~@~L}ssf}_a3eI4$`NU+`FpKuT(h_N~(}p0GEX>W*;F>N9 z%WK`L)Sqr>g~5JCCJgS`>Qx$NIZb+k(aocgFQf*qG2>Q$`mZ2b;Iu#IlzbG=lR?b`-7j?g5x@R%j{M`M~>?ys= z?GwJgi7jBykqS>c-$!yYB<}{7Wv{50X6cnzq-`8~w2kJlJnBjSCY@QR-d7Q(o;~|> z*xrkqbU8PEX2O8=(H(n+IT6R1_u*wufbL9!a*@`q|7f4{zJ`i51tzyC%P2#c;Ozce znL#iz%O&Nk?z!UMFp|>^*74EuH$l6t%*T3F>#Z5DW-H%0)QGP+(pRXN(Lw>_3|HUM z(VU;wQmA6(hnJmv6>CC=sez zdd7RB#Svq5?9L2)hX(j(w?LfeNVndrS(%#C*@k3Tg|MV~u z_6!d`O355S()RpP3TB$H-o$QjA33O-s;`&u$Q*pJ=AGVTgjpg-t(~U7Fg9o9bU3nV zB5)i?;r)FOJor0wTH#z)>Y7RjHT2ozir=%J@$`t@11hcvzqGtQ`&zeGm)HFdV2}*c zbDW-GyaQ3&(;ZCH{f)yDEz339n_p_;@YdXtMwi7(Wr)Lk!qwLT>}9k8oDR3Gwn7=s zly6NuN4^i1cE479EiM;OrxPY-xY+04OQ4&~&EOK}rPl`p?~cSlRTp7veB8YYu4^}n zeWqL)3%em4(k}y>LF=BV(f~w!lon;1;3w!t?tf>ub@ z%}{IEK595B)M-Zd*YyJV?_|&UM-vvb*;5iD>H0YOP2DSZMUf*S0GX}X)z7`zwehE4 z7^CAJWB0ols-dG-F4%-;Q8K}%8HTF2(`#L(2`=vlHh@kKv(~QWBe>2l?uY5&q--X) zmbw3;QlF zVl>sGeUrbMXGKdm{tPWJEdPKPy6>N6$N|Gkt&C=1hc(VgA;G*uqA8tIB zHXP+DD^H#yFOKG(*7AtBJO_uGcxTLWq@ImE=O3;(1v05a?=ikcZyBMJ#5}6dgLB&P zQYmzZA=ck{uyE%BlbHu&D{5S^13CvQ(QW&j)HIQ>0JXO@If|G_4OD8lSk}O7Ji2Oc zU9UX#Ze+G8%khK`oBrP%0Dz4tDtfRca8nW5Q8Z!g=@0a+ioGq$Kik7rYLYZL6EYRb z^)ka?P|BTTrf;1HORd*>th(9rG_-Mqk2(F{k=R=_G&Cq6Bs0J1@v6wdMGU>2+>!O_ zJ*?8{^cCuVIWL!j?UV;^_}Mix?Y^prQ2}y?2lRO;zx`8OLS=Ru^YJMVaQiPY5spOe zygJW<|y8XQa~Z*Z%$?h@2`0l3n;%LXGLj9m0T;~(cdZYg)jL5O( z^&x}%e;su;V{TO@QGNMkaF}^l1^$A%@~$9Ym+i#wYNeMcvbyLdjtqkoR$pQZz!#Nw z6sgwlqUP~mG4$bc zp5duzQzO@_LL!GQ{IpALUkq({=9uIe&TZjgBTDC)U|So=;cCwp?d4yrWC3>7I#i%7 z_j$ii%g*qYOx@}lU=1U8kW;ZYc0?<#>!b|RbdQ6=P1JqlwkJiwuLQ!Qco0uPd$Yoa zS^arh4z6GI$n)MV()?X;* zpS%GT(*w0XlD2Px_kj)&K-&kRP%P<0W&CQ+gN~XgAjV5{=g|%=;z3*iij1a{uJ02l z8fb4IQT#LF=ud@P%iu`nK7u}5?trzSt29PkPIrZpD{a8P29 z%3-YK9kcSLa>86zlv#UxVz&!6{Qn8^l+EK+A}cdLI^5bcEIe`8sov;ZrRITZ`VTsX zm2}_s&6)*D@MzP&;^Zt~YNHcs@X7PxwlQ|b^a^+uCbFm=&7pbj$=8>-D62c3vnED! zj_+9EKnd1y3h7cvSF+MjDqE7*-wFP(%N$D$p@F)y!?7IbM&@H#7lxGF?WMMZcYp$i z_7M5LtGXyqP9l)Z3Xif@@H-%c6CD;9#OV(1;$XZAnSKrKEoz{VtY@s@uV5$9;E`;x$p4B^a{;de%6HeMq`pI4j9|t z`Uk0Fu5L1OD$AkN;G}CL%)4tn%(r-c=|)FKs!d;0dZ1PGrb}&4c@|-^%+3OQpVXO) zQUT?wC^V-%($4(pR&cI zM@Cs`>NzGz=bp4CM8UW%F2I*7ZaoXYcGzyh=*{Tf)a%EZc$Kv_eP8z zmANEBK6o9(ups4AAtDzxHvEi)cdK7ZJWk}AwzZh^V}Lx2Med*ZcO6oE=D2`YsnHgg z6daAV-zMM~H?il-q^>-e)`ORuJ%1-219(%E0ErnjCS1Bi{#bpjST-L@Cy*QkHGPV_ z5IHaONd6VvOvd73s<9XQPX+i3-Ql;#r1G96IX5IGQW)}Lt*vBkaf=3*XB*AgbaQNm zb_zF`2PabS*jh=3g^cTLIz2YRu(q4UAv-#;c*o!76*h$9S&qLRej%rkq7o{Es`pgGz0?qBg~wL8GkW z<>4G15=q>a^c#1Yf`+`*ghu_D;}A(T48kad4^dFzd;@SFZ+@n_)UIDslF3)G`q%8u z4i%-mfCN+ezucXx_xwG6ylq2XaQsihXWbL7Z+{BvFi0F6 z>NOHltY3)r6Tb~oOj=hW9ZrVxio@u&zY%KL=-tx5I8#E5@M#O|7kB;$jeZ1DE`T~w z#tQ#XGal=IJxPlaPv^}`5^;x4s4ZNGOU&!H)V!MVR@(4I0&x;RN&@UDnfUZpP>Z9y zWYb6h2VBjnmk=qCE@Wa-mttt99tFiOpV^jhx_T?C0WFE&HntIFN^H#-Fx zDFEVvUIi&qLRI5$gdGYb1+C!)2Aou|Vb%oM%m9uQ8Z8XY&0?=TqezGxVpK3@q5H{n zEmgt@SOkJeKkV}(#iIuhl&MwxFDIE7A$-284P1|$oOK6yq|qoBAJ~tQXZ(GyqW;G^ zfvn0d@w8UA?oe}%WU>?{V}kAGORnc>$q*w&&l(L$2l_ChEVFM5sH>OyHxi-|R;w2U zc%gJy{oDyHvg_nz-Z05JlXwv~dci?2513pSVA#d|GN_a>=ykzAN*QU^Lcuq=yzJbV zv+jNb!{og^s9voMKmnqX<}?=i2w4}zZkwdX{(nfObPo(t7r4haB@rNpeKEO z4Lpdl3}X-`WlSy^WI9W`BB@6j!i6-UYjAzrnVh=Brfov0#X`C)mAMUyHd9yB!zmyP zGB2tVBOS71TZ@wE)yPM>7kp{quqmLlTOR`c2Ex0cNe9WqEXV_HK*%>np z{(LpSf5p*9xqP>`lz;glpCU6#418n-DsgLx`bOGvqrr!6<400(A)B9%eLR$oT(aq< za5eL<__U*;!IFt10ExZbd$|TaQc51# zoOD>_=T7(8&F`q~&nWCC&0V9-JT>>`;Ra9>BTc8v_3KM-yW-M40*y~}xqkm2_s(bG z>Tmq#v93*lw?-z(dI|W|1NG>z>?q3e&UJt6Lp5^D_`P~*40HdxM9EA@V0yw;x9Ftk zcXGN8_rxlyM0JSqu9BhQk{>>zQKM1p`B1txjsmf~?(+={KB7UD;Br*IdQGc`-$MX2 zSq^X~U6jPQL+1Bi-j`o+j*$u~phEykrz*2AHx_QMX4cSO`U=3qg&dWkBBl-xr85&g zw12hC^;Q2@G3;c1)9{*nE^70N3UQ6WXf^`6pH>g3Pg6VEP+hToJG;Zt6Hi0^irLe7 z+#v0F=esRDh?8Nk6j}i;Qn?a|PChs)a_Sy-bl z!O{JR_6{ELboDK+>uVlfCD6lwAVGU6w7FsMI9dN=1H4yxTe{i@{iK=HqBqmK8T+U~ zXR?#cEsEC^ydUt+xIiUJSF^IyyH@4OBnG(`(Cjwldb>k%b}(l_!9}P9-9nAPp_R1j zJI&1Tl{e)t1W*)Lx%N7uAPyoZ*e^G6MH9z&`CI<7Qi*Jxha2bB z`iC4G+1IHmPI$D;jU%>w@B?T>MoUuHzwq9^C&zLcfBiGZ5@%g^$gQ8^)eV+U}%Uben2vGIYHW4)s{0WTa*0n zOU0Xw=enN3Y&LAa383?}njX#T?B5dDQ!Bz%tEX7*?sp(+Zg93e-(l>8g8F!3$6r4P z57U<}Bp9o}WNEw~f}pU-Z^oNpxx5DMv#k=rzeVh6tvcS<2mB%u*-Qjnqy^$lx&y%` z{XTj$ds#-%_wJ82%q~G17g2^Be-9{%0|BZY7gybKzecE&54T<=%U-dy4`02H0^yb< zN>vGCl&5S;Ut?nWW@F!dEU6qhbsLDyj_DAVZ)>gwLfOHO)=K7?u~E=qqQ0lKk3W)( zd>!M>>#i8xIl18e`3OaS+hq&Vmap|!s%VtPWVLPcgbg%oC%&|c&70W9MDR5hh3^k0 z+i;C->ly7~0NF09?q)6^-^J2Gb={9u#PPQ^^^toeg4-rf=P0w?FKEy00NPpas6kt5 zMs)-+vo1j<)MwL3@PpMxo5n)nLAgW((~9an zD5Z(%&q4!zF{QMSU}*1eh$T;*vWoQ&t{uS$eI8YL8!80nmDk(J+!?~^$T`39OXJ-s z=jY1?WJzVu&r?~q1Q2q81})=f({|>bAUQkN^8W)zDy#O|@-D$`lZlm! zI&_3&Y8QW{0FD*rH}of&5uXnz+6}t+LlRY~h@vM*5K#RXCLII~kq}@|6s7P^9_NP1 zVN=xl>cej;-BM1Y@Eg@;lc!r?ap047@OWk;k)c$T@GN^1K*Nc@?f;8o8-4Z@fT4`0 ztG^T>9C{`lCP6FukG-fXwA1VJGvfl3m|cx%{K@8dCKc~{YsmQneXd+8Ppi(tK;;fb z4gdJlzO&%Vh`=9Ar3s>4pfs{#d1<2`r(b%Ofcp`JmWiFAjhU$+q> zxE|3b;}3tlp8xr<6h>27j5jhDh^xhxzXQk8Ohtg5=#+F_WDaXf3~oT5!eZ>;kurz% zNBxP%KhWLY^rzoa3k@5Q+awu0VmBd1jL_+TKjX9& z(4a?_sy_p=rF0(u9WM}Gv0$Z0f1pPRguQI5SwYSpwx4_SO=zpu=r0;5g|Zc zTKhG5USY%6G&hl~kxQHkz|Z(DdwRWpMC?(rt5SLl7GKoJw)KcGbv@0$3&lcDAgFf} zRU`3qalCikcfJ}{RY&u?eS%Cv}+SzDCjJEjy|A;{FjFrJ04|DOOCn5+k$4_3C};f5%5MQ8fCqTzUY@y(Rs7};B(pyDGb(>Tb?|z1f5mH z?Y#Y^(Lv6n$PJ=WgQ~UE-pyCJo1@MG1_*&nK;!FvPfzyh?Ne4(gh3;oCJPtc>0Nn- zHXo?Pczja6!Iv=Ub;s-DmqjYvS*UK-pTmU~Kr{o0ZT@=#6Wx4#zYQRM=0)ywH`^B# zGvntd={8koGw)Q2eWMeHnKjZtv7qs{Gwp8I_ot#|lJZU8szG-?c;CmX3CV8r^oR#uC^~_4+g3?4|Vx0hB`Drw3 z%7Fe-yHZ*}WlZd5+kERX3oLgVQ{um?>WhKeJ_|HuV1>I!m4A=pRfNe20Mk#<9DibA zB2##ms`bftQzmUZgx7<$0fcpOK}7 zTBGcrCUXcZPokj+JGNzM6L&dr1_5CKG=BdHa{1`!Zq*>DFOuV>F+LsS-W1@Ky}SyF zW@jYR_ENOO4xT4ui@A(Q{S0LPyC?+uiH$8!LQ|-bcz#sylAnzt_NUzlId7ZKPTp^i zXWk{T-d`M{K$3GZ&H9wxp zdhAAGT|>Yr$nZ?-=Z$8m5RE8NK1SJg=kAi;f6FCchzkrZps31wKrLejuh4aI_x2e- zd;l*B;OCu*w=e*+s%F8c$l^Jsh|%^N@avqD*yzd+2w*Nme5WOYcJ9Qz-CHD0E8fic z@PTBziu9PW8tU-*p~}=Js>v}pLKx}()pX5hQ{70Pmq!$7{=enx)E_B>db~B5W-Avl zv2rWqmlRGu`QGh2cRlT^R@Eiktp(Dlb*IO?t;n6PI3W_rf|~bhH69rm^7*FQ+lr1u z6nSVc6i}9zr>%YCq>_BjkUMvGSsy>FvXRnG@lUsa#&t7!esU^?jlGjjq_w^$DkW?! zqcbylT&Dl|x0!Nlr>Pic7#mhBGZL{SFErQtcni&Y_%r>1TbC~rkmb>KACFxmxEhv^ z(13RCZTSYfrj`A8KS}?DXj07+eo7v$r~ZFFrtv*emg z`+J5Hbis+x1u1IdV!3hg&ePYxxz^_G9yS-?v~X#my$|6LB2j^#`zdIZe0{=tA;cT- zitC{WoUo&Mf0|Ho3QttK+=t3M)8fmhu#ZdL{Pb z|CsWHH$24T{Q9GG8$5}_^zQ9D01G@ULvPM4fh#)X_xne4;$RFc=7DIQ?<&aVX>=5& z1GAJZt+$bn_V8IS`UmGQc$+dt;jMoY6yVT3At&x~5M)^R<$zb5^NN&_29?q^;*I(x z4b`EgR?DpC&|h2>sDJFew(n+LLdhL7P+-^;Es|5ZR#vqgpl)%(7W7uFHD!e{2vk=g z^Fb@Izq&2nG~d}4yEMH1g%r90<#JA}!yH!y=;;8i%H*J{*GChP1(_j54dWU1|ez_^4vl zK`c`&m!_y2L4E#WSKTSJg`jTmiG>ABW=I)%*d3gMKAPiO=P0OG&Xf*SjT(hR+LP=nBh0UURuvJOadBVRb;x{33s?yGD$yMyPtIrlQNrkJs z%}~|@M1*-uGFu)lI2bhxrbxQ&$K!UzP2I|)ugvc?K=;VN5crgZpT;e?Izg zx41Q+FZ=8y-PNW2{!pu9Rt7HeF5To$UpnIV3Fm_E9rSW2l2s6>2fjG*HA#-@M3jY* z2il;TfrDfKTz=!NVez5A)^CaKE<19+-~veR4+eH+?_)d(Npj@~fV-wb;6tYUu16j} zgU&^gnA+&`z~?Ur9J z?NFnLXp!{$CzfFqji_AUdPK+<`%=$X;`{&2N|-ck;D6^+IZ zzxQ3NunzD5mMio1V2U*>a2R#IUM3!R%EKQRi~5z-J|cl5_4c7Hh21SJqAIaa!@a~j zvknEEE#11Nd#_$7tu^HYP#8eCMP3NS9HhO>)_4+u&77aW@@J4>j7mB48#aTVxz(Ga z>6SxYT7IVOMa&|j*RqYNe?t5C8jbZCezjQd+b4Sm>%RcqgEitzb!pjx3JHDL-->6) zJRQ%;WD#Ua)n8``^bWh&WaHR>WT@A2P~M!(nrfL1JRl>mcr{mSekv0f+~&1t1R&Q{ zI1#3`2u(l4>3{=7IJr6+`1AxJ!^ln_b8m*@)IMQg7qkhjz{o)!*F`Z1N|)DmigP+w zH>Xm2YW0{dLn3K&_SuilzmiJF%K7gx11Queqpc48Pnn}HZlYL6hqHwYj8sM~^CSH( zEw0*eGkF1h569+Uot|Hx2rUhL1f$Czv_A{YaLIr7-Q=%mL=TxdBXp#X$(v7YV6y|c z0Vgxyjl*9O@(u4i@E&pp?bcM03%?z2*)I6qa`XCi zl$iOrkeWW76o@5mPj!9o4VsZ$8`op@s3NAtDCkc9Xg`ap{PUgy)#^|-I%0Vy(SUhs zlD#Aqb1cB?gtsjwa>w_k?U3Y*oll0i6CibL0d zUza*y_>E~@6%kONpMP*a(2o|_ZO)a54JD)^&=GHtS;$>s@e80kjumS-q$qawW;Z_; zkOQ~khych0f2LaSH(9~^BANQ`x*kJOS_R;Eiy+G}pCK4ijXeT{p1$5Al@&h6cew~`jJtAMmL=h@PyXqY=yKVhecZh1ow(E} zb97#rbs=f%d?9_g`)FY~!FSyWsv1*Lu2QPjX!51y0pRF3tQ_*MQyGXE8X%SjieSN= zBkYYduXF6|3Wlu=%Mmi?Y_LmeTK)^IHK&Hfaf^;0;ZPqSu?k&4xFIdz}!yQ}5v&&Wd@iNVx82V?V7O==g&YmCQ<1T7_P zx+`nxs3?ANBvVJ-<=_|)BoNRak1*RA$WzIYiFDF7!vjofJcEX|7NW#VuZn@7g{$|I z%ijV|>aXb2ZY13fq)pueaW>FnvFi+O0jaG}k?u60?Cn!#D+azh-=-=0>AGKGOJ5KH zD5=2J+tSBJ=D2{@d4t`qA`PUAxsIRht3|-xU3y z8O9@062Q4tZQpW&)=XE(mRr((9XEh8_Xw_nxFw`aLu^9GeG%{?+HYBK_So6%d1c2!%k0O~n>r=B7Ni5tfXL~l~Ih7&N7t+c7w7ON=%ubUsTVhClUAaF%3nfQ%F^HT>@4BNO+r~Llbyu(5*Or#a=gfkFEQLl=b8SRLh>HdVnuM7 ztg{&3fRl-SuS2Qa$eN@2b{L_A;7Qkdq95fA<@;6Rf0cWXJS(9y!G4&VjegFt&GADW;Rmj?wipqd0fAL(E*HYwGO66vl)xzerR& z>y8tjvKo$SqH+Kkv^RrFJemdHvsuMriGnpTHgS>{O~ao98AaY%u|T1H5)Uxt?kkzR zk(YOA0qBFb(5tuGCzp@(OdDi7R?}rj0T;ATdVcJTRS8IE1OG;F9U$EFE$Poh5tu8L zMMva`r$#L(VW#tuZ})ta*TCt`N(%|aNsn8z$P8uG%=KXE%7`o$ZyrQN@3?S`WeDux zJgb2Ht}M6hDeYUL(mL-_O&j00=+gMl^qs^#yWoD`x$e7FN6&6IBF zClS2{lX1TX@@XriW!r@WJT?+wUL>}p(s#{NW2=L22U@0DjyO?7M=ReZM4&<)4ETo+ zOjd3U&e`V<+xKnlByW}4s;>oP{Q5Zf0Gfl9@j5YIV!+@CA(L%+^@Ov73#lhCM_{XW z^!QtJ+~mlN6ZjbQRe^-;C*6a{-jB%%eL9zALE>;1Ia|R71O=IU4*$MFwcqov?g%w&{4`DcEBlPf6}N0+ z2F#%Jp|w#^r{xAmyRJy6+LJHHch>_qDVBA!+8c0X)?PqaC<^u9RU(gbFov`;m_ajY z%NV{y(YVSGBhZBAAG_iDh&G{%t%fqDF@SqG6M5x4}|5+2SfUvk%!osG+8nlA( zIJqQ4h)((3h-46qWc0a!V6-4v6dAcvVvsGt&VvQ#vf1=-!jdWGmDWygh(Tg6Zk86I zinDr8bcP*j@vg5yKV9tEUd#8=qegOn(^OE~&sW0M^OKCj;OeE5b$&0); z;ZYeV`rejr%%)x3_4ur(#N_Vq)%^*Zlgu*MMG5EqisoU4Wfa|4bI*zFrM~giFHK+U zY4ER=6D6Z;P&Iz|nzF=4_hN4-_0+*_LHh?U$JP+9wW~y&a)KtucQw}r{N-xD@9)Ku za(cmmbsJ~O0rh)d2L~ARi_dS}&*oA-mmpC`syebT-(+~U{TbcM(0sVe*0=U#XKN94QNRYCGs7rzaXh#2M_Ht zQ|`qx5=ZD>h7o)lT0?-neq5{?V5M_I)Lg;(4N zCD%KzZW!6YvUwSHTYM9Xdi+v+F0=eMWu{S)4)pSLd+8=qGA&|BOJR*~2q^BhMCigU z=R{sQ<@gElq(kju?jnXOus-Od5q|wv=jI|INHx|^m0Z@^TaQ&C>xr+)`SzqKWsaF^ z+T(N3%1gF3MGO{vr`+($Q!QXZ?lNqpEdR9y^9kr|!JF;e0~KYiTN9MH?@3_o@&j@= zP~<^6@bh<3e$3NgNgW8^OUq-l0DkP_9QzA;rInGFX6|6Pf<{dkk@fPaF6WTOmQa~G zUfiTP$CLdM@oLIE4SDyQq)ci{vsP}e6MDxbY}4^R1NU9L;)Am!TEgW_*Ru}ezy7ye zu==PsH>!u?aX!5)_PkTd0uP3x1qGc3>N@)pTNNkUn0YDUpnZ6=#>`D+uHj?hk)EN`_S zcd^lAL4e9yF|tJF=rMjw`Dn#rG63T^(S`d0FoNB7FC4f4{%!yu$IoJske2(ur2_Be z^3uS^?Y#ieV=%&g@K)w2ZWBLz!1_+?>gpDGF#MSjJyNwrpKle!vF65B?saU&_~vX; zsMy_<*a{=;o@jmltk>n@;eU5Gsa_UX1abyh0K3va8@h>iu;uB20>HG}Ujzi0C|}$E=2+7vY$I(mOwk*QwvlIrW-2C8^U62jr0w^yv7k$ zJ9J+0wA4Q~{5|PZZ^-|KoV>Dpg;mQ7Vd>LlcWf>t|3$@m?GOtX>&_i5H!ZwQEOqLm zk@v`j>EBf+QD*u}pEQPh5ZiD%^LwS8SiN9_JbEgCI)|7e5&1W*u?L2l)Hl{&E!mp$ zc0BJyL))@J@|P$R{Bw|2Iy6XL9FswjvaweHrPWMPc;d+Z@m2k^WiB-%Q>A<)*TD#&3&0DA82>o|3>trcsJnfa&%4weg6+OrwzH%nKBUyt=8uKZ7h6m<7r1t6Nrt}cfjO1=~K9?Tx+7Arld!pr(LBces zI-0U4mO(7aL4!Ygm+O+eAwUYaC)94ZgdWw>ZN4sj88 zW~bMOByqP19j>cN{_Tte?&Hg7Z-`UY0GX3O8yvOnt0!Gf8*6$HIe!A zX@i$%JhQ#>5xw&G%F})42e>z0tEso$OgKwAwZyk!!P@hyK8S4b6{&GZdEsD?`mV%j zwaNu)^^kr|=`5l*>0!~l-z=+jAig>5hCgo~6&MHykA5ycOM{sI5vUX0`KBy6cD~kj z7U|h%7}=mdXKerUIL)tD)<<)>Cq8=nHu$=h)cou@x0F(O+{8!|*qi8vjWPq~aZz`G zc?Ha!GDc2PJpqKOh%B6e+zt~XK;P4UQ}f_MUc5^WAHn&yw@3d^?2U1y=`-6p^9UM z67rAqyspgRb{p9xO2Fow7&Tj+(Z7+#Y{m;I-(Z-o{Z^^8^2N-oU-V~D^ugbPKJH$b z>r^U=YN(Q{FKsFlpOxjmlHLENhRT@nZ#U2*=jf%adG$&;iPnvSEzK&;opj#E)iZs_ z<7!gU!28>Ya06k(j?eZ_Hh*(T@}hQD2?Me*l}0-7wxz4IA-Lb%mrB9LG@Hrk;-fzt z@T-KC3pP-uPl$Qxvp4^xd1Ah~E}Mm=B>*WAc10NEj8jE`5(3PVUhLxoZFL(?e( z*M*W`2S6YVG7^OeX{APT`uKhH_pzuX*p<9Gmkttm=12O^mzl{%ylXEvu&UzyTLR?# zbLBe_pm&#vz=ffAqt5-cjj^edGZ=PJS{b`M83VSvtvI{{=4a9-eOPEhf*ee&cKzAp zu1k|G8nQJ^V&A7~9&G!wpO6EUc)QWo20QaJ5l(nM$MdjEX8o_V+=9o#LC$xQ>{Kry zL4m|5bcMhREo1OAVe>7OY(rSbW`G_vV*2UN|f|+ z?gBAX8H0VQRtArj9j-e{T_M^gI5T0vT*hem?9cNzO|-VunF-=z)qL&*Z2;BD$)J^w zE`gKJP1;61{K$|d{+-LdSkl}qq&ug1rN73`epfF4i*#zRtub$|ds$Jdv-2_?3|+!A z$#LLv>yryNQQg2fWv@gKF94(7DP0g{Tfm`au78LD8E;%jY{ef~y?yt;`0l29?RVp~ zhiHGiT^|69M!JJmQGWmFZ{X zgq;@Uy@;E)!|=>0U@Y1V?zK@NuLx1On};zef?$jH39LRd11w%vNZET|h|Ng@KLakY zkzm`7-{fR|9O<9-tQY1tC!gwu$By3Qfoh8`5Tk0ET5s4ie+ZJ80-L`jmHws@A{_re g4dMS>VB8fGn#Q=9@dtG&*oO|NDQPQKC_qF02QDAPZU6uP literal 0 HcmV?d00001 diff --git a/docs/docs/img/quick_start_plot_projected.png b/docs/docs/img/quick_start_plot_projected.png new file mode 100644 index 0000000000000000000000000000000000000000..939fdf7c1f65f41f9adf4dda9ed41eebe82131cd GIT binary patch literal 70711 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 literal 0 HcmV?d00001 From 5c9f6574303209314a61a69c4c6b761e652ae40c Mon Sep 17 00:00:00 2001 From: Simeon Doetsch Date: Mon, 4 Oct 2021 15:25:38 +0200 Subject: [PATCH 17/41] Minor plotting fixes --- plutoplot/coordinates.py | 2 +- plutoplot/grid.py | 2 ++ plutoplot/plotting.py | 10 ++++++---- plutoplot/simulation.py | 2 +- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/plutoplot/coordinates.py b/plutoplot/coordinates.py index 04b141a..487ce33 100644 --- a/plutoplot/coordinates.py +++ b/plutoplot/coordinates.py @@ -144,7 +144,7 @@ def transform_mesh(grid, mesh1, mesh2): elif grid.coordinates == "polar": if grid.rdims_ind == (0, 1): x = mesh1 * np.cos(mesh2) - y = mesh2 * np.sin(mesh2) + y = mesh1 * np.sin(mesh2) return ("x", "y"), (x, y) elif grid.rdims_ind == (0, 2): return ("r", "z"), (mesh1, mesh2) diff --git a/plutoplot/grid.py b/plutoplot/grid.py index 17668a7..8788f1d 100644 --- a/plutoplot/grid.py +++ b/plutoplot/grid.py @@ -290,10 +290,12 @@ def __init__(self, grid: Grid, slice_): self.data_shape = None if self.indexing == "ijk": self.rmask = tuple(slice(None) if dim > 1 else 0 for dim in self.dims) + self.shape = self.dims else: self.rmask = tuple( slice(None) if dim > 1 else 0 for dim in reversed(self.dims) ) + self.shape = tuple(reversed(self.dims)) self.size = grid.size diff --git a/plutoplot/plotting.py b/plutoplot/plotting.py index a29599f..76e323e 100644 --- a/plutoplot/plotting.py +++ b/plutoplot/plotting.py @@ -19,9 +19,11 @@ def plot( ) -> None: """Simple colorplot for 2-dim data""" - if data.shape != grid.shape and not ( - isinstance(grid, GridSlice) and data.shape == grid.shape - ): + if isinstance(grid, GridSlice) and data.shape == grid.shape: + data = data[grid.slice] + elif data.shape == grid.shape: + pass + else: raise RuntimeError("Plotting: Grid shape not compatible with data") if len(grid.rdims) == 1: @@ -43,7 +45,7 @@ def plot( else: xlabel = f"{grid.mapping_tex[f'x{grid.rdims_ind[0]+1}']}" ylabel = f"{grid.mapping_tex[f'x{grid.rdims_ind[1]+1}']}" - X, Y = grid.xni[grid.rdims_ind[0]], grid.xni[grid.rdims_ind[1]] + X, Y = grid.mesh_edge if ax is None: if figsize is None: diff --git a/plutoplot/simulation.py b/plutoplot/simulation.py index 1c97853..f24f0f1 100644 --- a/plutoplot/simulation.py +++ b/plutoplot/simulation.py @@ -292,7 +292,7 @@ def handler(i): handler, i=widgets.IntSlider(min=0, max=len(self) - 1, value=self._index(n)), ) - plot.children[0].description = "Simulation frame" + plot.children[0].description = "Step" plot.children[0].layout.width = "40%" display(plot) From 65c8ea722cbc45cee7f7cc7eb6f635de144175da Mon Sep 17 00:00:00 2001 From: Simeon Doetsch Date: Tue, 5 Oct 2021 01:02:08 +0200 Subject: [PATCH 18/41] Docs: add script for example plots --- README.md | 4 +-- .../img/quick_start_plot_not-projected.jpg | Bin 0 -> 29512 bytes .../img/quick_start_plot_not-projected.png | Bin 23938 -> 0 bytes docs/docs/img/quick_start_plot_projected.jpg | Bin 0 -> 60560 bytes docs/docs/img/quick_start_plot_projected.png | Bin 70711 -> 0 bytes docs/generate_plots.py | 26 ++++++++++++++++++ 6 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 docs/docs/img/quick_start_plot_not-projected.jpg delete mode 100644 docs/docs/img/quick_start_plot_not-projected.png create mode 100644 docs/docs/img/quick_start_plot_projected.jpg delete mode 100644 docs/docs/img/quick_start_plot_projected.png create mode 100644 docs/generate_plots.py diff --git a/README.md b/README.md index 3b8edf3..2a74fe0 100644 --- a/README.md +++ b/README.md @@ -134,13 +134,13 @@ The PlutoData object provides a `plot()` function, which will automatically proj ```python sim[-1].plot('rho') ``` -![Density plot](docs/docs/img/quick_start_plot_projected.png) +![Density plot](docs/docs/img/quick_start_plot_projected.jpg) The projection can also be turned off, an arbitrary options which will be passed to matplotlib can be given: ```python sim[-1].plot('rho', projection=False) ``` -![Density plot](docs/docs/img/quick_start_plot_not-projected.png) +![Density plot](docs/docs/img/quick_start_plot_not-projected.jpg) If a plot of a custom quantitity is needed, a array instead of a variable name can be given: ``` diff --git a/docs/docs/img/quick_start_plot_not-projected.jpg b/docs/docs/img/quick_start_plot_not-projected.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c82214d79b6a97bbb5bfeb70328b9dce8162bffd GIT binary patch literal 29512 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 literal 0 HcmV?d00001 diff --git a/docs/docs/img/quick_start_plot_not-projected.png b/docs/docs/img/quick_start_plot_not-projected.png deleted file mode 100644 index dc12a93141bdd602de640f2e9666c80dc22ce2ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23938 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 diff --git a/docs/docs/img/quick_start_plot_projected.jpg b/docs/docs/img/quick_start_plot_projected.jpg new file mode 100644 index 0000000000000000000000000000000000000000..87852023ff402c7b0299ce89d510cd6ab385693e GIT binary patch literal 60560 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�d$kcLK*)guRd9LxbJeKi&3(aIwBUs-64>#T~WW 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 EUs|nT{Qv*} literal 0 HcmV?d00001 diff --git a/docs/docs/img/quick_start_plot_projected.png b/docs/docs/img/quick_start_plot_projected.png deleted file mode 100644 index 939fdf7c1f65f41f9adf4dda9ed41eebe82131cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70711 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 diff --git a/docs/generate_plots.py b/docs/generate_plots.py new file mode 100644 index 0000000..ef3a67a --- /dev/null +++ b/docs/generate_plots.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python3 +""" +Script to generate sample plots for documentation from PLUTO test problems +""" +import os +from pathlib import Path + +import plutoplot as pp + +base_path = Path(os.getenv("PLUTO_TEST_PROBLEMS")) +dest_path = Path("docs/img") + +# Plots for quick start +sim = pp.Simulation( + "/home/simeon/masterproject/PLUTO/test-problems/HD/Disk_Planet/03_0", format="flt" +) +fig, _ = sim.plot("rho") +fig.savefig(dest_path / "quick_start_plot_projected.jpg", bbox_inches="tight", dpi=75) + +fig, _ = sim.plot("rho", projection=False) +fig.savefig( + dest_path / "quick_start_plot_not-projected.jpg", bbox_inches="tight", dpi=75 +) + + +print("Plots generated") From 084cd1e966e1dfa950d15434bf1be81dae1ad1a4 Mon Sep 17 00:00:00 2001 From: Simeon Doetsch Date: Wed, 6 Oct 2021 00:36:24 +0200 Subject: [PATCH 19/41] Docs: filled index and added quickstart --- .../img/quick_start_plot_not-projected.jpg | Bin 29512 -> 30654 bytes docs/docs/img/quick_start_plot_projected.jpg | Bin 60560 -> 62073 bytes docs/docs/index.md | 27 +++- docs/docs/quickstart.md | 127 ++++++++++++++++++ docs/mkdocs.yml | 6 +- docs/requirements.txt | 5 +- 6 files changed, 160 insertions(+), 5 deletions(-) create mode 100644 docs/docs/quickstart.md diff --git a/docs/docs/img/quick_start_plot_not-projected.jpg b/docs/docs/img/quick_start_plot_not-projected.jpg index c82214d79b6a97bbb5bfeb70328b9dce8162bffd..2bccdccfbf427bfb442e536f2fc0a946494f9136 100644 GIT binary patch delta 24574 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

! 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 delta 23214 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 !B4qD2W)GPR~t_&Gl7j{l-FMA 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 M_e)ena;fuw0A>&zivR!s diff --git a/docs/docs/img/quick_start_plot_projected.jpg b/docs/docs/img/quick_start_plot_projected.jpg index 87852023ff402c7b0299ce89d510cd6ab385693e..8ab1c3febd7cfb5432441611c05402ffc388f7aa 100644 GIT binary patch delta 48934 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 delta 47252 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 I@}HUi2U(VQ!T=3.6. Make sure for installation to install in the right environment, and/or adapt the pip commands accordingly (e.g. `pip3`). + +The base version of plutoplot can be installed from Pypi with: +```bash +pip install --upgrade plutoplot +``` + +To keep the installation size small the dependencies for interactive plotting and loading of HDF5 data are declared as optional dependencies. +To install the optional dependencies use either of the following, depeding on your needs: +```bash +pip install --upgrade plutoplot[interactive] +pip install --upgrade plutoplot[hdf5] +pip install --upgrade plutoplot[interactive,hdf5] +``` + +To install the current development version from this branch: +```bash +pip install --upgrade "plutoplot @ git+https://github.com/simske/plutoplot" +``` + +# Quick Start +## CLI: check simulation info +To quickly check the status of a PLUTO simulation, you can use the `pluto-info` command line tool: +```bash +pluto-info /path/to/simulation +``` +Sample output: +``` +>> pluto-info test-problems/HD/Jet/01/ +PLUTO simulation at 'test-problems/HD/Jet/01' +Polar grid with dimensions (160, 1, 640) +Domain: x1: 0.00e+00 .. 1.00e+01 (Lx1 = 1.00e+01) + x2: 0.00e+00 .. 1.00e+00 (Lx2 = 1.00e+00) + x2: 0.00e+00 .. 4.00e+01 (Lx3 = 4.00e+01) +Available variables: rho vx1 vx2 vx3 prs +Data files: + Format dbl: 16 files, last time 15.0, data timestep 1.00e+00 + Format flt: 61 files, last time 15.0, data timestep 2.50e-01 + +``` +(note: depending on your Python environment, the entrypoint `pluto-info` might not be installed correctly. Check the [documentation for more details](https://plutoplot.readthedocs.io/en/latest/cli-tools)). + +## Quick start in Python scripts / Jupyter notebooks +```python +import plutoplot as pp +``` +### Basics +Simulations can be loaded by just providing the path to the simulation directory (directory with `definitions.h` and `pluto.ini`). +The data directory is the found automatically, as well as the grid geometry. +The formats are searched in the order (dbl, flt, vtk, dbl.h5, flt.h5) and the first found loaded, this can be overriden. +```python +sim = pp.Simulation("/path/to/simulation", format="flt") +``` +The simulation object provides access to all outputs (of this format), the grid and simulation metadata. +A few examples of accesible attributes: +```python +sim.dims # domain resolution +sim.x1, sim.x2, sim.x3 # cell centered coordinates, redirect to sim.grid.x{1,2,3} +sim.x1i, sim.x2i, sim.x3i # cell interface coordinates +sim.Lx1, sim.Lx2, sim.Lx3 + +sim.t # simulation output times +sim.vars # simulation output variables +``` + +The data at the specific output steps can be accessed with the `sim[n]` syntax. +This results in a `PlutoData` object, which can be used to access the data: +```python +sim[-1].rho +``` +The data object as well as the data array are generated when needed, and the data arrays are memory mapped, which means only data actually accessed is read from disk. +The names of the data variables can be found with `sim.vars`. + +Be aware that data arrays are always 3-dimensional, even if the domain has a resolution of 1 in some directions. +This is for clarity and consistency, so that an axis always has a direct correspondence to its coordinates in the grid. + +Simulations are iterable: +```python +for step in sim: + print("Total mean squared velocity at t={step.t}: ", (step.vx1**2 + step.vx2**2 + step.vx3**2).mean()) +``` +And also provide a `reduce()` function to run over the whole simulation: +```python +prs_mean = sim.reduce(lambda step: step.prs.mean()) +``` +This results in an array containing the output of the supplied function for each step, in the example the mean pressure. + +### Working with simulation slices +To only look at a part of a simulation we can slice into it. +This can be particularly useful for analyzing and plotting 2D slices of 3D data, as full 3D plotting is not supported yet. +To slice into a simulation the usual slicing syntax on `Simulation.slicer`: +```python +sliced_sim = sim.slicer[:,0,32:64] +``` +This sliced simulation object can now be used as the normal simulation object. +The grid and data arrays will automatically return the data for this slice. +(Note: for clarity a 3D slice is always required. The data arrays will still always be 3D, see above). + +### Plotting +`plutoplot` provides automatic plotting for 1D & 2D simulations. +To plot slices of 3D simulations, first create a simulation slice (section above), then just follow normally. + +The PlutoData object provides a `plot()` function, which will automatically project the data onto a cartesian grid, and annotating the axes and colorbar correctly: +```python +sim[-1].plot('rho') +``` +![Density plot](img/quick_start_plot_projected.jpg) + +The projection can also be turned off, an arbitrary options which will be passed to matplotlib can be given: +```python +sim[-1].plot('rho', projection=False) +``` +![Density plot](img/quick_start_plot_not-projected.jpg) + +If a plot of a custom quantitity is needed, a array instead of a variable name can be given: +``` +step = sim[-1] +step.plot(step.prs / step.rho, label="T") +``` + +In Jupyter Notebooks interactive plotting can be used to step through the simulation steps. +`Simulation.iplot()` has the same interface as `PlutoData.plot()`, but it will show a slider to step through simulation steps: +``` +sim.iplot("rho") +``` +![Interactive plot](img/quick_start_iplot.gif) diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 6cc69fb..5aabb38 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -1,8 +1,12 @@ site_name: plutoplot Documentation +nav: + - Home: index.md + - Quick Start: quickstart.md + theme: name: material plugins: - search -# - mkdocstrings + - mkdocstrings diff --git a/docs/requirements.txt b/docs/requirements.txt index e89e086..edc2789 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,2 +1,3 @@ -mkdocs-material -mkdocstrings +mkdocs>=1.2 +mkdocs-material>=7.3 +mkdocstrings>=0.16 From 8a4f3b3996ae06f59fd547e2ec056d7848a7c92d Mon Sep 17 00:00:00 2001 From: Simeon Doetsch Date: Thu, 4 Nov 2021 11:05:58 +0100 Subject: [PATCH 20/41] Switch installer to Poetry --- .gitattributes | 1 - MANIFEST.in | 2 - poetry.lock | 1444 +++++++++++++++++++++++++++++++++++++ pyproject.toml | 37 +- setup.cfg | 39 - setup.py | 6 - tox.ini | 9 +- versioneer.py | 1885 ------------------------------------------------ 8 files changed, 1486 insertions(+), 1937 deletions(-) delete mode 100644 .gitattributes delete mode 100644 MANIFEST.in create mode 100644 poetry.lock delete mode 100644 setup.cfg delete mode 100644 setup.py delete mode 100644 versioneer.py diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index b739161..0000000 --- a/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -plutoplot/_version.py export-subst diff --git a/MANIFEST.in b/MANIFEST.in deleted file mode 100644 index 5b35b0d..0000000 --- a/MANIFEST.in +++ /dev/null @@ -1,2 +0,0 @@ -include versioneer.py -include plutoplot/_version.py diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..2539499 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,1444 @@ +[[package]] +name = "appnope" +version = "0.1.2" +description = "Disable App Nap on macOS >= 10.9" +category = "main" +optional = true +python-versions = "*" + +[[package]] +name = "argon2-cffi" +version = "21.1.0" +description = "The secure Argon2 password hashing algorithm." +category = "main" +optional = true +python-versions = ">=3.5" + +[package.dependencies] +cffi = ">=1.0.0" + +[package.extras] +dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest", "sphinx", "furo", "wheel", "pre-commit"] +docs = ["sphinx", "furo"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] + +[[package]] +name = "async-generator" +version = "1.10" +description = "Async generators and context managers for Python 3.5+" +category = "main" +optional = true +python-versions = ">=3.5" + +[[package]] +name = "attrs" +version = "21.2.0" +description = "Classes Without Boilerplate" +category = "main" +optional = true +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"] +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"] +tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"] + +[[package]] +name = "backcall" +version = "0.2.0" +description = "Specifications for callback functions passed in to an API" +category = "main" +optional = true +python-versions = "*" + +[[package]] +name = "bleach" +version = "4.1.0" +description = "An easy safelist-based HTML-sanitizing tool." +category = "main" +optional = true +python-versions = ">=3.6" + +[package.dependencies] +packaging = "*" +six = ">=1.9.0" +webencodings = "*" + +[[package]] +name = "cached-property" +version = "1.5.2" +description = "A decorator for caching properties in classes." +category = "main" +optional = true +python-versions = "*" + +[[package]] +name = "cffi" +version = "1.15.0" +description = "Foreign Function Interface for Python calling C code." +category = "main" +optional = true +python-versions = "*" + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "colorama" +version = "0.4.4" +description = "Cross-platform colored terminal text." +category = "main" +optional = true +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 = "decorator" +version = "5.1.0" +description = "Decorators for Humans" +category = "main" +optional = true +python-versions = ">=3.5" + +[[package]] +name = "defusedxml" +version = "0.7.1" +description = "XML bomb protection for Python stdlib modules" +category = "main" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "entrypoints" +version = "0.3" +description = "Discover and load entry points from installed packages." +category = "main" +optional = true +python-versions = ">=2.7" + +[[package]] +name = "h5py" +version = "3.1.0" +description = "Read and write HDF5 files from Python" +category = "main" +optional = true +python-versions = ">=3.6" + +[package.dependencies] +cached-property = {version = "*", markers = "python_version < \"3.8\""} +numpy = [ + {version = ">=1.12", markers = "python_version == \"3.6\""}, + {version = ">=1.14.5", markers = "python_version == \"3.7\""}, + {version = ">=1.17.5", markers = "python_version == \"3.8\""}, + {version = ">=1.19.3", markers = "python_version >= \"3.9\""}, +] + +[[package]] +name = "importlib-metadata" +version = "4.8.1" +description = "Read metadata from Python packages" +category = "main" +optional = true +python-versions = ">=3.6" + +[package.dependencies] +typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} +zipp = ">=0.5" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] +perf = ["ipython"] +testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] + +[[package]] +name = "ipykernel" +version = "5.5.6" +description = "IPython Kernel for Jupyter" +category = "main" +optional = true +python-versions = ">=3.5" + +[package.dependencies] +appnope = {version = "*", markers = "platform_system == \"Darwin\""} +ipython = ">=5.0.0" +ipython-genutils = "*" +jupyter-client = "*" +tornado = ">=4.2" +traitlets = ">=4.1.0" + +[package.extras] +test = ["pytest (!=5.3.4)", "pytest-cov", "flaky", "nose", "jedi (<=0.17.2)"] + +[[package]] +name = "ipython" +version = "7.16.1" +description = "IPython: Productive Interactive Computing" +category = "main" +optional = true +python-versions = ">=3.6" + +[package.dependencies] +appnope = {version = "*", markers = "sys_platform == \"darwin\""} +backcall = "*" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +decorator = "*" +jedi = ">=0.10" +pexpect = {version = "*", markers = "sys_platform != \"win32\""} +pickleshare = "*" +prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0" +pygments = "*" +setuptools = ">=18.5" +traitlets = ">=4.2" + +[package.extras] +all = ["Sphinx (>=1.3)", "ipykernel", "ipyparallel", "ipywidgets", "nbconvert", "nbformat", "nose (>=0.10.1)", "notebook", "numpy (>=1.14)", "pygments", "qtconsole", "requests", "testpath"] +doc = ["Sphinx (>=1.3)"] +kernel = ["ipykernel"] +nbconvert = ["nbconvert"] +nbformat = ["nbformat"] +notebook = ["notebook", "ipywidgets"] +parallel = ["ipyparallel"] +qtconsole = ["qtconsole"] +test = ["nose (>=0.10.1)", "requests", "testpath", "pygments", "nbformat", "ipykernel", "numpy (>=1.14)"] + +[[package]] +name = "ipython-genutils" +version = "0.2.0" +description = "Vestigial utilities from IPython" +category = "main" +optional = true +python-versions = "*" + +[[package]] +name = "ipywidgets" +version = "7.6.5" +description = "IPython HTML widgets for Jupyter" +category = "main" +optional = true +python-versions = "*" + +[package.dependencies] +ipykernel = ">=4.5.1" +ipython = {version = ">=4.0.0", markers = "python_version >= \"3.3\""} +ipython-genutils = ">=0.2.0,<0.3.0" +jupyterlab-widgets = {version = ">=1.0.0", markers = "python_version >= \"3.6\""} +nbformat = ">=4.2.0" +traitlets = ">=4.3.1" +widgetsnbextension = ">=3.5.0,<3.6.0" + +[package.extras] +test = ["pytest (>=3.6.0)", "pytest-cov", "mock"] + +[[package]] +name = "jedi" +version = "0.18.0" +description = "An autocompletion tool for Python that can be used for text editors." +category = "main" +optional = true +python-versions = ">=3.6" + +[package.dependencies] +parso = ">=0.8.0,<0.9.0" + +[package.extras] +qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +testing = ["Django (<3.1)", "colorama", "docopt", "pytest (<6.0.0)"] + +[[package]] +name = "jinja2" +version = "3.0.2" +description = "A very fast and expressive template engine." +category = "main" +optional = true +python-versions = ">=3.6" + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "jsonschema" +version = "4.0.0" +description = "An implementation of JSON Schema validation for Python" +category = "main" +optional = true +python-versions = "*" + +[package.dependencies] +attrs = ">=17.4.0" +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} +pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" + +[package.extras] +format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] +format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] + +[[package]] +name = "jupyter-client" +version = "6.1.13" +description = "Jupyter protocol implementation and client libraries" +category = "main" +optional = true +python-versions = ">=3.5" + +[package.dependencies] +jupyter-core = ">=4.6.0" +nest-asyncio = ">=1.5" +python-dateutil = ">=2.1" +pyzmq = ">=13" +tornado = ">=4.1" +traitlets = "*" + +[package.extras] +doc = ["sphinx (>=1.3.6)", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] +test = ["async-generator", "ipykernel", "ipython", "mock", "pytest-asyncio", "pytest-timeout", "pytest", "mypy", "pre-commit", "jedi (<0.18)"] + +[[package]] +name = "jupyter-core" +version = "4.9.1" +description = "Jupyter core package. A base package on which Jupyter projects rely." +category = "main" +optional = true +python-versions = ">=3.6" + +[package.dependencies] +pywin32 = {version = ">=1.0", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} +traitlets = "*" + +[[package]] +name = "jupyterlab-pygments" +version = "0.1.2" +description = "Pygments theme using JupyterLab CSS variables" +category = "main" +optional = true +python-versions = "*" + +[package.dependencies] +pygments = ">=2.4.1,<3" + +[[package]] +name = "jupyterlab-widgets" +version = "1.0.2" +description = "A JupyterLab extension." +category = "main" +optional = true +python-versions = ">=3.6" + +[[package]] +name = "kiwisolver" +version = "1.3.1" +description = "A fast implementation of the Cassowary constraint solver" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "markupsafe" +version = "2.0.1" +description = "Safely add untrusted strings to HTML/XML markup." +category = "main" +optional = true +python-versions = ">=3.6" + +[[package]] +name = "matplotlib" +version = "3.3.4" +description = "Python plotting package" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +cycler = ">=0.10" +kiwisolver = ">=1.0.1" +numpy = ">=1.15" +pillow = ">=6.2.0" +pyparsing = ">=2.0.3,<2.0.4 || >2.0.4,<2.1.2 || >2.1.2,<2.1.6 || >2.1.6" +python-dateutil = ">=2.1" + +[[package]] +name = "mistune" +version = "0.8.4" +description = "The fastest markdown parser in pure Python" +category = "main" +optional = true +python-versions = "*" + +[[package]] +name = "nbclient" +version = "0.5.1" +description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." +category = "main" +optional = true +python-versions = ">=3.6" + +[package.dependencies] +async-generator = "*" +jupyter-client = ">=6.1.5" +nbformat = ">=5.0" +nest-asyncio = "*" +traitlets = ">=4.2" + +[package.extras] +dev = ["codecov", "coverage", "ipython", "ipykernel", "ipywidgets", "pytest (>=4.1)", "pytest-cov (>=2.6.1)", "check-manifest", "flake8", "mypy", "tox", "bumpversion", "xmltodict", "pip (>=18.1)", "wheel (>=0.31.0)", "setuptools (>=38.6.0)", "twine (>=1.11.0)", "black"] +sphinx = ["Sphinx (>=1.7)", "sphinx-book-theme", "mock", "moto", "myst-parser"] +test = ["codecov", "coverage", "ipython", "ipykernel", "ipywidgets", "pytest (>=4.1)", "pytest-cov (>=2.6.1)", "check-manifest", "flake8", "mypy", "tox", "bumpversion", "xmltodict", "pip (>=18.1)", "wheel (>=0.31.0)", "setuptools (>=38.6.0)", "twine (>=1.11.0)", "black"] + +[[package]] +name = "nbconvert" +version = "6.0.7" +description = "Converting Jupyter Notebooks" +category = "main" +optional = true +python-versions = ">=3.6" + +[package.dependencies] +bleach = "*" +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 = ">=2.4.1" +testpath = "*" +traitlets = ">=4.2" + +[package.extras] +all = ["pytest", "pytest-cov", "pytest-dependency", "ipykernel", "ipywidgets (>=7)", "pyppeteer (==0.2.2)", "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", "pytest-dependency", "ipykernel", "ipywidgets (>=7)", "pyppeteer (==0.2.2)"] +webpdf = ["pyppeteer (==0.2.2)"] + +[[package]] +name = "nbformat" +version = "5.1.3" +description = "The Jupyter Notebook format" +category = "main" +optional = true +python-versions = ">=3.5" + +[package.dependencies] +ipython-genutils = "*" +jsonschema = ">=2.4,<2.5.0 || >2.5.0" +jupyter-core = "*" +traitlets = ">=4.1" + +[package.extras] +fast = ["fastjsonschema"] +test = ["check-manifest", "fastjsonschema", "testpath", "pytest", "pytest-cov"] + +[[package]] +name = "nest-asyncio" +version = "1.5.1" +description = "Patch asyncio to allow nested event loops" +category = "main" +optional = true +python-versions = ">=3.5" + +[[package]] +name = "notebook" +version = "6.4.5" +description = "A web-based notebook environment for interactive computing" +category = "main" +optional = true +python-versions = ">=3.6" + +[package.dependencies] +argon2-cffi = "*" +ipykernel = "*" +ipython-genutils = "*" +jinja2 = "*" +jupyter-client = ">=5.3.4" +jupyter-core = ">=4.6.1" +nbconvert = "*" +nbformat = "*" +prometheus-client = "*" +pyzmq = ">=17" +Send2Trash = ">=1.5.0" +terminado = ">=0.8.3" +tornado = ">=6.1" +traitlets = ">=4.2.1" + +[package.extras] +docs = ["sphinx", "nbsphinx", "sphinxcontrib-github-alt", "sphinx-rtd-theme", "myst-parser"] +json-logging = ["json-logging"] +test = ["pytest", "coverage", "requests", "nbval", "selenium", "pytest-cov", "requests-unixsocket"] + +[[package]] +name = "numpy" +version = "1.19.5" +description = "NumPy is the fundamental package for array computing with Python." +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "packaging" +version = "21.0" +description = "Core utilities for Python packages" +category = "main" +optional = true +python-versions = ">=3.6" + +[package.dependencies] +pyparsing = ">=2.0.2" + +[[package]] +name = "pandocfilters" +version = "1.5.0" +description = "Utilities for writing pandoc filters in python" +category = "main" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "parso" +version = "0.8.2" +description = "A Python Parser" +category = "main" +optional = true +python-versions = ">=3.6" + +[package.extras] +qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +testing = ["docopt", "pytest (<6.0.0)"] + +[[package]] +name = "pexpect" +version = "4.8.0" +description = "Pexpect allows easy control of interactive console applications." +category = "main" +optional = true +python-versions = "*" + +[package.dependencies] +ptyprocess = ">=0.5" + +[[package]] +name = "pickleshare" +version = "0.7.5" +description = "Tiny 'shelve'-like database with concurrency support" +category = "main" +optional = true +python-versions = "*" + +[[package]] +name = "pillow" +version = "8.4.0" +description = "Python Imaging Library (Fork)" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "prometheus-client" +version = "0.12.0" +description = "Python client for the Prometheus monitoring system." +category = "main" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[package.extras] +twisted = ["twisted"] + +[[package]] +name = "prompt-toolkit" +version = "3.0.3" +description = "Library for building powerful interactive command lines in Python" +category = "main" +optional = true +python-versions = ">=3.6" + +[package.dependencies] +wcwidth = "*" + +[[package]] +name = "ptyprocess" +version = "0.7.0" +description = "Run a subprocess in a pseudo terminal" +category = "main" +optional = true +python-versions = "*" + +[[package]] +name = "py" +version = "1.10.0" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +category = "main" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "pycparser" +version = "2.20" +description = "C parser in Python" +category = "main" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "pygments" +version = "2.10.0" +description = "Pygments is a syntax highlighting package written in Python." +category = "main" +optional = true +python-versions = ">=3.5" + +[[package]] +name = "pyparsing" +version = "3.0.4" +description = "Python parsing module" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + +[[package]] +name = "pyrsistent" +version = "0.18.0" +description = "Persistent/Functional/Immutable data structures" +category = "main" +optional = true +python-versions = ">=3.6" + +[[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 = "pywin32" +version = "302" +description = "Python for Window Extensions" +category = "main" +optional = true +python-versions = "*" + +[[package]] +name = "pywinpty" +version = "1.1.5" +description = "Pseudo terminal support for Windows from Python." +category = "main" +optional = true +python-versions = ">=3.6" + +[[package]] +name = "pyzmq" +version = "22.3.0" +description = "Python bindings for 0MQ" +category = "main" +optional = true +python-versions = ">=3.6" + +[package.dependencies] +cffi = {version = "*", markers = "implementation_name == \"pypy\""} +py = {version = "*", markers = "implementation_name == \"pypy\""} + +[[package]] +name = "send2trash" +version = "1.8.0" +description = "Send file to trash natively under Mac OS X, Windows and Linux." +category = "main" +optional = true +python-versions = "*" + +[package.extras] +nativelib = ["pyobjc-framework-cocoa", "pywin32"] +objc = ["pyobjc-framework-cocoa"] +win32 = ["pywin32"] + +[[package]] +name = "setuptools" +version = "58.5.2" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "main" +optional = true +python-versions = ">=3.6" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "sphinx-inline-tabs", "sphinxcontrib-towncrier", "furo"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "mock", "flake8-2020", "virtualenv (>=13.0.0)", "pytest-virtualenv (>=1.2.7)", "wheel", "paver", "pip (>=19.1)", "jaraco.envs", "pytest-xdist", "sphinx", "jaraco.path (>=3.2.0)", "pytest-black (>=0.3.7)", "pytest-mypy"] + +[[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 = "terminado" +version = "0.12.1" +description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." +category = "main" +optional = true +python-versions = ">=3.6" + +[package.dependencies] +ptyprocess = {version = "*", markers = "os_name != \"nt\""} +pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""} +tornado = ">=4" + +[package.extras] +test = ["pytest"] + +[[package]] +name = "testpath" +version = "0.5.0" +description = "Test utilities for code working with files and commands" +category = "main" +optional = true +python-versions = ">= 3.5" + +[package.extras] +test = ["pytest", "pathlib2"] + +[[package]] +name = "tornado" +version = "6.1" +description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." +category = "main" +optional = true +python-versions = ">= 3.5" + +[[package]] +name = "traitlets" +version = "4.3.3" +description = "Traitlets Python config system" +category = "main" +optional = true +python-versions = "*" + +[package.dependencies] +decorator = "*" +ipython-genutils = "*" +six = "*" + +[package.extras] +test = ["pytest", "mock"] + +[[package]] +name = "typing-extensions" +version = "3.10.0.2" +description = "Backported and Experimental Type Hints for Python 3.5+" +category = "main" +optional = true +python-versions = "*" + +[[package]] +name = "wcwidth" +version = "0.2.5" +description = "Measures the displayed width of unicode strings in a terminal" +category = "main" +optional = true +python-versions = "*" + +[[package]] +name = "webencodings" +version = "0.5.1" +description = "Character encoding aliases for legacy web content" +category = "main" +optional = true +python-versions = "*" + +[[package]] +name = "widgetsnbextension" +version = "3.5.2" +description = "IPython HTML widgets for Jupyter" +category = "main" +optional = true +python-versions = "*" + +[package.dependencies] +notebook = ">=4.4.1" + +[[package]] +name = "zipp" +version = "3.6.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +category = "main" +optional = true +python-versions = ">=3.6" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] +testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] + +[extras] +hdf5 = ["h5py"] +interactive = ["ipywidgets"] + +[metadata] +lock-version = "1.1" +python-versions = ">=3.6,<3.11" +content-hash = "32fb2cca7b7130dcc84a5f1f723cf3cc5c9d9ab3e7142177f523c79b473e6000" + +[metadata.files] +appnope = [ + {file = "appnope-0.1.2-py2.py3-none-any.whl", hash = "sha256:93aa393e9d6c54c5cd570ccadd8edad61ea0c4b9ea7a01409020c9aa019eb442"}, + {file = "appnope-0.1.2.tar.gz", hash = "sha256:dd83cd4b5b460958838f6eb3000c660b1f9caf2a5b1de4264e941512f603258a"}, +] +argon2-cffi = [ + {file = "argon2-cffi-21.1.0.tar.gz", hash = "sha256:f710b61103d1a1f692ca3ecbd1373e28aa5e545ac625ba067ff2feca1b2bb870"}, + {file = "argon2_cffi-21.1.0-cp35-abi3-macosx_10_14_x86_64.whl", hash = "sha256:217b4f0f853ccbbb5045242946ad2e162e396064575860141b71a85eb47e475a"}, + {file = "argon2_cffi-21.1.0-cp35-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fa7e7d1fc22514a32b1761fdfa1882b6baa5c36bb3ef557bdd69e6fc9ba14a41"}, + {file = "argon2_cffi-21.1.0-cp35-abi3-win32.whl", hash = "sha256:e4d8f0ae1524b7b0372a3e574a2561cbdddb3fdb6c28b70a72868189bda19659"}, + {file = "argon2_cffi-21.1.0-cp35-abi3-win_amd64.whl", hash = "sha256:65213a9174320a1aee03fe826596e0620783966b49eb636955958b3074e87ff9"}, + {file = "argon2_cffi-21.1.0-pp36-pypy36_pp73-macosx_10_7_x86_64.whl", hash = "sha256:245f64a203012b144b7b8c8ea6d468cb02b37caa5afee5ba4a10c80599334f6a"}, + {file = "argon2_cffi-21.1.0-pp36-pypy36_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4ad152c418f7eb640eac41ac815534e6aa61d1624530b8e7779114ecfbf327f8"}, + {file = "argon2_cffi-21.1.0-pp36-pypy36_pp73-win32.whl", hash = "sha256:bc513db2283c385ea4da31a2cd039c33380701f376f4edd12fe56db118a3b21a"}, + {file = "argon2_cffi-21.1.0-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:c7a7c8cc98ac418002090e4add5bebfff1b915ea1cb459c578cd8206fef10378"}, + {file = "argon2_cffi-21.1.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:165cadae5ac1e26644f5ade3bd9c18d89963be51d9ea8817bd671006d7909057"}, + {file = "argon2_cffi-21.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:566ffb581bbd9db5562327aee71b2eda24a1c15b23a356740abe3c011bbe0dcb"}, +] +async-generator = [ + {file = "async_generator-1.10-py3-none-any.whl", hash = "sha256:01c7bf666359b4967d2cda0000cc2e4af16a0ae098cbffcb8472fb9e8ad6585b"}, + {file = "async_generator-1.10.tar.gz", hash = "sha256:6ebb3d106c12920aaae42ccb6f787ef5eefdcdd166ea3d628fa8476abe712144"}, +] +attrs = [ + {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"}, + {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"}, +] +backcall = [ + {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, + {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, +] +bleach = [ + {file = "bleach-4.1.0-py2.py3-none-any.whl", hash = "sha256:4d2651ab93271d1129ac9cbc679f524565cc8a1b791909c4a51eac4446a15994"}, + {file = "bleach-4.1.0.tar.gz", hash = "sha256:0900d8b37eba61a802ee40ac0061f8c2b5dee29c1927dd1d233e075ebf5a71da"}, +] +cached-property = [ + {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"}, + {file = "cached_property-1.5.2-py2.py3-none-any.whl", hash = "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0"}, +] +cffi = [ + {file = "cffi-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962"}, + {file = "cffi-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0"}, + {file = "cffi-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14"}, + {file = "cffi-1.15.0-cp27-cp27m-win32.whl", hash = "sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474"}, + {file = "cffi-1.15.0-cp27-cp27m-win_amd64.whl", hash = "sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6"}, + {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27"}, + {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023"}, + {file = "cffi-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2"}, + {file = "cffi-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e"}, + {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7"}, + {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3"}, + {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c"}, + {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962"}, + {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382"}, + {file = "cffi-1.15.0-cp310-cp310-win32.whl", hash = "sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55"}, + {file = "cffi-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0"}, + {file = "cffi-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e"}, + {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39"}, + {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc"}, + {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032"}, + {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8"}, + {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605"}, + {file = "cffi-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e"}, + {file = "cffi-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc"}, + {file = "cffi-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636"}, + {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4"}, + {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997"}, + {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b"}, + {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2"}, + {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7"}, + {file = "cffi-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66"}, + {file = "cffi-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029"}, + {file = "cffi-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880"}, + {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20"}, + {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024"}, + {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e"}, + {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728"}, + {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6"}, + {file = "cffi-1.15.0-cp38-cp38-win32.whl", hash = "sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c"}, + {file = "cffi-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443"}, + {file = "cffi-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a"}, + {file = "cffi-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37"}, + {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a"}, + {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e"}, + {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796"}, + {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df"}, + {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8"}, + {file = "cffi-1.15.0-cp39-cp39-win32.whl", hash = "sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a"}, + {file = "cffi-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139"}, + {file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"}, +] +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"}, +] +decorator = [ + {file = "decorator-5.1.0-py3-none-any.whl", hash = "sha256:7b12e7c3c6ab203a29e157335e9122cb03de9ab7264b137594103fd4a683b374"}, + {file = "decorator-5.1.0.tar.gz", hash = "sha256:e59913af105b9860aa2c8d3272d9de5a56a4e608db9a2f167a8480b323d529a7"}, +] +defusedxml = [ + {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, + {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, +] +entrypoints = [ + {file = "entrypoints-0.3-py2.py3-none-any.whl", hash = "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19"}, + {file = "entrypoints-0.3.tar.gz", hash = "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451"}, +] +h5py = [ + {file = "h5py-3.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:1cd367f89a5441236bdbb795e9fb9a9e3424929c00b4a54254ca760437f83d69"}, + {file = "h5py-3.1.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:fea05349f63625a8fb808e57e42bb4c76930cf5d50ac58b678c52f913a48a89b"}, + {file = "h5py-3.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2e37352ddfcf9d77a2a47f7c8f7e125c6d20cc06c2995edeb7be222d4e152636"}, + {file = "h5py-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e33f61d3eb862614c0f273a1f993a64dc2f093e1a3094932c50ada9d2db2170f"}, + {file = "h5py-3.1.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:236ac8d943be30b617ab615c3d4a4bf4a438add2be87e54af3687ab721a18fac"}, + {file = "h5py-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:02c391fdb980762a1cc03a4bcaecd03dc463994a9a63a02264830114a96e111f"}, + {file = "h5py-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f89a3dae38843ffa49d17a31a3509a8129e9b46ece602a0138e1ed79e685c361"}, + {file = "h5py-3.1.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:ba71f6229d2013fbb606476ecc29c6223fc16b244d35fcd8566ad9dbaf910857"}, + {file = "h5py-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:dccb89358bc84abcd711363c3e138f9f4eccfdf866f2139a8e72308328765b2c"}, + {file = "h5py-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cb74df83709d6d03d11e60b9480812f58da34f194beafa8c8314dbbeeedfe0a6"}, + {file = "h5py-3.1.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:80c623be10479e81b64fa713b7ed4c0bbe9f02e8e7d2a2e5382336087b615ce4"}, + {file = "h5py-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:1cdfd1c5449ca1329d152f0b66830e93226ebce4f5e07dd8dc16bfc2b1a49d7b"}, + {file = "h5py-3.1.0.tar.gz", hash = "sha256:1e2516f190652beedcb8c7acfa1c6fa92d99b42331cbef5e5c7ec2d65b0fc3c2"}, +] +importlib-metadata = [ + {file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"}, + {file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"}, +] +ipykernel = [ + {file = "ipykernel-5.5.6-py3-none-any.whl", hash = "sha256:66f824af1ef4650e1e2f6c42e1423074321440ef79ca3651a6cfd06a4e25e42f"}, + {file = "ipykernel-5.5.6.tar.gz", hash = "sha256:4ea44b90ae1f7c38987ad58ea0809562a17c2695a0499644326f334aecd369ec"}, +] +ipython = [ + {file = "ipython-7.16.1-py3-none-any.whl", hash = "sha256:2dbcc8c27ca7d3cfe4fcdff7f45b27f9a8d3edfa70ff8024a71c7a8eb5f09d64"}, + {file = "ipython-7.16.1.tar.gz", hash = "sha256:9f4fcb31d3b2c533333893b9172264e4821c1ac91839500f31bd43f2c59b3ccf"}, +] +ipython-genutils = [ + {file = "ipython_genutils-0.2.0-py2.py3-none-any.whl", hash = "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8"}, + {file = "ipython_genutils-0.2.0.tar.gz", hash = "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8"}, +] +ipywidgets = [ + {file = "ipywidgets-7.6.5-py2.py3-none-any.whl", hash = "sha256:d258f582f915c62ea91023299603be095de19afb5ee271698f88327b9fe9bf43"}, + {file = "ipywidgets-7.6.5.tar.gz", hash = "sha256:00974f7cb4d5f8d494c19810fedb9fa9b64bffd3cda7c2be23c133a1ad3c99c5"}, +] +jedi = [ + {file = "jedi-0.18.0-py2.py3-none-any.whl", hash = "sha256:18456d83f65f400ab0c2d3319e48520420ef43b23a086fdc05dff34132f0fb93"}, + {file = "jedi-0.18.0.tar.gz", hash = "sha256:92550a404bad8afed881a137ec9a461fed49eca661414be45059329614ed0707"}, +] +jinja2 = [ + {file = "Jinja2-3.0.2-py3-none-any.whl", hash = "sha256:8569982d3f0889eed11dd620c706d39b60c36d6d25843961f33f77fb6bc6b20c"}, + {file = "Jinja2-3.0.2.tar.gz", hash = "sha256:827a0e32839ab1600d4eb1c4c33ec5a8edfbc5cb42dafa13b81f182f97784b45"}, +] +jsonschema = [ + {file = "jsonschema-4.0.0-py3-none-any.whl", hash = "sha256:c773028c649441ab980015b5b622f4cd5134cf563daaf0235ca4b73cc3734f20"}, + {file = "jsonschema-4.0.0.tar.gz", hash = "sha256:bc51325b929171791c42ebc1c70b9713eb134d3bb8ebd5474c8b659b15be6d86"}, +] +jupyter-client = [ + {file = "jupyter_client-6.1.13-py3-none-any.whl", hash = "sha256:1df17b0525b45cc03645fc9eeab023765882d3c18fb100f82499cf6a353b3941"}, + {file = "jupyter_client-6.1.13.tar.gz", hash = "sha256:d03558bc9b7955d8b4a6df604a8d9d257e00bcea7fb364fe41cdef81d998a966"}, +] +jupyter-core = [ + {file = "jupyter_core-4.9.1-py3-none-any.whl", hash = "sha256:1c091f3bbefd6f2a8782f2c1db662ca8478ac240e962ae2c66f0b87c818154ea"}, + {file = "jupyter_core-4.9.1.tar.gz", hash = "sha256:dce8a7499da5a53ae3afd5a9f4b02e5df1d57250cf48f3ad79da23b4778cd6fa"}, +] +jupyterlab-pygments = [ + {file = "jupyterlab_pygments-0.1.2-py2.py3-none-any.whl", hash = "sha256:abfb880fd1561987efaefcb2d2ac75145d2a5d0139b1876d5be806e32f630008"}, + {file = "jupyterlab_pygments-0.1.2.tar.gz", hash = "sha256:cfcda0873626150932f438eccf0f8bf22bfa92345b814890ab360d666b254146"}, +] +jupyterlab-widgets = [ + {file = "jupyterlab_widgets-1.0.2-py3-none-any.whl", hash = "sha256:f5d9efface8ec62941173ba1cffb2edd0ecddc801c11ae2931e30b50492eb8f7"}, + {file = "jupyterlab_widgets-1.0.2.tar.gz", hash = "sha256:7885092b2b96bf189c3a705cc3c412a4472ec5e8382d0b47219a66cccae73cfa"}, +] +kiwisolver = [ + {file = "kiwisolver-1.3.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fd34fbbfbc40628200730bc1febe30631347103fc8d3d4fa012c21ab9c11eca9"}, + {file = "kiwisolver-1.3.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:d3155d828dec1d43283bd24d3d3e0d9c7c350cdfcc0bd06c0ad1209c1bbc36d0"}, + {file = "kiwisolver-1.3.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5a7a7dbff17e66fac9142ae2ecafb719393aaee6a3768c9de2fd425c63b53e21"}, + {file = "kiwisolver-1.3.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:f8d6f8db88049a699817fd9178782867bf22283e3813064302ac59f61d95be05"}, + {file = "kiwisolver-1.3.1-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:5f6ccd3dd0b9739edcf407514016108e2280769c73a85b9e59aa390046dbf08b"}, + {file = "kiwisolver-1.3.1-cp36-cp36m-win32.whl", hash = "sha256:225e2e18f271e0ed8157d7f4518ffbf99b9450fca398d561eb5c4a87d0986dd9"}, + {file = "kiwisolver-1.3.1-cp36-cp36m-win_amd64.whl", hash = "sha256:cf8b574c7b9aa060c62116d4181f3a1a4e821b2ec5cbfe3775809474113748d4"}, + {file = "kiwisolver-1.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:232c9e11fd7ac3a470d65cd67e4359eee155ec57e822e5220322d7b2ac84fbf0"}, + {file = "kiwisolver-1.3.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:b38694dcdac990a743aa654037ff1188c7a9801ac3ccc548d3341014bc5ca278"}, + {file = "kiwisolver-1.3.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:ca3820eb7f7faf7f0aa88de0e54681bddcb46e485beb844fcecbcd1c8bd01689"}, + {file = "kiwisolver-1.3.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:c8fd0f1ae9d92b42854b2979024d7597685ce4ada367172ed7c09edf2cef9cb8"}, + {file = "kiwisolver-1.3.1-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:1e1bc12fb773a7b2ffdeb8380609f4f8064777877b2225dec3da711b421fda31"}, + {file = "kiwisolver-1.3.1-cp37-cp37m-win32.whl", hash = "sha256:72c99e39d005b793fb7d3d4e660aed6b6281b502e8c1eaf8ee8346023c8e03bc"}, + {file = "kiwisolver-1.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:8be8d84b7d4f2ba4ffff3665bcd0211318aa632395a1a41553250484a871d454"}, + {file = "kiwisolver-1.3.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:24cc411232d14c8abafbd0dddb83e1a4f54d77770b53db72edcfe1d611b3bf11"}, + {file = "kiwisolver-1.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:31dfd2ac56edc0ff9ac295193eeaea1c0c923c0355bf948fbd99ed6018010b72"}, + {file = "kiwisolver-1.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ef6eefcf3944e75508cdfa513c06cf80bafd7d179e14c1334ebdca9ebb8c2c66"}, + {file = "kiwisolver-1.3.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:563c649cfdef27d081c84e72a03b48ea9408c16657500c312575ae9d9f7bc1c3"}, + {file = "kiwisolver-1.3.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:78751b33595f7f9511952e7e60ce858c6d64db2e062afb325985ddbd34b5c131"}, + {file = "kiwisolver-1.3.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:a357fd4f15ee49b4a98b44ec23a34a95f1e00292a139d6015c11f55774ef10de"}, + {file = "kiwisolver-1.3.1-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:5989db3b3b34b76c09253deeaf7fbc2707616f130e166996606c284395da3f18"}, + {file = "kiwisolver-1.3.1-cp38-cp38-win32.whl", hash = "sha256:c08e95114951dc2090c4a630c2385bef681cacf12636fb0241accdc6b303fd81"}, + {file = "kiwisolver-1.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:44a62e24d9b01ba94ae7a4a6c3fb215dc4af1dde817e7498d901e229aaf50e4e"}, + {file = "kiwisolver-1.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6d9d8d9b31aa8c2d80a690693aebd8b5e2b7a45ab065bb78f1609995d2c79240"}, + {file = "kiwisolver-1.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:50af681a36b2a1dee1d3c169ade9fdc59207d3c31e522519181e12f1b3ba7000"}, + {file = "kiwisolver-1.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:792e69140828babe9649de583e1a03a0f2ff39918a71782c76b3c683a67c6dfd"}, + {file = "kiwisolver-1.3.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:a53d27d0c2a0ebd07e395e56a1fbdf75ffedc4a05943daf472af163413ce9598"}, + {file = "kiwisolver-1.3.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:834ee27348c4aefc20b479335fd422a2c69db55f7d9ab61721ac8cd83eb78882"}, + {file = "kiwisolver-1.3.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:5c3e6455341008a054cccee8c5d24481bcfe1acdbc9add30aa95798e95c65621"}, + {file = "kiwisolver-1.3.1-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:acef3d59d47dd85ecf909c359d0fd2c81ed33bdff70216d3956b463e12c38a54"}, + {file = "kiwisolver-1.3.1-cp39-cp39-win32.whl", hash = "sha256:c5518d51a0735b1e6cee1fdce66359f8d2b59c3ca85dc2b0813a8aa86818a030"}, + {file = "kiwisolver-1.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:b9edd0110a77fc321ab090aaa1cfcaba1d8499850a12848b81be2222eab648f6"}, + {file = "kiwisolver-1.3.1-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0cd53f403202159b44528498de18f9285b04482bab2a6fc3f5dd8dbb9352e30d"}, + {file = "kiwisolver-1.3.1-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:33449715e0101e4d34f64990352bce4095c8bf13bed1b390773fc0a7295967b3"}, + {file = "kiwisolver-1.3.1-pp36-pypy36_pp73-win32.whl", hash = "sha256:401a2e9afa8588589775fe34fc22d918ae839aaaf0c0e96441c0fdbce6d8ebe6"}, + {file = "kiwisolver-1.3.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d6563ccd46b645e966b400bb8a95d3457ca6cf3bba1e908f9e0927901dfebeb1"}, + {file = "kiwisolver-1.3.1.tar.gz", hash = "sha256:950a199911a8d94683a6b10321f9345d5a3a8433ec58b217ace979e18f16e248"}, +] +markupsafe = [ + {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"}, + {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"}, +] +matplotlib = [ + {file = "matplotlib-3.3.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:672960dd114e342b7c610bf32fb99d14227f29919894388b41553217457ba7ef"}, + {file = "matplotlib-3.3.4-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:7c155437ae4fd366e2700e2716564d1787700687443de46bcb895fe0f84b761d"}, + {file = "matplotlib-3.3.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:a17f0a10604fac7627ec82820439e7db611722e80c408a726cd00d8c974c2fb3"}, + {file = "matplotlib-3.3.4-cp36-cp36m-win32.whl", hash = "sha256:215e2a30a2090221a9481db58b770ce56b8ef46f13224ae33afe221b14b24dc1"}, + {file = "matplotlib-3.3.4-cp36-cp36m-win_amd64.whl", hash = "sha256:348e6032f666ffd151b323342f9278b16b95d4a75dfacae84a11d2829a7816ae"}, + {file = "matplotlib-3.3.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:94bdd1d55c20e764d8aea9d471d2ae7a7b2c84445e0fa463f02e20f9730783e1"}, + {file = "matplotlib-3.3.4-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:a1acb72f095f1d58ecc2538ed1b8bca0b57df313b13db36ed34b8cdf1868e674"}, + {file = "matplotlib-3.3.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:46b1a60a04e6d884f0250d5cc8dc7bd21a9a96c584a7acdaab44698a44710bab"}, + {file = "matplotlib-3.3.4-cp37-cp37m-win32.whl", hash = "sha256:ed4a9e6dcacba56b17a0a9ac22ae2c72a35b7f0ef0693aa68574f0b2df607a89"}, + {file = "matplotlib-3.3.4-cp37-cp37m-win_amd64.whl", hash = "sha256:c24c05f645aef776e8b8931cb81e0f1632d229b42b6d216e30836e2e145a2b40"}, + {file = "matplotlib-3.3.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7310e353a4a35477c7f032409966920197d7df3e757c7624fd842f3eeb307d3d"}, + {file = "matplotlib-3.3.4-cp38-cp38-manylinux1_i686.whl", hash = "sha256:451cc89cb33d6652c509fc6b588dc51c41d7246afdcc29b8624e256b7663ed1f"}, + {file = "matplotlib-3.3.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:3d2eb9c1cc254d0ffa90bc96fde4b6005d09c2228f99dfd493a4219c1af99644"}, + {file = "matplotlib-3.3.4-cp38-cp38-win32.whl", hash = "sha256:e15fa23d844d54e7b3b7243afd53b7567ee71c721f592deb0727ee85e668f96a"}, + {file = "matplotlib-3.3.4-cp38-cp38-win_amd64.whl", hash = "sha256:1de0bb6cbfe460725f0e97b88daa8643bcf9571c18ba90bb8e41432aaeca91d6"}, + {file = "matplotlib-3.3.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f44149a0ef5b4991aaef12a93b8e8d66d6412e762745fea1faa61d98524e0ba9"}, + {file = "matplotlib-3.3.4-cp39-cp39-manylinux1_i686.whl", hash = "sha256:746a1df55749629e26af7f977ea426817ca9370ad1569436608dc48d1069b87c"}, + {file = "matplotlib-3.3.4-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:5f571b92a536206f7958f7cb2d367ff6c9a1fa8229dc35020006e4cdd1ca0acd"}, + {file = "matplotlib-3.3.4-cp39-cp39-win32.whl", hash = "sha256:9265ae0fb35e29f9b8cc86c2ab0a2e3dcddc4dd9de4b85bf26c0f63fe5c1c2ca"}, + {file = "matplotlib-3.3.4-cp39-cp39-win_amd64.whl", hash = "sha256:9a79e5dd7bb797aa611048f5b70588b23c5be05b63eefd8a0d152ac77c4243db"}, + {file = "matplotlib-3.3.4-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1e850163579a8936eede29fad41e202b25923a0a8d5ffd08ce50fc0a97dcdc93"}, + {file = "matplotlib-3.3.4-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:d738acfdfb65da34c91acbdb56abed46803db39af259b7f194dc96920360dbe4"}, + {file = "matplotlib-3.3.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:aa49571d8030ad0b9ac39708ee77bd2a22f87815e12bdee52ecaffece9313ed8"}, + {file = "matplotlib-3.3.4-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:cf3a7e54eff792f0815dbbe9b85df2f13d739289c93d346925554f71d484be78"}, + {file = "matplotlib-3.3.4.tar.gz", hash = "sha256:3e477db76c22929e4c6876c44f88d790aacdf3c3f8f3a90cb1975c0bf37825b0"}, +] +mistune = [ + {file = "mistune-0.8.4-py2.py3-none-any.whl", hash = "sha256:88a1051873018da288eee8538d476dffe1262495144b33ecb586c4ab266bb8d4"}, + {file = "mistune-0.8.4.tar.gz", hash = "sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e"}, +] +nbclient = [ + {file = "nbclient-0.5.1-py3-none-any.whl", hash = "sha256:4d6b116187c795c99b9dba13d46e764d596574b14c296d60670c8dfe454db364"}, + {file = "nbclient-0.5.1.tar.gz", hash = "sha256:01e2d726d16eaf2cde6db74a87e2451453547e8832d142f73f72fddcd4fe0250"}, +] +nbconvert = [ + {file = "nbconvert-6.0.7-py3-none-any.whl", hash = "sha256:39e9f977920b203baea0be67eea59f7b37a761caa542abe80f5897ce3cf6311d"}, + {file = "nbconvert-6.0.7.tar.gz", hash = "sha256:cbbc13a86dfbd4d1b5dee106539de0795b4db156c894c2c5dc382062bbc29002"}, +] +nbformat = [ + {file = "nbformat-5.1.3-py3-none-any.whl", hash = "sha256:eb8447edd7127d043361bc17f2f5a807626bc8e878c7709a1c647abda28a9171"}, + {file = "nbformat-5.1.3.tar.gz", hash = "sha256:b516788ad70771c6250977c1374fcca6edebe6126fd2adb5a69aa5c2356fd1c8"}, +] +nest-asyncio = [ + {file = "nest_asyncio-1.5.1-py3-none-any.whl", hash = "sha256:76d6e972265063fe92a90b9cc4fb82616e07d586b346ed9d2c89a4187acea39c"}, + {file = "nest_asyncio-1.5.1.tar.gz", hash = "sha256:afc5a1c515210a23c461932765691ad39e8eba6551c055ac8d5546e69250d0aa"}, +] +notebook = [ + {file = "notebook-6.4.5-py3-none-any.whl", hash = "sha256:f7b4362698fed34f44038de0517b2e5136c1e7c379797198c1736121d3d597bd"}, + {file = "notebook-6.4.5.tar.gz", hash = "sha256:872e20da9ae518bbcac3e4e0092d5bd35454e847dedb8cb9739e9f3b68406be0"}, +] +numpy = [ + {file = "numpy-1.19.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cc6bd4fd593cb261332568485e20a0712883cf631f6f5e8e86a52caa8b2b50ff"}, + {file = "numpy-1.19.5-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:aeb9ed923be74e659984e321f609b9ba54a48354bfd168d21a2b072ed1e833ea"}, + {file = "numpy-1.19.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:8b5e972b43c8fc27d56550b4120fe6257fdc15f9301914380b27f74856299fea"}, + {file = "numpy-1.19.5-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:43d4c81d5ffdff6bae58d66a3cd7f54a7acd9a0e7b18d97abb255defc09e3140"}, + {file = "numpy-1.19.5-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:a4646724fba402aa7504cd48b4b50e783296b5e10a524c7a6da62e4a8ac9698d"}, + {file = "numpy-1.19.5-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:2e55195bc1c6b705bfd8ad6f288b38b11b1af32f3c8289d6c50d47f950c12e76"}, + {file = "numpy-1.19.5-cp36-cp36m-win32.whl", hash = "sha256:39b70c19ec771805081578cc936bbe95336798b7edf4732ed102e7a43ec5c07a"}, + {file = "numpy-1.19.5-cp36-cp36m-win_amd64.whl", hash = "sha256:dbd18bcf4889b720ba13a27ec2f2aac1981bd41203b3a3b27ba7a33f88ae4827"}, + {file = "numpy-1.19.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:603aa0706be710eea8884af807b1b3bc9fb2e49b9f4da439e76000f3b3c6ff0f"}, + {file = "numpy-1.19.5-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:cae865b1cae1ec2663d8ea56ef6ff185bad091a5e33ebbadd98de2cfa3fa668f"}, + {file = "numpy-1.19.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:36674959eed6957e61f11c912f71e78857a8d0604171dfd9ce9ad5cbf41c511c"}, + {file = "numpy-1.19.5-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:06fab248a088e439402141ea04f0fffb203723148f6ee791e9c75b3e9e82f080"}, + {file = "numpy-1.19.5-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6149a185cece5ee78d1d196938b2a8f9d09f5a5ebfbba66969302a778d5ddd1d"}, + {file = "numpy-1.19.5-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:50a4a0ad0111cc1b71fa32dedd05fa239f7fb5a43a40663269bb5dc7877cfd28"}, + {file = "numpy-1.19.5-cp37-cp37m-win32.whl", hash = "sha256:d051ec1c64b85ecc69531e1137bb9751c6830772ee5c1c426dbcfe98ef5788d7"}, + {file = "numpy-1.19.5-cp37-cp37m-win_amd64.whl", hash = "sha256:a12ff4c8ddfee61f90a1633a4c4afd3f7bcb32b11c52026c92a12e1325922d0d"}, + {file = "numpy-1.19.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cf2402002d3d9f91c8b01e66fbb436a4ed01c6498fffed0e4c7566da1d40ee1e"}, + {file = "numpy-1.19.5-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1ded4fce9cfaaf24e7a0ab51b7a87be9038ea1ace7f34b841fe3b6894c721d1c"}, + {file = "numpy-1.19.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:012426a41bc9ab63bb158635aecccc7610e3eff5d31d1eb43bc099debc979d94"}, + {file = "numpy-1.19.5-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:759e4095edc3c1b3ac031f34d9459fa781777a93ccc633a472a5468587a190ff"}, + {file = "numpy-1.19.5-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:a9d17f2be3b427fbb2bce61e596cf555d6f8a56c222bd2ca148baeeb5e5c783c"}, + {file = "numpy-1.19.5-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:99abf4f353c3d1a0c7a5f27699482c987cf663b1eac20db59b8c7b061eabd7fc"}, + {file = "numpy-1.19.5-cp38-cp38-win32.whl", hash = "sha256:384ec0463d1c2671170901994aeb6dce126de0a95ccc3976c43b0038a37329c2"}, + {file = "numpy-1.19.5-cp38-cp38-win_amd64.whl", hash = "sha256:811daee36a58dc79cf3d8bdd4a490e4277d0e4b7d103a001a4e73ddb48e7e6aa"}, + {file = "numpy-1.19.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c843b3f50d1ab7361ca4f0b3639bf691569493a56808a0b0c54a051d260b7dbd"}, + {file = "numpy-1.19.5-cp39-cp39-manylinux1_i686.whl", hash = "sha256:d6631f2e867676b13026e2846180e2c13c1e11289d67da08d71cacb2cd93d4aa"}, + {file = "numpy-1.19.5-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7fb43004bce0ca31d8f13a6eb5e943fa73371381e53f7074ed21a4cb786c32f8"}, + {file = "numpy-1.19.5-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:2ea52bd92ab9f768cc64a4c3ef8f4b2580a17af0a5436f6126b08efbd1838371"}, + {file = "numpy-1.19.5-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:400580cbd3cff6ffa6293df2278c75aef2d58d8d93d3c5614cd67981dae68ceb"}, + {file = "numpy-1.19.5-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:df609c82f18c5b9f6cb97271f03315ff0dbe481a2a02e56aeb1b1a985ce38e60"}, + {file = "numpy-1.19.5-cp39-cp39-win32.whl", hash = "sha256:ab83f24d5c52d60dbc8cd0528759532736b56db58adaa7b5f1f76ad551416a1e"}, + {file = "numpy-1.19.5-cp39-cp39-win_amd64.whl", hash = "sha256:0eef32ca3132a48e43f6a0f5a82cb508f22ce5a3d6f67a8329c81c8e226d3f6e"}, + {file = "numpy-1.19.5-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:a0d53e51a6cb6f0d9082decb7a4cb6dfb33055308c4c44f53103c073f649af73"}, + {file = "numpy-1.19.5.zip", hash = "sha256:a76f502430dd98d7546e1ea2250a7360c065a5fdea52b2dffe8ae7180909b6f4"}, +] +packaging = [ + {file = "packaging-21.0-py3-none-any.whl", hash = "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14"}, + {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"}, +] +pandocfilters = [ + {file = "pandocfilters-1.5.0-py2.py3-none-any.whl", hash = "sha256:33aae3f25fd1a026079f5d27bdd52496f0e0803b3469282162bafdcbdf6ef14f"}, + {file = "pandocfilters-1.5.0.tar.gz", hash = "sha256:0b679503337d233b4339a817bfc8c50064e2eff681314376a47cb582305a7a38"}, +] +parso = [ + {file = "parso-0.8.2-py2.py3-none-any.whl", hash = "sha256:a8c4922db71e4fdb90e0d0bc6e50f9b273d3397925e5e60a717e719201778d22"}, + {file = "parso-0.8.2.tar.gz", hash = "sha256:12b83492c6239ce32ff5eed6d3639d6a536170723c6f3f1506869f1ace413398"}, +] +pexpect = [ + {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, + {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, +] +pickleshare = [ + {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, + {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, +] +pillow = [ + {file = "Pillow-8.4.0-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:81f8d5c81e483a9442d72d182e1fb6dcb9723f289a57e8030811bac9ea3fef8d"}, + {file = "Pillow-8.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3f97cfb1e5a392d75dd8b9fd274d205404729923840ca94ca45a0af57e13dbe6"}, + {file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb9fc393f3c61f9054e1ed26e6fe912c7321af2f41ff49d3f83d05bacf22cc78"}, + {file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d82cdb63100ef5eedb8391732375e6d05993b765f72cb34311fab92103314649"}, + {file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62cc1afda735a8d109007164714e73771b499768b9bb5afcbbee9d0ff374b43f"}, + {file = "Pillow-8.4.0-cp310-cp310-win32.whl", hash = "sha256:e3dacecfbeec9a33e932f00c6cd7996e62f53ad46fbe677577394aaa90ee419a"}, + {file = "Pillow-8.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:620582db2a85b2df5f8a82ddeb52116560d7e5e6b055095f04ad828d1b0baa39"}, + {file = "Pillow-8.4.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:1bc723b434fbc4ab50bb68e11e93ce5fb69866ad621e3c2c9bdb0cd70e345f55"}, + {file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72cbcfd54df6caf85cc35264c77ede902452d6df41166010262374155947460c"}, + {file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70ad9e5c6cb9b8487280a02c0ad8a51581dcbbe8484ce058477692a27c151c0a"}, + {file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25a49dc2e2f74e65efaa32b153527fc5ac98508d502fa46e74fa4fd678ed6645"}, + {file = "Pillow-8.4.0-cp36-cp36m-win32.whl", hash = "sha256:93ce9e955cc95959df98505e4608ad98281fff037350d8c2671c9aa86bcf10a9"}, + {file = "Pillow-8.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2e4440b8f00f504ee4b53fe30f4e381aae30b0568193be305256b1462216feff"}, + {file = "Pillow-8.4.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:8c803ac3c28bbc53763e6825746f05cc407b20e4a69d0122e526a582e3b5e153"}, + {file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8a17b5d948f4ceeceb66384727dde11b240736fddeda54ca740b9b8b1556b29"}, + {file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1394a6ad5abc838c5cd8a92c5a07535648cdf6d09e8e2d6df916dfa9ea86ead8"}, + {file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:792e5c12376594bfcb986ebf3855aa4b7c225754e9a9521298e460e92fb4a488"}, + {file = "Pillow-8.4.0-cp37-cp37m-win32.whl", hash = "sha256:d99ec152570e4196772e7a8e4ba5320d2d27bf22fdf11743dd882936ed64305b"}, + {file = "Pillow-8.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:7b7017b61bbcdd7f6363aeceb881e23c46583739cb69a3ab39cb384f6ec82e5b"}, + {file = "Pillow-8.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:d89363f02658e253dbd171f7c3716a5d340a24ee82d38aab9183f7fdf0cdca49"}, + {file = "Pillow-8.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0a0956fdc5defc34462bb1c765ee88d933239f9a94bc37d132004775241a7585"}, + {file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b7bb9de00197fb4261825c15551adf7605cf14a80badf1761d61e59da347779"}, + {file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72b9e656e340447f827885b8d7a15fc8c4e68d410dc2297ef6787eec0f0ea409"}, + {file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5a4532a12314149d8b4e4ad8ff09dde7427731fcfa5917ff16d0291f13609df"}, + {file = "Pillow-8.4.0-cp38-cp38-win32.whl", hash = "sha256:82aafa8d5eb68c8463b6e9baeb4f19043bb31fefc03eb7b216b51e6a9981ae09"}, + {file = "Pillow-8.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:066f3999cb3b070a95c3652712cffa1a748cd02d60ad7b4e485c3748a04d9d76"}, + {file = "Pillow-8.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:5503c86916d27c2e101b7f71c2ae2cddba01a2cf55b8395b0255fd33fa4d1f1a"}, + {file = "Pillow-8.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4acc0985ddf39d1bc969a9220b51d94ed51695d455c228d8ac29fcdb25810e6e"}, + {file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b052a619a8bfcf26bd8b3f48f45283f9e977890263e4571f2393ed8898d331b"}, + {file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:493cb4e415f44cd601fcec11c99836f707bb714ab03f5ed46ac25713baf0ff20"}, + {file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8831cb7332eda5dc89b21a7bce7ef6ad305548820595033a4b03cf3091235ed"}, + {file = "Pillow-8.4.0-cp39-cp39-win32.whl", hash = "sha256:5e9ac5f66616b87d4da618a20ab0a38324dbe88d8a39b55be8964eb520021e02"}, + {file = "Pillow-8.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:3eb1ce5f65908556c2d8685a8f0a6e989d887ec4057326f6c22b24e8a172c66b"}, + {file = "Pillow-8.4.0-pp36-pypy36_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ddc4d832a0f0b4c52fff973a0d44b6c99839a9d016fe4e6a1cb8f3eea96479c2"}, + {file = "Pillow-8.4.0-pp36-pypy36_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a3e5ddc44c14042f0844b8cf7d2cd455f6cc80fd7f5eefbe657292cf601d9ad"}, + {file = "Pillow-8.4.0-pp36-pypy36_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c70e94281588ef053ae8998039610dbd71bc509e4acbc77ab59d7d2937b10698"}, + {file = "Pillow-8.4.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:3862b7256046fcd950618ed22d1d60b842e3a40a48236a5498746f21189afbbc"}, + {file = "Pillow-8.4.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4901622493f88b1a29bd30ec1a2f683782e57c3c16a2dbc7f2595ba01f639df"}, + {file = "Pillow-8.4.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84c471a734240653a0ec91dec0996696eea227eafe72a33bd06c92697728046b"}, + {file = "Pillow-8.4.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:244cf3b97802c34c41905d22810846802a3329ddcb93ccc432870243211c79fc"}, + {file = "Pillow-8.4.0.tar.gz", hash = "sha256:b8e2f83c56e141920c39464b852de3719dfbfb6e3c99a2d8da0edf4fb33176ed"}, +] +prometheus-client = [ + {file = "prometheus_client-0.12.0-py2.py3-none-any.whl", hash = "sha256:317453ebabff0a1b02df7f708efbab21e3489e7072b61cb6957230dd004a0af0"}, + {file = "prometheus_client-0.12.0.tar.gz", hash = "sha256:1b12ba48cee33b9b0b9de64a1047cbd3c5f2d0ab6ebcead7ddda613a750ec3c5"}, +] +prompt-toolkit = [ + {file = "prompt_toolkit-3.0.3-py3-none-any.whl", hash = "sha256:c93e53af97f630f12f5f62a3274e79527936ed466f038953dfa379d4941f651a"}, + {file = "prompt_toolkit-3.0.3.tar.gz", hash = "sha256:a402e9bf468b63314e37460b68ba68243d55b2f8c4d0192f85a019af3945050e"}, +] +ptyprocess = [ + {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, + {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, +] +py = [ + {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"}, + {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"}, +] +pycparser = [ + {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"}, + {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"}, +] +pygments = [ + {file = "Pygments-2.10.0-py3-none-any.whl", hash = "sha256:b8e67fe6af78f492b3c4b3e2970c0624cbf08beb1e493b2c99b9fa1b67a20380"}, + {file = "Pygments-2.10.0.tar.gz", hash = "sha256:f398865f7eb6874156579fdf36bc840a03cab64d1cde9e93d68f46a425ec52c6"}, +] +pyparsing = [ + {file = "pyparsing-3.0.4-py3-none-any.whl", hash = "sha256:c0a7dfcd26825bd4453574c4e7ad04aa095975ce54d04f738fe3a8350fbd223a"}, + {file = "pyparsing-3.0.4.tar.gz", hash = "sha256:e0df773d7fa2240322daae7805626dfc5f2d5effb34e1a7be2702c99cfb9f6b1"}, +] +pyrsistent = [ + {file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"}, + {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d"}, + {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2"}, + {file = "pyrsistent-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1"}, + {file = "pyrsistent-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7"}, + {file = "pyrsistent-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396"}, + {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710"}, + {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35"}, + {file = "pyrsistent-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f"}, + {file = "pyrsistent-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2"}, + {file = "pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427"}, + {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef"}, + {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c"}, + {file = "pyrsistent-0.18.0-cp38-cp38-win32.whl", hash = "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78"}, + {file = "pyrsistent-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b"}, + {file = "pyrsistent-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4"}, + {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680"}, + {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426"}, + {file = "pyrsistent-0.18.0-cp39-cp39-win32.whl", hash = "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b"}, + {file = "pyrsistent-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea"}, + {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"}, +] +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"}, +] +pywin32 = [ + {file = "pywin32-302-cp310-cp310-win32.whl", hash = "sha256:251b7a9367355ccd1a4cd69cd8dd24bd57b29ad83edb2957cfa30f7ed9941efa"}, + {file = "pywin32-302-cp310-cp310-win_amd64.whl", hash = "sha256:79cf7e6ddaaf1cd47a9e50cc74b5d770801a9db6594464137b1b86aa91edafcc"}, + {file = "pywin32-302-cp36-cp36m-win32.whl", hash = "sha256:fe21c2fb332d03dac29de070f191bdbf14095167f8f2165fdc57db59b1ecc006"}, + {file = "pywin32-302-cp36-cp36m-win_amd64.whl", hash = "sha256:d3761ab4e8c5c2dbc156e2c9ccf38dd51f936dc77e58deb940ffbc4b82a30528"}, + {file = "pywin32-302-cp37-cp37m-win32.whl", hash = "sha256:48dd4e348f1ee9538dd4440bf201ea8c110ea6d9f3a5010d79452e9fa80480d9"}, + {file = "pywin32-302-cp37-cp37m-win_amd64.whl", hash = "sha256:496df89f10c054c9285cc99f9d509e243f4e14ec8dfc6d78c9f0bf147a893ab1"}, + {file = "pywin32-302-cp38-cp38-win32.whl", hash = "sha256:e372e477d938a49266136bff78279ed14445e00718b6c75543334351bf535259"}, + {file = "pywin32-302-cp38-cp38-win_amd64.whl", hash = "sha256:543552e66936378bd2d673c5a0a3d9903dba0b0a87235ef0c584f058ceef5872"}, + {file = "pywin32-302-cp39-cp39-win32.whl", hash = "sha256:2393c1a40dc4497fd6161b76801b8acd727c5610167762b7c3e9fd058ef4a6ab"}, + {file = "pywin32-302-cp39-cp39-win_amd64.whl", hash = "sha256:af5aea18167a31efcacc9f98a2ca932c6b6a6d91ebe31f007509e293dea12580"}, +] +pywinpty = [ + {file = "pywinpty-1.1.5-cp310-none-win_amd64.whl", hash = "sha256:59e38276f732121b7b708b488055132c695ab7f8790b6ebee9b5b277e30c40e1"}, + {file = "pywinpty-1.1.5-cp36-none-win_amd64.whl", hash = "sha256:0f73bea7f4ecc4711d3706bb0adea0b426c384ff38b619e169d58e20bc307eb0"}, + {file = "pywinpty-1.1.5-cp37-none-win_amd64.whl", hash = "sha256:4cefeef61ab82e9e2bfe228d83a49117e33899931766dd18d576ea5c9187c1e0"}, + {file = "pywinpty-1.1.5-cp38-none-win_amd64.whl", hash = "sha256:44c78a9a74f1b6bff957f8b0acad0525f48f716ac61fd9d39e1eb6f87f1a46a0"}, + {file = "pywinpty-1.1.5-cp39-none-win_amd64.whl", hash = "sha256:ad12ddf276446e0440a760b7c0ba128d39602bc8e6641e0ef8447f1a466a8346"}, + {file = "pywinpty-1.1.5.tar.gz", hash = "sha256:92125f0f8e4e64bb5f3bf270a182c9206dc1765542c59bc07441908a9db17504"}, +] +pyzmq = [ + {file = "pyzmq-22.3.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:6b217b8f9dfb6628f74b94bdaf9f7408708cb02167d644edca33f38746ca12dd"}, + {file = "pyzmq-22.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2841997a0d85b998cbafecb4183caf51fd19c4357075dfd33eb7efea57e4c149"}, + {file = "pyzmq-22.3.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f89468059ebc519a7acde1ee50b779019535db8dcf9b8c162ef669257fef7a93"}, + {file = "pyzmq-22.3.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea12133df25e3a6918718fbb9a510c6ee5d3fdd5a346320421aac3882f4feeea"}, + {file = "pyzmq-22.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76c532fd68b93998aab92356be280deec5de8f8fe59cd28763d2cc8a58747b7f"}, + {file = "pyzmq-22.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:f907c7359ce8bf7f7e63c82f75ad0223384105f5126f313400b7e8004d9b33c3"}, + {file = "pyzmq-22.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:902319cfe23366595d3fa769b5b751e6ee6750a0a64c5d9f757d624b2ac3519e"}, + {file = "pyzmq-22.3.0-cp310-cp310-win32.whl", hash = "sha256:67db33bea0a29d03e6eeec55a8190e033318cee3cbc732ba8fd939617cbf762d"}, + {file = "pyzmq-22.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:7661fc1d5cb73481cf710a1418a4e1e301ed7d5d924f91c67ba84b2a1b89defd"}, + {file = "pyzmq-22.3.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:79244b9e97948eaf38695f4b8e6fc63b14b78cc37f403c6642ba555517ac1268"}, + {file = "pyzmq-22.3.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ab888624ed68930442a3f3b0b921ad7439c51ba122dbc8c386e6487a658e4a4e"}, + {file = "pyzmq-22.3.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:18cd854b423fce44951c3a4d3e686bac8f1243d954f579e120a1714096637cc0"}, + {file = "pyzmq-22.3.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:de8df0684398bd74ad160afdc2a118ca28384ac6f5e234eb0508858d8d2d9364"}, + {file = "pyzmq-22.3.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:62bcade20813796c426409a3e7423862d50ff0639f5a2a95be4b85b09a618666"}, + {file = "pyzmq-22.3.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:ea5a79e808baef98c48c884effce05c31a0698c1057de8fc1c688891043c1ce1"}, + {file = "pyzmq-22.3.0-cp36-cp36m-win32.whl", hash = "sha256:3c1895c95be92600233e476fe283f042e71cf8f0b938aabf21b7aafa62a8dac9"}, + {file = "pyzmq-22.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:851977788b9caa8ed011f5f643d3ee8653af02c5fc723fa350db5125abf2be7b"}, + {file = "pyzmq-22.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b4ebed0977f92320f6686c96e9e8dd29eed199eb8d066936bac991afc37cbb70"}, + {file = "pyzmq-22.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42abddebe2c6a35180ca549fadc7228d23c1e1f76167c5ebc8a936b5804ea2df"}, + {file = "pyzmq-22.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c1e41b32d6f7f9c26bc731a8b529ff592f31fc8b6ef2be9fa74abd05c8a342d7"}, + {file = "pyzmq-22.3.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:be4e0f229cf3a71f9ecd633566bd6f80d9fa6afaaff5489492be63fe459ef98c"}, + {file = "pyzmq-22.3.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:08c4e315a76ef26eb833511ebf3fa87d182152adf43dedee8d79f998a2162a0b"}, + {file = "pyzmq-22.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:badb868fff14cfd0e200eaa845887b1011146a7d26d579aaa7f966c203736b92"}, + {file = "pyzmq-22.3.0-cp37-cp37m-win32.whl", hash = "sha256:7c58f598d9fcc52772b89a92d72bf8829c12d09746a6d2c724c5b30076c1f11d"}, + {file = "pyzmq-22.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2b97502c16a5ec611cd52410bdfaab264997c627a46b0f98d3f666227fd1ea2d"}, + {file = "pyzmq-22.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d728b08448e5ac3e4d886b165385a262883c34b84a7fe1166277fe675e1c197a"}, + {file = "pyzmq-22.3.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:480b9931bfb08bf8b094edd4836271d4d6b44150da051547d8c7113bf947a8b0"}, + {file = "pyzmq-22.3.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7dc09198e4073e6015d9a8ea093fc348d4e59de49382476940c3dd9ae156fba8"}, + {file = "pyzmq-22.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ca6cd58f62a2751728016d40082008d3b3412a7f28ddfb4a2f0d3c130f69e74"}, + {file = "pyzmq-22.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:468bd59a588e276961a918a3060948ae68f6ff5a7fa10bb2f9160c18fe341067"}, + {file = "pyzmq-22.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c88fa7410e9fc471e0858638f403739ee869924dd8e4ae26748496466e27ac59"}, + {file = "pyzmq-22.3.0-cp38-cp38-win32.whl", hash = "sha256:c0f84360dcca3481e8674393bdf931f9f10470988f87311b19d23cda869bb6b7"}, + {file = "pyzmq-22.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:f762442bab706fd874064ca218b33a1d8e40d4938e96c24dafd9b12e28017f45"}, + {file = "pyzmq-22.3.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:954e73c9cd4d6ae319f1c936ad159072b6d356a92dcbbabfd6e6204b9a79d356"}, + {file = "pyzmq-22.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f43b4a2e6218371dd4f41e547bd919ceeb6ebf4abf31a7a0669cd11cd91ea973"}, + {file = "pyzmq-22.3.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:acebba1a23fb9d72b42471c3771b6f2f18dcd46df77482612054bd45c07dfa36"}, + {file = "pyzmq-22.3.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cf98fd7a6c8aaa08dbc699ffae33fd71175696d78028281bc7b832b26f00ca57"}, + {file = "pyzmq-22.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d072f7dfbdb184f0786d63bda26e8a0882041b1e393fbe98940395f7fab4c5e2"}, + {file = "pyzmq-22.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:53f4fd13976789ffafedd4d46f954c7bb01146121812b72b4ddca286034df966"}, + {file = "pyzmq-22.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d1b5d457acbadcf8b27561deeaa386b0217f47626b29672fa7bd31deb6e91e1b"}, + {file = "pyzmq-22.3.0-cp39-cp39-win32.whl", hash = "sha256:e6a02cf7271ee94674a44f4e62aa061d2d049001c844657740e156596298b70b"}, + {file = "pyzmq-22.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:d3dcb5548ead4f1123851a5ced467791f6986d68c656bc63bfff1bf9e36671e2"}, + {file = "pyzmq-22.3.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3a4c9886d61d386b2b493377d980f502186cd71d501fffdba52bd2a0880cef4f"}, + {file = "pyzmq-22.3.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:80e043a89c6cadefd3a0712f8a1322038e819ebe9dbac7eca3bce1721bcb63bf"}, + {file = "pyzmq-22.3.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1621e7a2af72cced1f6ec8ca8ca91d0f76ac236ab2e8828ac8fe909512d566cb"}, + {file = "pyzmq-22.3.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:d6157793719de168b199194f6b6173f0ccd3bf3499e6870fac17086072e39115"}, + {file = "pyzmq-22.3.0.tar.gz", hash = "sha256:8eddc033e716f8c91c6a2112f0a8ebc5e00532b4a6ae1eb0ccc48e027f9c671c"}, +] +send2trash = [ + {file = "Send2Trash-1.8.0-py3-none-any.whl", hash = "sha256:f20eaadfdb517eaca5ce077640cb261c7d2698385a6a0f072a4a5447fd49fa08"}, + {file = "Send2Trash-1.8.0.tar.gz", hash = "sha256:d2c24762fd3759860a0aff155e45871447ea58d2be6bdd39b5c8f966a0c99c2d"}, +] +setuptools = [ + {file = "setuptools-58.5.2-py3-none-any.whl", hash = "sha256:3a99bc3975c1eb3cca138d3f178aedaca87f75e9372e40cd361056b82d630659"}, + {file = "setuptools-58.5.2.tar.gz", hash = "sha256:132856b317080c4688b664e40164ad27fa210636258ee7c25cf2eb49b982ee51"}, +] +six = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] +terminado = [ + {file = "terminado-0.12.1-py3-none-any.whl", hash = "sha256:09fdde344324a1c9c6e610ee4ca165c4bb7f5bbf982fceeeb38998a988ef8452"}, + {file = "terminado-0.12.1.tar.gz", hash = "sha256:b20fd93cc57c1678c799799d117874367cc07a3d2d55be95205b1a88fa08393f"}, +] +testpath = [ + {file = "testpath-0.5.0-py3-none-any.whl", hash = "sha256:8044f9a0bab6567fc644a3593164e872543bb44225b0e24846e2c89237937589"}, + {file = "testpath-0.5.0.tar.gz", hash = "sha256:1acf7a0bcd3004ae8357409fc33751e16d37ccc650921da1094a86581ad1e417"}, +] +tornado = [ + {file = "tornado-6.1-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:d371e811d6b156d82aa5f9a4e08b58debf97c302a35714f6f45e35139c332e32"}, + {file = "tornado-6.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:0d321a39c36e5f2c4ff12b4ed58d41390460f798422c4504e09eb5678e09998c"}, + {file = "tornado-6.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9de9e5188a782be6b1ce866e8a51bc76a0fbaa0e16613823fc38e4fc2556ad05"}, + {file = "tornado-6.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:61b32d06ae8a036a6607805e6720ef00a3c98207038444ba7fd3d169cd998910"}, + {file = "tornado-6.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:3e63498f680547ed24d2c71e6497f24bca791aca2fe116dbc2bd0ac7f191691b"}, + {file = "tornado-6.1-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:6c77c9937962577a6a76917845d06af6ab9197702a42e1346d8ae2e76b5e3675"}, + {file = "tornado-6.1-cp35-cp35m-win32.whl", hash = "sha256:6286efab1ed6e74b7028327365cf7346b1d777d63ab30e21a0f4d5b275fc17d5"}, + {file = "tornado-6.1-cp35-cp35m-win_amd64.whl", hash = "sha256:fa2ba70284fa42c2a5ecb35e322e68823288a4251f9ba9cc77be04ae15eada68"}, + {file = "tornado-6.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0a00ff4561e2929a2c37ce706cb8233b7907e0cdc22eab98888aca5dd3775feb"}, + {file = "tornado-6.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:748290bf9112b581c525e6e6d3820621ff020ed95af6f17fedef416b27ed564c"}, + {file = "tornado-6.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:e385b637ac3acaae8022e7e47dfa7b83d3620e432e3ecb9a3f7f58f150e50921"}, + {file = "tornado-6.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:25ad220258349a12ae87ede08a7b04aca51237721f63b1808d39bdb4b2164558"}, + {file = "tornado-6.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:65d98939f1a2e74b58839f8c4dab3b6b3c1ce84972ae712be02845e65391ac7c"}, + {file = "tornado-6.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:e519d64089b0876c7b467274468709dadf11e41d65f63bba207e04217f47c085"}, + {file = "tornado-6.1-cp36-cp36m-win32.whl", hash = "sha256:b87936fd2c317b6ee08a5741ea06b9d11a6074ef4cc42e031bc6403f82a32575"}, + {file = "tornado-6.1-cp36-cp36m-win_amd64.whl", hash = "sha256:cc0ee35043162abbf717b7df924597ade8e5395e7b66d18270116f8745ceb795"}, + {file = "tornado-6.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7250a3fa399f08ec9cb3f7b1b987955d17e044f1ade821b32e5f435130250d7f"}, + {file = "tornado-6.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:ed3ad863b1b40cd1d4bd21e7498329ccaece75db5a5bf58cd3c9f130843e7102"}, + {file = "tornado-6.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:dcef026f608f678c118779cd6591c8af6e9b4155c44e0d1bc0c87c036fb8c8c4"}, + {file = "tornado-6.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:70dec29e8ac485dbf57481baee40781c63e381bebea080991893cd297742b8fd"}, + {file = "tornado-6.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:d3f7594930c423fd9f5d1a76bee85a2c36fd8b4b16921cae7e965f22575e9c01"}, + {file = "tornado-6.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:3447475585bae2e77ecb832fc0300c3695516a47d46cefa0528181a34c5b9d3d"}, + {file = "tornado-6.1-cp37-cp37m-win32.whl", hash = "sha256:e7229e60ac41a1202444497ddde70a48d33909e484f96eb0da9baf8dc68541df"}, + {file = "tornado-6.1-cp37-cp37m-win_amd64.whl", hash = "sha256:cb5ec8eead331e3bb4ce8066cf06d2dfef1bfb1b2a73082dfe8a161301b76e37"}, + {file = "tornado-6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:20241b3cb4f425e971cb0a8e4ffc9b0a861530ae3c52f2b0434e6c1b57e9fd95"}, + {file = "tornado-6.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c77da1263aa361938476f04c4b6c8916001b90b2c2fdd92d8d535e1af48fba5a"}, + {file = "tornado-6.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:fba85b6cd9c39be262fcd23865652920832b61583de2a2ca907dbd8e8a8c81e5"}, + {file = "tornado-6.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:1e8225a1070cd8eec59a996c43229fe8f95689cb16e552d130b9793cb570a288"}, + {file = "tornado-6.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:d14d30e7f46a0476efb0deb5b61343b1526f73ebb5ed84f23dc794bdb88f9d9f"}, + {file = "tornado-6.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:8f959b26f2634a091bb42241c3ed8d3cedb506e7c27b8dd5c7b9f745318ddbb6"}, + {file = "tornado-6.1-cp38-cp38-win32.whl", hash = "sha256:34ca2dac9e4d7afb0bed4677512e36a52f09caa6fded70b4e3e1c89dbd92c326"}, + {file = "tornado-6.1-cp38-cp38-win_amd64.whl", hash = "sha256:6196a5c39286cc37c024cd78834fb9345e464525d8991c21e908cc046d1cc02c"}, + {file = "tornado-6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f0ba29bafd8e7e22920567ce0d232c26d4d47c8b5cf4ed7b562b5db39fa199c5"}, + {file = "tornado-6.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:33892118b165401f291070100d6d09359ca74addda679b60390b09f8ef325ffe"}, + {file = "tornado-6.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7da13da6f985aab7f6f28debab00c67ff9cbacd588e8477034c0652ac141feea"}, + {file = "tornado-6.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:e0791ac58d91ac58f694d8d2957884df8e4e2f6687cdf367ef7eb7497f79eaa2"}, + {file = "tornado-6.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:66324e4e1beede9ac79e60f88de548da58b1f8ab4b2f1354d8375774f997e6c0"}, + {file = "tornado-6.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:a48900ecea1cbb71b8c71c620dee15b62f85f7c14189bdeee54966fbd9a0c5bd"}, + {file = "tornado-6.1-cp39-cp39-win32.whl", hash = "sha256:d3d20ea5782ba63ed13bc2b8c291a053c8d807a8fa927d941bd718468f7b950c"}, + {file = "tornado-6.1-cp39-cp39-win_amd64.whl", hash = "sha256:548430be2740e327b3fe0201abe471f314741efcb0067ec4f2d7dcfb4825f3e4"}, + {file = "tornado-6.1.tar.gz", hash = "sha256:33c6e81d7bd55b468d2e793517c909b139960b6c790a60b7991b9b6b76fb9791"}, +] +traitlets = [ + {file = "traitlets-4.3.3-py2.py3-none-any.whl", hash = "sha256:70b4c6a1d9019d7b4f6846832288f86998aa3b9207c6821f3578a6a6a467fe44"}, + {file = "traitlets-4.3.3.tar.gz", hash = "sha256:d023ee369ddd2763310e4c3eae1ff649689440d4ae59d7485eb4cfbbe3e359f7"}, +] +typing-extensions = [ + {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"}, + {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"}, + {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"}, +] +wcwidth = [ + {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, + {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, +] +webencodings = [ + {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, + {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, +] +widgetsnbextension = [ + {file = "widgetsnbextension-3.5.2-py2.py3-none-any.whl", hash = "sha256:763a9fdc836d141fa080005a886d63f66f73d56dba1fb5961afc239c77708569"}, + {file = "widgetsnbextension-3.5.2.tar.gz", hash = "sha256:e0731a60ba540cd19bbbefe771a9076dcd2dde90713a8f87f27f53f2d1db7727"}, +] +zipp = [ + {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"}, + {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"}, +] diff --git a/pyproject.toml b/pyproject.toml index 74231b9..a508a36 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,36 @@ +[tool.poetry] +name = "plutoplot" +version = "0.2.1" +description = "Python package to load PLUTO simulation data" +authors = ["Simeon Doetsch "] +license = "GPL-3.0-or-later" +repository = "https://github.com/Simske/plutoplot" +documentation = "https://plutoplot.readthedocs.io" +readme = "README.md" +classifiers = [ + "Topic :: Scientific/Engineering :: Physics", + "Topic :: Scientific/Engineering :: Physics", + "Development Status :: 4 - Beta", +] + +[tool.poetry.urls] +"Bug Tracker" = "https://github.com/Simske/plutoplot/issues" + +[tool.poetry.scripts] +pluto-info = "plutoplot.info:main" +pluto-format-ini = "plutoplot.scripts:format_ini" + +[tool.poetry.dependencies] +python = ">=3.6,<3.11" +numpy = "^1.16" +matplotlib = "^3.0" +h5py = { version = ">=2.6", optional = true } +ipywidgets = { version = ">=7.0", optional = true } + +[tool.poetry.extras] +hdf5 = ["h5py"] +interactive = ["ipywidgets"] + [build-system] -requires = ["setuptools", "wheel", "versioneer-518"] -build-backend = "setuptools.build_meta" +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 3320b7c..0000000 --- a/setup.cfg +++ /dev/null @@ -1,39 +0,0 @@ -[metadata] -name = plutoplot -author = Simeon Doetsch -author_email = science@simske.com -description = PLUTO code data lodaing and plotting for Python -url = https://github.com/Simske/plutoplot -long_description = file: README.md -long_description_content_type = text/markdown -project_urls = - Bug Tracker = https://github.com/Simske/plutoplot/issues -classifiers = - Programming Language :: Python :: 3 :: Only - Operating System :: OS Independent - License :: OSI Approved :: GNU General Public License v3 (GPLv3) - Development Status :: 4 - Beta - Topic :: Scientific/Engineering :: Physics - Topic :: Scientific/Engineering :: Astronomy - -[options] -packages = plutoplot -python_requires = >=3.6 -install_requires = - numpy - matplotlib - -[options.extras_require] -interactive = ipywidgets -hdf5 = h5py - -[options.entry_points] -console_scripts = - pluto-format-ini = plutoplot.scripts:format_ini - pluto-info = plutoplot.info:main - -[versioneer] -VCS = git -style = pep440 -versionfile_source = plutoplot/_version.py -tag_prefix = v diff --git a/setup.py b/setup.py deleted file mode 100644 index 8c8e1bb..0000000 --- a/setup.py +++ /dev/null @@ -1,6 +0,0 @@ -"Install plutoplot package using setup.cfg" -import setuptools - -import versioneer - -setuptools.setup(version=versioneer.get_version(), cmdclass=versioneer.get_cmdclass()) diff --git a/tox.ini b/tox.ini index c4e908c..bdddd0a 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,6 @@ [tox] -envlist = py36,py37,py38,py39 +isolated_build = True +envlist = py36-numpy{116,119},py{37,39}-numpy{116,121} [gh-actions] python = @@ -9,5 +10,9 @@ python = 3.9: py39 [testenv] -deps = pytest +deps = + pytest + numpy116: numpy>=1.16,<1.17 + numpy119: numpy>=1.19,<1.20 + numpy121: numpy>=1.21 commands = pytest diff --git a/versioneer.py b/versioneer.py deleted file mode 100644 index 2b54540..0000000 --- a/versioneer.py +++ /dev/null @@ -1,1885 +0,0 @@ -# Version: 0.18 - -"""The Versioneer - like a rocketeer, but for versions. - -The Versioneer -============== - -* like a rocketeer, but for versions! -* https://github.com/warner/python-versioneer -* Brian Warner -* License: Public Domain -* Compatible With: python2.6, 2.7, 3.2, 3.3, 3.4, 3.5, 3.6, and pypy -* [![Latest Version] -(https://pypip.in/version/versioneer/badge.svg?style=flat) -](https://pypi.python.org/pypi/versioneer/) -* [![Build Status] -(https://travis-ci.org/warner/python-versioneer.png?branch=master) -](https://travis-ci.org/warner/python-versioneer) - -This is a tool for managing a recorded version number in distutils-based -python projects. The goal is to remove the tedious and error-prone "update -the embedded version string" step from your release process. Making a new -release should be as easy as recording a new tag in your version-control -system, and maybe making new tarballs. - - -## Quick Install - -* `pip install versioneer` to somewhere to your $PATH -* add a `[versioneer]` section to your setup.cfg (see below) -* run `versioneer install` in your source tree, commit the results - -## Version Identifiers - -Source trees come from a variety of places: - -* a version-control system checkout (mostly used by developers) -* a nightly tarball, produced by build automation -* a snapshot tarball, produced by a web-based VCS browser, like github's - "tarball from tag" feature -* a release tarball, produced by "setup.py sdist", distributed through PyPI - -Within each source tree, the version identifier (either a string or a number, -this tool is format-agnostic) can come from a variety of places: - -* ask the VCS tool itself, e.g. "git describe" (for checkouts), which knows - about recent "tags" and an absolute revision-id -* the name of the directory into which the tarball was unpacked -* an expanded VCS keyword ($Id$, etc) -* a `_version.py` created by some earlier build step - -For released software, the version identifier is closely related to a VCS -tag. Some projects use tag names that include more than just the version -string (e.g. "myproject-1.2" instead of just "1.2"), in which case the tool -needs to strip the tag prefix to extract the version identifier. For -unreleased software (between tags), the version identifier should provide -enough information to help developers recreate the same tree, while also -giving them an idea of roughly how old the tree is (after version 1.2, before -version 1.3). Many VCS systems can report a description that captures this, -for example `git describe --tags --dirty --always` reports things like -"0.7-1-g574ab98-dirty" to indicate that the checkout is one revision past the -0.7 tag, has a unique revision id of "574ab98", and is "dirty" (it has -uncommitted changes. - -The version identifier is used for multiple purposes: - -* to allow the module to self-identify its version: `myproject.__version__` -* to choose a name and prefix for a 'setup.py sdist' tarball - -## Theory of Operation - -Versioneer works by adding a special `_version.py` file into your source -tree, where your `__init__.py` can import it. This `_version.py` knows how to -dynamically ask the VCS tool for version information at import time. - -`_version.py` also contains `$Revision$` markers, and the installation -process marks `_version.py` to have this marker rewritten with a tag name -during the `git archive` command. As a result, generated tarballs will -contain enough information to get the proper version. - -To allow `setup.py` to compute a version too, a `versioneer.py` is added to -the top level of your source tree, next to `setup.py` and the `setup.cfg` -that configures it. This overrides several distutils/setuptools commands to -compute the version when invoked, and changes `setup.py build` and `setup.py -sdist` to replace `_version.py` with a small static file that contains just -the generated version data. - -## Installation - -See [INSTALL.md](./INSTALL.md) for detailed installation instructions. - -## Version-String Flavors - -Code which uses Versioneer can learn about its version string at runtime by -importing `_version` from your main `__init__.py` file and running the -`get_versions()` function. From the "outside" (e.g. in `setup.py`), you can -import the top-level `versioneer.py` and run `get_versions()`. - -Both functions return a dictionary with different flavors of version -information: - -* `['version']`: A condensed version string, rendered using the selected - style. This is the most commonly used value for the project's version - string. The default "pep440" style yields strings like `0.11`, - `0.11+2.g1076c97`, or `0.11+2.g1076c97.dirty`. See the "Styles" section - below for alternative styles. - -* `['full-revisionid']`: detailed revision identifier. For Git, this is the - full SHA1 commit id, e.g. "1076c978a8d3cfc70f408fe5974aa6c092c949ac". - -* `['date']`: Date and time of the latest `HEAD` commit. For Git, it is the - commit date in ISO 8601 format. This will be None if the date is not - available. - -* `['dirty']`: a boolean, True if the tree has uncommitted changes. Note that - this is only accurate if run in a VCS checkout, otherwise it is likely to - be False or None - -* `['error']`: if the version string could not be computed, this will be set - to a string describing the problem, otherwise it will be None. It may be - useful to throw an exception in setup.py if this is set, to avoid e.g. - creating tarballs with a version string of "unknown". - -Some variants are more useful than others. Including `full-revisionid` in a -bug report should allow developers to reconstruct the exact code being tested -(or indicate the presence of local changes that should be shared with the -developers). `version` is suitable for display in an "about" box or a CLI -`--version` output: it can be easily compared against release notes and lists -of bugs fixed in various releases. - -The installer adds the following text to your `__init__.py` to place a basic -version in `YOURPROJECT.__version__`: - - from ._version import get_versions - __version__ = get_versions()['version'] - del get_versions - -## Styles - -The setup.cfg `style=` configuration controls how the VCS information is -rendered into a version string. - -The default style, "pep440", produces a PEP440-compliant string, equal to the -un-prefixed tag name for actual releases, and containing an additional "local -version" section with more detail for in-between builds. For Git, this is -TAG[+DISTANCE.gHEX[.dirty]] , using information from `git describe --tags ---dirty --always`. For example "0.11+2.g1076c97.dirty" indicates that the -tree is like the "1076c97" commit but has uncommitted changes (".dirty"), and -that this commit is two revisions ("+2") beyond the "0.11" tag. For released -software (exactly equal to a known tag), the identifier will only contain the -stripped tag, e.g. "0.11". - -Other styles are available. See [details.md](details.md) in the Versioneer -source tree for descriptions. - -## Debugging - -Versioneer tries to avoid fatal errors: if something goes wrong, it will tend -to return a version of "0+unknown". To investigate the problem, run `setup.py -version`, which will run the version-lookup code in a verbose mode, and will -display the full contents of `get_versions()` (including the `error` string, -which may help identify what went wrong). - -## Known Limitations - -Some situations are known to cause problems for Versioneer. This details the -most significant ones. More can be found on Github -[issues page](https://github.com/warner/python-versioneer/issues). - -### Subprojects - -Versioneer has limited support for source trees in which `setup.py` is not in -the root directory (e.g. `setup.py` and `.git/` are *not* siblings). The are -two common reasons why `setup.py` might not be in the root: - -* Source trees which contain multiple subprojects, such as - [Buildbot](https://github.com/buildbot/buildbot), which contains both - "master" and "slave" subprojects, each with their own `setup.py`, - `setup.cfg`, and `tox.ini`. Projects like these produce multiple PyPI - distributions (and upload multiple independently-installable tarballs). -* Source trees whose main purpose is to contain a C library, but which also - provide bindings to Python (and perhaps other langauges) in subdirectories. - -Versioneer will look for `.git` in parent directories, and most operations -should get the right version string. However `pip` and `setuptools` have bugs -and implementation details which frequently cause `pip install .` from a -subproject directory to fail to find a correct version string (so it usually -defaults to `0+unknown`). - -`pip install --editable .` should work correctly. `setup.py install` might -work too. - -Pip-8.1.1 is known to have this problem, but hopefully it will get fixed in -some later version. - -[Bug #38](https://github.com/warner/python-versioneer/issues/38) is tracking -this issue. The discussion in -[PR #61](https://github.com/warner/python-versioneer/pull/61) describes the -issue from the Versioneer side in more detail. -[pip PR#3176](https://github.com/pypa/pip/pull/3176) and -[pip PR#3615](https://github.com/pypa/pip/pull/3615) contain work to improve -pip to let Versioneer work correctly. - -Versioneer-0.16 and earlier only looked for a `.git` directory next to the -`setup.cfg`, so subprojects were completely unsupported with those releases. - -### Editable installs with setuptools <= 18.5 - -`setup.py develop` and `pip install --editable .` allow you to install a -project into a virtualenv once, then continue editing the source code (and -test) without re-installing after every change. - -"Entry-point scripts" (`setup(entry_points={"console_scripts": ..})`) are a -convenient way to specify executable scripts that should be installed along -with the python package. - -These both work as expected when using modern setuptools. When using -setuptools-18.5 or earlier, however, certain operations will cause -`pkg_resources.DistributionNotFound` errors when running the entrypoint -script, which must be resolved by re-installing the package. This happens -when the install happens with one version, then the egg_info data is -regenerated while a different version is checked out. Many setup.py commands -cause egg_info to be rebuilt (including `sdist`, `wheel`, and installing into -a different virtualenv), so this can be surprising. - -[Bug #83](https://github.com/warner/python-versioneer/issues/83) describes -this one, but upgrading to a newer version of setuptools should probably -resolve it. - -### Unicode version strings - -While Versioneer works (and is continually tested) with both Python 2 and -Python 3, it is not entirely consistent with bytes-vs-unicode distinctions. -Newer releases probably generate unicode version strings on py2. It's not -clear that this is wrong, but it may be surprising for applications when then -write these strings to a network connection or include them in bytes-oriented -APIs like cryptographic checksums. - -[Bug #71](https://github.com/warner/python-versioneer/issues/71) investigates -this question. - - -## Updating Versioneer - -To upgrade your project to a new release of Versioneer, do the following: - -* install the new Versioneer (`pip install -U versioneer` or equivalent) -* edit `setup.cfg`, if necessary, to include any new configuration settings - indicated by the release notes. See [UPGRADING](./UPGRADING.md) for details. -* re-run `versioneer install` in your source tree, to replace - `SRC/_version.py` -* commit any changed files - -## Future Directions - -This tool is designed to make it easily extended to other version-control -systems: all VCS-specific components are in separate directories like -src/git/ . The top-level `versioneer.py` script is assembled from these -components by running make-versioneer.py . In the future, make-versioneer.py -will take a VCS name as an argument, and will construct a version of -`versioneer.py` that is specific to the given VCS. It might also take the -configuration arguments that are currently provided manually during -installation by editing setup.py . Alternatively, it might go the other -direction and include code from all supported VCS systems, reducing the -number of intermediate scripts. - - -## License - -To make Versioneer easier to embed, all its code is dedicated to the public -domain. The `_version.py` that it creates is also in the public domain. -Specifically, both are released under the Creative Commons "Public Domain -Dedication" license (CC0-1.0), as described in -https://creativecommons.org/publicdomain/zero/1.0/ . - -""" - -from __future__ import print_function - -try: - import configparser -except ImportError: - import ConfigParser as configparser -import errno -import json -import os -import re -import subprocess -import sys - - -class VersioneerConfig: - """Container for Versioneer configuration parameters.""" - - -def get_root(): - """Get the project root directory. - - We require that all commands are run from the project root, i.e. the - directory that contains setup.py, setup.cfg, and versioneer.py . - """ - root = os.path.realpath(os.path.abspath(os.getcwd())) - setup_py = os.path.join(root, "setup.py") - versioneer_py = os.path.join(root, "versioneer.py") - if not (os.path.exists(setup_py) or os.path.exists(versioneer_py)): - # allow 'python path/to/setup.py COMMAND' - root = os.path.dirname(os.path.realpath(os.path.abspath(sys.argv[0]))) - setup_py = os.path.join(root, "setup.py") - versioneer_py = os.path.join(root, "versioneer.py") - if not (os.path.exists(setup_py) or os.path.exists(versioneer_py)): - err = ( - "Versioneer was unable to run the project root directory. " - "Versioneer requires setup.py to be executed from " - "its immediate directory (like 'python setup.py COMMAND'), " - "or in a way that lets it use sys.argv[0] to find the root " - "(like 'python path/to/setup.py COMMAND')." - ) - raise VersioneerBadRootError(err) - try: - # Certain runtime workflows (setup.py install/develop in a setuptools - # tree) execute all dependencies in a single python process, so - # "versioneer" may be imported multiple times, and python's shared - # module-import table will cache the first one. So we can't use - # os.path.dirname(__file__), as that will find whichever - # versioneer.py was first imported, even in later projects. - me = os.path.realpath(os.path.abspath(__file__)) - me_dir = os.path.normcase(os.path.splitext(me)[0]) - vsr_dir = os.path.normcase(os.path.splitext(versioneer_py)[0]) - if me_dir != vsr_dir: - print( - "Warning: build in %s is using versioneer.py from %s" - % (os.path.dirname(me), versioneer_py) - ) - except NameError: - pass - return root - - -def get_config_from_root(root): - """Read the project setup.cfg file to determine Versioneer config.""" - # This might raise EnvironmentError (if setup.cfg is missing), or - # configparser.NoSectionError (if it lacks a [versioneer] section), or - # configparser.NoOptionError (if it lacks "VCS="). See the docstring at - # the top of versioneer.py for instructions on writing your setup.cfg . - setup_cfg = os.path.join(root, "setup.cfg") - parser = configparser.SafeConfigParser() - with open(setup_cfg, "r") as f: - parser.readfp(f) - VCS = parser.get("versioneer", "VCS") # mandatory - - def get(parser, name): - if parser.has_option("versioneer", name): - return parser.get("versioneer", name) - return None - - cfg = VersioneerConfig() - cfg.VCS = VCS - cfg.style = get(parser, "style") or "" - cfg.versionfile_source = get(parser, "versionfile_source") - cfg.versionfile_build = get(parser, "versionfile_build") - cfg.tag_prefix = get(parser, "tag_prefix") - if cfg.tag_prefix in ("''", '""'): - cfg.tag_prefix = "" - cfg.parentdir_prefix = get(parser, "parentdir_prefix") - cfg.verbose = get(parser, "verbose") - return cfg - - -class NotThisMethod(Exception): - """Exception raised if a method is not valid for the current scenario.""" - - -# these dictionaries contain VCS-specific tools -LONG_VERSION_PY = {} -HANDLERS = {} - - -def register_vcs_handler(vcs, method): # decorator - """Decorator to mark a method as the handler for a particular VCS.""" - - def decorate(f): - """Store f in HANDLERS[vcs][method].""" - if vcs not in HANDLERS: - HANDLERS[vcs] = {} - HANDLERS[vcs][method] = f - return f - - return decorate - - -def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, env=None): - """Call the given command(s).""" - assert isinstance(commands, list) - p = None - for c in commands: - try: - dispcmd = str([c] + args) - # remember shell=False, so use git.cmd on windows, not just git - p = subprocess.Popen( - [c] + args, - cwd=cwd, - env=env, - stdout=subprocess.PIPE, - stderr=(subprocess.PIPE if hide_stderr else None), - ) - break - except EnvironmentError: - e = sys.exc_info()[1] - if e.errno == errno.ENOENT: - continue - if verbose: - print("unable to run %s" % dispcmd) - print(e) - return None, None - else: - if verbose: - print("unable to find command, tried %s" % (commands,)) - return None, None - stdout = p.communicate()[0].strip() - if sys.version_info[0] >= 3: - stdout = stdout.decode() - if p.returncode != 0: - if verbose: - print("unable to run %s (error)" % dispcmd) - print("stdout was %s" % stdout) - return None, p.returncode - return stdout, p.returncode - - -LONG_VERSION_PY[ - "git" -] = ''' -# This file helps to compute a version number in source trees obtained from -# git-archive tarball (such as those provided by githubs download-from-tag -# feature). Distribution tarballs (built by setup.py sdist) and build -# directories (produced by setup.py build) will contain a much shorter file -# that just contains the computed version number. - -# This file is released into the public domain. Generated by -# versioneer-0.18 (https://github.com/warner/python-versioneer) - -"""Git implementation of _version.py.""" - -import errno -import os -import re -import subprocess -import sys - - -def get_keywords(): - """Get the keywords needed to look up the version information.""" - # these strings will be replaced by git during git-archive. - # setup.py/versioneer.py will grep for the variable names, so they must - # each be defined on a line of their own. _version.py will just call - # get_keywords(). - git_refnames = "%(DOLLAR)sFormat:%%d%(DOLLAR)s" - git_full = "%(DOLLAR)sFormat:%%H%(DOLLAR)s" - git_date = "%(DOLLAR)sFormat:%%ci%(DOLLAR)s" - keywords = {"refnames": git_refnames, "full": git_full, "date": git_date} - return keywords - - -class VersioneerConfig: - """Container for Versioneer configuration parameters.""" - - -def get_config(): - """Create, populate and return the VersioneerConfig() object.""" - # these strings are filled in when 'setup.py versioneer' creates - # _version.py - cfg = VersioneerConfig() - cfg.VCS = "git" - cfg.style = "%(STYLE)s" - cfg.tag_prefix = "%(TAG_PREFIX)s" - cfg.parentdir_prefix = "%(PARENTDIR_PREFIX)s" - cfg.versionfile_source = "%(VERSIONFILE_SOURCE)s" - cfg.verbose = False - return cfg - - -class NotThisMethod(Exception): - """Exception raised if a method is not valid for the current scenario.""" - - -LONG_VERSION_PY = {} -HANDLERS = {} - - -def register_vcs_handler(vcs, method): # decorator - """Decorator to mark a method as the handler for a particular VCS.""" - def decorate(f): - """Store f in HANDLERS[vcs][method].""" - if vcs not in HANDLERS: - HANDLERS[vcs] = {} - HANDLERS[vcs][method] = f - return f - return decorate - - -def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, - env=None): - """Call the given command(s).""" - assert isinstance(commands, list) - p = None - for c in commands: - try: - dispcmd = str([c] + args) - # remember shell=False, so use git.cmd on windows, not just git - p = subprocess.Popen([c] + args, cwd=cwd, env=env, - stdout=subprocess.PIPE, - stderr=(subprocess.PIPE if hide_stderr - else None)) - break - except EnvironmentError: - e = sys.exc_info()[1] - if e.errno == errno.ENOENT: - continue - if verbose: - print("unable to run %%s" %% dispcmd) - print(e) - return None, None - else: - if verbose: - print("unable to find command, tried %%s" %% (commands,)) - return None, None - stdout = p.communicate()[0].strip() - if sys.version_info[0] >= 3: - stdout = stdout.decode() - if p.returncode != 0: - if verbose: - print("unable to run %%s (error)" %% dispcmd) - print("stdout was %%s" %% stdout) - return None, p.returncode - return stdout, p.returncode - - -def versions_from_parentdir(parentdir_prefix, root, verbose): - """Try to determine the version from the parent directory name. - - Source tarballs conventionally unpack into a directory that includes both - the project name and a version string. We will also support searching up - two directory levels for an appropriately named parent directory - """ - rootdirs = [] - - for i in range(3): - dirname = os.path.basename(root) - if dirname.startswith(parentdir_prefix): - return {"version": dirname[len(parentdir_prefix):], - "full-revisionid": None, - "dirty": False, "error": None, "date": None} - else: - rootdirs.append(root) - root = os.path.dirname(root) # up a level - - if verbose: - print("Tried directories %%s but none started with prefix %%s" %% - (str(rootdirs), parentdir_prefix)) - raise NotThisMethod("rootdir doesn't start with parentdir_prefix") - - -@register_vcs_handler("git", "get_keywords") -def git_get_keywords(versionfile_abs): - """Extract version information from the given file.""" - # the code embedded in _version.py can just fetch the value of these - # keywords. When used from setup.py, we don't want to import _version.py, - # so we do it with a regexp instead. This function is not used from - # _version.py. - keywords = {} - try: - f = open(versionfile_abs, "r") - for line in f.readlines(): - if line.strip().startswith("git_refnames ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["refnames"] = mo.group(1) - if line.strip().startswith("git_full ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["full"] = mo.group(1) - if line.strip().startswith("git_date ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["date"] = mo.group(1) - f.close() - except EnvironmentError: - pass - return keywords - - -@register_vcs_handler("git", "keywords") -def git_versions_from_keywords(keywords, tag_prefix, verbose): - """Get version information from git keywords.""" - if not keywords: - raise NotThisMethod("no keywords at all, weird") - date = keywords.get("date") - if date is not None: - # git-2.2.0 added "%%cI", which expands to an ISO-8601 -compliant - # datestamp. However we prefer "%%ci" (which expands to an "ISO-8601 - # -like" string, which we must then edit to make compliant), because - # it's been around since git-1.5.3, and it's too difficult to - # discover which version we're using, or to work around using an - # older one. - date = date.strip().replace(" ", "T", 1).replace(" ", "", 1) - refnames = keywords["refnames"].strip() - if refnames.startswith("$Format"): - if verbose: - print("keywords are unexpanded, not using") - raise NotThisMethod("unexpanded keywords, not a git-archive tarball") - refs = set([r.strip() for r in refnames.strip("()").split(",")]) - # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of - # just "foo-1.0". If we see a "tag: " prefix, prefer those. - TAG = "tag: " - tags = set([r[len(TAG):] for r in refs if r.startswith(TAG)]) - if not tags: - # Either we're using git < 1.8.3, or there really are no tags. We use - # a heuristic: assume all version tags have a digit. The old git %%d - # expansion behaves like git log --decorate=short and strips out the - # refs/heads/ and refs/tags/ prefixes that would let us distinguish - # between branches and tags. By ignoring refnames without digits, we - # filter out many common branch names like "release" and - # "stabilization", as well as "HEAD" and "master". - tags = set([r for r in refs if re.search(r'\d', r)]) - if verbose: - print("discarding '%%s', no digits" %% ",".join(refs - tags)) - if verbose: - print("likely tags: %%s" %% ",".join(sorted(tags))) - for ref in sorted(tags): - # sorting will prefer e.g. "2.0" over "2.0rc1" - if ref.startswith(tag_prefix): - r = ref[len(tag_prefix):] - if verbose: - print("picking %%s" %% r) - return {"version": r, - "full-revisionid": keywords["full"].strip(), - "dirty": False, "error": None, - "date": date} - # no suitable tags, so version is "0+unknown", but full hex is still there - if verbose: - print("no suitable tags, using unknown + full revision id") - return {"version": "0+unknown", - "full-revisionid": keywords["full"].strip(), - "dirty": False, "error": "no suitable tags", "date": None} - - -@register_vcs_handler("git", "pieces_from_vcs") -def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command): - """Get version from 'git describe' in the root of the source tree. - - This only gets called if the git-archive 'subst' keywords were *not* - expanded, and _version.py hasn't already been rewritten with a short - version string, meaning we're inside a checked out source tree. - """ - GITS = ["git"] - if sys.platform == "win32": - GITS = ["git.cmd", "git.exe"] - - out, rc = run_command(GITS, ["rev-parse", "--git-dir"], cwd=root, - hide_stderr=True) - if rc != 0: - if verbose: - print("Directory %%s not under git control" %% root) - raise NotThisMethod("'git rev-parse --git-dir' returned error") - - # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty] - # if there isn't one, this yields HEX[-dirty] (no NUM) - describe_out, rc = run_command(GITS, ["describe", "--tags", "--dirty", - "--always", "--long", - "--match", "%%s*" %% tag_prefix], - cwd=root) - # --long was added in git-1.5.5 - if describe_out is None: - raise NotThisMethod("'git describe' failed") - describe_out = describe_out.strip() - full_out, rc = run_command(GITS, ["rev-parse", "HEAD"], cwd=root) - if full_out is None: - raise NotThisMethod("'git rev-parse' failed") - full_out = full_out.strip() - - pieces = {} - pieces["long"] = full_out - pieces["short"] = full_out[:7] # maybe improved later - pieces["error"] = None - - # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty] - # TAG might have hyphens. - git_describe = describe_out - - # look for -dirty suffix - dirty = git_describe.endswith("-dirty") - pieces["dirty"] = dirty - if dirty: - git_describe = git_describe[:git_describe.rindex("-dirty")] - - # now we have TAG-NUM-gHEX or HEX - - if "-" in git_describe: - # TAG-NUM-gHEX - mo = re.search(r'^(.+)-(\d+)-g([0-9a-f]+)$', git_describe) - if not mo: - # unparseable. Maybe git-describe is misbehaving? - pieces["error"] = ("unable to parse git-describe output: '%%s'" - %% describe_out) - return pieces - - # tag - full_tag = mo.group(1) - if not full_tag.startswith(tag_prefix): - if verbose: - fmt = "tag '%%s' doesn't start with prefix '%%s'" - print(fmt %% (full_tag, tag_prefix)) - pieces["error"] = ("tag '%%s' doesn't start with prefix '%%s'" - %% (full_tag, tag_prefix)) - return pieces - pieces["closest-tag"] = full_tag[len(tag_prefix):] - - # distance: number of commits since tag - pieces["distance"] = int(mo.group(2)) - - # commit: short hex revision ID - pieces["short"] = mo.group(3) - - else: - # HEX: no tags - pieces["closest-tag"] = None - count_out, rc = run_command(GITS, ["rev-list", "HEAD", "--count"], - cwd=root) - pieces["distance"] = int(count_out) # total number of commits - - # commit date: see ISO-8601 comment in git_versions_from_keywords() - date = run_command(GITS, ["show", "-s", "--format=%%ci", "HEAD"], - cwd=root)[0].strip() - pieces["date"] = date.strip().replace(" ", "T", 1).replace(" ", "", 1) - - return pieces - - -def plus_or_dot(pieces): - """Return a + if we don't already have one, else return a .""" - if "+" in pieces.get("closest-tag", ""): - return "." - return "+" - - -def render_pep440(pieces): - """Build up version string, with post-release "local version identifier". - - Our goal: TAG[+DISTANCE.gHEX[.dirty]] . Note that if you - get a tagged build and then dirty it, you'll get TAG+0.gHEX.dirty - - Exceptions: - 1: no tags. git_describe was just HEX. 0+untagged.DISTANCE.gHEX[.dirty] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += plus_or_dot(pieces) - rendered += "%%d.g%%s" %% (pieces["distance"], pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - else: - # exception #1 - rendered = "0+untagged.%%d.g%%s" %% (pieces["distance"], - pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - return rendered - - -def render_pep440_pre(pieces): - """TAG[.post.devDISTANCE] -- No -dirty. - - Exceptions: - 1: no tags. 0.post.devDISTANCE - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"]: - rendered += ".post.dev%%d" %% pieces["distance"] - else: - # exception #1 - rendered = "0.post.dev%%d" %% pieces["distance"] - return rendered - - -def render_pep440_post(pieces): - """TAG[.postDISTANCE[.dev0]+gHEX] . - - The ".dev0" means dirty. Note that .dev0 sorts backwards - (a dirty tree will appear "older" than the corresponding clean one), - but you shouldn't be releasing software with -dirty anyways. - - Exceptions: - 1: no tags. 0.postDISTANCE[.dev0] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%%d" %% pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - rendered += plus_or_dot(pieces) - rendered += "g%%s" %% pieces["short"] - else: - # exception #1 - rendered = "0.post%%d" %% pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - rendered += "+g%%s" %% pieces["short"] - return rendered - - -def render_pep440_old(pieces): - """TAG[.postDISTANCE[.dev0]] . - - The ".dev0" means dirty. - - Eexceptions: - 1: no tags. 0.postDISTANCE[.dev0] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%%d" %% pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - else: - # exception #1 - rendered = "0.post%%d" %% pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - return rendered - - -def render_git_describe(pieces): - """TAG[-DISTANCE-gHEX][-dirty]. - - Like 'git describe --tags --dirty --always'. - - Exceptions: - 1: no tags. HEX[-dirty] (note: no 'g' prefix) - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"]: - rendered += "-%%d-g%%s" %% (pieces["distance"], pieces["short"]) - else: - # exception #1 - rendered = pieces["short"] - if pieces["dirty"]: - rendered += "-dirty" - return rendered - - -def render_git_describe_long(pieces): - """TAG-DISTANCE-gHEX[-dirty]. - - Like 'git describe --tags --dirty --always -long'. - The distance/hash is unconditional. - - Exceptions: - 1: no tags. HEX[-dirty] (note: no 'g' prefix) - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - rendered += "-%%d-g%%s" %% (pieces["distance"], pieces["short"]) - else: - # exception #1 - rendered = pieces["short"] - if pieces["dirty"]: - rendered += "-dirty" - return rendered - - -def render(pieces, style): - """Render the given version pieces into the requested style.""" - if pieces["error"]: - return {"version": "unknown", - "full-revisionid": pieces.get("long"), - "dirty": None, - "error": pieces["error"], - "date": None} - - if not style or style == "default": - style = "pep440" # the default - - if style == "pep440": - rendered = render_pep440(pieces) - elif style == "pep440-pre": - rendered = render_pep440_pre(pieces) - elif style == "pep440-post": - rendered = render_pep440_post(pieces) - elif style == "pep440-old": - rendered = render_pep440_old(pieces) - elif style == "git-describe": - rendered = render_git_describe(pieces) - elif style == "git-describe-long": - rendered = render_git_describe_long(pieces) - else: - raise ValueError("unknown style '%%s'" %% style) - - return {"version": rendered, "full-revisionid": pieces["long"], - "dirty": pieces["dirty"], "error": None, - "date": pieces.get("date")} - - -def get_versions(): - """Get version information or return default if unable to do so.""" - # I am in _version.py, which lives at ROOT/VERSIONFILE_SOURCE. If we have - # __file__, we can work backwards from there to the root. Some - # py2exe/bbfreeze/non-CPython implementations don't do __file__, in which - # case we can only use expanded keywords. - - cfg = get_config() - verbose = cfg.verbose - - try: - return git_versions_from_keywords(get_keywords(), cfg.tag_prefix, - verbose) - except NotThisMethod: - pass - - try: - root = os.path.realpath(__file__) - # versionfile_source is the relative path from the top of the source - # tree (where the .git directory might live) to this file. Invert - # this to find the root from __file__. - for i in cfg.versionfile_source.split('/'): - root = os.path.dirname(root) - except NameError: - return {"version": "0+unknown", "full-revisionid": None, - "dirty": None, - "error": "unable to find root of source tree", - "date": None} - - try: - pieces = git_pieces_from_vcs(cfg.tag_prefix, root, verbose) - return render(pieces, cfg.style) - except NotThisMethod: - pass - - try: - if cfg.parentdir_prefix: - return versions_from_parentdir(cfg.parentdir_prefix, root, verbose) - except NotThisMethod: - pass - - return {"version": "0+unknown", "full-revisionid": None, - "dirty": None, - "error": "unable to compute version", "date": None} -''' - - -@register_vcs_handler("git", "get_keywords") -def git_get_keywords(versionfile_abs): - """Extract version information from the given file.""" - # the code embedded in _version.py can just fetch the value of these - # keywords. When used from setup.py, we don't want to import _version.py, - # so we do it with a regexp instead. This function is not used from - # _version.py. - keywords = {} - try: - f = open(versionfile_abs, "r") - for line in f.readlines(): - if line.strip().startswith("git_refnames ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["refnames"] = mo.group(1) - if line.strip().startswith("git_full ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["full"] = mo.group(1) - if line.strip().startswith("git_date ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["date"] = mo.group(1) - f.close() - except EnvironmentError: - pass - return keywords - - -@register_vcs_handler("git", "keywords") -def git_versions_from_keywords(keywords, tag_prefix, verbose): - """Get version information from git keywords.""" - if not keywords: - raise NotThisMethod("no keywords at all, weird") - date = keywords.get("date") - if date is not None: - # git-2.2.0 added "%cI", which expands to an ISO-8601 -compliant - # datestamp. However we prefer "%ci" (which expands to an "ISO-8601 - # -like" string, which we must then edit to make compliant), because - # it's been around since git-1.5.3, and it's too difficult to - # discover which version we're using, or to work around using an - # older one. - date = date.strip().replace(" ", "T", 1).replace(" ", "", 1) - refnames = keywords["refnames"].strip() - if refnames.startswith("$Format"): - if verbose: - print("keywords are unexpanded, not using") - raise NotThisMethod("unexpanded keywords, not a git-archive tarball") - refs = set([r.strip() for r in refnames.strip("()").split(",")]) - # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of - # just "foo-1.0". If we see a "tag: " prefix, prefer those. - TAG = "tag: " - tags = set([r[len(TAG) :] for r in refs if r.startswith(TAG)]) - if not tags: - # Either we're using git < 1.8.3, or there really are no tags. We use - # a heuristic: assume all version tags have a digit. The old git %d - # expansion behaves like git log --decorate=short and strips out the - # refs/heads/ and refs/tags/ prefixes that would let us distinguish - # between branches and tags. By ignoring refnames without digits, we - # filter out many common branch names like "release" and - # "stabilization", as well as "HEAD" and "master". - tags = set([r for r in refs if re.search(r"\d", r)]) - if verbose: - print("discarding '%s', no digits" % ",".join(refs - tags)) - if verbose: - print("likely tags: %s" % ",".join(sorted(tags))) - for ref in sorted(tags): - # sorting will prefer e.g. "2.0" over "2.0rc1" - if ref.startswith(tag_prefix): - r = ref[len(tag_prefix) :] - if verbose: - print("picking %s" % r) - return { - "version": r, - "full-revisionid": keywords["full"].strip(), - "dirty": False, - "error": None, - "date": date, - } - # no suitable tags, so version is "0+unknown", but full hex is still there - if verbose: - print("no suitable tags, using unknown + full revision id") - return { - "version": "0+unknown", - "full-revisionid": keywords["full"].strip(), - "dirty": False, - "error": "no suitable tags", - "date": None, - } - - -@register_vcs_handler("git", "pieces_from_vcs") -def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command): - """Get version from 'git describe' in the root of the source tree. - - This only gets called if the git-archive 'subst' keywords were *not* - expanded, and _version.py hasn't already been rewritten with a short - version string, meaning we're inside a checked out source tree. - """ - GITS = ["git"] - if sys.platform == "win32": - GITS = ["git.cmd", "git.exe"] - - out, rc = run_command(GITS, ["rev-parse", "--git-dir"], cwd=root, hide_stderr=True) - if rc != 0: - if verbose: - print("Directory %s not under git control" % root) - raise NotThisMethod("'git rev-parse --git-dir' returned error") - - # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty] - # if there isn't one, this yields HEX[-dirty] (no NUM) - describe_out, rc = run_command( - GITS, - [ - "describe", - "--tags", - "--dirty", - "--always", - "--long", - "--match", - "%s*" % tag_prefix, - ], - cwd=root, - ) - # --long was added in git-1.5.5 - if describe_out is None: - raise NotThisMethod("'git describe' failed") - describe_out = describe_out.strip() - full_out, rc = run_command(GITS, ["rev-parse", "HEAD"], cwd=root) - if full_out is None: - raise NotThisMethod("'git rev-parse' failed") - full_out = full_out.strip() - - pieces = {} - pieces["long"] = full_out - pieces["short"] = full_out[:7] # maybe improved later - pieces["error"] = None - - # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty] - # TAG might have hyphens. - git_describe = describe_out - - # look for -dirty suffix - dirty = git_describe.endswith("-dirty") - pieces["dirty"] = dirty - if dirty: - git_describe = git_describe[: git_describe.rindex("-dirty")] - - # now we have TAG-NUM-gHEX or HEX - - if "-" in git_describe: - # TAG-NUM-gHEX - mo = re.search(r"^(.+)-(\d+)-g([0-9a-f]+)$", git_describe) - if not mo: - # unparseable. Maybe git-describe is misbehaving? - pieces["error"] = "unable to parse git-describe output: '%s'" % describe_out - return pieces - - # tag - full_tag = mo.group(1) - if not full_tag.startswith(tag_prefix): - if verbose: - fmt = "tag '%s' doesn't start with prefix '%s'" - print(fmt % (full_tag, tag_prefix)) - pieces["error"] = "tag '%s' doesn't start with prefix '%s'" % ( - full_tag, - tag_prefix, - ) - return pieces - pieces["closest-tag"] = full_tag[len(tag_prefix) :] - - # distance: number of commits since tag - pieces["distance"] = int(mo.group(2)) - - # commit: short hex revision ID - pieces["short"] = mo.group(3) - - else: - # HEX: no tags - pieces["closest-tag"] = None - count_out, rc = run_command(GITS, ["rev-list", "HEAD", "--count"], cwd=root) - pieces["distance"] = int(count_out) # total number of commits - - # commit date: see ISO-8601 comment in git_versions_from_keywords() - date = run_command(GITS, ["show", "-s", "--format=%ci", "HEAD"], cwd=root)[ - 0 - ].strip() - pieces["date"] = date.strip().replace(" ", "T", 1).replace(" ", "", 1) - - return pieces - - -def do_vcs_install(manifest_in, versionfile_source, ipy): - """Git-specific installation logic for Versioneer. - - For Git, this means creating/changing .gitattributes to mark _version.py - for export-subst keyword substitution. - """ - GITS = ["git"] - if sys.platform == "win32": - GITS = ["git.cmd", "git.exe"] - files = [manifest_in, versionfile_source] - if ipy: - files.append(ipy) - try: - me = __file__ - if me.endswith(".pyc") or me.endswith(".pyo"): - me = os.path.splitext(me)[0] + ".py" - versioneer_file = os.path.relpath(me) - except NameError: - versioneer_file = "versioneer.py" - files.append(versioneer_file) - present = False - try: - f = open(".gitattributes", "r") - for line in f.readlines(): - if line.strip().startswith(versionfile_source): - if "export-subst" in line.strip().split()[1:]: - present = True - f.close() - except EnvironmentError: - pass - if not present: - f = open(".gitattributes", "a+") - f.write("%s export-subst\n" % versionfile_source) - f.close() - files.append(".gitattributes") - run_command(GITS, ["add", "--"] + files) - - -def versions_from_parentdir(parentdir_prefix, root, verbose): - """Try to determine the version from the parent directory name. - - Source tarballs conventionally unpack into a directory that includes both - the project name and a version string. We will also support searching up - two directory levels for an appropriately named parent directory - """ - rootdirs = [] - - for i in range(3): - dirname = os.path.basename(root) - if dirname.startswith(parentdir_prefix): - return { - "version": dirname[len(parentdir_prefix) :], - "full-revisionid": None, - "dirty": False, - "error": None, - "date": None, - } - else: - rootdirs.append(root) - root = os.path.dirname(root) # up a level - - if verbose: - print( - "Tried directories %s but none started with prefix %s" - % (str(rootdirs), parentdir_prefix) - ) - raise NotThisMethod("rootdir doesn't start with parentdir_prefix") - - -SHORT_VERSION_PY = """ -# This file was generated by 'versioneer.py' (0.18) from -# revision-control system data, or from the parent directory name of an -# unpacked source archive. Distribution tarballs contain a pre-generated copy -# of this file. - -import json - -version_json = ''' -%s -''' # END VERSION_JSON - - -def get_versions(): - return json.loads(version_json) -""" - - -def versions_from_file(filename): - """Try to determine the version from _version.py if present.""" - try: - with open(filename) as f: - contents = f.read() - except EnvironmentError: - raise NotThisMethod("unable to read _version.py") - mo = re.search( - r"version_json = '''\n(.*)''' # END VERSION_JSON", contents, re.M | re.S - ) - if not mo: - mo = re.search( - r"version_json = '''\r\n(.*)''' # END VERSION_JSON", contents, re.M | re.S - ) - if not mo: - raise NotThisMethod("no version_json in _version.py") - return json.loads(mo.group(1)) - - -def write_to_version_file(filename, versions): - """Write the given version number to the given _version.py file.""" - os.unlink(filename) - contents = json.dumps(versions, sort_keys=True, indent=1, separators=(",", ": ")) - with open(filename, "w") as f: - f.write(SHORT_VERSION_PY % contents) - - print("set %s to '%s'" % (filename, versions["version"])) - - -def plus_or_dot(pieces): - """Return a + if we don't already have one, else return a .""" - if "+" in pieces.get("closest-tag", ""): - return "." - return "+" - - -def render_pep440(pieces): - """Build up version string, with post-release "local version identifier". - - Our goal: TAG[+DISTANCE.gHEX[.dirty]] . Note that if you - get a tagged build and then dirty it, you'll get TAG+0.gHEX.dirty - - Exceptions: - 1: no tags. git_describe was just HEX. 0+untagged.DISTANCE.gHEX[.dirty] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += plus_or_dot(pieces) - rendered += "%d.g%s" % (pieces["distance"], pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - else: - # exception #1 - rendered = "0+untagged.%d.g%s" % (pieces["distance"], pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - return rendered - - -def render_pep440_pre(pieces): - """TAG[.post.devDISTANCE] -- No -dirty. - - Exceptions: - 1: no tags. 0.post.devDISTANCE - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"]: - rendered += ".post.dev%d" % pieces["distance"] - else: - # exception #1 - rendered = "0.post.dev%d" % pieces["distance"] - return rendered - - -def render_pep440_post(pieces): - """TAG[.postDISTANCE[.dev0]+gHEX] . - - The ".dev0" means dirty. Note that .dev0 sorts backwards - (a dirty tree will appear "older" than the corresponding clean one), - but you shouldn't be releasing software with -dirty anyways. - - Exceptions: - 1: no tags. 0.postDISTANCE[.dev0] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - rendered += plus_or_dot(pieces) - rendered += "g%s" % pieces["short"] - else: - # exception #1 - rendered = "0.post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - rendered += "+g%s" % pieces["short"] - return rendered - - -def render_pep440_old(pieces): - """TAG[.postDISTANCE[.dev0]] . - - The ".dev0" means dirty. - - Eexceptions: - 1: no tags. 0.postDISTANCE[.dev0] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - else: - # exception #1 - rendered = "0.post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - return rendered - - -def render_git_describe(pieces): - """TAG[-DISTANCE-gHEX][-dirty]. - - Like 'git describe --tags --dirty --always'. - - Exceptions: - 1: no tags. HEX[-dirty] (note: no 'g' prefix) - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"]: - rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) - else: - # exception #1 - rendered = pieces["short"] - if pieces["dirty"]: - rendered += "-dirty" - return rendered - - -def render_git_describe_long(pieces): - """TAG-DISTANCE-gHEX[-dirty]. - - Like 'git describe --tags --dirty --always -long'. - The distance/hash is unconditional. - - Exceptions: - 1: no tags. HEX[-dirty] (note: no 'g' prefix) - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) - else: - # exception #1 - rendered = pieces["short"] - if pieces["dirty"]: - rendered += "-dirty" - return rendered - - -def render(pieces, style): - """Render the given version pieces into the requested style.""" - if pieces["error"]: - return { - "version": "unknown", - "full-revisionid": pieces.get("long"), - "dirty": None, - "error": pieces["error"], - "date": None, - } - - if not style or style == "default": - style = "pep440" # the default - - if style == "pep440": - rendered = render_pep440(pieces) - elif style == "pep440-pre": - rendered = render_pep440_pre(pieces) - elif style == "pep440-post": - rendered = render_pep440_post(pieces) - elif style == "pep440-old": - rendered = render_pep440_old(pieces) - elif style == "git-describe": - rendered = render_git_describe(pieces) - elif style == "git-describe-long": - rendered = render_git_describe_long(pieces) - else: - raise ValueError("unknown style '%s'" % style) - - return { - "version": rendered, - "full-revisionid": pieces["long"], - "dirty": pieces["dirty"], - "error": None, - "date": pieces.get("date"), - } - - -class VersioneerBadRootError(Exception): - """The project root directory is unknown or missing key files.""" - - -def get_versions(verbose=False): - """Get the project version from whatever source is available. - - Returns dict with two keys: 'version' and 'full'. - """ - if "versioneer" in sys.modules: - # see the discussion in cmdclass.py:get_cmdclass() - del sys.modules["versioneer"] - - root = get_root() - cfg = get_config_from_root(root) - - assert cfg.VCS is not None, "please set [versioneer]VCS= in setup.cfg" - handlers = HANDLERS.get(cfg.VCS) - assert handlers, "unrecognized VCS '%s'" % cfg.VCS - verbose = verbose or cfg.verbose - assert ( - cfg.versionfile_source is not None - ), "please set versioneer.versionfile_source" - assert cfg.tag_prefix is not None, "please set versioneer.tag_prefix" - - versionfile_abs = os.path.join(root, cfg.versionfile_source) - - # extract version from first of: _version.py, VCS command (e.g. 'git - # describe'), parentdir. This is meant to work for developers using a - # source checkout, for users of a tarball created by 'setup.py sdist', - # and for users of a tarball/zipball created by 'git archive' or github's - # download-from-tag feature or the equivalent in other VCSes. - - get_keywords_f = handlers.get("get_keywords") - from_keywords_f = handlers.get("keywords") - if get_keywords_f and from_keywords_f: - try: - keywords = get_keywords_f(versionfile_abs) - ver = from_keywords_f(keywords, cfg.tag_prefix, verbose) - if verbose: - print("got version from expanded keyword %s" % ver) - return ver - except NotThisMethod: - pass - - try: - ver = versions_from_file(versionfile_abs) - if verbose: - print("got version from file %s %s" % (versionfile_abs, ver)) - return ver - except NotThisMethod: - pass - - from_vcs_f = handlers.get("pieces_from_vcs") - if from_vcs_f: - try: - pieces = from_vcs_f(cfg.tag_prefix, root, verbose) - ver = render(pieces, cfg.style) - if verbose: - print("got version from VCS %s" % ver) - return ver - except NotThisMethod: - pass - - try: - if cfg.parentdir_prefix: - ver = versions_from_parentdir(cfg.parentdir_prefix, root, verbose) - if verbose: - print("got version from parentdir %s" % ver) - return ver - except NotThisMethod: - pass - - if verbose: - print("unable to compute version") - - return { - "version": "0+unknown", - "full-revisionid": None, - "dirty": None, - "error": "unable to compute version", - "date": None, - } - - -def get_version(): - """Get the short version string for this project.""" - return get_versions()["version"] - - -def get_cmdclass(): - """Get the custom setuptools/distutils subclasses used by Versioneer.""" - if "versioneer" in sys.modules: - del sys.modules["versioneer"] - # this fixes the "python setup.py develop" case (also 'install' and - # 'easy_install .'), in which subdependencies of the main project are - # built (using setup.py bdist_egg) in the same python process. Assume - # a main project A and a dependency B, which use different versions - # of Versioneer. A's setup.py imports A's Versioneer, leaving it in - # sys.modules by the time B's setup.py is executed, causing B to run - # with the wrong versioneer. Setuptools wraps the sub-dep builds in a - # sandbox that restores sys.modules to it's pre-build state, so the - # parent is protected against the child's "import versioneer". By - # removing ourselves from sys.modules here, before the child build - # happens, we protect the child from the parent's versioneer too. - # Also see https://github.com/warner/python-versioneer/issues/52 - - cmds = {} - - # we add "version" to both distutils and setuptools - from distutils.core import Command - - class cmd_version(Command): - description = "report generated version string" - user_options = [] - boolean_options = [] - - def initialize_options(self): - pass - - def finalize_options(self): - pass - - def run(self): - vers = get_versions(verbose=True) - print("Version: %s" % vers["version"]) - print(" full-revisionid: %s" % vers.get("full-revisionid")) - print(" dirty: %s" % vers.get("dirty")) - print(" date: %s" % vers.get("date")) - if vers["error"]: - print(" error: %s" % vers["error"]) - - cmds["version"] = cmd_version - - # we override "build_py" in both distutils and setuptools - # - # most invocation pathways end up running build_py: - # distutils/build -> build_py - # distutils/install -> distutils/build ->.. - # setuptools/bdist_wheel -> distutils/install ->.. - # setuptools/bdist_egg -> distutils/install_lib -> build_py - # setuptools/install -> bdist_egg ->.. - # setuptools/develop -> ? - # pip install: - # copies source tree to a tempdir before running egg_info/etc - # if .git isn't copied too, 'git describe' will fail - # then does setup.py bdist_wheel, or sometimes setup.py install - # setup.py egg_info -> ? - - # we override different "build_py" commands for both environments - if "setuptools" in sys.modules: - from setuptools.command.build_py import build_py as _build_py - else: - from distutils.command.build_py import build_py as _build_py - - class cmd_build_py(_build_py): - def run(self): - root = get_root() - cfg = get_config_from_root(root) - versions = get_versions() - _build_py.run(self) - # now locate _version.py in the new build/ directory and replace - # it with an updated value - if cfg.versionfile_build: - target_versionfile = os.path.join(self.build_lib, cfg.versionfile_build) - print("UPDATING %s" % target_versionfile) - write_to_version_file(target_versionfile, versions) - - cmds["build_py"] = cmd_build_py - - if "cx_Freeze" in sys.modules: # cx_freeze enabled? - from cx_Freeze.dist import build_exe as _build_exe - - # nczeczulin reports that py2exe won't like the pep440-style string - # as FILEVERSION, but it can be used for PRODUCTVERSION, e.g. - # setup(console=[{ - # "version": versioneer.get_version().split("+", 1)[0], # FILEVERSION - # "product_version": versioneer.get_version(), - # ... - - class cmd_build_exe(_build_exe): - def run(self): - root = get_root() - cfg = get_config_from_root(root) - versions = get_versions() - target_versionfile = cfg.versionfile_source - print("UPDATING %s" % target_versionfile) - write_to_version_file(target_versionfile, versions) - - _build_exe.run(self) - os.unlink(target_versionfile) - with open(cfg.versionfile_source, "w") as f: - LONG = LONG_VERSION_PY[cfg.VCS] - f.write( - LONG - % { - "DOLLAR": "$", - "STYLE": cfg.style, - "TAG_PREFIX": cfg.tag_prefix, - "PARENTDIR_PREFIX": cfg.parentdir_prefix, - "VERSIONFILE_SOURCE": cfg.versionfile_source, - } - ) - - cmds["build_exe"] = cmd_build_exe - del cmds["build_py"] - - if "py2exe" in sys.modules: # py2exe enabled? - try: - from py2exe.distutils_buildexe import py2exe as _py2exe # py3 - except ImportError: - from py2exe.build_exe import py2exe as _py2exe # py2 - - class cmd_py2exe(_py2exe): - def run(self): - root = get_root() - cfg = get_config_from_root(root) - versions = get_versions() - target_versionfile = cfg.versionfile_source - print("UPDATING %s" % target_versionfile) - write_to_version_file(target_versionfile, versions) - - _py2exe.run(self) - os.unlink(target_versionfile) - with open(cfg.versionfile_source, "w") as f: - LONG = LONG_VERSION_PY[cfg.VCS] - f.write( - LONG - % { - "DOLLAR": "$", - "STYLE": cfg.style, - "TAG_PREFIX": cfg.tag_prefix, - "PARENTDIR_PREFIX": cfg.parentdir_prefix, - "VERSIONFILE_SOURCE": cfg.versionfile_source, - } - ) - - cmds["py2exe"] = cmd_py2exe - - # we override different "sdist" commands for both environments - if "setuptools" in sys.modules: - from setuptools.command.sdist import sdist as _sdist - else: - from distutils.command.sdist import sdist as _sdist - - class cmd_sdist(_sdist): - def run(self): - versions = get_versions() - self._versioneer_generated_versions = versions - # unless we update this, the command will keep using the old - # version - self.distribution.metadata.version = versions["version"] - return _sdist.run(self) - - def make_release_tree(self, base_dir, files): - root = get_root() - cfg = get_config_from_root(root) - _sdist.make_release_tree(self, base_dir, files) - # now locate _version.py in the new base_dir directory - # (remembering that it may be a hardlink) and replace it with an - # updated value - target_versionfile = os.path.join(base_dir, cfg.versionfile_source) - print("UPDATING %s" % target_versionfile) - write_to_version_file( - target_versionfile, self._versioneer_generated_versions - ) - - cmds["sdist"] = cmd_sdist - - return cmds - - -CONFIG_ERROR = """ -setup.cfg is missing the necessary Versioneer configuration. You need -a section like: - - [versioneer] - VCS = git - style = pep440 - versionfile_source = src/myproject/_version.py - versionfile_build = myproject/_version.py - tag_prefix = - parentdir_prefix = myproject- - -You will also need to edit your setup.py to use the results: - - import versioneer - setup(version=versioneer.get_version(), - cmdclass=versioneer.get_cmdclass(), ...) - -Please read the docstring in ./versioneer.py for configuration instructions, -edit setup.cfg, and re-run the installer or 'python versioneer.py setup'. -""" - -SAMPLE_CONFIG = """ -# See the docstring in versioneer.py for instructions. Note that you must -# re-run 'versioneer.py setup' after changing this section, and commit the -# resulting files. - -[versioneer] -#VCS = git -#style = pep440 -#versionfile_source = -#versionfile_build = -#tag_prefix = -#parentdir_prefix = - -""" - -INIT_PY_SNIPPET = """ -from ._version import get_versions -__version__ = get_versions()['version'] -del get_versions -""" - - -def do_setup(): - """Main VCS-independent setup function for installing Versioneer.""" - root = get_root() - try: - cfg = get_config_from_root(root) - except ( - EnvironmentError, - configparser.NoSectionError, - configparser.NoOptionError, - ) as e: - if isinstance(e, (EnvironmentError, configparser.NoSectionError)): - print("Adding sample versioneer config to setup.cfg", file=sys.stderr) - with open(os.path.join(root, "setup.cfg"), "a") as f: - f.write(SAMPLE_CONFIG) - print(CONFIG_ERROR, file=sys.stderr) - return 1 - - print(" creating %s" % cfg.versionfile_source) - with open(cfg.versionfile_source, "w") as f: - LONG = LONG_VERSION_PY[cfg.VCS] - f.write( - LONG - % { - "DOLLAR": "$", - "STYLE": cfg.style, - "TAG_PREFIX": cfg.tag_prefix, - "PARENTDIR_PREFIX": cfg.parentdir_prefix, - "VERSIONFILE_SOURCE": cfg.versionfile_source, - } - ) - - ipy = os.path.join(os.path.dirname(cfg.versionfile_source), "__init__.py") - if os.path.exists(ipy): - try: - with open(ipy, "r") as f: - old = f.read() - except EnvironmentError: - old = "" - if INIT_PY_SNIPPET not in old: - print(" appending to %s" % ipy) - with open(ipy, "a") as f: - f.write(INIT_PY_SNIPPET) - else: - print(" %s unmodified" % ipy) - else: - print(" %s doesn't exist, ok" % ipy) - ipy = None - - # Make sure both the top-level "versioneer.py" and versionfile_source - # (PKG/_version.py, used by runtime code) are in MANIFEST.in, so - # they'll be copied into source distributions. Pip won't be able to - # install the package without this. - manifest_in = os.path.join(root, "MANIFEST.in") - simple_includes = set() - try: - with open(manifest_in, "r") as f: - for line in f: - if line.startswith("include "): - for include in line.split()[1:]: - simple_includes.add(include) - except EnvironmentError: - pass - # That doesn't cover everything MANIFEST.in can do - # (http://docs.python.org/2/distutils/sourcedist.html#commands), so - # it might give some false negatives. Appending redundant 'include' - # lines is safe, though. - if "versioneer.py" not in simple_includes: - print(" appending 'versioneer.py' to MANIFEST.in") - with open(manifest_in, "a") as f: - f.write("include versioneer.py\n") - else: - print(" 'versioneer.py' already in MANIFEST.in") - if cfg.versionfile_source not in simple_includes: - print( - " appending versionfile_source ('%s') to MANIFEST.in" - % cfg.versionfile_source - ) - with open(manifest_in, "a") as f: - f.write("include %s\n" % cfg.versionfile_source) - else: - print(" versionfile_source already in MANIFEST.in") - - # Make VCS-specific changes. For git, this means creating/changing - # .gitattributes to mark _version.py for export-subst keyword - # substitution. - do_vcs_install(manifest_in, cfg.versionfile_source, ipy) - return 0 - - -def scan_setup_py(): - """Validate the contents of setup.py against Versioneer's expectations.""" - found = set() - setters = False - errors = 0 - with open("setup.py", "r") as f: - for line in f.readlines(): - if "import versioneer" in line: - found.add("import") - if "versioneer.get_cmdclass()" in line: - found.add("cmdclass") - if "versioneer.get_version()" in line: - found.add("get_version") - if "versioneer.VCS" in line: - setters = True - if "versioneer.versionfile_source" in line: - setters = True - if len(found) != 3: - print("") - print("Your setup.py appears to be missing some important items") - print("(but I might be wrong). Please make sure it has something") - print("roughly like the following:") - print("") - print(" import versioneer") - print(" setup( version=versioneer.get_version(),") - print(" cmdclass=versioneer.get_cmdclass(), ...)") - print("") - errors += 1 - if setters: - print("You should remove lines like 'versioneer.VCS = ' and") - print("'versioneer.versionfile_source = ' . This configuration") - print("now lives in setup.cfg, and should be removed from setup.py") - print("") - errors += 1 - return errors - - -if __name__ == "__main__": - cmd = sys.argv[1] - if cmd == "setup": - errors = do_setup() - errors += scan_setup_py() - if errors: - sys.exit(1) From e2e7233a612a84b762571ab4878fb1f04388fd52 Mon Sep 17 00:00:00 2001 From: Simeon Doetsch Date: Thu, 4 Nov 2021 12:44:17 +0100 Subject: [PATCH 21/41] Add numpy versions to tox tests --- tox.ini | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tox.ini b/tox.ini index c4e908c..edb28e6 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = py36,py37,py38,py39 +envlist = py36-numpy{1.16,1.19},py37,py39-numpy{1.16,1.21} [gh-actions] python = @@ -9,5 +9,9 @@ python = 3.9: py39 [testenv] -deps = pytest +deps = + pytest + numpy1.16: numpy>=1.16,<1.17 + numpy1.19: numpy>=1.19,<1.20 + numpy1.21: numpy>=1.21 commands = pytest From 31fac7b7b878c425437b13bfa14cb5d3a04a5ab4 Mon Sep 17 00:00:00 2001 From: Simeon Doetsch Date: Wed, 24 Nov 2021 18:10:45 +0100 Subject: [PATCH 22/41] Added some documentation --- docs/docs/loading.md | 28 ++++++++++++++++++++++++++++ docs/mkdocs.yml | 15 ++++++++++++++- docs/requirements.txt | 1 + plutoplot/simulation.py | 16 ++++++++++++++++ 4 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 docs/docs/loading.md diff --git a/docs/docs/loading.md b/docs/docs/loading.md new file mode 100644 index 0000000..9836593 --- /dev/null +++ b/docs/docs/loading.md @@ -0,0 +1,28 @@ +# Loading simulations +Loading data from simulations is the central function `plutoplot` serves. + +The central object to interact with a PLUTO simulation is the `plutoplot.Simulation` object. +In loads the simulation metadata, the grid and creates the objects for the individual output files. + +## Simulation + +To load a simulation from disk create a `plutoplot.Simulation` object: +```python +import plutoplot as pp + +sim = pp.Simulation("path/to/simulation", format="flt") +``` +Additionally the coordinates system and indexing can be set manually. +If no format is given, the first existing format is used (in the order `dbl`, `flt`, `vtk`, `dbl.h5`, `flt.h5`). + +!!! info "Simulation init reference" + ::: plutoplot.Simulation.__init__ + + + +# Simulation + + +# Grid + +# diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 5aabb38..e5c04fb 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -3,10 +3,23 @@ site_name: plutoplot Documentation nav: - Home: index.md - Quick Start: quickstart.md + - Loading Simulations: loading.md theme: name: material +markdown_extensions: + - admonition + - pymdownx.details + - pymdownx.superfences + plugins: - search - - mkdocstrings + - mkdocstrings: + default_handler: python + handlers: + python: + rendering: + show_source: false + watch: + - ../plutoplot diff --git a/docs/requirements.txt b/docs/requirements.txt index edc2789..92d95ff 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,3 +1,4 @@ mkdocs>=1.2 mkdocs-material>=7.3 mkdocstrings>=0.16 +pymdown-extensions diff --git a/plutoplot/simulation.py b/plutoplot/simulation.py index f24f0f1..5aaa33d 100644 --- a/plutoplot/simulation.py +++ b/plutoplot/simulation.py @@ -36,6 +36,22 @@ def __init__( coordinates: str = None, indexing: str = "ijk", ): + """Create Simulation object from PLUTO output directory + + Args: + path (Path or str, optional): Path to simulation directory / data directory + format (str, optional): PLUTO output format to load. + Currently supported: 'dbl', 'flt', 'vtk', 'dbl.h5', 'flt.h5'. + By default uses the first found. + coordinates (str, optional): name of coordinates system of simulation. + Will be read from gridfile by default + Supported: (') + indexing (str, optional): Array index convention. Supports ("ijk", "kji"). + + Raises: + FileNotFoundError: if no metadata or grid files are found. + NotImplementedError: if unsupported format is requested + """ self.parent = None self.path = Path(path) From 32ac4a6453754ba55e01200ccf08bdcd96f7fe60 Mon Sep 17 00:00:00 2001 From: Simeon Doetsch Date: Wed, 24 Nov 2021 18:11:39 +0100 Subject: [PATCH 23/41] Adjust colorbar size in plots --- plutoplot/plotting.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plutoplot/plotting.py b/plutoplot/plotting.py index 76e323e..9e3e6ac 100644 --- a/plutoplot/plotting.py +++ b/plutoplot/plotting.py @@ -69,7 +69,7 @@ def plot( formatter = ScalarFormatter() formatter.set_powerlimits((-2, 2)) divider = make_axes_locatable(ax) - cax = divider.append_axes("right", size=0.05, pad=0.05) + cax = divider.append_axes("right", size=0.15, pad=0.05) plt.colorbar(im, label=label, format=formatter, cax=cax) # plt.colorbar(im, label=label, format=formatter, ax=ax, pad=0.05) From c49d2742592bcb7a9ccbbaa39ed462d1251d92f2 Mon Sep 17 00:00:00 2001 From: Simeon Doetsch Date: Thu, 16 Dec 2021 14:47:26 +0100 Subject: [PATCH 24/41] Fix Simulation.__str__ and Grid.__str__ --- plutoplot/__init__.py | 1 + plutoplot/grid.py | 6 +++++- plutoplot/simulation.py | 19 +++++++------------ 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/plutoplot/__init__.py b/plutoplot/__init__.py index d27717b..655a655 100644 --- a/plutoplot/__init__.py +++ b/plutoplot/__init__.py @@ -6,5 +6,6 @@ from matplotlib.pyplot import show from . import misc +from .grid import Grid from .plutodata import PlutoData from .simulation import Simulation diff --git a/plutoplot/grid.py b/plutoplot/grid.py index 8788f1d..533a937 100644 --- a/plutoplot/grid.py +++ b/plutoplot/grid.py @@ -232,8 +232,12 @@ def __getattr__(self, name: str): raise AttributeError(f"{type(self).__name__} has no attribute '{name}'") def __str__(self) -> str: + mapping_inv = {value: key for key, value in self.mapping_grid.items()} return ( - f"PLUTO Grid, Dimensions {self.dims}, Coordinate System: {self.coordinates}" + f"PLUTO Grid Dimensions: {self.dims}, {self.coordinates} coordinate system\n" + f"{mapping_inv['x1']}: {self.x1i[0]:.2f}..{self.x1i[-1]:.2f}, Lx1={self.Lx1:.2f}, N1={self.dims[0]}\n" + f"{mapping_inv['x2']}: {self.x2i[0]:.2f}..{self.x2i[-1]:.2f}, Lx1={self.Lx2:.2f}, N1={self.dims[1]}\n" + f"{mapping_inv['x3']}: {self.x3i[0]:.2f}..{self.x3i[-1]:.2f}, Lx1={self.Lx3:.2f}, N1={self.dims[2]}\n" ) def __repr__(self) -> str: diff --git a/plutoplot/simulation.py b/plutoplot/simulation.py index 5aaa33d..6595bb2 100644 --- a/plutoplot/simulation.py +++ b/plutoplot/simulation.py @@ -42,7 +42,7 @@ def __init__( path (Path or str, optional): Path to simulation directory / data directory format (str, optional): PLUTO output format to load. Currently supported: 'dbl', 'flt', 'vtk', 'dbl.h5', 'flt.h5'. - By default uses the first found. + By default uses the first {format}.out file found. coordinates (str, optional): name of coordinates system of simulation. Will be read from gridfile by default Supported: (') @@ -326,17 +326,12 @@ def clear(self) -> None: def __str__(self) -> str: return ( - f"PLUTO {type(self).__name__} at '{self.path}'\n" - f"Data directory at '$SIM_DIR/{self.data_path.relative_to(self.path)}'\n" - f"{self.grid.coordinates.capitalize()} grid with dimensions {self.dims}\n" - f"Domain: x1: {self.x1l[0]:.2e} .. {self.x1r[-1]:.2e} (Lx1 = {self.Lx1:.2e})\n" - f" x2: {self.x2l[0]:.2e} .. {self.x2r[-1]:.2e} (Lx2 = {self.Lx2:.2e})\n" - f" x2: {self.x3l[0]:.2e} .. {self.x3r[-1]:.2e} (Lx3 = {self.Lx3:.2e})\n" - f"Available variables: {' '.join(self.vars)}\n" - "Data files:\n" - f" Format {self.format}: {len(self)} files, " - f"last time {self.t[-1]}, data timestep {self.dt.mean():.2e}\n" - ) + f"PLUTO {type(self).__name__}: path: '{self.path}', " + f"data directory '$sim_path/{self.data_path.relative_to(self.path)}'\n" + f"Data vars: {', '.join(self.metadata.vars)}\n" + f"Data files: Format `{self.format}`: {len(self)} files," + f" last time {self.t[-1]}, data timestep {self.dt.mean():.2e} \n" + ) + str(self.grid) def __repr__(self) -> str: return ( From dde75f5402abb47c2724b6d6c4664c930048628f Mon Sep 17 00:00:00 2001 From: Simeon Doetsch Date: Thu, 16 Dec 2021 15:00:56 +0100 Subject: [PATCH 25/41] mkdocs: add Mathjax --- docs/javascripts/mathjax.js | 16 ++++++++++++++++ docs/mkdocs.yml | 7 +++++++ 2 files changed, 23 insertions(+) create mode 100644 docs/javascripts/mathjax.js diff --git a/docs/javascripts/mathjax.js b/docs/javascripts/mathjax.js new file mode 100644 index 0000000..117b046 --- /dev/null +++ b/docs/javascripts/mathjax.js @@ -0,0 +1,16 @@ +window.MathJax = { + tex: { + inlineMath: [["\\(", "\\)"]], + displayMath: [["\\[", "\\]"]], + processEscapes: true, + processEnvironments: true, + }, + options: { + ignoreHtmlClass: ".*|", + processHtmlClass: "arithmatex", + }, +}; + +document$.subscribe(() => { + MathJax.typesetPromise(); +}); diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index e5c04fb..bd621f9 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -12,6 +12,8 @@ markdown_extensions: - admonition - pymdownx.details - pymdownx.superfences + - pymdownx.arithmatex: + generic: true plugins: - search @@ -23,3 +25,8 @@ plugins: show_source: false watch: - ../plutoplot + +extra_javascript: + - javascripts/mathjax.js + - https://polyfill.io/v3/polyfill.min.js?features=es6 + - https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js From 1254f259f3e00282115cd97152ca03bd6b2e4dd5 Mon Sep 17 00:00:00 2001 From: Simeon Doetsch Date: Thu, 16 Dec 2021 15:01:26 +0100 Subject: [PATCH 26/41] Updated documentation --- docs/docs/data-access.md | 66 ++++++++++++++++++++++++++++++++++++++ docs/docs/loading.md | 69 +++++++++++++++++++++++++++++++++++++--- docs/docs/metadata.md | 0 docs/docs/plotting.md | 0 docs/docs/quickstart.md | 2 +- docs/mkdocs.yml | 5 +++ 6 files changed, 137 insertions(+), 5 deletions(-) create mode 100644 docs/docs/data-access.md create mode 100644 docs/docs/metadata.md create mode 100644 docs/docs/plotting.md diff --git a/docs/docs/data-access.md b/docs/docs/data-access.md new file mode 100644 index 0000000..7a24a51 --- /dev/null +++ b/docs/docs/data-access.md @@ -0,0 +1,66 @@ +# Data Access +After [creating the simulation object](loading.md) all simulation data can be accessed via this object. +Here the different ways to access data are explored. + +If not explicitly specified, all examples assume an simulation object `sim` is available +```python +import plutoplot as pp + +sim = pp.Simulation("path/to/simulation") +``` + + +The data for the individual timesteps is encapsulated in `PlutoData`-object, which the `Simulation`-object will create on demand. +The data arrays for the variables can be accessed from there. + +## Accessing Steps +### Direct access +To get the `PlutoData`-object for a specific step can be accessed using the `[]`-operator or `get()` function like this: +```python +step_data = sim[10] +step_data = sim.get(10, keep=False) +# or direct acces to variables: +sim[10].rho +``` +`get()` also has an additional parameter `keep`, which chooses if the resulting object should be kept im memory after use. +??? info "`Simulation.get()` docs" + ::: plutoplot.Simulation.get + +### Iteration and `reduce` +It is also possible to iterate over all (or some steps for processing) +```python +for step_data in sim: + # process data here + +# or for more control over the range +for step_data in sim.iter(start, stop, step): + # process data +``` +??? info "`Simulation.iter()` reference" + ::: plutoplot.Simulation.iter + +If each step should be reduced to into an array of values the `reduce` and `reduce_parallel` helpers can be used. +For example, if the mean density of each step is needed: +```python +mean_rho = sim.reduce(lambda step: step.rho.mean()) +# result: mean_rho.shape == len(sim) +``` +More complex reductions with n-dimensional outputs are also supported. The shape of the output can be either given as an argument, or will be deduced from the first calculation: +```python +column_density = sim.reduce(lambda step: step.rho.sum(axis=2)) +# Result: column_density.shape == (n1, n2) +``` +`reduce_parallel` is equivalent, but will use `multiprocessing` to parallelise this operation. Be aware that because of the overhead of multiprocessing this is not necessarily faster than a serial `reduce()`, especially with an optimized `numpy`-installation. + +??? info "`reduce()` reference" + ::: plutoplot.Simulation.reduce +??? info "`reduce_parallel()` reference" + ::: plutoplot.Simulation.reduce_parallel + + +## Accessing data + +The available data variables of a simulation can be accessed from `simulation.vars` or `plutodata.vars`: +```python + +``` diff --git a/docs/docs/loading.md b/docs/docs/loading.md index 9836593..c1cd105 100644 --- a/docs/docs/loading.md +++ b/docs/docs/loading.md @@ -15,14 +15,75 @@ sim = pp.Simulation("path/to/simulation", format="flt") Additionally the coordinates system and indexing can be set manually. If no format is given, the first existing format is used (in the order `dbl`, `flt`, `vtk`, `dbl.h5`, `flt.h5`). -!!! info "Simulation init reference" +The coordinate system will be read from the gridfile if not specified. More information on the coordinate system can be found in the [Grid section](#grid). + +??? info "plutoplot.Simulation initialization reference" ::: plutoplot.Simulation.__init__ +After loading the `Simulation`-object has the following attributes: + +??? info "`Simulation` attributes" + ::: plutoplot.Simulation + selection: + members: false + rendering: + heading_level: 4 + show_root_toc_entry: false + +To show information about the simulation, just use the string representation: +```python +print(sim) +``` +``` +PLUTO Simulation: path: 'path/to/simulation', data directory '$sim_path/.' +Data vars: rho, vx1, vx2, vx3 +Data files: Format `flt`: 2 files, last time 1.0, data timestep 1.00e+00 +PLUTO Grid Dimensions: (128, 1, 384), spherical coordinate system +r: 0.40..2.50, Lx1=2.10, N1=128 +theta: 1.45..1.57, Lx1=0.12, N1=1 +phi: 0.00..6.28, Lx1=6.28, N1=384 +``` +or use the Jupyter Notebook formatting +```python +sim +``` +> **PLUTO Simulation** path: `/home/simeon/masterproject/PLUTO/test-problems/HD/Disk_Planet/03_0`, data directory `$sim_path/.` +> Data vars: `rho` `vx1` `vx2` `vx3` +> Data files: Format `flt`: 2 files,last time 1.0, data timestep 1.00e+00 +> **PLUTO Grid** Dimensions (128, 1, 384), spherical coordinate system +> +> | | | | L | N | +> |---|---|---|---|---| +> |$r$|0.40|2.50|2.10|128| +> |$\theta$|1.45|1.57|0.12|1| +> |$\phi$|0.00|6.28|6.28|384| -# Simulation +## Slicing simulations + +## Accessing simulation steps +Each simulation output step is represented by a `PlutoData` object, which will be generated on demand by the `Simulation`. The `PlutoData`-object then gives access to the actual data arrays. +The data from the simulation output steps can be accessed from the `Simulation`-object with: + +- direct access using the `[]`-operator or `get()` functions +```python +step_data = sim[10] +step_data = sim.get(10, keep=False) +``` +- iteration +```python +for step in sim: + # process data +``` +- reduced data with `reduce()` and `reduce_parallel()` (over each time step) +```python +mean_density = sim.reduce(lambda step: step.rho.mean()) +``` +More details in [Data Access](data-access.md) -# Grid +## Grid +The `Grid` object contains all the information of the simulation grid. -# +??? info "`Grid` reference" + ::: plutoplot.Grid diff --git a/docs/docs/metadata.md b/docs/docs/metadata.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/docs/plotting.md b/docs/docs/plotting.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/docs/quickstart.md b/docs/docs/quickstart.md index 66e4b65..68fe3dd 100644 --- a/docs/docs/quickstart.md +++ b/docs/docs/quickstart.md @@ -14,7 +14,7 @@ pip install --upgrade plutoplot[hdf5] pip install --upgrade plutoplot[interactive,hdf5] ``` -To install the current development version from this branch: +To install the current development version from Github: ```bash pip install --upgrade "plutoplot @ git+https://github.com/simske/plutoplot" ``` diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index bd621f9..e141985 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -4,6 +4,9 @@ nav: - Home: index.md - Quick Start: quickstart.md - Loading Simulations: loading.md + - Data Access: data-access.md + - Accessing Metadata: metadata.md + - Plotting: plotting.md theme: name: material @@ -23,6 +26,8 @@ plugins: python: rendering: show_source: false + show_root_heading: true + heading_level: 3 watch: - ../plutoplot From 8a34c7ea4e7a564d0c5440a83d2c7e89b67cb817 Mon Sep 17 00:00:00 2001 From: Simeon Doetsch Date: Thu, 16 Dec 2021 15:51:14 +0100 Subject: [PATCH 27/41] Automatically build and push to PyPI on release creation --- .github/workflows/publish-pypi.yml | 31 ++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 .github/workflows/publish-pypi.yml diff --git a/.github/workflows/publish-pypi.yml b/.github/workflows/publish-pypi.yml new file mode 100644 index 0000000..e34cf73 --- /dev/null +++ b/.github/workflows/publish-pypi.yml @@ -0,0 +1,31 @@ +name: Build package and upload to PyPI + +on: + release: + types: [created] + +jobs: + deploy: + runs-on: ubuntu-20.04 + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + - name: Install build dependencies + run: | + python -m pip install --upgrade pip + pip install build twine + - name: Build package + run: | + python -m build . + - name: Upload package to PyPI + env: + TWINE_USERNAME: __token__ + TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} + run: twine upload dist/* + - name: Upload package to Github release + uses: alexellis/upload-assets@0.2.2 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + asset_paths: '["./dist/*"]' From dea11848d98e09a9ab9ea181c2a823317069dde0 Mon Sep 17 00:00:00 2001 From: Simeon Doetsch Date: Thu, 16 Dec 2021 17:13:35 +0100 Subject: [PATCH 28/41] Fix Pluto_ini __setitem__ --- plutoplot/__init__.py | 1 + plutoplot/metadata.py | 35 +++++++++++++++++++++++------------ 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/plutoplot/__init__.py b/plutoplot/__init__.py index 655a655..7d13576 100644 --- a/plutoplot/__init__.py +++ b/plutoplot/__init__.py @@ -7,5 +7,6 @@ from . import misc from .grid import Grid +from .metadata import Definitions_h, Pluto_ini from .plutodata import PlutoData from .simulation import Simulation diff --git a/plutoplot/metadata.py b/plutoplot/metadata.py index 953b5cf..2340193 100644 --- a/plutoplot/metadata.py +++ b/plutoplot/metadata.py @@ -260,6 +260,17 @@ def __str__(self) -> str: """Convert to pluto.ini format, with columns aligned inside sections""" return "\n\n".join(str(section) for section in self.sections()) + def _split_key(self, key) -> tuple: + # (section, key) + if isinstance(key, tuple): + return key + sep = key.find("/") + # "section/key" + if sep > -1: + return key[:sep], key[sep + 1 :] + # "section" + return (key,) + def __getitem__(self, key): """ini[key] with multiple syntaxes: @@ -267,23 +278,23 @@ def __getitem__(self, key): - `ini["section","key"] - `ini["section/key"] """ - if isinstance(key, tuple): - return self[key[0]][key[1]] - sep = key.find("/") - if sep > -1: - return self[key[:sep]][key[sep + 1 :]] - return super().__getitem__(key) + key = self._split_key(key) + if len(key) == 2: + return super().__getitem__(key[0])[key[1]] + return super().__getitem__(key[0]) def __setitem__(self, key, value): """ini[key] = value For `key` syntax check `__getitem__()` """ - if isinstance(key, tuple): - self[key[0]][key[1]] = value - sep = key.find("/") - if sep > -1: - self[key[:sep]][key[sep + 1 :]] = value - super().__setitem__(key, value) + key = self._split_key(key) + if len(key) == 1: + super().__setitem__(key[0], value) + else: + if key[0] in self: + self[key[0]][key[1]] = value + else: + super().__setitem__(key[0], self.Section(key[0], {key[1]: value})) def write(self, path: Path = None) -> None: """Write pluto.ini to file. From 7bd4e2b6774267fe31f6d12ec7f79f412726bdc1 Mon Sep 17 00:00:00 2001 From: Simske Date: Thu, 31 Mar 2022 22:16:38 +0200 Subject: [PATCH 29/41] Some doc additions --- README.md | 1 + docs/docs/loading.md | 53 +++++++++++++++++++------------------- docs/docs/metadata.md | 59 +++++++++++++++++++++++++++++++++++++++++++ docs/mkdocs.yml | 2 +- 4 files changed, 88 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 2a74fe0..d4058ef 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ # plutoplot - Plutocode data loading and plotting library +![GitHub release](https://img.shields.io/github/v/release/simske/plutoplot?include_prereleases&label=Github%20Release) ![PyPI](https://img.shields.io/pypi/v/plutoplot) [![Documentation](https://readthedocs.org/projects/plutoplot/badge/?version=latest)](https://plutoplot.readthedocs.io/en/latest/?badge=latest) [![pre-commit](https://github.com/Simske/plutoplot/actions/workflows/pre-commit.yml/badge.svg)](https://github.com/Simske/plutoplot/actions/workflows/pre-commit.yml) diff --git a/docs/docs/loading.md b/docs/docs/loading.md index c1cd105..1616252 100644 --- a/docs/docs/loading.md +++ b/docs/docs/loading.md @@ -31,32 +31,33 @@ After loading the `Simulation`-object has the following attributes: show_root_toc_entry: false To show information about the simulation, just use the string representation: -```python -print(sim) -``` -``` -PLUTO Simulation: path: 'path/to/simulation', data directory '$sim_path/.' -Data vars: rho, vx1, vx2, vx3 -Data files: Format `flt`: 2 files, last time 1.0, data timestep 1.00e+00 -PLUTO Grid Dimensions: (128, 1, 384), spherical coordinate system -r: 0.40..2.50, Lx1=2.10, N1=128 -theta: 1.45..1.57, Lx1=0.12, N1=1 -phi: 0.00..6.28, Lx1=6.28, N1=384 -``` -or use the Jupyter Notebook formatting -```python -sim -``` -> **PLUTO Simulation** path: `/home/simeon/masterproject/PLUTO/test-problems/HD/Disk_Planet/03_0`, data directory `$sim_path/.` -> Data vars: `rho` `vx1` `vx2` `vx3` -> Data files: Format `flt`: 2 files,last time 1.0, data timestep 1.00e+00 -> **PLUTO Grid** Dimensions (128, 1, 384), spherical coordinate system -> -> | | | | L | N | -> |---|---|---|---|---| -> |$r$|0.40|2.50|2.10|128| -> |$\theta$|1.45|1.57|0.12|1| -> |$\phi$|0.00|6.28|6.28|384| +!!! example + ```python + print(sim) + ``` + ``` + PLUTO Simulation: path: 'path/to/simulation', data directory '$sim_path/.' + Data vars: rho, vx1, vx2, vx3 + Data files: Format `flt`: 2 files, last time 1.0, data timestep 1.00e+00 + PLUTO Grid Dimensions: (128, 1, 384), spherical coordinate system + r: 0.40..2.50, Lx1=2.10, N1=128 + theta: 1.45..1.57, Lx1=0.12, N1=1 + phi: 0.00..6.28, Lx1=6.28, N1=384 + ``` + or use the Jupyter Notebook formatting + ```python + sim + ``` + > **PLUTO Simulation** path: `/home/simeon/masterproject/PLUTO/test-problems/HD/Disk_Planet/03_0`, data directory `$sim_path/.` + > Data vars: `rho` `vx1` `vx2` `vx3` + > Data files: Format `flt`: 2 files,last time 1.0, data timestep 1.00e+00 + > **PLUTO Grid** Dimensions (128, 1, 384), spherical coordinate system + > + > | | | | L | N | + > |---|---|---|---|---| + > |$r$|0.40|2.50|2.10|128| + > |$\theta$|1.45|1.57|0.12|1| + > |$\phi$|0.00|6.28|6.28|384| ## Slicing simulations diff --git a/docs/docs/metadata.md b/docs/docs/metadata.md index e69de29..eae3b1a 100644 --- a/docs/docs/metadata.md +++ b/docs/docs/metadata.md @@ -0,0 +1,59 @@ +# Reading metadata from pluto.ini & definitions.h + +`plutoplot` can read the PLUTO settings files if needed. + +## `pluto.ini` +`Pluto_ini` encapsulates the `pluto.ini` file, which is available from the simulation object (if `pluto.ini` is in the simulation directory). +In Jupyter Notebooks the config will be displayed as a table. +It is also possible to edit `Pluto_ini` and write it back to file. + +!!! warning "Currently all values are strings and have to be converted to their respective datatype for use" + This is subject to change, see [Github Issue](https://github.com/Simske/plutoplot/issues/11) + + +!!! example + - Access from simulation + ```python + sim = pp.Simulation("path/to/simulation") + + sim.ini["Time"]["tstop"] + sim.ini["Time","tstop"] + sim.ini["Time/tstop"] + ``` + + - access directly from file and change values + ```python + ini = pp.Pluto_ini("path/to/pluto.ini") + + ini["Time/tstop"] = "2.0" + ini.write("path/to/pluto.ini") + ``` + +??? info "`Pluto_ini` reference" + ::: plutoplot.Pluto_ini + + +## `definitions.h` +`Definitions.h` is available similarly as a `Definitions_h`-object, which is a `OrderedDict`. +It is also available from the `Simulation`-object or can be read from a file. + +The keys are handled case-insensitively for convenience. + +!!! example + ```python + sim = pp.Simulation("path/to/simulation") + + sim.definitions["cooling"] + # output example: NO + ``` + or + ```python + defs = pp.Definitions_h("path/to/definitions.h") + + defs["physics"] + # output example: HD + ``` +Currently `Definitions_h`-files cannot be edited, see progress on this in [Github Issue](https://github.com/Simske/plutoplot/issues/10). + +??? info "`Definitions_h` reference" + ::: plutoplot.Definitions_h diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index e141985..62d0122 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -5,7 +5,7 @@ nav: - Quick Start: quickstart.md - Loading Simulations: loading.md - Data Access: data-access.md - - Accessing Metadata: metadata.md + - Accessing pluto.ini & definitions.h: metadata.md - Plotting: plotting.md theme: From 3ec05dbe4113b79dbcd2c6169d30dbd1428ccc6f Mon Sep 17 00:00:00 2001 From: Simske Date: Thu, 31 Mar 2022 22:27:32 +0200 Subject: [PATCH 30/41] Updated pre-commit hooks and GH actions --- .github/workflows/pre-commit.yml | 6 +++--- .github/workflows/publish-pypi.yml | 6 +++--- .github/workflows/tox.yml | 4 ++-- .pre-commit-config.yaml | 6 +++--- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 335381c..8cb0931 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -8,6 +8,6 @@ jobs: pre-commit: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: actions/setup-python@v2 - - uses: pre-commit/action@v2.0.0 + - uses: actions/checkout@v3 + - uses: actions/setup-python@v3 + - uses: pre-commit/action@v2.0.3 diff --git a/.github/workflows/publish-pypi.yml b/.github/workflows/publish-pypi.yml index e34cf73..dd235cd 100644 --- a/.github/workflows/publish-pypi.yml +++ b/.github/workflows/publish-pypi.yml @@ -9,8 +9,8 @@ jobs: runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v2 - - uses: actions/setup-python@v2 + - uses: actions/checkout@v3 + - uses: actions/setup-python@v3 - name: Install build dependencies run: | python -m pip install --upgrade pip @@ -24,7 +24,7 @@ jobs: TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} run: twine upload dist/* - name: Upload package to Github release - uses: alexellis/upload-assets@0.2.2 + uses: alexellis/upload-assets@0.3.0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: diff --git a/.github/workflows/tox.yml b/.github/workflows/tox.yml index f72ae2a..183e222 100644 --- a/.github/workflows/tox.yml +++ b/.github/workflows/tox.yml @@ -17,9 +17,9 @@ jobs: python-version: [3.6, 3.7, 3.8, 3.9] steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v3 with: python-version: ${{ matrix.python-version }} - name: Install dependencies diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index ebbc739..ee31d5c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.0.1 + rev: v4.1.0 hooks: - id: check-added-large-files - id: check-case-conflict @@ -11,11 +11,11 @@ repos: - id: trailing-whitespace args: ["--markdown-linebreak-ext=md"] - repo: https://github.com/psf/black - rev: 21.9b0 + rev: 22.3.0 hooks: - id: black - repo: https://github.com/pycqa/isort - rev: "5.9.3" + rev: "5.10.1" hooks: - id: isort args: ["--profile", "black"] From 8c6892236c3037d9a500a4e72168bea2731fef2c Mon Sep 17 00:00:00 2001 From: Simske Date: Thu, 31 Mar 2022 22:28:24 +0200 Subject: [PATCH 31/41] Fix black formattting --- test/test_grid.py | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/test/test_grid.py b/test/test_grid.py index 75e5798..3ca3934 100644 --- a/test/test_grid.py +++ b/test/test_grid.py @@ -21,13 +21,10 @@ def test_empty(self, dims): def test_inbounds(self, dims): starts = tuple(random.randint(0, dim) for dim in dims) stops = tuple(random.randint(start, dim) for start, dim in zip(starts, dims)) - assert ( - normalize_slice( - np.s_[starts[0] : stops[0], starts[1] : stops[1], starts[2] : stops[2]], - dims, - ) - == tuple(slice(start, stop, 1) for start, stop in zip(starts, stops)) - ) + assert normalize_slice( + np.s_[starts[0] : stops[0], starts[1] : stops[1], starts[2] : stops[2]], + dims, + ) == tuple(slice(start, stop, 1) for start, stop in zip(starts, stops)) def test_outofbounds(self, dims): with pytest.raises(IndexError): @@ -55,10 +52,7 @@ def test_1high_slice(self, dims): random.randint(starts[2], dims[2]), ) - assert ( - normalize_slice( - np.s_[starts[0] : stops[0], starts[1], starts[2] : stops[2]], - dims, - ) - == tuple(slice(start, stop, 1) for start, stop in zip(starts, stops)) - ) + assert normalize_slice( + np.s_[starts[0] : stops[0], starts[1], starts[2] : stops[2]], + dims, + ) == tuple(slice(start, stop, 1) for start, stop in zip(starts, stops)) From 7a68be30413123615e8acccf7cab2558563a13ba Mon Sep 17 00:00:00 2001 From: Simske Date: Thu, 31 Mar 2022 22:31:45 +0200 Subject: [PATCH 32/41] testing: add Python 3.10 to test matrix --- .github/workflows/tox.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tox.yml b/.github/workflows/tox.yml index 183e222..463f272 100644 --- a/.github/workflows/tox.yml +++ b/.github/workflows/tox.yml @@ -14,7 +14,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [3.6, 3.7, 3.8, 3.9] + python-version: [3.6, 3.7, 3.8, 3.9, 3.10] steps: - uses: actions/checkout@v3 From f40546423963525a09b2fbd2dd82961a46ef0b39 Mon Sep 17 00:00:00 2001 From: Simske Date: Thu, 31 Mar 2022 22:47:24 +0200 Subject: [PATCH 33/41] Update and fix tox and GH actions testing --- .github/workflows/tox.yml | 2 +- tox.ini | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/tox.yml b/.github/workflows/tox.yml index 463f272..ddbb711 100644 --- a/.github/workflows/tox.yml +++ b/.github/workflows/tox.yml @@ -14,7 +14,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [3.6, 3.7, 3.8, 3.9, 3.10] + python-version: [3.6, 3.7, 3.8, 3.9, "3.10"] steps: - uses: actions/checkout@v3 diff --git a/tox.ini b/tox.ini index edb28e6..0af0561 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = py36-numpy{1.16,1.19},py37,py39-numpy{1.16,1.21} +envlist = py36-numpy{1.16,1.19},py37,py310-numpy{1.16,1.22} [gh-actions] python = @@ -7,11 +7,12 @@ python = 3.7: py37 3.8: py38 3.9: py39 + 3.10: py310 [testenv] deps = pytest numpy1.16: numpy>=1.16,<1.17 numpy1.19: numpy>=1.19,<1.20 - numpy1.21: numpy>=1.21 + numpy1.22: numpy>=1.22 commands = pytest From 70fc2f415df12e2c4a4c1399656c7d1dd128e5a4 Mon Sep 17 00:00:00 2001 From: Simske Date: Thu, 31 Mar 2022 23:20:30 +0200 Subject: [PATCH 34/41] Get to more consistent dependency state --- .github/workflows/tox.yml | 7 +- poetry.lock | 1343 +++++++++++++++++++++++-------------- pyproject.toml | 15 +- tox.ini | 5 +- 4 files changed, 874 insertions(+), 496 deletions(-) diff --git a/.github/workflows/tox.yml b/.github/workflows/tox.yml index ddbb711..ed81f68 100644 --- a/.github/workflows/tox.yml +++ b/.github/workflows/tox.yml @@ -14,7 +14,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [3.6, 3.7, 3.8, 3.9, "3.10"] + python-version: [3.7, 3.8, 3.9, "3.10"] steps: - uses: actions/checkout@v3 @@ -25,6 +25,7 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - pip install tox tox-gh-actions + pip install poetry + poetry install - name: Test with tox - run: tox + run: poetry run tox diff --git a/poetry.lock b/poetry.lock index 2539499..79fa8bd 100644 --- a/poetry.lock +++ b/poetry.lock @@ -8,41 +8,57 @@ python-versions = "*" [[package]] name = "argon2-cffi" -version = "21.1.0" +version = "21.3.0" description = "The secure Argon2 password hashing algorithm." category = "main" optional = true -python-versions = ">=3.5" +python-versions = ">=3.6" [package.dependencies] -cffi = ">=1.0.0" +argon2-cffi-bindings = "*" +typing-extensions = {version = "*", markers = "python_version < \"3.8\""} [package.extras] -dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest", "sphinx", "furo", "wheel", "pre-commit"] -docs = ["sphinx", "furo"] +dev = ["pre-commit", "cogapp", "tomli", "coverage[toml] (>=5.0.2)", "hypothesis", "pytest", "sphinx", "sphinx-notfound-page", "furo"] +docs = ["sphinx", "sphinx-notfound-page", "furo"] tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] [[package]] -name = "async-generator" -version = "1.10" -description = "Async generators and context managers for Python 3.5+" +name = "argon2-cffi-bindings" +version = "21.2.0" +description = "Low-level CFFI bindings for Argon2" category = "main" optional = true -python-versions = ">=3.5" +python-versions = ">=3.6" + +[package.dependencies] +cffi = ">=1.0.1" + +[package.extras] +dev = ["pytest", "cogapp", "pre-commit", "wheel"] +tests = ["pytest"] + +[[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.2.0" +version = "21.4.0" description = "Classes Without Boilerplate" category = "main" -optional = true +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"] +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"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"] +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 = "backcall" @@ -52,6 +68,21 @@ category = "main" optional = true python-versions = "*" +[[package]] +name = "beautifulsoup4" +version = "4.10.0" +description = "Screen-scraping library" +category = "main" +optional = true +python-versions = ">3.0.0" + +[package.dependencies] +soupsieve = ">1.2" + +[package.extras] +html5lib = ["html5lib"] +lxml = ["lxml"] + [[package]] name = "bleach" version = "4.1.0" @@ -89,7 +120,7 @@ name = "colorama" version = "0.4.4" description = "Cross-platform colored terminal text." category = "main" -optional = true +optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] @@ -100,9 +131,17 @@ category = "main" optional = false python-versions = ">=3.6" +[[package]] +name = "debugpy" +version = "1.6.0" +description = "An implementation of the Debug Adapter Protocol for Python" +category = "main" +optional = true +python-versions = ">=3.7" + [[package]] name = "decorator" -version = "5.1.0" +version = "5.1.1" description = "Decorators for Humans" category = "main" optional = true @@ -116,90 +155,152 @@ category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +[[package]] +name = "distlib" +version = "0.3.4" +description = "Distribution utilities" +category = "dev" +optional = false +python-versions = "*" + [[package]] name = "entrypoints" -version = "0.3" +version = "0.4" description = "Discover and load entry points from installed packages." category = "main" optional = true -python-versions = ">=2.7" +python-versions = ">=3.6" + +[[package]] +name = "filelock" +version = "3.6.0" +description = "A platform independent file lock." +category = "dev" +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 = "fonttools" +version = "4.31.2" +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 = "h5py" -version = "3.1.0" +version = "3.6.0" description = "Read and write HDF5 files from Python" category = "main" optional = true -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] cached-property = {version = "*", markers = "python_version < \"3.8\""} -numpy = [ - {version = ">=1.12", markers = "python_version == \"3.6\""}, - {version = ">=1.14.5", markers = "python_version == \"3.7\""}, - {version = ">=1.17.5", markers = "python_version == \"3.8\""}, - {version = ">=1.19.3", markers = "python_version >= \"3.9\""}, -] +numpy = ">=1.14.5" [[package]] name = "importlib-metadata" -version = "4.8.1" +version = "4.11.3" description = "Read metadata from Python packages" category = "main" -optional = true -python-versions = ">=3.6" +optional = false +python-versions = ">=3.7" [package.dependencies] typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} zipp = ">=0.5" [package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] +docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] perf = ["ipython"] -testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"] + +[[package]] +name = "importlib-resources" +version = "5.6.0" +description = "Read resources from Python packages" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] + +[[package]] +name = "iniconfig" +version = "1.1.1" +description = "iniconfig: brain-dead simple config-ini parsing" +category = "dev" +optional = false +python-versions = "*" [[package]] name = "ipykernel" -version = "5.5.6" +version = "6.11.0" description = "IPython Kernel for Jupyter" category = "main" optional = true -python-versions = ">=3.5" +python-versions = ">=3.7" [package.dependencies] appnope = {version = "*", markers = "platform_system == \"Darwin\""} -ipython = ">=5.0.0" -ipython-genutils = "*" -jupyter-client = "*" -tornado = ">=4.2" -traitlets = ">=4.1.0" +debugpy = ">=1.0" +ipython = ">=7.23.1" +jupyter-client = ">=6.1.12" +matplotlib-inline = ">=0.1" +nest-asyncio = "*" +psutil = "*" +tornado = ">=6.1" +traitlets = ">=5.1.0" [package.extras] -test = ["pytest (!=5.3.4)", "pytest-cov", "flaky", "nose", "jedi (<=0.17.2)"] +test = ["pytest (>=6.0)", "pytest-cov", "flaky", "ipyparallel", "pre-commit", "pytest-timeout"] [[package]] name = "ipython" -version = "7.16.1" +version = "7.32.0" description = "IPython: Productive Interactive Computing" category = "main" optional = true -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] appnope = {version = "*", markers = "sys_platform == \"darwin\""} backcall = "*" colorama = {version = "*", markers = "sys_platform == \"win32\""} decorator = "*" -jedi = ">=0.10" -pexpect = {version = "*", markers = "sys_platform != \"win32\""} +jedi = ">=0.16" +matplotlib-inline = "*" +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} pickleshare = "*" prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0" pygments = "*" -setuptools = ">=18.5" traitlets = ">=4.2" [package.extras] -all = ["Sphinx (>=1.3)", "ipykernel", "ipyparallel", "ipywidgets", "nbconvert", "nbformat", "nose (>=0.10.1)", "notebook", "numpy (>=1.14)", "pygments", "qtconsole", "requests", "testpath"] +all = ["Sphinx (>=1.3)", "ipykernel", "ipyparallel", "ipywidgets", "nbconvert", "nbformat", "nose (>=0.10.1)", "notebook", "numpy (>=1.17)", "pygments", "qtconsole", "requests", "testpath"] doc = ["Sphinx (>=1.3)"] kernel = ["ipykernel"] nbconvert = ["nbconvert"] @@ -207,7 +308,7 @@ nbformat = ["nbformat"] notebook = ["notebook", "ipywidgets"] parallel = ["ipyparallel"] qtconsole = ["qtconsole"] -test = ["nose (>=0.10.1)", "requests", "testpath", "pygments", "nbformat", "ipykernel", "numpy (>=1.14)"] +test = ["nose (>=0.10.1)", "requests", "testpath", "pygments", "nbformat", "ipykernel", "numpy (>=1.17)"] [[package]] name = "ipython-genutils" @@ -219,7 +320,7 @@ python-versions = "*" [[package]] name = "ipywidgets" -version = "7.6.5" +version = "7.7.0" description = "IPython HTML widgets for Jupyter" category = "main" optional = true @@ -232,14 +333,14 @@ ipython-genutils = ">=0.2.0,<0.3.0" jupyterlab-widgets = {version = ">=1.0.0", markers = "python_version >= \"3.6\""} nbformat = ">=4.2.0" traitlets = ">=4.3.1" -widgetsnbextension = ">=3.5.0,<3.6.0" +widgetsnbextension = ">=3.6.0,<3.7.0" [package.extras] test = ["pytest (>=3.6.0)", "pytest-cov", "mock"] [[package]] name = "jedi" -version = "0.18.0" +version = "0.18.1" description = "An autocompletion tool for Python that can be used for text editors." category = "main" optional = true @@ -250,15 +351,15 @@ parso = ">=0.8.0,<0.9.0" [package.extras] qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] -testing = ["Django (<3.1)", "colorama", "docopt", "pytest (<6.0.0)"] +testing = ["Django (<3.1)", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] name = "jinja2" -version = "3.0.2" +version = "3.1.1" description = "A very fast and expressive template engine." category = "main" optional = true -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] MarkupSafe = ">=2.0" @@ -268,16 +369,18 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "jsonschema" -version = "4.0.0" +version = "4.4.0" description = "An implementation of JSON Schema validation for Python" category = "main" optional = true -python-versions = "*" +python-versions = ">=3.7" [package.dependencies] attrs = ">=17.4.0" importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} +importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" +typing-extensions = {version = "*", markers = "python_version < \"3.8\""} [package.extras] format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] @@ -285,27 +388,28 @@ format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- [[package]] name = "jupyter-client" -version = "6.1.13" +version = "7.2.1" description = "Jupyter protocol implementation and client libraries" category = "main" optional = true -python-versions = ">=3.5" +python-versions = ">=3.7" [package.dependencies] -jupyter-core = ">=4.6.0" -nest-asyncio = ">=1.5" -python-dateutil = ">=2.1" -pyzmq = ">=13" -tornado = ">=4.1" +entrypoints = "*" +jupyter-core = ">=4.9.2" +nest-asyncio = ">=1.5.4" +python-dateutil = ">=2.8.2" +pyzmq = ">=22.3" +tornado = ">=6.0" traitlets = "*" [package.extras] -doc = ["sphinx (>=1.3.6)", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] -test = ["async-generator", "ipykernel", "ipython", "mock", "pytest-asyncio", "pytest-timeout", "pytest", "mypy", "pre-commit", "jedi (<0.18)"] +doc = ["ipykernel", "myst-parser", "sphinx (>=1.3.6)", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] +test = ["codecov", "coverage", "ipykernel (>=6.5)", "ipython", "mypy", "pre-commit", "pytest", "pytest-asyncio (>=0.18)", "pytest-cov", "pytest-timeout"] [[package]] name = "jupyter-core" -version = "4.9.1" +version = "4.9.2" description = "Jupyter core package. A base package on which Jupyter projects rely." category = "main" optional = true @@ -328,7 +432,7 @@ pygments = ">=2.4.1,<3" [[package]] name = "jupyterlab-widgets" -version = "1.0.2" +version = "1.1.0" description = "A JupyterLab extension." category = "main" optional = true @@ -336,35 +440,52 @@ python-versions = ">=3.6" [[package]] name = "kiwisolver" -version = "1.3.1" +version = "1.4.2" description = "A fast implementation of the Cassowary constraint solver" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" + +[package.dependencies] +typing-extensions = {version = "*", markers = "python_version < \"3.8\""} [[package]] name = "markupsafe" -version = "2.0.1" +version = "2.1.1" description = "Safely add untrusted strings to HTML/XML markup." category = "main" optional = true -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] name = "matplotlib" -version = "3.3.4" +version = "3.5.1" description = "Python plotting package" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] cycler = ">=0.10" +fonttools = ">=4.22.0" kiwisolver = ">=1.0.1" -numpy = ">=1.15" +numpy = ">=1.17" +packaging = ">=20.0" pillow = ">=6.2.0" -pyparsing = ">=2.0.3,<2.0.4 || >2.0.4,<2.1.2 || >2.1.2,<2.1.6 || >2.1.6" -python-dateutil = ">=2.1" +pyparsing = ">=2.2.1" +python-dateutil = ">=2.7" +setuptools_scm = ">=4" + +[[package]] +name = "matplotlib-inline" +version = "0.1.3" +description = "Inline Matplotlib backend for Jupyter" +category = "main" +optional = true +python-versions = ">=3.5" + +[package.dependencies] +traitlets = "*" [[package]] name = "mistune" @@ -376,75 +497,74 @@ python-versions = "*" [[package]] name = "nbclient" -version = "0.5.1" +version = "0.5.13" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." category = "main" optional = true -python-versions = ">=3.6" +python-versions = ">=3.7.0" [package.dependencies] -async-generator = "*" jupyter-client = ">=6.1.5" nbformat = ">=5.0" nest-asyncio = "*" -traitlets = ">=4.2" +traitlets = ">=5.0.0" [package.extras] -dev = ["codecov", "coverage", "ipython", "ipykernel", "ipywidgets", "pytest (>=4.1)", "pytest-cov (>=2.6.1)", "check-manifest", "flake8", "mypy", "tox", "bumpversion", "xmltodict", "pip (>=18.1)", "wheel (>=0.31.0)", "setuptools (>=38.6.0)", "twine (>=1.11.0)", "black"] sphinx = ["Sphinx (>=1.7)", "sphinx-book-theme", "mock", "moto", "myst-parser"] -test = ["codecov", "coverage", "ipython", "ipykernel", "ipywidgets", "pytest (>=4.1)", "pytest-cov (>=2.6.1)", "check-manifest", "flake8", "mypy", "tox", "bumpversion", "xmltodict", "pip (>=18.1)", "wheel (>=0.31.0)", "setuptools (>=38.6.0)", "twine (>=1.11.0)", "black"] +test = ["ipython (<8.0.0)", "ipykernel", "ipywidgets (<8.0.0)", "pytest (>=4.1)", "pytest-asyncio", "pytest-cov (>=2.6.1)", "check-manifest", "flake8", "mypy", "xmltodict", "black", "pip (>=18.1)", "wheel (>=0.31.0)", "setuptools (>=38.6.0)", "twine (>=1.11.0)"] [[package]] name = "nbconvert" -version = "6.0.7" +version = "6.4.5" description = "Converting Jupyter Notebooks" category = "main" optional = true -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] +beautifulsoup4 = "*" bleach = "*" defusedxml = "*" entrypoints = ">=0.2.2" jinja2 = ">=2.4" jupyter-core = "*" jupyterlab-pygments = "*" +MarkupSafe = ">=2.0" mistune = ">=0.8.1,<2" nbclient = ">=0.5.0,<0.6.0" nbformat = ">=4.4" pandocfilters = ">=1.4.1" pygments = ">=2.4.1" testpath = "*" -traitlets = ">=4.2" +traitlets = ">=5.0" [package.extras] -all = ["pytest", "pytest-cov", "pytest-dependency", "ipykernel", "ipywidgets (>=7)", "pyppeteer (==0.2.2)", "tornado (>=4.0)", "sphinx (>=1.5.1)", "sphinx-rtd-theme", "nbsphinx (>=0.2.12)", "ipython"] +all = ["pytest", "pytest-cov", "pytest-dependency", "ipykernel", "ipywidgets (>=7)", "pyppeteer (>=1,<1.1)", "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", "pytest-dependency", "ipykernel", "ipywidgets (>=7)", "pyppeteer (==0.2.2)"] -webpdf = ["pyppeteer (==0.2.2)"] +test = ["pytest", "pytest-cov", "pytest-dependency", "ipykernel", "ipywidgets (>=7)", "pyppeteer (>=1,<1.1)"] +webpdf = ["pyppeteer (>=1,<1.1)"] [[package]] name = "nbformat" -version = "5.1.3" +version = "5.2.0" description = "The Jupyter Notebook format" category = "main" optional = true -python-versions = ">=3.5" +python-versions = ">=3.7" [package.dependencies] -ipython-genutils = "*" jsonschema = ">=2.4,<2.5.0 || >2.5.0" jupyter-core = "*" traitlets = ">=4.1" [package.extras] fast = ["fastjsonschema"] -test = ["check-manifest", "fastjsonschema", "testpath", "pytest", "pytest-cov"] +test = ["check-manifest", "fastjsonschema", "testpath", "pytest"] [[package]] name = "nest-asyncio" -version = "1.5.1" +version = "1.5.4" description = "Patch asyncio to allow nested event loops" category = "main" optional = true @@ -452,7 +572,7 @@ python-versions = ">=3.5" [[package]] name = "notebook" -version = "6.4.5" +version = "6.4.10" description = "A web-based notebook environment for interactive computing" category = "main" optional = true @@ -465,11 +585,12 @@ ipython-genutils = "*" jinja2 = "*" jupyter-client = ">=5.3.4" jupyter-core = ">=4.6.1" -nbconvert = "*" +nbconvert = ">=5" nbformat = "*" +nest-asyncio = ">=1.5" prometheus-client = "*" pyzmq = ">=17" -Send2Trash = ">=1.5.0" +Send2Trash = ">=1.8.0" terminado = ">=0.8.3" tornado = ">=6.1" traitlets = ">=4.2.1" @@ -481,22 +602,22 @@ test = ["pytest", "coverage", "requests", "nbval", "selenium", "pytest-cov", "re [[package]] name = "numpy" -version = "1.19.5" +version = "1.21.5" description = "NumPy is the fundamental package for array computing with Python." category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7,<3.11" [[package]] name = "packaging" -version = "21.0" +version = "21.3" description = "Core utilities for Python packages" category = "main" -optional = true +optional = false python-versions = ">=3.6" [package.dependencies] -pyparsing = ">=2.0.2" +pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" [[package]] name = "pandocfilters" @@ -508,7 +629,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "parso" -version = "0.8.2" +version = "0.8.3" description = "A Python Parser" category = "main" optional = true @@ -539,34 +660,72 @@ python-versions = "*" [[package]] name = "pillow" -version = "8.4.0" +version = "9.0.1" description = "Python Imaging Library (Fork)" category = "main" optional = false +python-versions = ">=3.7" + +[[package]] +name = "platformdirs" +version = "2.5.1" +description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["Sphinx (>=4)", "furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)"] +test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"] + +[[package]] +name = "pluggy" +version = "1.0.0" +description = "plugin and hook calling mechanisms for python" +category = "dev" +optional = false python-versions = ">=3.6" +[package.dependencies] +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + [[package]] name = "prometheus-client" -version = "0.12.0" +version = "0.13.1" description = "Python client for the Prometheus monitoring system." category = "main" optional = true -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.6" [package.extras] twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.3" +version = "3.0.28" description = "Library for building powerful interactive command lines in Python" category = "main" optional = true -python-versions = ">=3.6" +python-versions = ">=3.6.2" [package.dependencies] wcwidth = "*" +[[package]] +name = "psutil" +version = "5.9.0" +description = "Cross-platform lib for process and system monitoring in Python." +category = "main" +optional = true +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[package.extras] +test = ["ipaddress", "mock", "unittest2", "enum34", "pywin32", "wmi"] + [[package]] name = "ptyprocess" version = "0.7.0" @@ -577,15 +736,15 @@ python-versions = "*" [[package]] name = "py" -version = "1.10.0" +version = "1.11.0" description = "library with cross-python path, ini-parsing, io, code, log facilities" category = "main" -optional = true -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "pycparser" -version = "2.20" +version = "2.21" description = "C parser in Python" category = "main" optional = true @@ -593,7 +752,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "pygments" -version = "2.10.0" +version = "2.11.2" description = "Pygments is a syntax highlighting package written in Python." category = "main" optional = true @@ -601,7 +760,7 @@ python-versions = ">=3.5" [[package]] name = "pyparsing" -version = "3.0.4" +version = "3.0.7" description = "Python parsing module" category = "main" optional = false @@ -612,11 +771,33 @@ diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pyrsistent" -version = "0.18.0" +version = "0.18.1" description = "Persistent/Functional/Immutable data structures" category = "main" optional = true -python-versions = ">=3.6" +python-versions = ">=3.7" + +[[package]] +name = "pytest" +version = "7.1.1" +description = "pytest: simple powerful testing with Python" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} +attrs = ">=19.2.0" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +py = ">=1.8.2" +tomli = ">=1.0.0" + +[package.extras] +testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] [[package]] name = "python-dateutil" @@ -631,7 +812,7 @@ six = ">=1.5" [[package]] name = "pywin32" -version = "302" +version = "303" description = "Python for Window Extensions" category = "main" optional = true @@ -639,11 +820,11 @@ python-versions = "*" [[package]] name = "pywinpty" -version = "1.1.5" +version = "2.0.5" description = "Pseudo terminal support for Windows from Python." category = "main" optional = true -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] name = "pyzmq" @@ -671,16 +852,20 @@ objc = ["pyobjc-framework-cocoa"] win32 = ["pywin32"] [[package]] -name = "setuptools" -version = "58.5.2" -description = "Easily download, build, install, upgrade, and uninstall Python packages" +name = "setuptools-scm" +version = "6.4.2" +description = "the blessed package to manage your versions by scm tags" category = "main" -optional = true +optional = false python-versions = ">=3.6" +[package.dependencies] +packaging = ">=20.0" +tomli = ">=1.0.0" + [package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "sphinx-inline-tabs", "sphinxcontrib-towncrier", "furo"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "mock", "flake8-2020", "virtualenv (>=13.0.0)", "pytest-virtualenv (>=1.2.7)", "wheel", "paver", "pip (>=19.1)", "jaraco.envs", "pytest-xdist", "sphinx", "jaraco.path (>=3.2.0)", "pytest-black (>=0.3.7)", "pytest-mypy"] +test = ["pytest (>=6.2)", "virtualenv (>20)"] +toml = ["setuptools (>=42)"] [[package]] name = "six" @@ -690,13 +875,21 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +[[package]] +name = "soupsieve" +version = "2.3.1" +description = "A modern CSS selector implementation for Beautiful Soup." +category = "main" +optional = true +python-versions = ">=3.6" + [[package]] name = "terminado" -version = "0.12.1" +version = "0.13.3" description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." category = "main" optional = true -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] ptyprocess = {version = "*", markers = "os_name != \"nt\""} @@ -708,14 +901,30 @@ test = ["pytest"] [[package]] name = "testpath" -version = "0.5.0" +version = "0.6.0" description = "Test utilities for code working with files and commands" category = "main" optional = true python-versions = ">= 3.5" [package.extras] -test = ["pytest", "pathlib2"] +test = ["pytest"] + +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +category = "dev" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +category = "main" +optional = false +python-versions = ">=3.7" [[package]] name = "tornado" @@ -725,29 +934,81 @@ category = "main" optional = true python-versions = ">= 3.5" +[[package]] +name = "tox" +version = "3.24.5" +description = "tox is a generic virtualenv management and test command line tool" +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" + +[package.dependencies] +colorama = {version = ">=0.4.1", markers = "platform_system == \"Windows\""} +filelock = ">=3.0.0" +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} +packaging = ">=14" +pluggy = ">=0.12.0" +py = ">=1.4.17" +six = ">=1.14.0" +toml = ">=0.9.4" +virtualenv = ">=16.0.0,<20.0.0 || >20.0.0,<20.0.1 || >20.0.1,<20.0.2 || >20.0.2,<20.0.3 || >20.0.3,<20.0.4 || >20.0.4,<20.0.5 || >20.0.5,<20.0.6 || >20.0.6,<20.0.7 || >20.0.7" + +[package.extras] +docs = ["pygments-github-lexers (>=0.0.5)", "sphinx (>=2.0.0)", "sphinxcontrib-autoprogram (>=0.1.5)", "towncrier (>=18.5.0)"] +testing = ["flaky (>=3.4.0)", "freezegun (>=0.3.11)", "pytest (>=4.0.0)", "pytest-cov (>=2.5.1)", "pytest-mock (>=1.10.0)", "pytest-randomly (>=1.0.0)", "psutil (>=5.6.1)", "pathlib2 (>=2.3.3)"] + +[[package]] +name = "tox-gh-actions" +version = "2.9.1" +description = "Seamless integration of tox into GitHub Actions" +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" + +[package.dependencies] +importlib-resources = "*" +tox = ">=3.12,<4" + +[package.extras] +testing = ["coverage (<6)", "flake8 (>=3,<4)", "pytest-cov (>=2,<3)", "pytest-mock (>=2,<3)", "black", "pytest (>=4,<7)", "pytest (>=6.2.5,<7)", "pytest-randomly (>=3)"] + [[package]] name = "traitlets" -version = "4.3.3" -description = "Traitlets Python config system" +version = "5.1.1" +description = "Traitlets Python configuration system" category = "main" optional = true -python-versions = "*" - -[package.dependencies] -decorator = "*" -ipython-genutils = "*" -six = "*" +python-versions = ">=3.7" [package.extras] -test = ["pytest", "mock"] +test = ["pytest"] [[package]] name = "typing-extensions" -version = "3.10.0.2" -description = "Backported and Experimental Type Hints for Python 3.5+" +version = "4.1.1" +description = "Backported and Experimental Type Hints for Python 3.6+" category = "main" -optional = true -python-versions = "*" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "virtualenv" +version = "20.14.0" +description = "Virtual Python Environment builder" +category = "dev" +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" +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} +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" @@ -767,7 +1028,7 @@ python-versions = "*" [[package]] name = "widgetsnbextension" -version = "3.5.2" +version = "3.6.0" description = "IPython HTML widgets for Jupyter" category = "main" optional = true @@ -778,15 +1039,15 @@ notebook = ">=4.4.1" [[package]] name = "zipp" -version = "3.6.0" +version = "3.7.0" description = "Backport of pathlib-compatible object wrapper for zip files" category = "main" -optional = true -python-versions = ">=3.6" +optional = false +python-versions = ">=3.7" [package.extras] docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] [extras] hdf5 = ["h5py"] @@ -794,8 +1055,8 @@ interactive = ["ipywidgets"] [metadata] lock-version = "1.1" -python-versions = ">=3.6,<3.11" -content-hash = "32fb2cca7b7130dcc84a5f1f723cf3cc5c9d9ab3e7142177f523c79b473e6000" +python-versions = ">=3.7,<3.11" +content-hash = "4f21cb819f87ff48ed90f9c609e99eb9213aa2407d08c32f7cb1852ce8cb38eb" [metadata.files] appnope = [ @@ -803,30 +1064,48 @@ appnope = [ {file = "appnope-0.1.2.tar.gz", hash = "sha256:dd83cd4b5b460958838f6eb3000c660b1f9caf2a5b1de4264e941512f603258a"}, ] argon2-cffi = [ - {file = "argon2-cffi-21.1.0.tar.gz", hash = "sha256:f710b61103d1a1f692ca3ecbd1373e28aa5e545ac625ba067ff2feca1b2bb870"}, - {file = "argon2_cffi-21.1.0-cp35-abi3-macosx_10_14_x86_64.whl", hash = "sha256:217b4f0f853ccbbb5045242946ad2e162e396064575860141b71a85eb47e475a"}, - {file = "argon2_cffi-21.1.0-cp35-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fa7e7d1fc22514a32b1761fdfa1882b6baa5c36bb3ef557bdd69e6fc9ba14a41"}, - {file = "argon2_cffi-21.1.0-cp35-abi3-win32.whl", hash = "sha256:e4d8f0ae1524b7b0372a3e574a2561cbdddb3fdb6c28b70a72868189bda19659"}, - {file = "argon2_cffi-21.1.0-cp35-abi3-win_amd64.whl", hash = "sha256:65213a9174320a1aee03fe826596e0620783966b49eb636955958b3074e87ff9"}, - {file = "argon2_cffi-21.1.0-pp36-pypy36_pp73-macosx_10_7_x86_64.whl", hash = "sha256:245f64a203012b144b7b8c8ea6d468cb02b37caa5afee5ba4a10c80599334f6a"}, - {file = "argon2_cffi-21.1.0-pp36-pypy36_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4ad152c418f7eb640eac41ac815534e6aa61d1624530b8e7779114ecfbf327f8"}, - {file = "argon2_cffi-21.1.0-pp36-pypy36_pp73-win32.whl", hash = "sha256:bc513db2283c385ea4da31a2cd039c33380701f376f4edd12fe56db118a3b21a"}, - {file = "argon2_cffi-21.1.0-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:c7a7c8cc98ac418002090e4add5bebfff1b915ea1cb459c578cd8206fef10378"}, - {file = "argon2_cffi-21.1.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:165cadae5ac1e26644f5ade3bd9c18d89963be51d9ea8817bd671006d7909057"}, - {file = "argon2_cffi-21.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:566ffb581bbd9db5562327aee71b2eda24a1c15b23a356740abe3c011bbe0dcb"}, -] -async-generator = [ - {file = "async_generator-1.10-py3-none-any.whl", hash = "sha256:01c7bf666359b4967d2cda0000cc2e4af16a0ae098cbffcb8472fb9e8ad6585b"}, - {file = "async_generator-1.10.tar.gz", hash = "sha256:6ebb3d106c12920aaae42ccb6f787ef5eefdcdd166ea3d628fa8476abe712144"}, + {file = "argon2-cffi-21.3.0.tar.gz", hash = "sha256:d384164d944190a7dd7ef22c6aa3ff197da12962bd04b17f64d4e93d934dba5b"}, + {file = "argon2_cffi-21.3.0-py3-none-any.whl", hash = "sha256:8c976986f2c5c0e5000919e6de187906cfd81fb1c72bf9d88c01177e77da7f80"}, +] +argon2-cffi-bindings = [ + {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f"}, + {file = "argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a"}, +] +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.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"}, - {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"}, + {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, + {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, ] backcall = [ {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, ] +beautifulsoup4 = [ + {file = "beautifulsoup4-4.10.0-py3-none-any.whl", hash = "sha256:9a315ce70049920ea4572a4055bc4bd700c940521d36fc858205ad4fcde149bf"}, + {file = "beautifulsoup4-4.10.0.tar.gz", hash = "sha256:c23ad23c521d818955a4151a67d81580319d4bf548d3d49f4223ae041ff98891"}, +] bleach = [ {file = "bleach-4.1.0-py2.py3-none-any.whl", hash = "sha256:4d2651ab93271d1129ac9cbc679f524565cc8a1b791909c4a51eac4446a15994"}, {file = "bleach-4.1.0.tar.gz", hash = "sha256:0900d8b37eba61a802ee40ac0061f8c2b5dee29c1927dd1d233e075ebf5a71da"}, @@ -895,289 +1174,319 @@ cycler = [ {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, {file = "cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"}, ] +debugpy = [ + {file = "debugpy-1.6.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:eb1946efac0c0c3d411cea0b5ac772fbde744109fd9520fb0c5a51979faf05ad"}, + {file = "debugpy-1.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e3513399177dd37af4c1332df52da5da1d0c387e5927dc4c0709e26ee7302e8f"}, + {file = "debugpy-1.6.0-cp310-cp310-win32.whl", hash = "sha256:5c492235d6b68f879df3bdbdb01f25c15be15682665517c2c7d0420e5658d71f"}, + {file = "debugpy-1.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:40de9ba137d355538432209d05e0f5fe5d0498dce761c39119ad4b950b51db31"}, + {file = "debugpy-1.6.0-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:0d383b91efee57dbb923ba20801130cf60450a0eda60bce25bccd937de8e323a"}, + {file = "debugpy-1.6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1ff853e60e77e1c16f85a31adb8360bb2d98ca588d7ed645b7f0985b240bdb5e"}, + {file = "debugpy-1.6.0-cp37-cp37m-win32.whl", hash = "sha256:8e972c717d95f56b6a3a7a29a5ede1ee8f2c3802f6f0e678203b0778eb322bf1"}, + {file = "debugpy-1.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:a8aaeb53e87225141fda7b9081bd87155c1debc13e2f5a532d341112d1983b65"}, + {file = "debugpy-1.6.0-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:132defb585b518955358321d0f42f6aa815aa15b432be27db654807707c70b2f"}, + {file = "debugpy-1.6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8ee75844242b4537beb5899f3e60a578454d1f136b99e8d57ac424573797b94a"}, + {file = "debugpy-1.6.0-cp38-cp38-win32.whl", hash = "sha256:a65a2499761d47df3e9ea9567109be6e73d412e00ac3ffcf74839f3ddfcdf028"}, + {file = "debugpy-1.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:bd980d533d0ddfc451e03a3bb32acb2900049fec39afc3425b944ebf0889be62"}, + {file = "debugpy-1.6.0-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:245c7789a012f86210847ec7ee9f38c30a30d4c2223c3e111829a76c9006a5d0"}, + {file = "debugpy-1.6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0e3aa2368883e83e7b689ddff3cafb595f7b711f6a065886b46a96a7fef874e7"}, + {file = "debugpy-1.6.0-cp39-cp39-win32.whl", hash = "sha256:72bcfa97f3afa0064afc77ab811f48ad4a06ac330f290b675082c24437730366"}, + {file = "debugpy-1.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:30abefefd2ff5a5481162d613cb70e60e2fa80a5eb4c994717c0f008ed25d2e1"}, + {file = "debugpy-1.6.0-py2.py3-none-any.whl", hash = "sha256:4de7777842da7e08652f2776c552070bbdd758557fdec73a15d7be0e4aab95ce"}, + {file = "debugpy-1.6.0.zip", hash = "sha256:7b79c40852991f7b6c3ea65845ed0f5f6b731c37f4f9ad9c61e2ab4bd48a9275"}, +] decorator = [ - {file = "decorator-5.1.0-py3-none-any.whl", hash = "sha256:7b12e7c3c6ab203a29e157335e9122cb03de9ab7264b137594103fd4a683b374"}, - {file = "decorator-5.1.0.tar.gz", hash = "sha256:e59913af105b9860aa2c8d3272d9de5a56a4e608db9a2f167a8480b323d529a7"}, + {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, + {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, ] defusedxml = [ {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, ] +distlib = [ + {file = "distlib-0.3.4-py2.py3-none-any.whl", hash = "sha256:6564fe0a8f51e734df6333d08b8b94d4ea8ee6b99b5ed50613f731fd4089f34b"}, + {file = "distlib-0.3.4.zip", hash = "sha256:e4b58818180336dc9c529bfb9a0b58728ffc09ad92027a3f30b7cd91e3458579"}, +] entrypoints = [ - {file = "entrypoints-0.3-py2.py3-none-any.whl", hash = "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19"}, - {file = "entrypoints-0.3.tar.gz", hash = "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451"}, + {file = "entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f"}, + {file = "entrypoints-0.4.tar.gz", hash = "sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4"}, +] +filelock = [ + {file = "filelock-3.6.0-py3-none-any.whl", hash = "sha256:f8314284bfffbdcfa0ff3d7992b023d4c628ced6feb957351d4c48d059f56bc0"}, + {file = "filelock-3.6.0.tar.gz", hash = "sha256:9cd540a9352e432c7246a48fe4e8712b10acb1df2ad1f30e8c070b82ae1fed85"}, +] +fonttools = [ + {file = "fonttools-4.31.2-py3-none-any.whl", hash = "sha256:2df636a3f402ef14593c6811dac0609563b8c374bd7850e76919eb51ea205426"}, + {file = "fonttools-4.31.2.zip", hash = "sha256:236b29aee6b113e8f7bee28779c1230a86ad2aac9a74a31b0aedf57e7dfb62a4"}, ] h5py = [ - {file = "h5py-3.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:1cd367f89a5441236bdbb795e9fb9a9e3424929c00b4a54254ca760437f83d69"}, - {file = "h5py-3.1.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:fea05349f63625a8fb808e57e42bb4c76930cf5d50ac58b678c52f913a48a89b"}, - {file = "h5py-3.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2e37352ddfcf9d77a2a47f7c8f7e125c6d20cc06c2995edeb7be222d4e152636"}, - {file = "h5py-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e33f61d3eb862614c0f273a1f993a64dc2f093e1a3094932c50ada9d2db2170f"}, - {file = "h5py-3.1.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:236ac8d943be30b617ab615c3d4a4bf4a438add2be87e54af3687ab721a18fac"}, - {file = "h5py-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:02c391fdb980762a1cc03a4bcaecd03dc463994a9a63a02264830114a96e111f"}, - {file = "h5py-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f89a3dae38843ffa49d17a31a3509a8129e9b46ece602a0138e1ed79e685c361"}, - {file = "h5py-3.1.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:ba71f6229d2013fbb606476ecc29c6223fc16b244d35fcd8566ad9dbaf910857"}, - {file = "h5py-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:dccb89358bc84abcd711363c3e138f9f4eccfdf866f2139a8e72308328765b2c"}, - {file = "h5py-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cb74df83709d6d03d11e60b9480812f58da34f194beafa8c8314dbbeeedfe0a6"}, - {file = "h5py-3.1.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:80c623be10479e81b64fa713b7ed4c0bbe9f02e8e7d2a2e5382336087b615ce4"}, - {file = "h5py-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:1cdfd1c5449ca1329d152f0b66830e93226ebce4f5e07dd8dc16bfc2b1a49d7b"}, - {file = "h5py-3.1.0.tar.gz", hash = "sha256:1e2516f190652beedcb8c7acfa1c6fa92d99b42331cbef5e5c7ec2d65b0fc3c2"}, + {file = "h5py-3.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a5320837c60870911645e9a935099bdb2be6a786fcf0dac5c860f3b679e2de55"}, + {file = "h5py-3.6.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98646e659bf8591a2177e12a4461dced2cad72da0ba4247643fd118db88880d2"}, + {file = "h5py-3.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:5996ff5adefd2d68c330a4265b6ef92e51b2fc674834a5990add5033bf109e20"}, + {file = "h5py-3.6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c9a5529343a619fea777b7caa27d493595b28b5af8b005e8d1817559fcccf493"}, + {file = "h5py-3.6.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e2b49c48df05e19bb20b400b7ff7dc6f1ee36b84dc717c3771c468b33697b466"}, + {file = "h5py-3.6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd9447633b0bafaf82190d9a8d56f3cb2e8d30169483aee67d800816e028190a"}, + {file = "h5py-3.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1c5acc660c458421e88c4c5fe092ce15923adfac4c732af1ac4fced683a5ea97"}, + {file = "h5py-3.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:35ab552c6f0a93365b3cb5664a5305f3920daa0a43deb5b2c547c52815ec46b9"}, + {file = "h5py-3.6.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:542781d50e1182b8fb619b1265dfe1c765e18215f818b0ab28b2983c28471325"}, + {file = "h5py-3.6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f39242960b8d7f86f3056cc2546aa3047ff4835985f6483229af8f029e9c8db"}, + {file = "h5py-3.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:8ecedf16c613973622a334701f67edcc0249469f9daa0576e994fb20ac0405db"}, + {file = "h5py-3.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d8cacad89aa7daf3626fce106f7f2662ac35b14849df22d252d0d8fab9dc1c0b"}, + {file = "h5py-3.6.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dbaa1ed9768bf9ff04af0919acc55746e62b28333644f0251f38768313f31745"}, + {file = "h5py-3.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:954c5c39a09b5302f69f752c3bbf165d368a65c8d200f7d5655e0fa6368a75e6"}, + {file = "h5py-3.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:9fd8a14236fdd092a20c0bdf25c3aba3777718d266fabb0fdded4fcf252d1630"}, + {file = "h5py-3.6.0.tar.gz", hash = "sha256:8752d2814a92aba4e2b2a5922d2782d0029102d99caaf3c201a566bc0b40db29"}, ] importlib-metadata = [ - {file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"}, - {file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"}, + {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"}, + {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"}, +] +importlib-resources = [ + {file = "importlib_resources-5.6.0-py3-none-any.whl", hash = "sha256:a9dd72f6cc106aeb50f6e66b86b69b454766dd6e39b69ac68450253058706bcc"}, + {file = "importlib_resources-5.6.0.tar.gz", hash = "sha256:1b93238cbf23b4cde34240dd8321d99e9bf2eb4bc91c0c99b2886283e7baad85"}, +] +iniconfig = [ + {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, + {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, ] ipykernel = [ - {file = "ipykernel-5.5.6-py3-none-any.whl", hash = "sha256:66f824af1ef4650e1e2f6c42e1423074321440ef79ca3651a6cfd06a4e25e42f"}, - {file = "ipykernel-5.5.6.tar.gz", hash = "sha256:4ea44b90ae1f7c38987ad58ea0809562a17c2695a0499644326f334aecd369ec"}, + {file = "ipykernel-6.11.0-py3-none-any.whl", hash = "sha256:62ec17caff6e4fa1dc87ef0a6f9eff5a5d6588bb585ab1e06897e7bec9eb2819"}, + {file = "ipykernel-6.11.0.tar.gz", hash = "sha256:6712604531c96100f326440c11cb023da26819f2f34ba9d1ca0fb163401834e8"}, ] ipython = [ - {file = "ipython-7.16.1-py3-none-any.whl", hash = "sha256:2dbcc8c27ca7d3cfe4fcdff7f45b27f9a8d3edfa70ff8024a71c7a8eb5f09d64"}, - {file = "ipython-7.16.1.tar.gz", hash = "sha256:9f4fcb31d3b2c533333893b9172264e4821c1ac91839500f31bd43f2c59b3ccf"}, + {file = "ipython-7.32.0-py3-none-any.whl", hash = "sha256:86df2cf291c6c70b5be6a7b608650420e89180c8ec74f376a34e2dc15c3400e7"}, + {file = "ipython-7.32.0.tar.gz", hash = "sha256:468abefc45c15419e3c8e8c0a6a5c115b2127bafa34d7c641b1d443658793909"}, ] ipython-genutils = [ {file = "ipython_genutils-0.2.0-py2.py3-none-any.whl", hash = "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8"}, {file = "ipython_genutils-0.2.0.tar.gz", hash = "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8"}, ] ipywidgets = [ - {file = "ipywidgets-7.6.5-py2.py3-none-any.whl", hash = "sha256:d258f582f915c62ea91023299603be095de19afb5ee271698f88327b9fe9bf43"}, - {file = "ipywidgets-7.6.5.tar.gz", hash = "sha256:00974f7cb4d5f8d494c19810fedb9fa9b64bffd3cda7c2be23c133a1ad3c99c5"}, + {file = "ipywidgets-7.7.0-py2.py3-none-any.whl", hash = "sha256:e58ff58bc94d481e91ecb6e13a5cb96a87b6b8ade135e055603d0ca24593df38"}, + {file = "ipywidgets-7.7.0.tar.gz", hash = "sha256:ab4a5596855a88b83761921c768707d65e5847068139bc1729ddfe834703542a"}, ] jedi = [ - {file = "jedi-0.18.0-py2.py3-none-any.whl", hash = "sha256:18456d83f65f400ab0c2d3319e48520420ef43b23a086fdc05dff34132f0fb93"}, - {file = "jedi-0.18.0.tar.gz", hash = "sha256:92550a404bad8afed881a137ec9a461fed49eca661414be45059329614ed0707"}, + {file = "jedi-0.18.1-py2.py3-none-any.whl", hash = "sha256:637c9635fcf47945ceb91cd7f320234a7be540ded6f3e99a50cb6febdfd1ba8d"}, + {file = "jedi-0.18.1.tar.gz", hash = "sha256:74137626a64a99c8eb6ae5832d99b3bdd7d29a3850fe2aa80a4126b2a7d949ab"}, ] jinja2 = [ - {file = "Jinja2-3.0.2-py3-none-any.whl", hash = "sha256:8569982d3f0889eed11dd620c706d39b60c36d6d25843961f33f77fb6bc6b20c"}, - {file = "Jinja2-3.0.2.tar.gz", hash = "sha256:827a0e32839ab1600d4eb1c4c33ec5a8edfbc5cb42dafa13b81f182f97784b45"}, + {file = "Jinja2-3.1.1-py3-none-any.whl", hash = "sha256:539835f51a74a69f41b848a9645dbdc35b4f20a3b601e2d9a7e22947b15ff119"}, + {file = "Jinja2-3.1.1.tar.gz", hash = "sha256:640bed4bb501cbd17194b3cace1dc2126f5b619cf068a726b98192a0fde74ae9"}, ] jsonschema = [ - {file = "jsonschema-4.0.0-py3-none-any.whl", hash = "sha256:c773028c649441ab980015b5b622f4cd5134cf563daaf0235ca4b73cc3734f20"}, - {file = "jsonschema-4.0.0.tar.gz", hash = "sha256:bc51325b929171791c42ebc1c70b9713eb134d3bb8ebd5474c8b659b15be6d86"}, + {file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"}, + {file = "jsonschema-4.4.0.tar.gz", hash = "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83"}, ] jupyter-client = [ - {file = "jupyter_client-6.1.13-py3-none-any.whl", hash = "sha256:1df17b0525b45cc03645fc9eeab023765882d3c18fb100f82499cf6a353b3941"}, - {file = "jupyter_client-6.1.13.tar.gz", hash = "sha256:d03558bc9b7955d8b4a6df604a8d9d257e00bcea7fb364fe41cdef81d998a966"}, + {file = "jupyter_client-7.2.1-py3-none-any.whl", hash = "sha256:d10e31ac4b8364d1cb30ebcee9e5cc7b7eb5d23b76912be9ef3d4c75167fbc68"}, + {file = "jupyter_client-7.2.1.tar.gz", hash = "sha256:aa177279e93205d0681ec0e2e210da01b22c5a1464a56abd455adcac64f0de91"}, ] jupyter-core = [ - {file = "jupyter_core-4.9.1-py3-none-any.whl", hash = "sha256:1c091f3bbefd6f2a8782f2c1db662ca8478ac240e962ae2c66f0b87c818154ea"}, - {file = "jupyter_core-4.9.1.tar.gz", hash = "sha256:dce8a7499da5a53ae3afd5a9f4b02e5df1d57250cf48f3ad79da23b4778cd6fa"}, + {file = "jupyter_core-4.9.2-py3-none-any.whl", hash = "sha256:f875e4d27e202590311d468fa55f90c575f201490bd0c18acabe4e318db4a46d"}, + {file = "jupyter_core-4.9.2.tar.gz", hash = "sha256:d69baeb9ffb128b8cd2657fcf2703f89c769d1673c851812119e3a2a0e93ad9a"}, ] jupyterlab-pygments = [ {file = "jupyterlab_pygments-0.1.2-py2.py3-none-any.whl", hash = "sha256:abfb880fd1561987efaefcb2d2ac75145d2a5d0139b1876d5be806e32f630008"}, {file = "jupyterlab_pygments-0.1.2.tar.gz", hash = "sha256:cfcda0873626150932f438eccf0f8bf22bfa92345b814890ab360d666b254146"}, ] jupyterlab-widgets = [ - {file = "jupyterlab_widgets-1.0.2-py3-none-any.whl", hash = "sha256:f5d9efface8ec62941173ba1cffb2edd0ecddc801c11ae2931e30b50492eb8f7"}, - {file = "jupyterlab_widgets-1.0.2.tar.gz", hash = "sha256:7885092b2b96bf189c3a705cc3c412a4472ec5e8382d0b47219a66cccae73cfa"}, + {file = "jupyterlab_widgets-1.1.0-py3-none-any.whl", hash = "sha256:c2a9bd3789f120f64d73268c066ed3b000c56bc1dda217be5cdc43e7b4ebad3f"}, + {file = "jupyterlab_widgets-1.1.0.tar.gz", hash = "sha256:d5f41bc1713795385f718d44dcba47e1e1473c6289f28a95aa6b2c0782ee372a"}, ] kiwisolver = [ - {file = "kiwisolver-1.3.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fd34fbbfbc40628200730bc1febe30631347103fc8d3d4fa012c21ab9c11eca9"}, - {file = "kiwisolver-1.3.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:d3155d828dec1d43283bd24d3d3e0d9c7c350cdfcc0bd06c0ad1209c1bbc36d0"}, - {file = "kiwisolver-1.3.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5a7a7dbff17e66fac9142ae2ecafb719393aaee6a3768c9de2fd425c63b53e21"}, - {file = "kiwisolver-1.3.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:f8d6f8db88049a699817fd9178782867bf22283e3813064302ac59f61d95be05"}, - {file = "kiwisolver-1.3.1-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:5f6ccd3dd0b9739edcf407514016108e2280769c73a85b9e59aa390046dbf08b"}, - {file = "kiwisolver-1.3.1-cp36-cp36m-win32.whl", hash = "sha256:225e2e18f271e0ed8157d7f4518ffbf99b9450fca398d561eb5c4a87d0986dd9"}, - {file = "kiwisolver-1.3.1-cp36-cp36m-win_amd64.whl", hash = "sha256:cf8b574c7b9aa060c62116d4181f3a1a4e821b2ec5cbfe3775809474113748d4"}, - {file = "kiwisolver-1.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:232c9e11fd7ac3a470d65cd67e4359eee155ec57e822e5220322d7b2ac84fbf0"}, - {file = "kiwisolver-1.3.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:b38694dcdac990a743aa654037ff1188c7a9801ac3ccc548d3341014bc5ca278"}, - {file = "kiwisolver-1.3.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:ca3820eb7f7faf7f0aa88de0e54681bddcb46e485beb844fcecbcd1c8bd01689"}, - {file = "kiwisolver-1.3.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:c8fd0f1ae9d92b42854b2979024d7597685ce4ada367172ed7c09edf2cef9cb8"}, - {file = "kiwisolver-1.3.1-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:1e1bc12fb773a7b2ffdeb8380609f4f8064777877b2225dec3da711b421fda31"}, - {file = "kiwisolver-1.3.1-cp37-cp37m-win32.whl", hash = "sha256:72c99e39d005b793fb7d3d4e660aed6b6281b502e8c1eaf8ee8346023c8e03bc"}, - {file = "kiwisolver-1.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:8be8d84b7d4f2ba4ffff3665bcd0211318aa632395a1a41553250484a871d454"}, - {file = "kiwisolver-1.3.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:24cc411232d14c8abafbd0dddb83e1a4f54d77770b53db72edcfe1d611b3bf11"}, - {file = "kiwisolver-1.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:31dfd2ac56edc0ff9ac295193eeaea1c0c923c0355bf948fbd99ed6018010b72"}, - {file = "kiwisolver-1.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ef6eefcf3944e75508cdfa513c06cf80bafd7d179e14c1334ebdca9ebb8c2c66"}, - {file = "kiwisolver-1.3.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:563c649cfdef27d081c84e72a03b48ea9408c16657500c312575ae9d9f7bc1c3"}, - {file = "kiwisolver-1.3.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:78751b33595f7f9511952e7e60ce858c6d64db2e062afb325985ddbd34b5c131"}, - {file = "kiwisolver-1.3.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:a357fd4f15ee49b4a98b44ec23a34a95f1e00292a139d6015c11f55774ef10de"}, - {file = "kiwisolver-1.3.1-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:5989db3b3b34b76c09253deeaf7fbc2707616f130e166996606c284395da3f18"}, - {file = "kiwisolver-1.3.1-cp38-cp38-win32.whl", hash = "sha256:c08e95114951dc2090c4a630c2385bef681cacf12636fb0241accdc6b303fd81"}, - {file = "kiwisolver-1.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:44a62e24d9b01ba94ae7a4a6c3fb215dc4af1dde817e7498d901e229aaf50e4e"}, - {file = "kiwisolver-1.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6d9d8d9b31aa8c2d80a690693aebd8b5e2b7a45ab065bb78f1609995d2c79240"}, - {file = "kiwisolver-1.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:50af681a36b2a1dee1d3c169ade9fdc59207d3c31e522519181e12f1b3ba7000"}, - {file = "kiwisolver-1.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:792e69140828babe9649de583e1a03a0f2ff39918a71782c76b3c683a67c6dfd"}, - {file = "kiwisolver-1.3.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:a53d27d0c2a0ebd07e395e56a1fbdf75ffedc4a05943daf472af163413ce9598"}, - {file = "kiwisolver-1.3.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:834ee27348c4aefc20b479335fd422a2c69db55f7d9ab61721ac8cd83eb78882"}, - {file = "kiwisolver-1.3.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:5c3e6455341008a054cccee8c5d24481bcfe1acdbc9add30aa95798e95c65621"}, - {file = "kiwisolver-1.3.1-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:acef3d59d47dd85ecf909c359d0fd2c81ed33bdff70216d3956b463e12c38a54"}, - {file = "kiwisolver-1.3.1-cp39-cp39-win32.whl", hash = "sha256:c5518d51a0735b1e6cee1fdce66359f8d2b59c3ca85dc2b0813a8aa86818a030"}, - {file = "kiwisolver-1.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:b9edd0110a77fc321ab090aaa1cfcaba1d8499850a12848b81be2222eab648f6"}, - {file = "kiwisolver-1.3.1-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0cd53f403202159b44528498de18f9285b04482bab2a6fc3f5dd8dbb9352e30d"}, - {file = "kiwisolver-1.3.1-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:33449715e0101e4d34f64990352bce4095c8bf13bed1b390773fc0a7295967b3"}, - {file = "kiwisolver-1.3.1-pp36-pypy36_pp73-win32.whl", hash = "sha256:401a2e9afa8588589775fe34fc22d918ae839aaaf0c0e96441c0fdbce6d8ebe6"}, - {file = "kiwisolver-1.3.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d6563ccd46b645e966b400bb8a95d3457ca6cf3bba1e908f9e0927901dfebeb1"}, - {file = "kiwisolver-1.3.1.tar.gz", hash = "sha256:950a199911a8d94683a6b10321f9345d5a3a8433ec58b217ace979e18f16e248"}, + {file = "kiwisolver-1.4.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6e395ece147f0692ca7cdb05a028d31b83b72c369f7b4a2c1798f4b96af1e3d8"}, + {file = "kiwisolver-1.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0b7f50a1a25361da3440f07c58cd1d79957c2244209e4f166990e770256b6b0b"}, + {file = "kiwisolver-1.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3c032c41ae4c3a321b43a3650e6ecc7406b99ff3e5279f24c9b310f41bc98479"}, + {file = "kiwisolver-1.4.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1dcade8f6fe12a2bb4efe2cbe22116556e3b6899728d3b2a0d3b367db323eacc"}, + {file = "kiwisolver-1.4.2-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0e45e780a74416ef2f173189ef4387e44b5494f45e290bcb1f03735faa6779bf"}, + {file = "kiwisolver-1.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d2bb56309fb75a811d81ed55fbe2208aa77a3a09ff5f546ca95e7bb5fac6eff"}, + {file = "kiwisolver-1.4.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b2d6c12f2ad5f55104a36a356192cfb680c049fe5e7c1f6620fc37f119cdc2"}, + {file = "kiwisolver-1.4.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:262c248c60f22c2b547683ad521e8a3db5909c71f679b93876921549107a0c24"}, + {file = "kiwisolver-1.4.2-cp310-cp310-win32.whl", hash = "sha256:1008346a7741620ab9cc6c96e8ad9b46f7a74ce839dbb8805ddf6b119d5fc6c2"}, + {file = "kiwisolver-1.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:6ece2e12e4b57bc5646b354f436416cd2a6f090c1dadcd92b0ca4542190d7190"}, + {file = "kiwisolver-1.4.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b978afdb913ca953cf128d57181da2e8798e8b6153be866ae2a9c446c6162f40"}, + {file = "kiwisolver-1.4.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f88c4b8e449908eeddb3bbd4242bd4dc2c7a15a7aa44bb33df893203f02dc2d"}, + {file = "kiwisolver-1.4.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e348f1904a4fab4153407f7ccc27e43b2a139752e8acf12e6640ba683093dd96"}, + {file = "kiwisolver-1.4.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c839bf28e45d7ddad4ae8f986928dbf5a6d42ff79760d54ec8ada8fb263e097c"}, + {file = "kiwisolver-1.4.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8ae5a071185f1a93777c79a9a1e67ac46544d4607f18d07131eece08d415083a"}, + {file = "kiwisolver-1.4.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:c222f91a45da9e01a9bc4f760727ae49050f8e8345c4ff6525495f7a164c8973"}, + {file = "kiwisolver-1.4.2-cp37-cp37m-win32.whl", hash = "sha256:a4e8f072db1d6fb7a7cc05a6dbef8442c93001f4bb604f1081d8c2db3ca97159"}, + {file = "kiwisolver-1.4.2-cp37-cp37m-win_amd64.whl", hash = "sha256:be9a650890fb60393e60aacb65878c4a38bb334720aa5ecb1c13d0dac54dd73b"}, + {file = "kiwisolver-1.4.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8ec2e55bf31b43aabe32089125dca3b46fdfe9f50afbf0756ae11e14c97b80ca"}, + {file = "kiwisolver-1.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d1078ba770d6165abed3d9a1be1f9e79b61515de1dd00d942fa53bba79f01ae"}, + {file = "kiwisolver-1.4.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cbb5eb4a2ea1ffec26268d49766cafa8f957fe5c1b41ad00733763fae77f9436"}, + {file = "kiwisolver-1.4.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e6cda72db409eefad6b021e8a4f964965a629f577812afc7860c69df7bdb84a"}, + {file = "kiwisolver-1.4.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b1605c7c38cc6a85212dfd6a641f3905a33412e49f7c003f35f9ac6d71f67720"}, + {file = "kiwisolver-1.4.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81237957b15469ea9151ec8ca08ce05656090ffabc476a752ef5ad7e2644c526"}, + {file = "kiwisolver-1.4.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:240009fdf4fa87844f805e23f48995537a8cb8f8c361e35fda6b5ac97fcb906f"}, + {file = "kiwisolver-1.4.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:240c2d51d098395c012ddbcb9bd7b3ba5de412a1d11840698859f51d0e643c4f"}, + {file = "kiwisolver-1.4.2-cp38-cp38-win32.whl", hash = "sha256:8b6086aa6936865962b2cee0e7aaecf01ab6778ce099288354a7229b4d9f1408"}, + {file = "kiwisolver-1.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:0d98dca86f77b851350c250f0149aa5852b36572514d20feeadd3c6b1efe38d0"}, + {file = "kiwisolver-1.4.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:91eb4916271655dfe3a952249cb37a5c00b6ba68b4417ee15af9ba549b5ba61d"}, + {file = "kiwisolver-1.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fa4d97d7d2b2c082e67907c0b8d9f31b85aa5d3ba0d33096b7116f03f8061261"}, + {file = "kiwisolver-1.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:71469b5845b9876b8d3d252e201bef6f47bf7456804d2fbe9a1d6e19e78a1e65"}, + {file = "kiwisolver-1.4.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8ff3033e43e7ca1389ee59fb7ecb8303abb8713c008a1da49b00869e92e3dd7c"}, + {file = "kiwisolver-1.4.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:89b57c2984f4464840e4b768affeff6b6809c6150d1166938ade3e22fbe22db8"}, + {file = "kiwisolver-1.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffbdb9a96c536f0405895b5e21ee39ec579cb0ed97bdbd169ae2b55f41d73219"}, + {file = "kiwisolver-1.4.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a830a03970c462d1a2311c90e05679da56d3bd8e78a4ba9985cb78ef7836c9f"}, + {file = "kiwisolver-1.4.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f74f2a13af201559e3d32b9ddfc303c94ae63d63d7f4326d06ce6fe67e7a8255"}, + {file = "kiwisolver-1.4.2-cp39-cp39-win32.whl", hash = "sha256:e677cc3626287f343de751e11b1e8a5b915a6ac897e8aecdbc996cd34de753a0"}, + {file = "kiwisolver-1.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:b3e251e5c38ac623c5d786adb21477f018712f8c6fa54781bd38aa1c60b60fc2"}, + {file = "kiwisolver-1.4.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0c380bb5ae20d829c1a5473cfcae64267b73aaa4060adc091f6df1743784aae0"}, + {file = "kiwisolver-1.4.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:484f2a5f0307bc944bc79db235f41048bae4106ffa764168a068d88b644b305d"}, + {file = "kiwisolver-1.4.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e8afdf533b613122e4bbaf3c1e42c2a5e9e2d1dd3a0a017749a7658757cb377"}, + {file = "kiwisolver-1.4.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:42f6ef9b640deb6f7d438e0a371aedd8bef6ddfde30683491b2e6f568b4e884e"}, + {file = "kiwisolver-1.4.2.tar.gz", hash = "sha256:7f606d91b8a8816be476513a77fd30abe66227039bd6f8b406c348cb0247dcc9"}, ] markupsafe = [ - {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"}, - {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, + {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, ] matplotlib = [ - {file = "matplotlib-3.3.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:672960dd114e342b7c610bf32fb99d14227f29919894388b41553217457ba7ef"}, - {file = "matplotlib-3.3.4-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:7c155437ae4fd366e2700e2716564d1787700687443de46bcb895fe0f84b761d"}, - {file = "matplotlib-3.3.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:a17f0a10604fac7627ec82820439e7db611722e80c408a726cd00d8c974c2fb3"}, - {file = "matplotlib-3.3.4-cp36-cp36m-win32.whl", hash = "sha256:215e2a30a2090221a9481db58b770ce56b8ef46f13224ae33afe221b14b24dc1"}, - {file = "matplotlib-3.3.4-cp36-cp36m-win_amd64.whl", hash = "sha256:348e6032f666ffd151b323342f9278b16b95d4a75dfacae84a11d2829a7816ae"}, - {file = "matplotlib-3.3.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:94bdd1d55c20e764d8aea9d471d2ae7a7b2c84445e0fa463f02e20f9730783e1"}, - {file = "matplotlib-3.3.4-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:a1acb72f095f1d58ecc2538ed1b8bca0b57df313b13db36ed34b8cdf1868e674"}, - {file = "matplotlib-3.3.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:46b1a60a04e6d884f0250d5cc8dc7bd21a9a96c584a7acdaab44698a44710bab"}, - {file = "matplotlib-3.3.4-cp37-cp37m-win32.whl", hash = "sha256:ed4a9e6dcacba56b17a0a9ac22ae2c72a35b7f0ef0693aa68574f0b2df607a89"}, - {file = "matplotlib-3.3.4-cp37-cp37m-win_amd64.whl", hash = "sha256:c24c05f645aef776e8b8931cb81e0f1632d229b42b6d216e30836e2e145a2b40"}, - {file = "matplotlib-3.3.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7310e353a4a35477c7f032409966920197d7df3e757c7624fd842f3eeb307d3d"}, - {file = "matplotlib-3.3.4-cp38-cp38-manylinux1_i686.whl", hash = "sha256:451cc89cb33d6652c509fc6b588dc51c41d7246afdcc29b8624e256b7663ed1f"}, - {file = "matplotlib-3.3.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:3d2eb9c1cc254d0ffa90bc96fde4b6005d09c2228f99dfd493a4219c1af99644"}, - {file = "matplotlib-3.3.4-cp38-cp38-win32.whl", hash = "sha256:e15fa23d844d54e7b3b7243afd53b7567ee71c721f592deb0727ee85e668f96a"}, - {file = "matplotlib-3.3.4-cp38-cp38-win_amd64.whl", hash = "sha256:1de0bb6cbfe460725f0e97b88daa8643bcf9571c18ba90bb8e41432aaeca91d6"}, - {file = "matplotlib-3.3.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f44149a0ef5b4991aaef12a93b8e8d66d6412e762745fea1faa61d98524e0ba9"}, - {file = "matplotlib-3.3.4-cp39-cp39-manylinux1_i686.whl", hash = "sha256:746a1df55749629e26af7f977ea426817ca9370ad1569436608dc48d1069b87c"}, - {file = "matplotlib-3.3.4-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:5f571b92a536206f7958f7cb2d367ff6c9a1fa8229dc35020006e4cdd1ca0acd"}, - {file = "matplotlib-3.3.4-cp39-cp39-win32.whl", hash = "sha256:9265ae0fb35e29f9b8cc86c2ab0a2e3dcddc4dd9de4b85bf26c0f63fe5c1c2ca"}, - {file = "matplotlib-3.3.4-cp39-cp39-win_amd64.whl", hash = "sha256:9a79e5dd7bb797aa611048f5b70588b23c5be05b63eefd8a0d152ac77c4243db"}, - {file = "matplotlib-3.3.4-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1e850163579a8936eede29fad41e202b25923a0a8d5ffd08ce50fc0a97dcdc93"}, - {file = "matplotlib-3.3.4-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:d738acfdfb65da34c91acbdb56abed46803db39af259b7f194dc96920360dbe4"}, - {file = "matplotlib-3.3.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:aa49571d8030ad0b9ac39708ee77bd2a22f87815e12bdee52ecaffece9313ed8"}, - {file = "matplotlib-3.3.4-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:cf3a7e54eff792f0815dbbe9b85df2f13d739289c93d346925554f71d484be78"}, - {file = "matplotlib-3.3.4.tar.gz", hash = "sha256:3e477db76c22929e4c6876c44f88d790aacdf3c3f8f3a90cb1975c0bf37825b0"}, + {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"}, +] +matplotlib-inline = [ + {file = "matplotlib-inline-0.1.3.tar.gz", hash = "sha256:a04bfba22e0d1395479f866853ec1ee28eea1485c1d69a6faf00dc3e24ff34ee"}, + {file = "matplotlib_inline-0.1.3-py3-none-any.whl", hash = "sha256:aed605ba3b72462d64d475a21a9296f400a19c4f74a31b59103d2a99ffd5aa5c"}, ] mistune = [ {file = "mistune-0.8.4-py2.py3-none-any.whl", hash = "sha256:88a1051873018da288eee8538d476dffe1262495144b33ecb586c4ab266bb8d4"}, {file = "mistune-0.8.4.tar.gz", hash = "sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e"}, ] nbclient = [ - {file = "nbclient-0.5.1-py3-none-any.whl", hash = "sha256:4d6b116187c795c99b9dba13d46e764d596574b14c296d60670c8dfe454db364"}, - {file = "nbclient-0.5.1.tar.gz", hash = "sha256:01e2d726d16eaf2cde6db74a87e2451453547e8832d142f73f72fddcd4fe0250"}, + {file = "nbclient-0.5.13-py3-none-any.whl", hash = "sha256:47ac905af59379913c1f8f541098d2550153cf8dc58553cbe18c702b181518b0"}, + {file = "nbclient-0.5.13.tar.gz", hash = "sha256:40c52c9b5e3c31faecaee69f202b3f53e38d7c1c563de0fadde9d7eda0fdafe8"}, ] nbconvert = [ - {file = "nbconvert-6.0.7-py3-none-any.whl", hash = "sha256:39e9f977920b203baea0be67eea59f7b37a761caa542abe80f5897ce3cf6311d"}, - {file = "nbconvert-6.0.7.tar.gz", hash = "sha256:cbbc13a86dfbd4d1b5dee106539de0795b4db156c894c2c5dc382062bbc29002"}, + {file = "nbconvert-6.4.5-py3-none-any.whl", hash = "sha256:e01d219f55cc79f9701c834d605e8aa3acf35725345d3942e3983937f368ce14"}, + {file = "nbconvert-6.4.5.tar.gz", hash = "sha256:21163a8e2073c07109ca8f398836e45efdba2aacea68d6f75a8a545fef070d4e"}, ] nbformat = [ - {file = "nbformat-5.1.3-py3-none-any.whl", hash = "sha256:eb8447edd7127d043361bc17f2f5a807626bc8e878c7709a1c647abda28a9171"}, - {file = "nbformat-5.1.3.tar.gz", hash = "sha256:b516788ad70771c6250977c1374fcca6edebe6126fd2adb5a69aa5c2356fd1c8"}, + {file = "nbformat-5.2.0-py3-none-any.whl", hash = "sha256:3e30424e8291b2188347f5c3ba5273ed3766f12f8c5137c2e456a0815f36e785"}, + {file = "nbformat-5.2.0.tar.gz", hash = "sha256:93df0b9c67221d38fb970c48f6d361819a6c388299a0ef3171bbb912edfe1324"}, ] nest-asyncio = [ - {file = "nest_asyncio-1.5.1-py3-none-any.whl", hash = "sha256:76d6e972265063fe92a90b9cc4fb82616e07d586b346ed9d2c89a4187acea39c"}, - {file = "nest_asyncio-1.5.1.tar.gz", hash = "sha256:afc5a1c515210a23c461932765691ad39e8eba6551c055ac8d5546e69250d0aa"}, + {file = "nest_asyncio-1.5.4-py3-none-any.whl", hash = "sha256:3fdd0d6061a2bb16f21fe8a9c6a7945be83521d81a0d15cff52e9edee50101d6"}, + {file = "nest_asyncio-1.5.4.tar.gz", hash = "sha256:f969f6013a16fadb4adcf09d11a68a4f617c6049d7af7ac2c676110169a63abd"}, ] notebook = [ - {file = "notebook-6.4.5-py3-none-any.whl", hash = "sha256:f7b4362698fed34f44038de0517b2e5136c1e7c379797198c1736121d3d597bd"}, - {file = "notebook-6.4.5.tar.gz", hash = "sha256:872e20da9ae518bbcac3e4e0092d5bd35454e847dedb8cb9739e9f3b68406be0"}, + {file = "notebook-6.4.10-py3-none-any.whl", hash = "sha256:49cead814bff0945fcb2ee07579259418672ac175d3dc3d8102a4b0a656ed4df"}, + {file = "notebook-6.4.10.tar.gz", hash = "sha256:2408a76bc6289283a8eecfca67e298ec83c67db51a4c2e1b713dd180bb39e90e"}, ] numpy = [ - {file = "numpy-1.19.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cc6bd4fd593cb261332568485e20a0712883cf631f6f5e8e86a52caa8b2b50ff"}, - {file = "numpy-1.19.5-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:aeb9ed923be74e659984e321f609b9ba54a48354bfd168d21a2b072ed1e833ea"}, - {file = "numpy-1.19.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:8b5e972b43c8fc27d56550b4120fe6257fdc15f9301914380b27f74856299fea"}, - {file = "numpy-1.19.5-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:43d4c81d5ffdff6bae58d66a3cd7f54a7acd9a0e7b18d97abb255defc09e3140"}, - {file = "numpy-1.19.5-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:a4646724fba402aa7504cd48b4b50e783296b5e10a524c7a6da62e4a8ac9698d"}, - {file = "numpy-1.19.5-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:2e55195bc1c6b705bfd8ad6f288b38b11b1af32f3c8289d6c50d47f950c12e76"}, - {file = "numpy-1.19.5-cp36-cp36m-win32.whl", hash = "sha256:39b70c19ec771805081578cc936bbe95336798b7edf4732ed102e7a43ec5c07a"}, - {file = "numpy-1.19.5-cp36-cp36m-win_amd64.whl", hash = "sha256:dbd18bcf4889b720ba13a27ec2f2aac1981bd41203b3a3b27ba7a33f88ae4827"}, - {file = "numpy-1.19.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:603aa0706be710eea8884af807b1b3bc9fb2e49b9f4da439e76000f3b3c6ff0f"}, - {file = "numpy-1.19.5-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:cae865b1cae1ec2663d8ea56ef6ff185bad091a5e33ebbadd98de2cfa3fa668f"}, - {file = "numpy-1.19.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:36674959eed6957e61f11c912f71e78857a8d0604171dfd9ce9ad5cbf41c511c"}, - {file = "numpy-1.19.5-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:06fab248a088e439402141ea04f0fffb203723148f6ee791e9c75b3e9e82f080"}, - {file = "numpy-1.19.5-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6149a185cece5ee78d1d196938b2a8f9d09f5a5ebfbba66969302a778d5ddd1d"}, - {file = "numpy-1.19.5-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:50a4a0ad0111cc1b71fa32dedd05fa239f7fb5a43a40663269bb5dc7877cfd28"}, - {file = "numpy-1.19.5-cp37-cp37m-win32.whl", hash = "sha256:d051ec1c64b85ecc69531e1137bb9751c6830772ee5c1c426dbcfe98ef5788d7"}, - {file = "numpy-1.19.5-cp37-cp37m-win_amd64.whl", hash = "sha256:a12ff4c8ddfee61f90a1633a4c4afd3f7bcb32b11c52026c92a12e1325922d0d"}, - {file = "numpy-1.19.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cf2402002d3d9f91c8b01e66fbb436a4ed01c6498fffed0e4c7566da1d40ee1e"}, - {file = "numpy-1.19.5-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1ded4fce9cfaaf24e7a0ab51b7a87be9038ea1ace7f34b841fe3b6894c721d1c"}, - {file = "numpy-1.19.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:012426a41bc9ab63bb158635aecccc7610e3eff5d31d1eb43bc099debc979d94"}, - {file = "numpy-1.19.5-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:759e4095edc3c1b3ac031f34d9459fa781777a93ccc633a472a5468587a190ff"}, - {file = "numpy-1.19.5-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:a9d17f2be3b427fbb2bce61e596cf555d6f8a56c222bd2ca148baeeb5e5c783c"}, - {file = "numpy-1.19.5-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:99abf4f353c3d1a0c7a5f27699482c987cf663b1eac20db59b8c7b061eabd7fc"}, - {file = "numpy-1.19.5-cp38-cp38-win32.whl", hash = "sha256:384ec0463d1c2671170901994aeb6dce126de0a95ccc3976c43b0038a37329c2"}, - {file = "numpy-1.19.5-cp38-cp38-win_amd64.whl", hash = "sha256:811daee36a58dc79cf3d8bdd4a490e4277d0e4b7d103a001a4e73ddb48e7e6aa"}, - {file = "numpy-1.19.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c843b3f50d1ab7361ca4f0b3639bf691569493a56808a0b0c54a051d260b7dbd"}, - {file = "numpy-1.19.5-cp39-cp39-manylinux1_i686.whl", hash = "sha256:d6631f2e867676b13026e2846180e2c13c1e11289d67da08d71cacb2cd93d4aa"}, - {file = "numpy-1.19.5-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7fb43004bce0ca31d8f13a6eb5e943fa73371381e53f7074ed21a4cb786c32f8"}, - {file = "numpy-1.19.5-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:2ea52bd92ab9f768cc64a4c3ef8f4b2580a17af0a5436f6126b08efbd1838371"}, - {file = "numpy-1.19.5-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:400580cbd3cff6ffa6293df2278c75aef2d58d8d93d3c5614cd67981dae68ceb"}, - {file = "numpy-1.19.5-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:df609c82f18c5b9f6cb97271f03315ff0dbe481a2a02e56aeb1b1a985ce38e60"}, - {file = "numpy-1.19.5-cp39-cp39-win32.whl", hash = "sha256:ab83f24d5c52d60dbc8cd0528759532736b56db58adaa7b5f1f76ad551416a1e"}, - {file = "numpy-1.19.5-cp39-cp39-win_amd64.whl", hash = "sha256:0eef32ca3132a48e43f6a0f5a82cb508f22ce5a3d6f67a8329c81c8e226d3f6e"}, - {file = "numpy-1.19.5-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:a0d53e51a6cb6f0d9082decb7a4cb6dfb33055308c4c44f53103c073f649af73"}, - {file = "numpy-1.19.5.zip", hash = "sha256:a76f502430dd98d7546e1ea2250a7360c065a5fdea52b2dffe8ae7180909b6f4"}, + {file = "numpy-1.21.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:301e408a052fdcda5cdcf03021ebafc3c6ea093021bf9d1aa47c54d48bdad166"}, + {file = "numpy-1.21.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a7e8f6216f180f3fd4efb73de5d1eaefb5f5a1ee5b645c67333033e39440e63a"}, + {file = "numpy-1.21.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fc7a7d7b0ed72589fd8b8486b9b42a564f10b8762be8bd4d9df94b807af4a089"}, + {file = "numpy-1.21.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58ca1d7c8aef6e996112d0ce873ac9dfa1eaf4a1196b4ff7ff73880a09923ba7"}, + {file = "numpy-1.21.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc4b2fb01f1b4ddbe2453468ea0719f4dbb1f5caa712c8b21bb3dd1480cd30d9"}, + {file = "numpy-1.21.5-cp310-cp310-win_amd64.whl", hash = "sha256:cc1b30205d138d1005adb52087ff45708febbef0e420386f58664f984ef56954"}, + {file = "numpy-1.21.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:08de8472d9f7571f9d51b27b75e827f5296295fa78817032e84464be8bb905bc"}, + {file = "numpy-1.21.5-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4fe6a006557b87b352c04596a6e3f12a57d6e5f401d804947bd3188e6b0e0e76"}, + {file = "numpy-1.21.5-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3d893b0871322eaa2f8c7072cdb552d8e2b27645b7875a70833c31e9274d4611"}, + {file = "numpy-1.21.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:341dddcfe3b7b6427a28a27baa59af5ad51baa59bfec3264f1ab287aa3b30b13"}, + {file = "numpy-1.21.5-cp37-cp37m-win32.whl", hash = "sha256:ca9c23848292c6fe0a19d212790e62f398fd9609aaa838859be8459bfbe558aa"}, + {file = "numpy-1.21.5-cp37-cp37m-win_amd64.whl", hash = "sha256:025b497014bc33fc23897859350f284323f32a2fff7654697f5a5fc2a19e9939"}, + {file = "numpy-1.21.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3a5098df115340fb17fc93867317a947e1dcd978c3888c5ddb118366095851f8"}, + {file = "numpy-1.21.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:311283acf880cfcc20369201bd75da907909afc4666966c7895cbed6f9d2c640"}, + {file = "numpy-1.21.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b545ebadaa2b878c8630e5bcdb97fc4096e779f335fc0f943547c1c91540c815"}, + {file = "numpy-1.21.5-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c5562bcc1a9b61960fc8950ade44d00e3de28f891af0acc96307c73613d18f6e"}, + {file = "numpy-1.21.5-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:eed2afaa97ec33b4411995be12f8bdb95c87984eaa28d76cf628970c8a2d689a"}, + {file = "numpy-1.21.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61bada43d494515d5b122f4532af226fdb5ee08fe5b5918b111279843dc6836a"}, + {file = "numpy-1.21.5-cp38-cp38-win32.whl", hash = "sha256:7b9d6b14fc9a4864b08d1ba57d732b248f0e482c7b2ff55c313137e3ed4d8449"}, + {file = "numpy-1.21.5-cp38-cp38-win_amd64.whl", hash = "sha256:dbce7adeb66b895c6aaa1fad796aaefc299ced597f6fbd9ceddb0dd735245354"}, + {file = "numpy-1.21.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:507c05c7a37b3683eb08a3ff993bd1ee1e6c752f77c2f275260533b265ecdb6c"}, + {file = "numpy-1.21.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:00c9fa73a6989895b8815d98300a20ac993c49ac36c8277e8ffeaa3631c0dbbb"}, + {file = "numpy-1.21.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:69a5a8d71c308d7ef33ef72371c2388a90e3495dbb7993430e674006f94797d5"}, + {file = "numpy-1.21.5-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2d8adfca843bc46ac199a4645233f13abf2011a0b2f4affc5c37cd552626f27b"}, + {file = "numpy-1.21.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c293d3c0321996cd8ffe84215ffe5d269fd9d1d12c6f4ffe2b597a7c30d3e593"}, + {file = "numpy-1.21.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c978544be9e04ed12016dd295a74283773149b48f507d69b36f91aa90a643e5"}, + {file = "numpy-1.21.5-cp39-cp39-win32.whl", hash = "sha256:2a9add27d7fc0fdb572abc3b2486eb3b1395da71e0254c5552b2aad2a18b5441"}, + {file = "numpy-1.21.5-cp39-cp39-win_amd64.whl", hash = "sha256:1964db2d4a00348b7a60ee9d013c8cb0c566644a589eaa80995126eac3b99ced"}, + {file = "numpy-1.21.5-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a7c4b701ca418cd39e28ec3b496e6388fe06de83f5f0cb74794fa31cfa384c02"}, + {file = "numpy-1.21.5.zip", hash = "sha256:6a5928bc6241264dce5ed509e66f33676fc97f464e7a919edc672fb5532221ee"}, ] packaging = [ - {file = "packaging-21.0-py3-none-any.whl", hash = "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14"}, - {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"}, + {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, + {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, ] pandocfilters = [ {file = "pandocfilters-1.5.0-py2.py3-none-any.whl", hash = "sha256:33aae3f25fd1a026079f5d27bdd52496f0e0803b3469282162bafdcbdf6ef14f"}, {file = "pandocfilters-1.5.0.tar.gz", hash = "sha256:0b679503337d233b4339a817bfc8c50064e2eff681314376a47cb582305a7a38"}, ] parso = [ - {file = "parso-0.8.2-py2.py3-none-any.whl", hash = "sha256:a8c4922db71e4fdb90e0d0bc6e50f9b273d3397925e5e60a717e719201778d22"}, - {file = "parso-0.8.2.tar.gz", hash = "sha256:12b83492c6239ce32ff5eed6d3639d6a536170723c6f3f1506869f1ace413398"}, + {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, + {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, ] pexpect = [ {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, @@ -1188,122 +1497,163 @@ pickleshare = [ {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, ] pillow = [ - {file = "Pillow-8.4.0-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:81f8d5c81e483a9442d72d182e1fb6dcb9723f289a57e8030811bac9ea3fef8d"}, - {file = "Pillow-8.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3f97cfb1e5a392d75dd8b9fd274d205404729923840ca94ca45a0af57e13dbe6"}, - {file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb9fc393f3c61f9054e1ed26e6fe912c7321af2f41ff49d3f83d05bacf22cc78"}, - {file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d82cdb63100ef5eedb8391732375e6d05993b765f72cb34311fab92103314649"}, - {file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62cc1afda735a8d109007164714e73771b499768b9bb5afcbbee9d0ff374b43f"}, - {file = "Pillow-8.4.0-cp310-cp310-win32.whl", hash = "sha256:e3dacecfbeec9a33e932f00c6cd7996e62f53ad46fbe677577394aaa90ee419a"}, - {file = "Pillow-8.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:620582db2a85b2df5f8a82ddeb52116560d7e5e6b055095f04ad828d1b0baa39"}, - {file = "Pillow-8.4.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:1bc723b434fbc4ab50bb68e11e93ce5fb69866ad621e3c2c9bdb0cd70e345f55"}, - {file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72cbcfd54df6caf85cc35264c77ede902452d6df41166010262374155947460c"}, - {file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70ad9e5c6cb9b8487280a02c0ad8a51581dcbbe8484ce058477692a27c151c0a"}, - {file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25a49dc2e2f74e65efaa32b153527fc5ac98508d502fa46e74fa4fd678ed6645"}, - {file = "Pillow-8.4.0-cp36-cp36m-win32.whl", hash = "sha256:93ce9e955cc95959df98505e4608ad98281fff037350d8c2671c9aa86bcf10a9"}, - {file = "Pillow-8.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2e4440b8f00f504ee4b53fe30f4e381aae30b0568193be305256b1462216feff"}, - {file = "Pillow-8.4.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:8c803ac3c28bbc53763e6825746f05cc407b20e4a69d0122e526a582e3b5e153"}, - {file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8a17b5d948f4ceeceb66384727dde11b240736fddeda54ca740b9b8b1556b29"}, - {file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1394a6ad5abc838c5cd8a92c5a07535648cdf6d09e8e2d6df916dfa9ea86ead8"}, - {file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:792e5c12376594bfcb986ebf3855aa4b7c225754e9a9521298e460e92fb4a488"}, - {file = "Pillow-8.4.0-cp37-cp37m-win32.whl", hash = "sha256:d99ec152570e4196772e7a8e4ba5320d2d27bf22fdf11743dd882936ed64305b"}, - {file = "Pillow-8.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:7b7017b61bbcdd7f6363aeceb881e23c46583739cb69a3ab39cb384f6ec82e5b"}, - {file = "Pillow-8.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:d89363f02658e253dbd171f7c3716a5d340a24ee82d38aab9183f7fdf0cdca49"}, - {file = "Pillow-8.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0a0956fdc5defc34462bb1c765ee88d933239f9a94bc37d132004775241a7585"}, - {file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b7bb9de00197fb4261825c15551adf7605cf14a80badf1761d61e59da347779"}, - {file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72b9e656e340447f827885b8d7a15fc8c4e68d410dc2297ef6787eec0f0ea409"}, - {file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5a4532a12314149d8b4e4ad8ff09dde7427731fcfa5917ff16d0291f13609df"}, - {file = "Pillow-8.4.0-cp38-cp38-win32.whl", hash = "sha256:82aafa8d5eb68c8463b6e9baeb4f19043bb31fefc03eb7b216b51e6a9981ae09"}, - {file = "Pillow-8.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:066f3999cb3b070a95c3652712cffa1a748cd02d60ad7b4e485c3748a04d9d76"}, - {file = "Pillow-8.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:5503c86916d27c2e101b7f71c2ae2cddba01a2cf55b8395b0255fd33fa4d1f1a"}, - {file = "Pillow-8.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4acc0985ddf39d1bc969a9220b51d94ed51695d455c228d8ac29fcdb25810e6e"}, - {file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b052a619a8bfcf26bd8b3f48f45283f9e977890263e4571f2393ed8898d331b"}, - {file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:493cb4e415f44cd601fcec11c99836f707bb714ab03f5ed46ac25713baf0ff20"}, - {file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8831cb7332eda5dc89b21a7bce7ef6ad305548820595033a4b03cf3091235ed"}, - {file = "Pillow-8.4.0-cp39-cp39-win32.whl", hash = "sha256:5e9ac5f66616b87d4da618a20ab0a38324dbe88d8a39b55be8964eb520021e02"}, - {file = "Pillow-8.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:3eb1ce5f65908556c2d8685a8f0a6e989d887ec4057326f6c22b24e8a172c66b"}, - {file = "Pillow-8.4.0-pp36-pypy36_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ddc4d832a0f0b4c52fff973a0d44b6c99839a9d016fe4e6a1cb8f3eea96479c2"}, - {file = "Pillow-8.4.0-pp36-pypy36_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a3e5ddc44c14042f0844b8cf7d2cd455f6cc80fd7f5eefbe657292cf601d9ad"}, - {file = "Pillow-8.4.0-pp36-pypy36_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c70e94281588ef053ae8998039610dbd71bc509e4acbc77ab59d7d2937b10698"}, - {file = "Pillow-8.4.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:3862b7256046fcd950618ed22d1d60b842e3a40a48236a5498746f21189afbbc"}, - {file = "Pillow-8.4.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4901622493f88b1a29bd30ec1a2f683782e57c3c16a2dbc7f2595ba01f639df"}, - {file = "Pillow-8.4.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84c471a734240653a0ec91dec0996696eea227eafe72a33bd06c92697728046b"}, - {file = "Pillow-8.4.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:244cf3b97802c34c41905d22810846802a3329ddcb93ccc432870243211c79fc"}, - {file = "Pillow-8.4.0.tar.gz", hash = "sha256:b8e2f83c56e141920c39464b852de3719dfbfb6e3c99a2d8da0edf4fb33176ed"}, + {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"}, +] +platformdirs = [ + {file = "platformdirs-2.5.1-py3-none-any.whl", hash = "sha256:bcae7cab893c2d310a711b70b24efb93334febe65f8de776ee320b517471e227"}, + {file = "platformdirs-2.5.1.tar.gz", hash = "sha256:7535e70dfa32e84d4b34996ea99c5e432fa29a708d0f4e394bbcb2a8faa4f16d"}, +] +pluggy = [ + {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, + {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, ] prometheus-client = [ - {file = "prometheus_client-0.12.0-py2.py3-none-any.whl", hash = "sha256:317453ebabff0a1b02df7f708efbab21e3489e7072b61cb6957230dd004a0af0"}, - {file = "prometheus_client-0.12.0.tar.gz", hash = "sha256:1b12ba48cee33b9b0b9de64a1047cbd3c5f2d0ab6ebcead7ddda613a750ec3c5"}, + {file = "prometheus_client-0.13.1-py3-none-any.whl", hash = "sha256:357a447fd2359b0a1d2e9b311a0c5778c330cfbe186d880ad5a6b39884652316"}, + {file = "prometheus_client-0.13.1.tar.gz", hash = "sha256:ada41b891b79fca5638bd5cfe149efa86512eaa55987893becd2c6d8d0a5dfc5"}, ] prompt-toolkit = [ - {file = "prompt_toolkit-3.0.3-py3-none-any.whl", hash = "sha256:c93e53af97f630f12f5f62a3274e79527936ed466f038953dfa379d4941f651a"}, - {file = "prompt_toolkit-3.0.3.tar.gz", hash = "sha256:a402e9bf468b63314e37460b68ba68243d55b2f8c4d0192f85a019af3945050e"}, + {file = "prompt_toolkit-3.0.28-py3-none-any.whl", hash = "sha256:30129d870dcb0b3b6a53efdc9d0a83ea96162ffd28ffe077e94215b233dc670c"}, + {file = "prompt_toolkit-3.0.28.tar.gz", hash = "sha256:9f1cd16b1e86c2968f2519d7fb31dd9d669916f515612c269d14e9ed52b51650"}, +] +psutil = [ + {file = "psutil-5.9.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:55ce319452e3d139e25d6c3f85a1acf12d1607ddedea5e35fb47a552c051161b"}, + {file = "psutil-5.9.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:7336292a13a80eb93c21f36bde4328aa748a04b68c13d01dfddd67fc13fd0618"}, + {file = "psutil-5.9.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:cb8d10461c1ceee0c25a64f2dd54872b70b89c26419e147a05a10b753ad36ec2"}, + {file = "psutil-5.9.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:7641300de73e4909e5d148e90cc3142fb890079e1525a840cf0dfd39195239fd"}, + {file = "psutil-5.9.0-cp27-none-win32.whl", hash = "sha256:ea42d747c5f71b5ccaa6897b216a7dadb9f52c72a0fe2b872ef7d3e1eacf3ba3"}, + {file = "psutil-5.9.0-cp27-none-win_amd64.whl", hash = "sha256:ef216cc9feb60634bda2f341a9559ac594e2eeaadd0ba187a4c2eb5b5d40b91c"}, + {file = "psutil-5.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90a58b9fcae2dbfe4ba852b57bd4a1dded6b990a33d6428c7614b7d48eccb492"}, + {file = "psutil-5.9.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff0d41f8b3e9ebb6b6110057e40019a432e96aae2008951121ba4e56040b84f3"}, + {file = "psutil-5.9.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:742c34fff804f34f62659279ed5c5b723bb0195e9d7bd9907591de9f8f6558e2"}, + {file = "psutil-5.9.0-cp310-cp310-win32.whl", hash = "sha256:8293942e4ce0c5689821f65ce6522ce4786d02af57f13c0195b40e1edb1db61d"}, + {file = "psutil-5.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:9b51917c1af3fa35a3f2dabd7ba96a2a4f19df3dec911da73875e1edaf22a40b"}, + {file = "psutil-5.9.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e9805fed4f2a81de98ae5fe38b75a74c6e6ad2df8a5c479594c7629a1fe35f56"}, + {file = "psutil-5.9.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c51f1af02334e4b516ec221ee26b8fdf105032418ca5a5ab9737e8c87dafe203"}, + {file = "psutil-5.9.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32acf55cb9a8cbfb29167cd005951df81b567099295291bcfd1027365b36591d"}, + {file = "psutil-5.9.0-cp36-cp36m-win32.whl", hash = "sha256:e5c783d0b1ad6ca8a5d3e7b680468c9c926b804be83a3a8e95141b05c39c9f64"}, + {file = "psutil-5.9.0-cp36-cp36m-win_amd64.whl", hash = "sha256:d62a2796e08dd024b8179bd441cb714e0f81226c352c802fca0fd3f89eeacd94"}, + {file = "psutil-5.9.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3d00a664e31921009a84367266b35ba0aac04a2a6cad09c550a89041034d19a0"}, + {file = "psutil-5.9.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7779be4025c540d1d65a2de3f30caeacc49ae7a2152108adeaf42c7534a115ce"}, + {file = "psutil-5.9.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:072664401ae6e7c1bfb878c65d7282d4b4391f1bc9a56d5e03b5a490403271b5"}, + {file = "psutil-5.9.0-cp37-cp37m-win32.whl", hash = "sha256:df2c8bd48fb83a8408c8390b143c6a6fa10cb1a674ca664954de193fdcab36a9"}, + {file = "psutil-5.9.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1d7b433519b9a38192dfda962dd8f44446668c009833e1429a52424624f408b4"}, + {file = "psutil-5.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c3400cae15bdb449d518545cbd5b649117de54e3596ded84aacabfbb3297ead2"}, + {file = "psutil-5.9.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b2237f35c4bbae932ee98902a08050a27821f8f6dfa880a47195e5993af4702d"}, + {file = "psutil-5.9.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1070a9b287846a21a5d572d6dddd369517510b68710fca56b0e9e02fd24bed9a"}, + {file = "psutil-5.9.0-cp38-cp38-win32.whl", hash = "sha256:76cebf84aac1d6da5b63df11fe0d377b46b7b500d892284068bacccf12f20666"}, + {file = "psutil-5.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:3151a58f0fbd8942ba94f7c31c7e6b310d2989f4da74fcbf28b934374e9bf841"}, + {file = "psutil-5.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:539e429da49c5d27d5a58e3563886057f8fc3868a5547b4f1876d9c0f007bccf"}, + {file = "psutil-5.9.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58c7d923dc209225600aec73aa2c4ae8ea33b1ab31bc11ef8a5933b027476f07"}, + {file = "psutil-5.9.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3611e87eea393f779a35b192b46a164b1d01167c9d323dda9b1e527ea69d697d"}, + {file = "psutil-5.9.0-cp39-cp39-win32.whl", hash = "sha256:4e2fb92e3aeae3ec3b7b66c528981fd327fb93fd906a77215200404444ec1845"}, + {file = "psutil-5.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:7d190ee2eaef7831163f254dc58f6d2e2a22e27382b936aab51c835fc080c3d3"}, + {file = "psutil-5.9.0.tar.gz", hash = "sha256:869842dbd66bb80c3217158e629d6fceaecc3a3166d3d1faee515b05dd26ca25"}, ] ptyprocess = [ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, ] py = [ - {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"}, - {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"}, + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, ] pycparser = [ - {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"}, - {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"}, + {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, + {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, ] pygments = [ - {file = "Pygments-2.10.0-py3-none-any.whl", hash = "sha256:b8e67fe6af78f492b3c4b3e2970c0624cbf08beb1e493b2c99b9fa1b67a20380"}, - {file = "Pygments-2.10.0.tar.gz", hash = "sha256:f398865f7eb6874156579fdf36bc840a03cab64d1cde9e93d68f46a425ec52c6"}, + {file = "Pygments-2.11.2-py3-none-any.whl", hash = "sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65"}, + {file = "Pygments-2.11.2.tar.gz", hash = "sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"}, ] pyparsing = [ - {file = "pyparsing-3.0.4-py3-none-any.whl", hash = "sha256:c0a7dfcd26825bd4453574c4e7ad04aa095975ce54d04f738fe3a8350fbd223a"}, - {file = "pyparsing-3.0.4.tar.gz", hash = "sha256:e0df773d7fa2240322daae7805626dfc5f2d5effb34e1a7be2702c99cfb9f6b1"}, + {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"}, + {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"}, ] pyrsistent = [ - {file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"}, - {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d"}, - {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2"}, - {file = "pyrsistent-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1"}, - {file = "pyrsistent-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7"}, - {file = "pyrsistent-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396"}, - {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710"}, - {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35"}, - {file = "pyrsistent-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f"}, - {file = "pyrsistent-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2"}, - {file = "pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427"}, - {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef"}, - {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c"}, - {file = "pyrsistent-0.18.0-cp38-cp38-win32.whl", hash = "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78"}, - {file = "pyrsistent-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b"}, - {file = "pyrsistent-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4"}, - {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680"}, - {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426"}, - {file = "pyrsistent-0.18.0-cp39-cp39-win32.whl", hash = "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b"}, - {file = "pyrsistent-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea"}, - {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"}, + {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"}, + {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"}, + {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"}, + {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"}, + {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"}, + {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"}, + {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"}, + {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"}, + {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"}, + {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"}, + {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"}, + {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"}, + {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"}, + {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"}, + {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"}, + {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"}, + {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"}, + {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"}, + {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"}, + {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"}, + {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"}, +] +pytest = [ + {file = "pytest-7.1.1-py3-none-any.whl", hash = "sha256:92f723789a8fdd7180b6b06483874feca4c48a5c76968e03bb3e7f806a1869ea"}, + {file = "pytest-7.1.1.tar.gz", hash = "sha256:841132caef6b1ad17a9afde46dc4f6cfa59a05f9555aae5151f73bdf2820ca63"}, ] 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"}, ] pywin32 = [ - {file = "pywin32-302-cp310-cp310-win32.whl", hash = "sha256:251b7a9367355ccd1a4cd69cd8dd24bd57b29ad83edb2957cfa30f7ed9941efa"}, - {file = "pywin32-302-cp310-cp310-win_amd64.whl", hash = "sha256:79cf7e6ddaaf1cd47a9e50cc74b5d770801a9db6594464137b1b86aa91edafcc"}, - {file = "pywin32-302-cp36-cp36m-win32.whl", hash = "sha256:fe21c2fb332d03dac29de070f191bdbf14095167f8f2165fdc57db59b1ecc006"}, - {file = "pywin32-302-cp36-cp36m-win_amd64.whl", hash = "sha256:d3761ab4e8c5c2dbc156e2c9ccf38dd51f936dc77e58deb940ffbc4b82a30528"}, - {file = "pywin32-302-cp37-cp37m-win32.whl", hash = "sha256:48dd4e348f1ee9538dd4440bf201ea8c110ea6d9f3a5010d79452e9fa80480d9"}, - {file = "pywin32-302-cp37-cp37m-win_amd64.whl", hash = "sha256:496df89f10c054c9285cc99f9d509e243f4e14ec8dfc6d78c9f0bf147a893ab1"}, - {file = "pywin32-302-cp38-cp38-win32.whl", hash = "sha256:e372e477d938a49266136bff78279ed14445e00718b6c75543334351bf535259"}, - {file = "pywin32-302-cp38-cp38-win_amd64.whl", hash = "sha256:543552e66936378bd2d673c5a0a3d9903dba0b0a87235ef0c584f058ceef5872"}, - {file = "pywin32-302-cp39-cp39-win32.whl", hash = "sha256:2393c1a40dc4497fd6161b76801b8acd727c5610167762b7c3e9fd058ef4a6ab"}, - {file = "pywin32-302-cp39-cp39-win_amd64.whl", hash = "sha256:af5aea18167a31efcacc9f98a2ca932c6b6a6d91ebe31f007509e293dea12580"}, + {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"}, ] pywinpty = [ - {file = "pywinpty-1.1.5-cp310-none-win_amd64.whl", hash = "sha256:59e38276f732121b7b708b488055132c695ab7f8790b6ebee9b5b277e30c40e1"}, - {file = "pywinpty-1.1.5-cp36-none-win_amd64.whl", hash = "sha256:0f73bea7f4ecc4711d3706bb0adea0b426c384ff38b619e169d58e20bc307eb0"}, - {file = "pywinpty-1.1.5-cp37-none-win_amd64.whl", hash = "sha256:4cefeef61ab82e9e2bfe228d83a49117e33899931766dd18d576ea5c9187c1e0"}, - {file = "pywinpty-1.1.5-cp38-none-win_amd64.whl", hash = "sha256:44c78a9a74f1b6bff957f8b0acad0525f48f716ac61fd9d39e1eb6f87f1a46a0"}, - {file = "pywinpty-1.1.5-cp39-none-win_amd64.whl", hash = "sha256:ad12ddf276446e0440a760b7c0ba128d39602bc8e6641e0ef8447f1a466a8346"}, - {file = "pywinpty-1.1.5.tar.gz", hash = "sha256:92125f0f8e4e64bb5f3bf270a182c9206dc1765542c59bc07441908a9db17504"}, + {file = "pywinpty-2.0.5-cp310-none-win_amd64.whl", hash = "sha256:f86c76e2881c37e69678cbbf178109f8da1fa8584db24d58e1b9369b0276cfcb"}, + {file = "pywinpty-2.0.5-cp37-none-win_amd64.whl", hash = "sha256:ff9b52f182650cfdf3db1b264a6fe0963eb9d996a7a1fa843ac406c1e32111f8"}, + {file = "pywinpty-2.0.5-cp38-none-win_amd64.whl", hash = "sha256:651ee1467bd7eb6f64d44dbc954b7ab7d15ab6d8adacc4e13299692c67c5d5d2"}, + {file = "pywinpty-2.0.5-cp39-none-win_amd64.whl", hash = "sha256:e59a508ae78374febada3e53b5bbc90b5ad07ae68cbfd72a2e965f9793ae04f3"}, + {file = "pywinpty-2.0.5.tar.gz", hash = "sha256:e125d3f1804d8804952b13e33604ad2ca8b9b2cac92b27b521c005d1604794f8"}, ] pyzmq = [ {file = "pyzmq-22.3.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:6b217b8f9dfb6628f74b94bdaf9f7408708cb02167d644edca33f38746ca12dd"}, @@ -1358,21 +1708,33 @@ send2trash = [ {file = "Send2Trash-1.8.0-py3-none-any.whl", hash = "sha256:f20eaadfdb517eaca5ce077640cb261c7d2698385a6a0f072a4a5447fd49fa08"}, {file = "Send2Trash-1.8.0.tar.gz", hash = "sha256:d2c24762fd3759860a0aff155e45871447ea58d2be6bdd39b5c8f966a0c99c2d"}, ] -setuptools = [ - {file = "setuptools-58.5.2-py3-none-any.whl", hash = "sha256:3a99bc3975c1eb3cca138d3f178aedaca87f75e9372e40cd361056b82d630659"}, - {file = "setuptools-58.5.2.tar.gz", hash = "sha256:132856b317080c4688b664e40164ad27fa210636258ee7c25cf2eb49b982ee51"}, +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"}, ] +soupsieve = [ + {file = "soupsieve-2.3.1-py3-none-any.whl", hash = "sha256:1a3cca2617c6b38c0343ed661b1fa5de5637f257d4fe22bd9f1338010a1efefb"}, + {file = "soupsieve-2.3.1.tar.gz", hash = "sha256:b8d49b1cd4f037c7082a9683dfa1801aa2597fb11c3a1155b7a5b94829b4f1f9"}, +] terminado = [ - {file = "terminado-0.12.1-py3-none-any.whl", hash = "sha256:09fdde344324a1c9c6e610ee4ca165c4bb7f5bbf982fceeeb38998a988ef8452"}, - {file = "terminado-0.12.1.tar.gz", hash = "sha256:b20fd93cc57c1678c799799d117874367cc07a3d2d55be95205b1a88fa08393f"}, + {file = "terminado-0.13.3-py3-none-any.whl", hash = "sha256:874d4ea3183536c1782d13c7c91342ef0cf4e5ee1d53633029cbc972c8760bd8"}, + {file = "terminado-0.13.3.tar.gz", hash = "sha256:94d1cfab63525993f7d5c9b469a50a18d0cdf39435b59785715539dd41e36c0d"}, ] testpath = [ - {file = "testpath-0.5.0-py3-none-any.whl", hash = "sha256:8044f9a0bab6567fc644a3593164e872543bb44225b0e24846e2c89237937589"}, - {file = "testpath-0.5.0.tar.gz", hash = "sha256:1acf7a0bcd3004ae8357409fc33751e16d37ccc650921da1094a86581ad1e417"}, + {file = "testpath-0.6.0-py3-none-any.whl", hash = "sha256:8ada9f80a2ac6fb0391aa7cdb1a7d11cfa8429f693eda83f74dde570fe6fa639"}, + {file = "testpath-0.6.0.tar.gz", hash = "sha256:2f1b97e6442c02681ebe01bd84f531028a7caea1af3825000f52345c30285e0f"}, +] +toml = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] +tomli = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] tornado = [ {file = "tornado-6.1-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:d371e811d6b156d82aa5f9a4e08b58debf97c302a35714f6f45e35139c332e32"}, @@ -1417,14 +1779,25 @@ tornado = [ {file = "tornado-6.1-cp39-cp39-win_amd64.whl", hash = "sha256:548430be2740e327b3fe0201abe471f314741efcb0067ec4f2d7dcfb4825f3e4"}, {file = "tornado-6.1.tar.gz", hash = "sha256:33c6e81d7bd55b468d2e793517c909b139960b6c790a60b7991b9b6b76fb9791"}, ] +tox = [ + {file = "tox-3.24.5-py2.py3-none-any.whl", hash = "sha256:be3362472a33094bce26727f5f771ca0facf6dafa217f65875314e9a6600c95c"}, + {file = "tox-3.24.5.tar.gz", hash = "sha256:67e0e32c90e278251fea45b696d0fef3879089ccbe979b0c556d35d5a70e2993"}, +] +tox-gh-actions = [ + {file = "tox-gh-actions-2.9.1.tar.gz", hash = "sha256:2bbb681eccd3fd3573231a05f7acf228caae1e3f12397b5517b404417ab90aba"}, + {file = "tox_gh_actions-2.9.1-py2.py3-none-any.whl", hash = "sha256:90306a6a04a203e47f861b35dca215fc1f6b7ae80de942a050ace61e2eb2b4ea"}, +] traitlets = [ - {file = "traitlets-4.3.3-py2.py3-none-any.whl", hash = "sha256:70b4c6a1d9019d7b4f6846832288f86998aa3b9207c6821f3578a6a6a467fe44"}, - {file = "traitlets-4.3.3.tar.gz", hash = "sha256:d023ee369ddd2763310e4c3eae1ff649689440d4ae59d7485eb4cfbbe3e359f7"}, + {file = "traitlets-5.1.1-py3-none-any.whl", hash = "sha256:2d313cc50a42cd6c277e7d7dc8d4d7fedd06a2c215f78766ae7b1a66277e0033"}, + {file = "traitlets-5.1.1.tar.gz", hash = "sha256:059f456c5a7c1c82b98c2e8c799f39c9b8128f6d0d46941ee118daace9eb70c7"}, ] typing-extensions = [ - {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"}, - {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"}, - {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"}, + {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"}, + {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"}, +] +virtualenv = [ + {file = "virtualenv-20.14.0-py2.py3-none-any.whl", hash = "sha256:1e8588f35e8b42c6ec6841a13c5e88239de1e6e4e4cedfd3916b306dc826ec66"}, + {file = "virtualenv-20.14.0.tar.gz", hash = "sha256:8e5b402037287126e81ccde9432b95a8be5b19d36584f64957060a3488c11ca8"}, ] wcwidth = [ {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, @@ -1435,10 +1808,10 @@ webencodings = [ {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, ] widgetsnbextension = [ - {file = "widgetsnbextension-3.5.2-py2.py3-none-any.whl", hash = "sha256:763a9fdc836d141fa080005a886d63f66f73d56dba1fb5961afc239c77708569"}, - {file = "widgetsnbextension-3.5.2.tar.gz", hash = "sha256:e0731a60ba540cd19bbbefe771a9076dcd2dde90713a8f87f27f53f2d1db7727"}, + {file = "widgetsnbextension-3.6.0-py2.py3-none-any.whl", hash = "sha256:4fd321cad39fdcf8a8e248a657202d42917ada8e8ed5dd3f60f073e0d54ceabd"}, + {file = "widgetsnbextension-3.6.0.tar.gz", hash = "sha256:e84a7a9fcb9baf3d57106e184a7389a8f8eb935bf741a5eb9d60aa18cc029a80"}, ] zipp = [ - {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"}, - {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"}, + {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"}, + {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"}, ] diff --git a/pyproject.toml b/pyproject.toml index 691c5a8..8b78a0b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,16 +20,21 @@ pluto-info = "plutoplot.info:main" pluto-format-ini = "plutoplot.scripts:format_ini" [tool.poetry.dependencies] -python = ">=3.6,<3.11" -numpy = "^1.16" -matplotlib = "^3.0" -h5py = { version = ">=2.6", optional = true } -ipywidgets = { version = ">=7.0", optional = true } +python = ">=3.7,<3.11" +numpy = "^1.19" +matplotlib = "^3.3" +h5py = { version = "^3.0", optional = true } +ipywidgets = { version = "^7.0", optional = true } [tool.poetry.extras] hdf5 = ["h5py"] interactive = ["ipywidgets"] +[tool.poetry.dev-dependencies] +pytest = "^7.1.1" +tox = "^3.24.5" +tox-gh-actions = "^2.9.1" + [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" diff --git a/tox.ini b/tox.ini index 0af0561..d078ed0 100644 --- a/tox.ini +++ b/tox.ini @@ -1,9 +1,9 @@ [tox] -envlist = py36-numpy{1.16,1.19},py37,py310-numpy{1.16,1.22} +envlist = py37-numpy{1.19,1.22},py310-numpy{1.19,1.22} +isolated_build = true [gh-actions] python = - 3.6: py36 3.7: py37 3.8: py38 3.9: py39 @@ -12,7 +12,6 @@ python = [testenv] deps = pytest - numpy1.16: numpy>=1.16,<1.17 numpy1.19: numpy>=1.19,<1.20 numpy1.22: numpy>=1.22 commands = pytest From 446b79019e51c7705066b47dcc463e9640c30d3c Mon Sep 17 00:00:00 2001 From: Simske Date: Thu, 31 Mar 2022 23:25:29 +0200 Subject: [PATCH 35/41] Simplify testing matrix --- tox.ini | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tox.ini b/tox.ini index d078ed0..71297f9 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = py37-numpy{1.19,1.22},py310-numpy{1.19,1.22} +envlist = py37,py38,py39,py310 isolated_build = true [gh-actions] @@ -12,6 +12,4 @@ python = [testenv] deps = pytest - numpy1.19: numpy>=1.19,<1.20 - numpy1.22: numpy>=1.22 commands = pytest From 731d7f5cf1bbc9d395f5e7fb81d461f5765d297a Mon Sep 17 00:00:00 2001 From: Simske Date: Thu, 31 Mar 2022 23:42:45 +0200 Subject: [PATCH 36/41] Convert __version__ to poetry method --- plutoplot/__init__.py | 8 +- plutoplot/_version.py | 556 ------------------------------------------ 2 files changed, 3 insertions(+), 561 deletions(-) delete mode 100644 plutoplot/_version.py diff --git a/plutoplot/__init__.py b/plutoplot/__init__.py index 7d13576..bc6818b 100644 --- a/plutoplot/__init__.py +++ b/plutoplot/__init__.py @@ -1,9 +1,7 @@ -from ._version import get_versions +import importlib.metadata -__version__ = get_versions()["version"] -del get_versions - -from matplotlib.pyplot import show +__version__ = importlib.metadata.version("plutoplot") +del importlib from . import misc from .grid import Grid diff --git a/plutoplot/_version.py b/plutoplot/_version.py deleted file mode 100644 index 98f27ac..0000000 --- a/plutoplot/_version.py +++ /dev/null @@ -1,556 +0,0 @@ -# This file helps to compute a version number in source trees obtained from -# git-archive tarball (such as those provided by githubs download-from-tag -# feature). Distribution tarballs (built by setup.py sdist) and build -# directories (produced by setup.py build) will contain a much shorter file -# that just contains the computed version number. - -# This file is released into the public domain. Generated by -# versioneer-0.18 (https://github.com/warner/python-versioneer) - -"""Git implementation of _version.py.""" - -import errno -import os -import re -import subprocess -import sys - - -def get_keywords(): - """Get the keywords needed to look up the version information.""" - # these strings will be replaced by git during git-archive. - # setup.py/versioneer.py will grep for the variable names, so they must - # each be defined on a line of their own. _version.py will just call - # get_keywords(). - git_refnames = "$Format:%d$" - git_full = "$Format:%H$" - git_date = "$Format:%ci$" - keywords = {"refnames": git_refnames, "full": git_full, "date": git_date} - return keywords - - -class VersioneerConfig: - """Container for Versioneer configuration parameters.""" - - -def get_config(): - """Create, populate and return the VersioneerConfig() object.""" - # these strings are filled in when 'setup.py versioneer' creates - # _version.py - cfg = VersioneerConfig() - cfg.VCS = "git" - cfg.style = "pep440" - cfg.tag_prefix = "" - cfg.parentdir_prefix = "" - cfg.versionfile_source = "plutoplot/_version.py" - cfg.verbose = False - return cfg - - -class NotThisMethod(Exception): - """Exception raised if a method is not valid for the current scenario.""" - - -LONG_VERSION_PY = {} -HANDLERS = {} - - -def register_vcs_handler(vcs, method): # decorator - """Decorator to mark a method as the handler for a particular VCS.""" - - def decorate(f): - """Store f in HANDLERS[vcs][method].""" - if vcs not in HANDLERS: - HANDLERS[vcs] = {} - HANDLERS[vcs][method] = f - return f - - return decorate - - -def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, env=None): - """Call the given command(s).""" - assert isinstance(commands, list) - p = None - for c in commands: - try: - dispcmd = str([c] + args) - # remember shell=False, so use git.cmd on windows, not just git - p = subprocess.Popen( - [c] + args, - cwd=cwd, - env=env, - stdout=subprocess.PIPE, - stderr=(subprocess.PIPE if hide_stderr else None), - ) - break - except EnvironmentError: - e = sys.exc_info()[1] - if e.errno == errno.ENOENT: - continue - if verbose: - print("unable to run %s" % dispcmd) - print(e) - return None, None - else: - if verbose: - print("unable to find command, tried %s" % (commands,)) - return None, None - stdout = p.communicate()[0].strip() - if sys.version_info[0] >= 3: - stdout = stdout.decode() - if p.returncode != 0: - if verbose: - print("unable to run %s (error)" % dispcmd) - print("stdout was %s" % stdout) - return None, p.returncode - return stdout, p.returncode - - -def versions_from_parentdir(parentdir_prefix, root, verbose): - """Try to determine the version from the parent directory name. - - Source tarballs conventionally unpack into a directory that includes both - the project name and a version string. We will also support searching up - two directory levels for an appropriately named parent directory - """ - rootdirs = [] - - for i in range(3): - dirname = os.path.basename(root) - if dirname.startswith(parentdir_prefix): - return { - "version": dirname[len(parentdir_prefix) :], - "full-revisionid": None, - "dirty": False, - "error": None, - "date": None, - } - else: - rootdirs.append(root) - root = os.path.dirname(root) # up a level - - if verbose: - print( - "Tried directories %s but none started with prefix %s" - % (str(rootdirs), parentdir_prefix) - ) - raise NotThisMethod("rootdir doesn't start with parentdir_prefix") - - -@register_vcs_handler("git", "get_keywords") -def git_get_keywords(versionfile_abs): - """Extract version information from the given file.""" - # the code embedded in _version.py can just fetch the value of these - # keywords. When used from setup.py, we don't want to import _version.py, - # so we do it with a regexp instead. This function is not used from - # _version.py. - keywords = {} - try: - f = open(versionfile_abs, "r") - for line in f.readlines(): - if line.strip().startswith("git_refnames ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["refnames"] = mo.group(1) - if line.strip().startswith("git_full ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["full"] = mo.group(1) - if line.strip().startswith("git_date ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["date"] = mo.group(1) - f.close() - except EnvironmentError: - pass - return keywords - - -@register_vcs_handler("git", "keywords") -def git_versions_from_keywords(keywords, tag_prefix, verbose): - """Get version information from git keywords.""" - if not keywords: - raise NotThisMethod("no keywords at all, weird") - date = keywords.get("date") - if date is not None: - # git-2.2.0 added "%cI", which expands to an ISO-8601 -compliant - # datestamp. However we prefer "%ci" (which expands to an "ISO-8601 - # -like" string, which we must then edit to make compliant), because - # it's been around since git-1.5.3, and it's too difficult to - # discover which version we're using, or to work around using an - # older one. - date = date.strip().replace(" ", "T", 1).replace(" ", "", 1) - refnames = keywords["refnames"].strip() - if refnames.startswith("$Format"): - if verbose: - print("keywords are unexpanded, not using") - raise NotThisMethod("unexpanded keywords, not a git-archive tarball") - refs = set([r.strip() for r in refnames.strip("()").split(",")]) - # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of - # just "foo-1.0". If we see a "tag: " prefix, prefer those. - TAG = "tag: " - tags = set([r[len(TAG) :] for r in refs if r.startswith(TAG)]) - if not tags: - # Either we're using git < 1.8.3, or there really are no tags. We use - # a heuristic: assume all version tags have a digit. The old git %d - # expansion behaves like git log --decorate=short and strips out the - # refs/heads/ and refs/tags/ prefixes that would let us distinguish - # between branches and tags. By ignoring refnames without digits, we - # filter out many common branch names like "release" and - # "stabilization", as well as "HEAD" and "master". - tags = set([r for r in refs if re.search(r"\d", r)]) - if verbose: - print("discarding '%s', no digits" % ",".join(refs - tags)) - if verbose: - print("likely tags: %s" % ",".join(sorted(tags))) - for ref in sorted(tags): - # sorting will prefer e.g. "2.0" over "2.0rc1" - if ref.startswith(tag_prefix): - r = ref[len(tag_prefix) :] - if verbose: - print("picking %s" % r) - return { - "version": r, - "full-revisionid": keywords["full"].strip(), - "dirty": False, - "error": None, - "date": date, - } - # no suitable tags, so version is "0+unknown", but full hex is still there - if verbose: - print("no suitable tags, using unknown + full revision id") - return { - "version": "0+unknown", - "full-revisionid": keywords["full"].strip(), - "dirty": False, - "error": "no suitable tags", - "date": None, - } - - -@register_vcs_handler("git", "pieces_from_vcs") -def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command): - """Get version from 'git describe' in the root of the source tree. - - This only gets called if the git-archive 'subst' keywords were *not* - expanded, and _version.py hasn't already been rewritten with a short - version string, meaning we're inside a checked out source tree. - """ - GITS = ["git"] - if sys.platform == "win32": - GITS = ["git.cmd", "git.exe"] - - out, rc = run_command(GITS, ["rev-parse", "--git-dir"], cwd=root, hide_stderr=True) - if rc != 0: - if verbose: - print("Directory %s not under git control" % root) - raise NotThisMethod("'git rev-parse --git-dir' returned error") - - # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty] - # if there isn't one, this yields HEX[-dirty] (no NUM) - describe_out, rc = run_command( - GITS, - [ - "describe", - "--tags", - "--dirty", - "--always", - "--long", - "--match", - "%s*" % tag_prefix, - ], - cwd=root, - ) - # --long was added in git-1.5.5 - if describe_out is None: - raise NotThisMethod("'git describe' failed") - describe_out = describe_out.strip() - full_out, rc = run_command(GITS, ["rev-parse", "HEAD"], cwd=root) - if full_out is None: - raise NotThisMethod("'git rev-parse' failed") - full_out = full_out.strip() - - pieces = {} - pieces["long"] = full_out - pieces["short"] = full_out[:7] # maybe improved later - pieces["error"] = None - - # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty] - # TAG might have hyphens. - git_describe = describe_out - - # look for -dirty suffix - dirty = git_describe.endswith("-dirty") - pieces["dirty"] = dirty - if dirty: - git_describe = git_describe[: git_describe.rindex("-dirty")] - - # now we have TAG-NUM-gHEX or HEX - - if "-" in git_describe: - # TAG-NUM-gHEX - mo = re.search(r"^(.+)-(\d+)-g([0-9a-f]+)$", git_describe) - if not mo: - # unparseable. Maybe git-describe is misbehaving? - pieces["error"] = "unable to parse git-describe output: '%s'" % describe_out - return pieces - - # tag - full_tag = mo.group(1) - if not full_tag.startswith(tag_prefix): - if verbose: - fmt = "tag '%s' doesn't start with prefix '%s'" - print(fmt % (full_tag, tag_prefix)) - pieces["error"] = "tag '%s' doesn't start with prefix '%s'" % ( - full_tag, - tag_prefix, - ) - return pieces - pieces["closest-tag"] = full_tag[len(tag_prefix) :] - - # distance: number of commits since tag - pieces["distance"] = int(mo.group(2)) - - # commit: short hex revision ID - pieces["short"] = mo.group(3) - - else: - # HEX: no tags - pieces["closest-tag"] = None - count_out, rc = run_command(GITS, ["rev-list", "HEAD", "--count"], cwd=root) - pieces["distance"] = int(count_out) # total number of commits - - # commit date: see ISO-8601 comment in git_versions_from_keywords() - date = run_command(GITS, ["show", "-s", "--format=%ci", "HEAD"], cwd=root)[ - 0 - ].strip() - pieces["date"] = date.strip().replace(" ", "T", 1).replace(" ", "", 1) - - return pieces - - -def plus_or_dot(pieces): - """Return a + if we don't already have one, else return a .""" - if "+" in pieces.get("closest-tag", ""): - return "." - return "+" - - -def render_pep440(pieces): - """Build up version string, with post-release "local version identifier". - - Our goal: TAG[+DISTANCE.gHEX[.dirty]] . Note that if you - get a tagged build and then dirty it, you'll get TAG+0.gHEX.dirty - - Exceptions: - 1: no tags. git_describe was just HEX. 0+untagged.DISTANCE.gHEX[.dirty] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += plus_or_dot(pieces) - rendered += "%d.g%s" % (pieces["distance"], pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - else: - # exception #1 - rendered = "0+untagged.%d.g%s" % (pieces["distance"], pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - return rendered - - -def render_pep440_pre(pieces): - """TAG[.post.devDISTANCE] -- No -dirty. - - Exceptions: - 1: no tags. 0.post.devDISTANCE - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"]: - rendered += ".post.dev%d" % pieces["distance"] - else: - # exception #1 - rendered = "0.post.dev%d" % pieces["distance"] - return rendered - - -def render_pep440_post(pieces): - """TAG[.postDISTANCE[.dev0]+gHEX] . - - The ".dev0" means dirty. Note that .dev0 sorts backwards - (a dirty tree will appear "older" than the corresponding clean one), - but you shouldn't be releasing software with -dirty anyways. - - Exceptions: - 1: no tags. 0.postDISTANCE[.dev0] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - rendered += plus_or_dot(pieces) - rendered += "g%s" % pieces["short"] - else: - # exception #1 - rendered = "0.post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - rendered += "+g%s" % pieces["short"] - return rendered - - -def render_pep440_old(pieces): - """TAG[.postDISTANCE[.dev0]] . - - The ".dev0" means dirty. - - Eexceptions: - 1: no tags. 0.postDISTANCE[.dev0] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - else: - # exception #1 - rendered = "0.post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - return rendered - - -def render_git_describe(pieces): - """TAG[-DISTANCE-gHEX][-dirty]. - - Like 'git describe --tags --dirty --always'. - - Exceptions: - 1: no tags. HEX[-dirty] (note: no 'g' prefix) - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"]: - rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) - else: - # exception #1 - rendered = pieces["short"] - if pieces["dirty"]: - rendered += "-dirty" - return rendered - - -def render_git_describe_long(pieces): - """TAG-DISTANCE-gHEX[-dirty]. - - Like 'git describe --tags --dirty --always -long'. - The distance/hash is unconditional. - - Exceptions: - 1: no tags. HEX[-dirty] (note: no 'g' prefix) - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) - else: - # exception #1 - rendered = pieces["short"] - if pieces["dirty"]: - rendered += "-dirty" - return rendered - - -def render(pieces, style): - """Render the given version pieces into the requested style.""" - if pieces["error"]: - return { - "version": "unknown", - "full-revisionid": pieces.get("long"), - "dirty": None, - "error": pieces["error"], - "date": None, - } - - if not style or style == "default": - style = "pep440" # the default - - if style == "pep440": - rendered = render_pep440(pieces) - elif style == "pep440-pre": - rendered = render_pep440_pre(pieces) - elif style == "pep440-post": - rendered = render_pep440_post(pieces) - elif style == "pep440-old": - rendered = render_pep440_old(pieces) - elif style == "git-describe": - rendered = render_git_describe(pieces) - elif style == "git-describe-long": - rendered = render_git_describe_long(pieces) - else: - raise ValueError("unknown style '%s'" % style) - - return { - "version": rendered, - "full-revisionid": pieces["long"], - "dirty": pieces["dirty"], - "error": None, - "date": pieces.get("date"), - } - - -def get_versions(): - """Get version information or return default if unable to do so.""" - # I am in _version.py, which lives at ROOT/VERSIONFILE_SOURCE. If we have - # __file__, we can work backwards from there to the root. Some - # py2exe/bbfreeze/non-CPython implementations don't do __file__, in which - # case we can only use expanded keywords. - - cfg = get_config() - verbose = cfg.verbose - - try: - return git_versions_from_keywords(get_keywords(), cfg.tag_prefix, verbose) - except NotThisMethod: - pass - - try: - root = os.path.realpath(__file__) - # versionfile_source is the relative path from the top of the source - # tree (where the .git directory might live) to this file. Invert - # this to find the root from __file__. - for i in cfg.versionfile_source.split("/"): - root = os.path.dirname(root) - except NameError: - return { - "version": "0+unknown", - "full-revisionid": None, - "dirty": None, - "error": "unable to find root of source tree", - "date": None, - } - - try: - pieces = git_pieces_from_vcs(cfg.tag_prefix, root, verbose) - return render(pieces, cfg.style) - except NotThisMethod: - pass - - try: - if cfg.parentdir_prefix: - return versions_from_parentdir(cfg.parentdir_prefix, root, verbose) - except NotThisMethod: - pass - - return { - "version": "0+unknown", - "full-revisionid": None, - "dirty": None, - "error": "unable to compute version", - "date": None, - } From d1be87d21b169ec44be64ae7a454410118838e6b Mon Sep 17 00:00:00 2001 From: Simske Date: Fri, 1 Apr 2022 20:07:00 +0200 Subject: [PATCH 37/41] Add mypy to environment --- poetry.lock | 92 +++++++++++++++++++++++++++++++++++++++++++++++++- pyproject.toml | 1 + 2 files changed, 92 insertions(+), 1 deletion(-) diff --git a/poetry.lock b/poetry.lock index 79fa8bd..53f0567 100644 --- a/poetry.lock +++ b/poetry.lock @@ -495,6 +495,33 @@ category = "main" optional = true python-versions = "*" +[[package]] +name = "mypy" +version = "0.942" +description = "Optional static typing for Python" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +mypy-extensions = ">=0.4.3" +tomli = ">=1.1.0" +typed-ast = {version = ">=1.4.0,<2", markers = "python_version < \"3.8\""} +typing-extensions = ">=3.10" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +python2 = ["typed-ast (>=1.4.0,<2)"] +reports = ["lxml"] + +[[package]] +name = "mypy-extensions" +version = "0.4.3" +description = "Experimental type system extensions for programs checked with the mypy typechecker." +category = "dev" +optional = false +python-versions = "*" + [[package]] name = "nbclient" version = "0.5.13" @@ -983,6 +1010,14 @@ python-versions = ">=3.7" [package.extras] test = ["pytest"] +[[package]] +name = "typed-ast" +version = "1.5.2" +description = "a fork of Python 2 and 3 ast modules with type comment support" +category = "dev" +optional = false +python-versions = ">=3.6" + [[package]] name = "typing-extensions" version = "4.1.1" @@ -1056,7 +1091,7 @@ interactive = ["ipywidgets"] [metadata] lock-version = "1.1" python-versions = ">=3.7,<3.11" -content-hash = "4f21cb819f87ff48ed90f9c609e99eb9213aa2407d08c32f7cb1852ce8cb38eb" +content-hash = "bf726f97e9e493843530a5eb537d6ae21754b8816dbbabdb4dca29f96af89865" [metadata.files] appnope = [ @@ -1424,6 +1459,35 @@ mistune = [ {file = "mistune-0.8.4-py2.py3-none-any.whl", hash = "sha256:88a1051873018da288eee8538d476dffe1262495144b33ecb586c4ab266bb8d4"}, {file = "mistune-0.8.4.tar.gz", hash = "sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e"}, ] +mypy = [ + {file = "mypy-0.942-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5bf44840fb43ac4074636fd47ee476d73f0039f4f54e86d7265077dc199be24d"}, + {file = "mypy-0.942-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dcd955f36e0180258a96f880348fbca54ce092b40fbb4b37372ae3b25a0b0a46"}, + {file = "mypy-0.942-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6776e5fa22381cc761df53e7496a805801c1a751b27b99a9ff2f0ca848c7eca0"}, + {file = "mypy-0.942-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:edf7237137a1a9330046dbb14796963d734dd740a98d5e144a3eb1d267f5f9ee"}, + {file = "mypy-0.942-cp310-cp310-win_amd64.whl", hash = "sha256:64235137edc16bee6f095aba73be5334677d6f6bdb7fa03cfab90164fa294a17"}, + {file = "mypy-0.942-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b840cfe89c4ab6386c40300689cd8645fc8d2d5f20101c7f8bd23d15fca14904"}, + {file = "mypy-0.942-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2b184db8c618c43c3a31b32ff00cd28195d39e9c24e7c3b401f3db7f6e5767f5"}, + {file = "mypy-0.942-cp36-cp36m-win_amd64.whl", hash = "sha256:1a0459c333f00e6a11cbf6b468b870c2b99a906cb72d6eadf3d1d95d38c9352c"}, + {file = "mypy-0.942-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4c3e497588afccfa4334a9986b56f703e75793133c4be3a02d06a3df16b67a58"}, + {file = "mypy-0.942-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6f6ad963172152e112b87cc7ec103ba0f2db2f1cd8997237827c052a3903eaa6"}, + {file = "mypy-0.942-cp37-cp37m-win_amd64.whl", hash = "sha256:0e2dd88410937423fba18e57147dd07cd8381291b93d5b1984626f173a26543e"}, + {file = "mypy-0.942-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:246e1aa127d5b78488a4a0594bd95f6d6fb9d63cf08a66dafbff8595d8891f67"}, + {file = "mypy-0.942-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d8d3ba77e56b84cd47a8ee45b62c84b6d80d32383928fe2548c9a124ea0a725c"}, + {file = "mypy-0.942-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2bc249409a7168d37c658e062e1ab5173300984a2dada2589638568ddc1db02b"}, + {file = "mypy-0.942-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9521c1265ccaaa1791d2c13582f06facf815f426cd8b07c3a485f486a8ffc1f3"}, + {file = "mypy-0.942-cp38-cp38-win_amd64.whl", hash = "sha256:e865fec858d75b78b4d63266c9aff770ecb6a39dfb6d6b56c47f7f8aba6baba8"}, + {file = "mypy-0.942-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6ce34a118d1a898f47def970a2042b8af6bdcc01546454726c7dd2171aa6dfca"}, + {file = "mypy-0.942-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:10daab80bc40f84e3f087d896cdb53dc811a9f04eae4b3f95779c26edee89d16"}, + {file = "mypy-0.942-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3841b5433ff936bff2f4dc8d54cf2cdbfea5d8e88cedfac45c161368e5770ba6"}, + {file = "mypy-0.942-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6f7106cbf9cc2f403693bf50ed7c9fa5bb3dfa9007b240db3c910929abe2a322"}, + {file = "mypy-0.942-cp39-cp39-win_amd64.whl", hash = "sha256:7742d2c4e46bb5017b51c810283a6a389296cda03df805a4f7869a6f41246534"}, + {file = "mypy-0.942-py3-none-any.whl", hash = "sha256:a1b383fe99678d7402754fe90448d4037f9512ce70c21f8aee3b8bf48ffc51db"}, + {file = "mypy-0.942.tar.gz", hash = "sha256:17e44649fec92e9f82102b48a3bf7b4a5510ad0cd22fa21a104826b5db4903e2"}, +] +mypy-extensions = [ + {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, + {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, +] nbclient = [ {file = "nbclient-0.5.13-py3-none-any.whl", hash = "sha256:47ac905af59379913c1f8f541098d2550153cf8dc58553cbe18c702b181518b0"}, {file = "nbclient-0.5.13.tar.gz", hash = "sha256:40c52c9b5e3c31faecaee69f202b3f53e38d7c1c563de0fadde9d7eda0fdafe8"}, @@ -1791,6 +1855,32 @@ traitlets = [ {file = "traitlets-5.1.1-py3-none-any.whl", hash = "sha256:2d313cc50a42cd6c277e7d7dc8d4d7fedd06a2c215f78766ae7b1a66277e0033"}, {file = "traitlets-5.1.1.tar.gz", hash = "sha256:059f456c5a7c1c82b98c2e8c799f39c9b8128f6d0d46941ee118daace9eb70c7"}, ] +typed-ast = [ + {file = "typed_ast-1.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:183b183b7771a508395d2cbffd6db67d6ad52958a5fdc99f450d954003900266"}, + {file = "typed_ast-1.5.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:676d051b1da67a852c0447621fdd11c4e104827417bf216092ec3e286f7da596"}, + {file = "typed_ast-1.5.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc2542e83ac8399752bc16e0b35e038bdb659ba237f4222616b4e83fb9654985"}, + {file = "typed_ast-1.5.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74cac86cc586db8dfda0ce65d8bcd2bf17b58668dfcc3652762f3ef0e6677e76"}, + {file = "typed_ast-1.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:18fe320f354d6f9ad3147859b6e16649a0781425268c4dde596093177660e71a"}, + {file = "typed_ast-1.5.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:31d8c6b2df19a777bc8826770b872a45a1f30cfefcfd729491baa5237faae837"}, + {file = "typed_ast-1.5.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:963a0ccc9a4188524e6e6d39b12c9ca24cc2d45a71cfdd04a26d883c922b4b78"}, + {file = "typed_ast-1.5.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0eb77764ea470f14fcbb89d51bc6bbf5e7623446ac4ed06cbd9ca9495b62e36e"}, + {file = "typed_ast-1.5.2-cp36-cp36m-win_amd64.whl", hash = "sha256:294a6903a4d087db805a7656989f613371915fc45c8cc0ddc5c5a0a8ad9bea4d"}, + {file = "typed_ast-1.5.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:26a432dc219c6b6f38be20a958cbe1abffcc5492821d7e27f08606ef99e0dffd"}, + {file = "typed_ast-1.5.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7407cfcad702f0b6c0e0f3e7ab876cd1d2c13b14ce770e412c0c4b9728a0f88"}, + {file = "typed_ast-1.5.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f30ddd110634c2d7534b2d4e0e22967e88366b0d356b24de87419cc4410c41b7"}, + {file = "typed_ast-1.5.2-cp37-cp37m-win_amd64.whl", hash = "sha256:8c08d6625bb258179b6e512f55ad20f9dfef019bbfbe3095247401e053a3ea30"}, + {file = "typed_ast-1.5.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:90904d889ab8e81a956f2c0935a523cc4e077c7847a836abee832f868d5c26a4"}, + {file = "typed_ast-1.5.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bbebc31bf11762b63bf61aaae232becb41c5bf6b3461b80a4df7e791fabb3aca"}, + {file = "typed_ast-1.5.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c29dd9a3a9d259c9fa19d19738d021632d673f6ed9b35a739f48e5f807f264fb"}, + {file = "typed_ast-1.5.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:58ae097a325e9bb7a684572d20eb3e1809802c5c9ec7108e85da1eb6c1a3331b"}, + {file = "typed_ast-1.5.2-cp38-cp38-win_amd64.whl", hash = "sha256:da0a98d458010bf4fe535f2d1e367a2e2060e105978873c04c04212fb20543f7"}, + {file = "typed_ast-1.5.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:33b4a19ddc9fc551ebabca9765d54d04600c4a50eda13893dadf67ed81d9a098"}, + {file = "typed_ast-1.5.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1098df9a0592dd4c8c0ccfc2e98931278a6c6c53cb3a3e2cf7e9ee3b06153344"}, + {file = "typed_ast-1.5.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42c47c3b43fe3a39ddf8de1d40dbbfca60ac8530a36c9b198ea5b9efac75c09e"}, + {file = "typed_ast-1.5.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f290617f74a610849bd8f5514e34ae3d09eafd521dceaa6cf68b3f4414266d4e"}, + {file = "typed_ast-1.5.2-cp39-cp39-win_amd64.whl", hash = "sha256:df05aa5b241e2e8045f5f4367a9f6187b09c4cdf8578bb219861c4e27c443db5"}, + {file = "typed_ast-1.5.2.tar.gz", hash = "sha256:525a2d4088e70a9f75b08b3f87a51acc9cde640e19cc523c7e41aa355564ae27"}, +] typing-extensions = [ {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"}, {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"}, diff --git a/pyproject.toml b/pyproject.toml index 8b78a0b..d6ba2c0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,6 +34,7 @@ interactive = ["ipywidgets"] pytest = "^7.1.1" tox = "^3.24.5" tox-gh-actions = "^2.9.1" +mypy = "^0.942" [build-system] requires = ["poetry-core"] From 0f27a8d8186b17e01e07042beca14de4aa814aee Mon Sep 17 00:00:00 2001 From: Simske Date: Fri, 1 Apr 2022 20:07:16 +0200 Subject: [PATCH 38/41] Add pre-commit to environment --- poetry.lock | 105 ++++++++++++++++++++++++++++++++++++++++++++++++- pyproject.toml | 1 + 2 files changed, 105 insertions(+), 1 deletion(-) diff --git a/poetry.lock b/poetry.lock index 53f0567..eadb358 100644 --- a/poetry.lock +++ b/poetry.lock @@ -115,6 +115,14 @@ python-versions = "*" [package.dependencies] pycparser = "*" +[[package]] +name = "cfgv" +version = "3.3.1" +description = "Validate configuration and produce human readable error messages." +category = "dev" +optional = false +python-versions = ">=3.6.1" + [[package]] name = "colorama" version = "0.4.4" @@ -216,6 +224,17 @@ python-versions = ">=3.7" cached-property = {version = "*", markers = "python_version < \"3.8\""} numpy = ">=1.14.5" +[[package]] +name = "identify" +version = "2.4.12" +description = "File identification library for Python" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +license = ["ukkonen"] + [[package]] name = "importlib-metadata" version = "4.11.3" @@ -597,6 +616,14 @@ category = "main" optional = true python-versions = ">=3.5" +[[package]] +name = "nodeenv" +version = "1.6.0" +description = "Node.js virtual environment builder" +category = "dev" +optional = false +python-versions = "*" + [[package]] name = "notebook" version = "6.4.10" @@ -720,6 +747,23 @@ importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] +[[package]] +name = "pre-commit" +version = "2.17.0" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +category = "dev" +optional = false +python-versions = ">=3.6.1" + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +toml = "*" +virtualenv = ">=20.0.8" + [[package]] name = "prometheus-client" version = "0.13.1" @@ -853,6 +897,14 @@ category = "main" optional = true python-versions = ">=3.7" +[[package]] +name = "pyyaml" +version = "6.0" +description = "YAML parser and emitter for Python" +category = "dev" +optional = false +python-versions = ">=3.6" + [[package]] name = "pyzmq" version = "22.3.0" @@ -1091,7 +1143,7 @@ interactive = ["ipywidgets"] [metadata] lock-version = "1.1" python-versions = ">=3.7,<3.11" -content-hash = "bf726f97e9e493843530a5eb537d6ae21754b8816dbbabdb4dca29f96af89865" +content-hash = "3f6a69ba4a7a13c0ee75c41cfbdde7e656fd4659c6c05472bac10153252d0cfc" [metadata.files] appnope = [ @@ -1201,6 +1253,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"}, +] colorama = [ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, @@ -1271,6 +1327,10 @@ h5py = [ {file = "h5py-3.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:9fd8a14236fdd092a20c0bdf25c3aba3777718d266fabb0fdded4fcf252d1630"}, {file = "h5py-3.6.0.tar.gz", hash = "sha256:8752d2814a92aba4e2b2a5922d2782d0029102d99caaf3c201a566bc0b40db29"}, ] +identify = [ + {file = "identify-2.4.12-py2.py3-none-any.whl", hash = "sha256:5f06b14366bd1facb88b00540a1de05b69b310cbc2654db3c7e07fa3a4339323"}, + {file = "identify-2.4.12.tar.gz", hash = "sha256:3f3244a559290e7d3deb9e9adc7b33594c1bc85a9dd82e0f1be519bf12a1ec17"}, +] importlib-metadata = [ {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"}, {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"}, @@ -1504,6 +1564,10 @@ nest-asyncio = [ {file = "nest_asyncio-1.5.4-py3-none-any.whl", hash = "sha256:3fdd0d6061a2bb16f21fe8a9c6a7945be83521d81a0d15cff52e9edee50101d6"}, {file = "nest_asyncio-1.5.4.tar.gz", hash = "sha256:f969f6013a16fadb4adcf09d11a68a4f617c6049d7af7ac2c676110169a63abd"}, ] +nodeenv = [ + {file = "nodeenv-1.6.0-py2.py3-none-any.whl", hash = "sha256:621e6b7076565ddcacd2db0294c0381e01fd28945ab36bcf00f41c5daf63bef7"}, + {file = "nodeenv-1.6.0.tar.gz", hash = "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b"}, +] notebook = [ {file = "notebook-6.4.10-py3-none-any.whl", hash = "sha256:49cead814bff0945fcb2ee07579259418672ac175d3dc3d8102a4b0a656ed4df"}, {file = "notebook-6.4.10.tar.gz", hash = "sha256:2408a76bc6289283a8eecfca67e298ec83c67db51a4c2e1b713dd180bb39e90e"}, @@ -1605,6 +1669,10 @@ pluggy = [ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, ] +pre-commit = [ + {file = "pre_commit-2.17.0-py2.py3-none-any.whl", hash = "sha256:725fa7459782d7bec5ead072810e47351de01709be838c2ce1726b9591dad616"}, + {file = "pre_commit-2.17.0.tar.gz", hash = "sha256:c1a8040ff15ad3d648c70cc3e55b93e4d2d5b687320955505587fd79bbaed06a"}, +] prometheus-client = [ {file = "prometheus_client-0.13.1-py3-none-any.whl", hash = "sha256:357a447fd2359b0a1d2e9b311a0c5778c330cfbe186d880ad5a6b39884652316"}, {file = "prometheus_client-0.13.1.tar.gz", hash = "sha256:ada41b891b79fca5638bd5cfe149efa86512eaa55987893becd2c6d8d0a5dfc5"}, @@ -1719,6 +1787,41 @@ pywinpty = [ {file = "pywinpty-2.0.5-cp39-none-win_amd64.whl", hash = "sha256:e59a508ae78374febada3e53b5bbc90b5ad07ae68cbfd72a2e965f9793ae04f3"}, {file = "pywinpty-2.0.5.tar.gz", hash = "sha256:e125d3f1804d8804952b13e33604ad2ca8b9b2cac92b27b521c005d1604794f8"}, ] +pyyaml = [ + {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, + {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, + {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, + {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, + {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, + {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, + {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, + {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, + {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, + {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, + {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, + {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, + {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, + {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, + {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, + {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, +] pyzmq = [ {file = "pyzmq-22.3.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:6b217b8f9dfb6628f74b94bdaf9f7408708cb02167d644edca33f38746ca12dd"}, {file = "pyzmq-22.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2841997a0d85b998cbafecb4183caf51fd19c4357075dfd33eb7efea57e4c149"}, diff --git a/pyproject.toml b/pyproject.toml index d6ba2c0..6bb310e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,6 +35,7 @@ pytest = "^7.1.1" tox = "^3.24.5" tox-gh-actions = "^2.9.1" mypy = "^0.942" +pre-commit = "^2.17.0" [build-system] requires = ["poetry-core"] From a060fc7be8bd7c131255b893a60c25ed142bfbb2 Mon Sep 17 00:00:00 2001 From: Simske Date: Fri, 1 Apr 2022 20:10:03 +0200 Subject: [PATCH 39/41] Add some type annotations in coordinates.py and grid.py --- plutoplot/coordinates.py | 35 +++++++++++++++++++++++++---------- plutoplot/grid.py | 12 ++++++++---- 2 files changed, 33 insertions(+), 14 deletions(-) diff --git a/plutoplot/coordinates.py b/plutoplot/coordinates.py index 487ce33..bb728f3 100644 --- a/plutoplot/coordinates.py +++ b/plutoplot/coordinates.py @@ -1,9 +1,12 @@ """Functions and mappings for coordinate grid""" from functools import lru_cache -from typing import Dict +from typing import TYPE_CHECKING, Dict, Tuple import numpy as np +if TYPE_CHECKING: + from .grid import Grid + base_coordinate_mappings: Dict[str, Dict[str, str]] = { "cartesian": {"x": "x1", "y": "x2", "z": "x3"}, "polar": {"r": "x1", "phi": "x2", "z": "x3"}, @@ -67,7 +70,7 @@ def mapping_vars(coordinates: str) -> Dict[str, str]: return mapping -tex_chars = { +tex_chars: Dict[str, str] = { "theta": r"\theta", "rho": r"\rho", "phi": r"\phi", @@ -122,31 +125,43 @@ def mapping_tex(coordinates: str) -> Dict[str, str]: return mapping -def transform_mesh(grid, mesh1, mesh2): +def transform_mesh( + grid: "Grid", + mesh1: np.ndarray[np.dtype[np.float64], np.dtype[np.float64]], + mesh2: np.ndarray[np.dtype[np.float64], np.dtype[np.float64]], +) -> Tuple[ + Tuple[str, str], + Tuple[ + np.ndarray[np.dtype[np.float64], np.dtype[np.float64]], + np.ndarray[np.dtype[np.float64], np.dtype[np.float64]], + ], +]: if grid.coordinates == "cartesian": - return ( + names = ( f"{grid.mapping_tex[f'x{grid.rdims_ind[0]+1}']}", f"{grid.mapping_tex[f'x{grid.rdims_ind[1]+1}']}", - ), (mesh1, mesh2) + ) + meshes = mesh1, mesh2 elif grid.coordinates == "spherical": if grid.rdims_ind == (0, 1): r = mesh1 z = r * np.cos(mesh2) - return ("r", "z"), (r, z) + names, meshes = ("r", "z"), (r, z) elif grid.rdims_ind == (0, 2): factor = mesh1 * np.sin(grid.x2[0]) x = factor * np.cos(mesh2) y = factor * np.sin(mesh2) - return ("x", "y"), (x, y) + names, meshes = ("x", "y"), (x, y) raise NotImplementedError("Projection in (theta, phi) not supported") elif grid.coordinates == "cylindrical": - return ("r", "z"), (mesh1, mesh2) + names, meshes = ("r", "z"), (mesh1, mesh2) elif grid.coordinates == "polar": if grid.rdims_ind == (0, 1): x = mesh1 * np.cos(mesh2) y = mesh1 * np.sin(mesh2) - return ("x", "y"), (x, y) + names, meshes = ("x", "y"), (x, y) elif grid.rdims_ind == (0, 2): - return ("r", "z"), (mesh1, mesh2) + names, meshes = ("r", "z"), (mesh1, mesh2) else: raise NotImplementedError("Projection in (phi, z) not supported") + return names, meshes diff --git a/plutoplot/grid.py b/plutoplot/grid.py index 533a937..21a770f 100644 --- a/plutoplot/grid.py +++ b/plutoplot/grid.py @@ -1,5 +1,5 @@ from pathlib import Path -from typing import Dict +from typing import Dict, Optional import numpy as np @@ -45,7 +45,9 @@ class Grid: * Generalize and document meshgrid functions """ - def __init__(self, gridfile: Path, coordinates: str = None, indexing="ijk"): + def __init__( + self, gridfile: Path, coordinates: Optional[str] = None, indexing: str = "ijk" + ): """Initialize Grid from gridfile Args: @@ -55,7 +57,7 @@ def __init__(self, gridfile: Path, coordinates: str = None, indexing="ijk"): indexing (:obj:`str`, optional): index order for arrays. 'ijk' or 'kji' """ self.gridfile_path: Path = Path(gridfile) - self.coordinates: str = None + self.coordinates: Optional[str] = None self.mapping_grid: Dict[str, str] = None self.mapping_vars: Dict[str, str] = None self.mapping_tex: Dict[str, str] = None @@ -90,7 +92,9 @@ def set_coordinate_system(self, coordinates: str) -> None: self.mapping_vars = mapping_vars(coordinates) self.mapping_tex = mapping_tex(coordinates) - def read_gridfile(self, gridfile_path: Path, coordinates: str = None) -> None: + def read_gridfile( + self, gridfile_path: Path, coordinates: Optional[str] = None + ) -> None: """Read and parse gridfile Args: From 47d43068921da74609b22013420ac817dee40b70 Mon Sep 17 00:00:00 2001 From: Simske Date: Fri, 1 Apr 2022 20:21:15 +0200 Subject: [PATCH 40/41] Use functools.cached_property for Python >=3.8 --- plutoplot/misc.py | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/plutoplot/misc.py b/plutoplot/misc.py index d3b697f..5f76d19 100644 --- a/plutoplot/misc.py +++ b/plutoplot/misc.py @@ -1,21 +1,26 @@ """Miscellaneous tools""" - -def cached_property(func): - """Cache class property decorator - - Caches attribute under `_attr_`. - """ - - def wrapper(self): - cached_name = "_" + func.__name__ - try: +# functools.cached_property exists for Python >=3.8 +# use own implementation for version before +try: + from functools import cached_property +except ImportError: + + def cached_property(func): + """Cache class property decorator + + Caches attribute under `_attr_`. + """ + + def wrapper(self): + cached_name = "_" + func.__name__ + try: + return getattr(self, cached_name) + except AttributeError: + setattr(self, cached_name, func(self)) return getattr(self, cached_name) - except AttributeError: - setattr(self, cached_name, func(self)) - return getattr(self, cached_name) - return property(wrapper) + return property(wrapper) class Slicer: From deb0ad8787c584c4994a1047744e9196878dd8f0 Mon Sep 17 00:00:00 2001 From: Simske Date: Fri, 1 Apr 2022 21:02:40 +0200 Subject: [PATCH 41/41] Some type annotations --- plutoplot/grid.py | 10 +++++----- plutoplot/misc.py | 10 ++++++---- plutoplot/scripts.py | 2 +- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/plutoplot/grid.py b/plutoplot/grid.py index 21a770f..7d4b87b 100644 --- a/plutoplot/grid.py +++ b/plutoplot/grid.py @@ -1,5 +1,5 @@ from pathlib import Path -from typing import Dict, Optional +from typing import Dict, Optional, List, Tuple import numpy as np @@ -58,9 +58,9 @@ def __init__( """ self.gridfile_path: Path = Path(gridfile) self.coordinates: Optional[str] = None - self.mapping_grid: Dict[str, str] = None - self.mapping_vars: Dict[str, str] = None - self.mapping_tex: Dict[str, str] = None + self.mapping_grid: Dict[str, str] = {} + self.mapping_vars: Dict[str, str] = {} + self.mapping_tex: Dict[str, str] = {} # helper function to transpose arrays if necessary if indexing == "ijk": @@ -114,7 +114,7 @@ def read_gridfile( """ # to be filled with left and right cell interfaces x = [] - dims = [] + dims: List[int] = [] with gridfile_path.open() as gf: # Gridfile header header = False # marker if gf pointer is in header diff --git a/plutoplot/misc.py b/plutoplot/misc.py index 5f76d19..7184077 100644 --- a/plutoplot/misc.py +++ b/plutoplot/misc.py @@ -1,18 +1,20 @@ """Miscellaneous tools""" +from typing import Dict, Any, Type, Callable, Tuple + # functools.cached_property exists for Python >=3.8 # use own implementation for version before try: from functools import cached_property except ImportError: - def cached_property(func): + def cached_property(func: Callable[[], Any]) -> property: """Cache class property decorator Caches attribute under `_attr_`. """ - def wrapper(self): + def wrapper(self) -> Any: cached_name = "_" + func.__name__ try: return getattr(self, cached_name) @@ -31,9 +33,9 @@ class Slicer: slice as additional kwarg (with name `slice_`) to the class. """ - def __init__(self, SliceClass, **kwargs): + def __init__(self, SliceClass: Type[Any], **kwargs: Any) -> None: self.SliceClass = SliceClass self.kwargs = kwargs - def __getitem__(self, slice_): + def __getitem__(self, slice_: Tuple): return self.SliceClass(slice_=slice_, **self.kwargs) diff --git a/plutoplot/scripts.py b/plutoplot/scripts.py index 61196b5..2619715 100644 --- a/plutoplot/scripts.py +++ b/plutoplot/scripts.py @@ -2,7 +2,7 @@ import argparse -def format_ini(): +def format_ini() -> None: """Entrypoint to format `pluto.ini` file""" from .metadata import Pluto_ini