From 93c601f013a4c6232b72300a49c7a20cd2939b73 Mon Sep 17 00:00:00 2001 From: anagorko <3418166+anagorko@users.noreply.github.com> Date: Fri, 3 May 2024 20:46:20 +0200 Subject: [PATCH 1/6] Fixes #3744 (#3745) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Andrzej Nagórko <> --- manim/mobject/text/text_mobject.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/mobject/text/text_mobject.py b/manim/mobject/text/text_mobject.py index d394bccd23..f70af7a61a 100644 --- a/manim/mobject/text/text_mobject.py +++ b/manim/mobject/text/text_mobject.py @@ -907,7 +907,7 @@ def construct(self): Here is a list of supported tags: - ``bold``, ``italic`` and ``bold+italic`` - - ```` and ``strike through`` + - ``underline`` and ``strike through`` - ``typewriter font`` - ``bigger font`` and ``smaller font`` - ``superscript`` and ``subscript`` From e4ee9a06a1b9a93c63d56a49378f4d5ac03ffb2e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 4 May 2024 15:08:19 -0400 Subject: [PATCH 2/6] Bump tqdm from 4.66.1 to 4.66.3 (#3746) Bumps [tqdm](https://github.com/tqdm/tqdm) from 4.66.1 to 4.66.3. - [Release notes](https://github.com/tqdm/tqdm/releases) - [Commits](https://github.com/tqdm/tqdm/compare/v4.66.1...v4.66.3) --- updated-dependencies: - dependency-name: tqdm dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 47c813f803..a179307f46 100644 --- a/poetry.lock +++ b/poetry.lock @@ -4177,13 +4177,13 @@ files = [ [[package]] name = "tqdm" -version = "4.66.1" +version = "4.66.3" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.66.1-py3-none-any.whl", hash = "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386"}, - {file = "tqdm-4.66.1.tar.gz", hash = "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7"}, + {file = "tqdm-4.66.3-py3-none-any.whl", hash = "sha256:4f41d54107ff9a223dca80b53efe4fb654c67efaba7f47bada3ee9d50e05bd53"}, + {file = "tqdm-4.66.3.tar.gz", hash = "sha256:23097a41eba115ba99ecae40d06444c15d1c0c698d527a01c6c8bd1c5d0647e5"}, ] [package.dependencies] From 94cd27c2347318331ece70edbce3077cf91ee408 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 19:41:58 -0400 Subject: [PATCH 3/6] Bump jinja2 from 3.1.3 to 3.1.4 (#3750) Bumps [jinja2](https://github.com/pallets/jinja) from 3.1.3 to 3.1.4. - [Release notes](https://github.com/pallets/jinja/releases) - [Changelog](https://github.com/pallets/jinja/blob/main/CHANGES.rst) - [Commits](https://github.com/pallets/jinja/compare/3.1.3...3.1.4) --- updated-dependencies: - dependency-name: jinja2 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index a179307f46..c4932c97e6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1530,13 +1530,13 @@ testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] name = "jinja2" -version = "3.1.3" +version = "3.1.4" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, - {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, + {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, + {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, ] [package.dependencies] From 4bd2f860b4225442b940e538fab5460bcff70af9 Mon Sep 17 00:00:00 2001 From: adeshpande <110117391+JasonGrace2282@users.noreply.github.com> Date: Sat, 11 May 2024 21:33:03 -0400 Subject: [PATCH 4/6] Add typehints to `manim.utils.iterables` (#3751) * typehint iterables * organize typing hints * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * remove any * Add overloads for tuplify * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Remove example * feedback * Make TypeVars accessible at runtime * Add hints for zip Co-authored-by: Victorien <65306057+Viicos@users.noreply.github.com> * typing -> collections.abc Co-authored-by: Victorien <65306057+Viicos@users.noreply.github.com> * try to make mypy happy * zip[tuple[T, ...]] instead of zip[T] --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Victorien <65306057+Viicos@users.noreply.github.com> --- manim/utils/iterables.py | 283 +++++++++++++++++++++++---------------- mypy.ini | 4 + 2 files changed, 168 insertions(+), 119 deletions(-) diff --git a/manim/utils/iterables.py b/manim/utils/iterables.py index 4b20cfe704..9a688561ac 100644 --- a/manim/utils/iterables.py +++ b/manim/utils/iterables.py @@ -19,12 +19,32 @@ ] import itertools as it -from typing import Any, Callable, Collection, Generator, Iterable, Reversible, Sequence +from typing import ( + TYPE_CHECKING, + Callable, + Collection, + Generator, + Hashable, + Iterable, + Reversible, + Sequence, + TypeVar, + overload, +) import numpy as np +T = TypeVar("T") +U = TypeVar("U") +F = TypeVar("F", np.float_, np.int_) +H = TypeVar("H", bound=Hashable) -def adjacent_n_tuples(objects: Sequence, n: int) -> zip: + +if TYPE_CHECKING: + import numpy.typing as npt + + +def adjacent_n_tuples(objects: Sequence[T], n: int) -> zip[tuple[T, ...]]: """Returns the Sequence objects cyclically split into n length tuples. See Also @@ -33,18 +53,17 @@ def adjacent_n_tuples(objects: Sequence, n: int) -> zip: Examples -------- - Normal usage:: + .. code-block:: pycon - list(adjacent_n_tuples([1, 2, 3, 4], 2)) - # returns [(1, 2), (2, 3), (3, 4), (4, 1)] - - list(adjacent_n_tuples([1, 2, 3, 4], 3)) - # returns [(1, 2, 3), (2, 3, 4), (3, 4, 1), (4, 1, 2)] + >>> list(adjacent_n_tuples([1, 2, 3, 4], 2)) + [(1, 2), (2, 3), (3, 4), (4, 1)] + >>> list(adjacent_n_tuples([1, 2, 3, 4], 3)) + [(1, 2, 3), (2, 3, 4), (3, 4, 1), (4, 1, 2)] """ return zip(*([*objects[k:], *objects[:k]] for k in range(n))) -def adjacent_pairs(objects: Sequence) -> zip: +def adjacent_pairs(objects: Sequence[T]) -> zip[tuple[T, ...]]: """Alias for ``adjacent_n_tuples(objects, 2)``. See Also @@ -53,15 +72,15 @@ def adjacent_pairs(objects: Sequence) -> zip: Examples -------- - Normal usage:: + .. code-block:: pycon - list(adjacent_pairs([1, 2, 3, 4])) - # returns [(1, 2), (2, 3), (3, 4), (4, 1)] + >>> list(adjacent_pairs([1, 2, 3, 4])) + [(1, 2), (2, 3), (3, 4), (4, 1)] """ return adjacent_n_tuples(objects, 2) -def all_elements_are_instances(iterable: Iterable, Class) -> bool: +def all_elements_are_instances(iterable: Iterable[object], Class: type[object]) -> bool: """Returns ``True`` if all elements of iterable are instances of Class. False otherwise. """ @@ -69,8 +88,8 @@ def all_elements_are_instances(iterable: Iterable, Class) -> bool: def batch_by_property( - items: Sequence, property_func: Callable -) -> list[tuple[list, Any]]: + items: Iterable[T], property_func: Callable[[T], U] +) -> list[tuple[list[T], U | None]]: """Takes in a Sequence, and returns a list of tuples, (batch, prop) such that all items in a batch have the same output when put into the Callable property_func, and such that chaining all these @@ -79,13 +98,13 @@ def batch_by_property( Examples -------- - Normal usage:: + .. code-block:: pycon - batch_by_property([(1, 2), (3, 4), (5, 6, 7), (8, 9)], len) - # returns [([(1, 2), (3, 4)], 2), ([(5, 6, 7)], 3), ([(8, 9)], 2)] + >>> batch_by_property([(1, 2), (3, 4), (5, 6, 7), (8, 9)], len) + [([(1, 2), (3, 4)], 2), ([(5, 6, 7)], 3), ([(8, 9)], 2)] """ - batch_prop_pairs = [] - curr_batch = [] + batch_prop_pairs: list[tuple[list[T], U | None]] = [] + curr_batch: list[T] = [] curr_prop = None for item in items: prop = property_func(item) @@ -103,67 +122,84 @@ def batch_by_property( return batch_prop_pairs -def concatenate_lists(*list_of_lists: Iterable) -> list: +def concatenate_lists(*list_of_lists: Iterable[T]) -> list[T]: """Combines the Iterables provided as arguments into one list. Examples -------- - Normal usage:: + .. code-block:: pycon - concatenate_lists([1, 2], [3, 4], [5]) - # returns [1, 2, 3, 4, 5] + >>> concatenate_lists([1, 2], [3, 4], [5]) + [1, 2, 3, 4, 5] """ return [item for lst in list_of_lists for item in lst] -def list_difference_update(l1: Iterable, l2: Iterable) -> list: +def list_difference_update(l1: Iterable[T], l2: Iterable[T]) -> list[T]: """Returns a list containing all the elements of l1 not in l2. Examples -------- - Normal usage:: + .. code-block:: pycon - list_difference_update([1, 2, 3, 4], [2, 4]) - # returns [1, 3] + >>> list_difference_update([1, 2, 3, 4], [2, 4]) + [1, 3] """ return [e for e in l1 if e not in l2] -def list_update(l1: Iterable, l2: Iterable) -> list: +def list_update(l1: Iterable[T], l2: Iterable[T]) -> list[T]: """Used instead of ``set.update()`` to maintain order, making sure duplicates are removed from l1, not l2. Removes overlap of l1 and l2 and then concatenates l2 unchanged. Examples -------- - Normal usage:: + .. code-block:: pycon - list_update([1, 2, 3], [2, 4, 4]) - # returns [1, 3, 2, 4, 4] + >>> list_update([1, 2, 3], [2, 4, 4]) + [1, 3, 2, 4, 4] """ return [e for e in l1 if e not in l2] + list(l2) -def listify(obj) -> list: +@overload +def listify(obj: str) -> list[str]: ... + + +@overload +def listify(obj: Iterable[T]) -> list[T]: ... + + +@overload +def listify(obj: T) -> list[T]: ... + + +def listify(obj: str | Iterable[T] | T) -> list[str] | list[T]: """Converts obj to a list intelligently. Examples -------- - Normal usage:: - - listify('str') # ['str'] - listify((1, 2)) # [1, 2] - listify(len) # [] + .. code-block:: pycon + + >>> listify("str") + ['str'] + >>> listify((1, 2)) + [1, 2] + >>> listify(len) + [] """ if isinstance(obj, str): return [obj] - try: + if isinstance(obj, Iterable): return list(obj) - except TypeError: + else: return [obj] -def make_even(iterable_1: Iterable, iterable_2: Iterable) -> tuple[list, list]: +def make_even( + iterable_1: Iterable[T], iterable_2: Iterable[U] +) -> tuple[list[T], list[U]]: """Extends the shorter of the two iterables with duplicate values until its length is equal to the longer iterable (favours earlier elements). @@ -173,13 +209,13 @@ def make_even(iterable_1: Iterable, iterable_2: Iterable) -> tuple[list, list]: Examples -------- - Normal usage:: + .. code-block:: pycon - make_even([1, 2], [3, 4, 5, 6]) + >>> make_even([1, 2], [3, 4, 5, 6]) ([1, 1, 2, 2], [3, 4, 5, 6]) - make_even([1, 2], [3, 4, 5, 6, 7]) - # ([1, 1, 1, 2, 2], [3, 4, 5, 6, 7]) + >>> make_even([1, 2], [3, 4, 5, 6, 7]) + ([1, 1, 1, 2, 2], [3, 4, 5, 6, 7]) """ list_1, list_2 = list(iterable_1), list(iterable_2) len_list_1 = len(list_1) @@ -192,8 +228,8 @@ def make_even(iterable_1: Iterable, iterable_2: Iterable) -> tuple[list, list]: def make_even_by_cycling( - iterable_1: Collection, iterable_2: Collection -) -> tuple[list, list]: + iterable_1: Collection[T], iterable_2: Collection[U] +) -> tuple[list[T], list[U]]: """Extends the shorter of the two iterables with duplicate values until its length is equal to the longer iterable (cycles over shorter iterable). @@ -203,13 +239,13 @@ def make_even_by_cycling( Examples -------- - Normal usage:: + .. code-block:: pycon - make_even_by_cycling([1, 2], [3, 4, 5, 6]) + >>> make_even_by_cycling([1, 2], [3, 4, 5, 6]) ([1, 2, 1, 2], [3, 4, 5, 6]) - make_even_by_cycling([1, 2], [3, 4, 5, 6, 7]) - # ([1, 2, 1, 2, 1], [3, 4, 5, 6, 7]) + >>> make_even_by_cycling([1, 2], [3, 4, 5, 6, 7]) + ([1, 2, 1, 2, 1], [3, 4, 5, 6, 7]) """ length = max(len(iterable_1), len(iterable_2)) cycle1 = it.cycle(iterable_1) @@ -220,7 +256,7 @@ def make_even_by_cycling( ) -def remove_list_redundancies(lst: Reversible) -> list: +def remove_list_redundancies(lst: Reversible[H]) -> list[H]: """Used instead of ``list(set(l))`` to maintain order. Keeps the last occurrence of each element. """ @@ -234,21 +270,21 @@ def remove_list_redundancies(lst: Reversible) -> list: return reversed_result -def remove_nones(sequence: Iterable) -> list: +def remove_nones(sequence: Iterable[T | None]) -> list[T]: """Removes elements where bool(x) evaluates to False. Examples -------- - Normal usage:: + .. code-block:: pycon - remove_nones(['m', '', 'l', 0, 42, False, True]) - # ['m', 'l', 42, True] + >>> remove_nones(["m", "", "l", 0, 42, False, True]) + ['m', 'l', 42, True] """ # Note this is redundant with it.chain return [x for x in sequence if x] -def resize_array(nparray: np.ndarray, length: int) -> np.ndarray: +def resize_array(nparray: npt.NDArray[F], length: int) -> npt.NDArray[F]: """Extends/truncates nparray so that ``len(result) == length``. The elements of nparray are cycled to achieve the desired length. @@ -259,7 +295,7 @@ def resize_array(nparray: np.ndarray, length: int) -> np.ndarray: Examples -------- - Normal usage:: + .. code-block:: pycon >>> points = np.array([[1, 2], [3, 4]]) >>> resize_array(points, 1) @@ -277,7 +313,9 @@ def resize_array(nparray: np.ndarray, length: int) -> np.ndarray: return np.resize(nparray, (length, *nparray.shape[1:])) -def resize_preserving_order(nparray: np.ndarray, length: int) -> np.ndarray: +def resize_preserving_order( + nparray: npt.NDArray[np.float_], length: int +) -> npt.NDArray[np.float_]: """Extends/truncates nparray so that ``len(result) == length``. The elements of nparray are duplicated to achieve the desired length (favours earlier elements). @@ -291,21 +329,19 @@ def resize_preserving_order(nparray: np.ndarray, length: int) -> np.ndarray: Examples -------- - Normal usage:: - - resize_preserving_order(np.array([]), 5) - # np.array([0., 0., 0., 0., 0.]) + .. code-block:: pycon - nparray = np.array([[1, 2], - [3, 4]]) + >>> resize_preserving_order(np.array([]), 5) + array([0., 0., 0., 0., 0.]) - resize_preserving_order(nparray, 1) - # np.array([[1, 2]]) + >>> nparray = np.array([[1, 2], [3, 4]]) + >>> resize_preserving_order(nparray, 1) + array([[1, 2]]) - resize_preserving_order(nparray, 3) - # np.array([[1, 2], - # [1, 2], - # [3, 4]]) + >>> resize_preserving_order(nparray, 3) + array([[1, 2], + [1, 2], + [3, 4]]) """ if len(nparray) == 0: return np.zeros((length, *nparray.shape[1:])) @@ -315,7 +351,7 @@ def resize_preserving_order(nparray: np.ndarray, length: int) -> np.ndarray: return nparray[indices] -def resize_with_interpolation(nparray: np.ndarray, length: int) -> np.ndarray: +def resize_with_interpolation(nparray: npt.NDArray[F], length: int) -> npt.NDArray[F]: """Extends/truncates nparray so that ``len(result) == length``. New elements are interpolated to achieve the desired length. @@ -329,39 +365,29 @@ def resize_with_interpolation(nparray: np.ndarray, length: int) -> np.ndarray: Examples -------- - Normal usage:: - - nparray = np.array([[1, 2], - [3, 4]]) - - resize_with_interpolation(nparray, 1) - # np.array([[1., 2.]]) - - resize_with_interpolation(nparray, 4) - # np.array([[1. , 2. ], - # [1.66666667, 2.66666667], - # [2.33333333, 3.33333333], - # [3. , 4. ]]) - - nparray = np.array([[[1, 2],[3, 4]]]) - resize_with_interpolation(nparray, 3) - # np.array([[[1., 2.], [3., 4.]], - # [[1., 2.], [3., 4.]], - # [[1., 2.], [3., 4.]]]) - - nparray = np.array([[1, 2], [3, 4], [5, 6]]) - resize_with_interpolation(nparray, 4) - # np.array([[1. , 2. ], - # [2.33333333, 3.33333333], - # [3.66666667, 4.66666667], - # [5. , 6. ]]) - - nparray = np.array([[1, 2], [3, 4], [1, 2]]) - resize_with_interpolation(nparray, 4) - # np.array([[1. , 2. ], - # [2.33333333, 3.33333333], - # [2.33333333, 3.33333333], - # [1. , 2. ]]) + .. code-block:: pycon + + >>> nparray = np.array([[1, 2], [3, 4]]) + >>> resize_with_interpolation(nparray, 1) + array([[1., 2.]]) + >>> resize_with_interpolation(nparray, 4) + array([[1. , 2. ], + [1.66666667, 2.66666667], + [2.33333333, 3.33333333], + [3. , 4. ]]) + >>> nparray = np.array([[[1, 2], [3, 4]]]) + >>> nparray = np.array([[1, 2], [3, 4], [5, 6]]) + >>> resize_with_interpolation(nparray, 4) + array([[1. , 2. ], + [2.33333333, 3.33333333], + [3.66666667, 4.66666667], + [5. , 6. ]]) + >>> nparray = np.array([[1, 2], [3, 4], [1, 2]]) + >>> resize_with_interpolation(nparray, 4) + array([[1. , 2. ], + [2.33333333, 3.33333333], + [2.33333333, 3.33333333], + [1. , 2. ]]) """ if len(nparray) == length: return nparray @@ -375,7 +401,7 @@ def resize_with_interpolation(nparray: np.ndarray, length: int) -> np.ndarray: ) -def stretch_array_to_length(nparray: np.ndarray, length: int) -> np.ndarray: +def stretch_array_to_length(nparray: npt.NDArray[F], length: int) -> npt.NDArray[F]: # todo: is this the same as resize_preserving_order()? curr_len = len(nparray) if curr_len > length: @@ -385,35 +411,54 @@ def stretch_array_to_length(nparray: np.ndarray, length: int) -> np.ndarray: return nparray[indices.astype(int)] -def tuplify(obj) -> tuple: +@overload +def tuplify(obj: str) -> tuple[str]: ... + + +@overload +def tuplify(obj: Iterable[T]) -> tuple[T]: ... + + +@overload +def tuplify(obj: T) -> tuple[T]: ... + + +def tuplify(obj: str | Iterable[T] | T) -> tuple[str] | tuple[T]: """Converts obj to a tuple intelligently. Examples -------- - Normal usage:: - - tuplify('str') # ('str',) - tuplify([1, 2]) # (1, 2) - tuplify(len) # (,) + .. code-block:: pycon + + >>> tuplify("str") + ('str',) + >>> tuplify([1, 2]) + (1, 2) + >>> tuplify(len) + (,) """ if isinstance(obj, str): return (obj,) - try: + if isinstance(obj, Iterable): return tuple(obj) - except TypeError: + else: return (obj,) -def uniq_chain(*args: Iterable) -> Generator: +def uniq_chain(*args: Iterable[T]) -> Generator[T, None, None]: """Returns a generator that yields all unique elements of the Iterables provided via args in the order provided. Examples -------- - Normal usage:: - - uniq_chain([1, 2], [2, 3], [1, 4, 4]) - # yields 1, 2, 3, 4 + .. code-block:: pycon + + >>> gen = uniq_chain([1, 2], [2, 3], [1, 4, 4]) + >>> from collections.abc import Generator + >>> isinstance(gen, Generator) + True + >>> tuple(gen) + (1, 2, 3, 4) """ unique_items = set() for x in it.chain(*args): diff --git a/mypy.ini b/mypy.ini index 2bf9c170b9..956b44ae21 100644 --- a/mypy.ini +++ b/mypy.ini @@ -82,6 +82,10 @@ ignore_errors = True [mypy-manim.utils.*] ignore_errors = True +[mypy-manim.utils.iterables] +ignore_errors = False +warn_return_any = False + [mypy-manim.__main__] ignore_errors = True From 1f249e45b94d20484e472d79b170d82d0de60d96 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Wed, 15 May 2024 15:23:09 +0200 Subject: [PATCH 5/6] Let `SceneFileWriter` access `ffmpeg` via `av` instead of via external process (#3501) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * added av as a dependency * make partial movie files use av instead of piping to external ffmpeg * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * opengl rendering: use av for movie files * no need to check for ffmpeg executable * refactor: *_movie_pipe -> *_partial_movie_stream * improve (oneline) documentation * pass more options to partial movie file rendering * move ffmpeg verbosity settings to config; renamed option dict * replaced call to ffmpeg in combine_files by using av Co-authored-by: Jérome Eertmans * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * there was one examples saved as a gif? * chore(deps): re-order av * chore(lib): simplify `write_frame` method Reduces the overall code complexity * chore(lib): add audio * fix(lib): same issue for conversion * fix(lib): webm export * fix(lib): transparent export Though the output video is weird * try(lib): fix gif + TODOs * chore(deps): lower dep crit * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * feat(lib): add support for GIF * fix(ci): rewrite tests * fix * chore(ci): prevent calling concat on empty list * add missing dot * fix(ci): update frame comparison ? * fix(log): add handler to libav logger * chore: add TODO * fix(lib): concat issue * Revert "fix(ci): update frame comparison ?" This reverts commit 904cfb46ae8db7dfac01036671991cf81a7823de. * fix(ci): make it pass tests * chore(lib/docs/ci): remove FFMPEG entirely This removes any reference to FFMPEG, except in translation files * added av as a dependency * make partial movie files use av instead of piping to external ffmpeg * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * opengl rendering: use av for movie files * no need to check for ffmpeg executable * refactor: *_movie_pipe -> *_partial_movie_stream * improve (oneline) documentation * pass more options to partial movie file rendering * move ffmpeg verbosity settings to config; renamed option dict * replaced call to ffmpeg in combine_files by using av Co-authored-by: Jérome Eertmans * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * there was one examples saved as a gif? * chore(deps): re-order av * chore(lib): simplify `write_frame` method Reduces the overall code complexity * chore(lib): add audio * fix(lib): same issue for conversion * fix(lib): webm export * fix(lib): transparent export Though the output video is weird * try(lib): fix gif + TODOs * chore(deps): lower dep crit * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * feat(lib): add support for GIF * fix(ci): rewrite tests * fix * chore(ci): prevent calling concat on empty list * add missing dot * fix(ci): update frame comparison ? * fix(log): add handler to libav logger * chore: add TODO * fix(lib): concat issue * Revert "fix(ci): update frame comparison ?" This reverts commit 904cfb46ae8db7dfac01036671991cf81a7823de. * fix(ci): make it pass tests * chore(lib/docs/ci): remove FFMPEG entirely This removes any reference to FFMPEG, except in translation files * chore(deps): update lockfile * chore(lib): rewrite ffprobe * fix typo * slightly more aggressive removal of ffmpeg in docs; minor language changes * fix gif output stream dimensions * minor style change * fix encoding of (transparent) mov files * fixed metadata / comment * set frame rate for --format=gif in output_stream * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * more video tests for different render settings, also test pix_fmt * improve default bitrate setting via crf * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * parametrized format/transparency rendering test * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * context managers for (some) av.open * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update manim/utils/commands.py Co-authored-by: Jérome Eertmans * fixed segfault * update test data involving implicit functions (output improved!) * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * explicity set pix_fmt for transparent webms * special-special case extracting frame from vp9-encoded file with transparency * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix transparent gifs, more special casing in parametrized video format test * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * run tests on macos-latest again * removed old control data * Revert "run tests on macos-latest again" This reverts commit f50efa4b887f4596f8193dcaa4f0796b479a8113. * added sound to codec test; fixed issue with sound track in gif (disabled) and webm (now via opus) * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * manual wav -> ogg transcoding * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fixed f-string * refactored codec test, split out gif * check for non-zero audio samples * more cleanup * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * remove ffmpeg from readthedocs apt_packages * round up run_time if positive and shorter than current frame rate * added more run_time tests * black * improve implementation of test * removed some unused imports * improve wording of logged warning Co-authored-by: Jérome Eertmans * move run_time checks from Animation.begin to Scene.get_run_time * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * remove unused import * flake: PT012 --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Jérome Eertmans --- .github/ISSUE_TEMPLATE/bug_report.md | 9 - .github/ISSUE_TEMPLATE/installation_issue.md | 9 - .github/workflows/ci.yml | 6 - .../release-publish-documentation.yml | 2 +- .readthedocs.yml | 1 - docker/Dockerfile | 1 - docs/source/contributing/development.rst | 4 +- docs/source/guides/deep_dive.rst | 18 +- docs/source/installation.rst | 5 +- docs/source/installation/jupyter.rst | 2 +- docs/source/installation/linux.rst | 19 +- docs/source/installation/macos.rst | 4 +- docs/source/installation/windows.rst | 86 +- manim/_config/default.cfg | 2 - manim/_config/logger_utils.py | 4 + manim/_config/utils.py | 15 +- manim/animation/animation.py | 5 - manim/animation/composition.py | 18 +- manim/cli/checkhealth/checks.py | 39 - manim/mobject/geometry/polygram.py | 1 - manim/renderer/cairo_renderer.py | 3 +- manim/renderer/opengl_renderer.py | 5 +- manim/scene/scene.py | 28 +- manim/scene/scene_file_writer.py | 359 ++- manim/utils/commands.py | 38 +- manim/utils/file_ops.py | 5 +- manim/utils/testing/_test_class_makers.py | 6 +- poetry.lock | 2314 ++++++++++------- pyproject.toml | 1 + .../videos_data/InputFileViaCfg.json | 3 +- .../SceneWithDisabledSections.json | 3 +- .../videos_data/SceneWithEnabledSections.json | 6 +- .../SceneWithMultipleCallsWithNFlag.json | 3 +- .../SceneWithMultiplePlayCallsWithNFlag.json | 3 +- .../SceneWithMultipleWaitCallsWithNFlag.json | 3 +- .../videos_data/SceneWithSections.json | 18 +- .../videos_data/SceneWithSkipAnimations.json | 12 +- .../SquareToCircleWithDefaultValues.json | 3 +- .../videos_data/SquareToCircleWithlFlag.json | 3 +- tests/interface/test_commands.py | 16 +- tests/module/animation/test_animation.py | 34 + tests/module/animation/test_composition.py | 8 +- .../coordinate_system/implicit_graph.npz | Bin 9753 -> 9602 bytes .../creation/bring_to_back_introducer.npz | Bin 9305 -> 5857 bytes .../creation/z_index_introducer.npz | Bin 32041 -> 18959 bytes .../functions/ImplicitFunction.npz | Bin 13709 -> 13525 bytes .../control_data/img_and_svg/Arcs02.npz | Bin 26856 -> 7905 bytes .../control_data/img_and_svg/WeightSVG.npz | Bin 8035 -> 2526 bytes .../control_data/indication/Circumscribe.npz | Bin 10033 -> 6341 bytes .../transform/ReplacementTransform.npz | Bin 24023 -> 14749 bytes .../TransformMatchingDisplaysCorrect.npz | Bin 32842 -> 28723 bytes .../updaters/LastFrameWhenCleared.npz | Bin 10533 -> 6582 bytes .../vector_scene/vector_to_coords.npz | Bin 235273 -> 151213 bytes .../test_scene_rendering/test_file_writer.py | 142 +- 54 files changed, 1868 insertions(+), 1398 deletions(-) create mode 100644 tests/module/animation/test_animation.py diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index a3fb7d05ed..f575567e6f 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -70,14 +70,5 @@ PASTE HERE -
FFMPEG - -Output of `ffmpeg -version`: - -``` -PASTE HERE -``` -
- ## Additional comments diff --git a/.github/ISSUE_TEMPLATE/installation_issue.md b/.github/ISSUE_TEMPLATE/installation_issue.md index 02d16b78ea..6a720f0f49 100644 --- a/.github/ISSUE_TEMPLATE/installation_issue.md +++ b/.github/ISSUE_TEMPLATE/installation_issue.md @@ -53,14 +53,5 @@ PASTE HERE -
FFMPEG - -Output of `ffmpeg -version`: - -``` -PASTE HERE -``` -
- ## Additional comments diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 76d08ece04..ba58ac5ca2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -51,12 +51,6 @@ jobs: run: | echo "date=$(/bin/date -u "+%m%w%Y")" >> $GITHUB_OUTPUT - - name: Install and cache ffmpeg (all OS) - uses: FedericoCarboni/setup-ffmpeg@v3 - with: - token: ${{ secrets.GITHUB_TOKEN }} - id: setup-ffmpeg - - name: Install system dependencies (Linux) if: runner.os == 'Linux' uses: awalsh128/cache-apt-pkgs-action@latest diff --git a/.github/workflows/release-publish-documentation.yml b/.github/workflows/release-publish-documentation.yml index 6efe97f788..24fb60d7de 100644 --- a/.github/workflows/release-publish-documentation.yml +++ b/.github/workflows/release-publish-documentation.yml @@ -19,7 +19,7 @@ jobs: - name: Install system dependencies run: | sudo apt update && sudo apt install -y \ - pkg-config libcairo-dev libpango1.0-dev ffmpeg wget fonts-roboto + pkg-config libcairo-dev libpango1.0-dev wget fonts-roboto wget -qO- "https://yihui.org/tinytex/install-bin-unix.sh" | sh echo ${HOME}/.TinyTeX/bin/x86_64-linux >> $GITHUB_PATH diff --git a/.readthedocs.yml b/.readthedocs.yml index 44b7408cbf..c102102858 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -7,7 +7,6 @@ build: apt_packages: - libpango1.0-dev - - ffmpeg - graphviz python: diff --git a/docker/Dockerfile b/docker/Dockerfile index 55596bb1c3..b41647e4e8 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -2,7 +2,6 @@ FROM python:3.11-slim RUN apt-get update -qq \ && apt-get install --no-install-recommends -y \ - ffmpeg \ build-essential \ gcc \ cmake \ diff --git a/docs/source/contributing/development.rst b/docs/source/contributing/development.rst index d3ef8fadf5..6d066eaff6 100644 --- a/docs/source/contributing/development.rst +++ b/docs/source/contributing/development.rst @@ -51,8 +51,8 @@ For first-time contributors #. Install Manim: - Follow the steps in our :doc:`installation instructions - <../installation>` to install **Manim's dependencies**, - primarily ``ffmpeg`` and ``LaTeX``. + <../installation>` to install **Manim's system dependencies**. + We also recommend installing a LaTeX distribution. - We recommend using `Poetry `__ to manage your developer installation of Manim. Poetry is a tool for dependency diff --git a/docs/source/guides/deep_dive.rst b/docs/source/guides/deep_dive.rst index 3ff34f6720..3ea950230f 100644 --- a/docs/source/guides/deep_dive.rst +++ b/docs/source/guides/deep_dive.rst @@ -266,7 +266,7 @@ The scene then asks its renderer to initialize the scene by calling Inspecting both the default Cairo renderer and the OpenGL renderer shows that the ``init_scene`` method effectively makes the renderer instantiate a :class:`.SceneFileWriter` object, which -basically is Manim's interface to ``ffmpeg`` and actually writes the movie file. The Cairo +basically is Manim's interface to ``libav`` (FFMPEG) and actually writes the movie file. The Cairo renderer (see the implementation `here `__) does not require any further initialization. The OpenGL renderer does some additional setup to enable the realtime rendering preview window, which we do not go into detail further here. @@ -310,8 +310,8 @@ the order they are called, these customizable methods are: After these three methods are run, the animations have been fully rendered, and Manim calls :meth:`.CairoRenderer.scene_finished` to gracefully complete the rendering process. This checks whether any animations have been -played -- and if so, it tells the :class:`.SceneFileWriter` to close the pipe -to ``ffmpeg``. If not, Manim assumes that a static image should be output +played -- and if so, it tells the :class:`.SceneFileWriter` to close the output +file. If not, Manim assumes that a static image should be output which it then renders using the same strategy by calling the render loop (see below) once. @@ -762,10 +762,10 @@ to learn more, the :func:`.get_hash_from_play_call` function in the mechanism. In the event that the animation has to be rendered, the renderer asks -its :class:`.SceneFileWriter` to start a writing process. The process -is started by a call to ``ffmpeg`` and opens a pipe to which rendered -raw frames can be written. As long as the pipe is open, the process -can be accessed via the ``writing_process`` attribute of the file writer. +its :class:`.SceneFileWriter` to open an output container. The process +is started by a call to ``libav`` and opens a container to which rendered +raw frames can be written. As long as the output is open, the container +can be accessed via the ``output_container`` attribute of the file writer. With the writing process in place, the renderer then asks the scene to "begin" the animations. @@ -815,7 +815,7 @@ time is extracted (3 seconds long) and stored in skip (it should not), then whether the animation is already cached (it is not). The corresponding animation hash value is determined and passed to the file writer, which then also calls -``ffmpeg`` to start the writing process which waits for rendered +``libav`` to start the writing process which waits for rendered frames from the library. The scene then ``begin``\ s the animation: for the @@ -1001,7 +1001,7 @@ and :meth:`.Animation.clean_up_from_scene` methods are called. In the end, the time progression is closed (which completes the displayed progress bar) in the terminal. With the closing of the time progression, the :meth:`.Scene.play_internal` call is completed, and we return to the renderer, -which now orders the :class:`.SceneFileWriter` to close the movie pipe that has +which now orders the :class:`.SceneFileWriter` to close the output container that has been opened for this animation: a partial movie file is written. This pretty much concludes the walkthrough of a :class:`.Scene.play` call, diff --git a/docs/source/installation.rst b/docs/source/installation.rst index 9822e3e17a..fbc65a7cc6 100644 --- a/docs/source/installation.rst +++ b/docs/source/installation.rst @@ -34,8 +34,7 @@ Installing Manim via Conda and related environment managers Conda is a package manager for Python that allows creating environments where all your dependencies are stored. Like this, you don't clutter up your PC with unwanted libraries and you can just delete the environment when you don't need it anymore. -It is a good way to install manim since all dependencies like -``ffmpeg``, ``pycairo``, etc. come with it. +It is a good way to install manim since all dependencies like ``pycairo``, etc. come with it. Also, the installation steps are the same, no matter if you are on Windows, Linux, Intel Macs or on Apple Silicon. @@ -69,7 +68,7 @@ in order for Manim to work properly, some additional system dependencies need to be installed first. The following pages have operating system specific instructions for you to follow. -Manim requires Python version ``3.8`` or above to run. +Manim requires Python version ``3.9`` or above to run. .. hint:: diff --git a/docs/source/installation/jupyter.rst b/docs/source/installation/jupyter.rst index 7542e59be7..94a2fcf2c3 100644 --- a/docs/source/installation/jupyter.rst +++ b/docs/source/installation/jupyter.rst @@ -66,7 +66,7 @@ then execute it. .. code-block:: !sudo apt update - !sudo apt install libcairo2-dev ffmpeg \ + !sudo apt install libcairo2-dev \ texlive texlive-latex-extra texlive-fonts-extra \ texlive-latex-recommended texlive-science \ tipa libpango1.0-dev diff --git a/docs/source/installation/linux.rst b/docs/source/installation/linux.rst index 4b565e8fee..6c154d8eed 100644 --- a/docs/source/installation/linux.rst +++ b/docs/source/installation/linux.rst @@ -5,10 +5,9 @@ The installation instructions depend on your particular operating system and package manager. If you happen to know exactly what you are doing, you can also simply ensure that your system has: -- a reasonably recent version of Python 3 (3.8 or above), +- a reasonably recent version of Python 3 (3.9 or above), - with working Cairo bindings in the form of `pycairo `__, -- FFmpeg accessible from the command line as ``ffmpeg``, - and `Pango `__ headers. Then, installing Manim is just a matter of running: @@ -33,13 +32,13 @@ Required Dependencies apt – Ubuntu / Mint / Debian **************************** -To first update your sources, and then install Cairo, Pango, and FFmpeg +To first update your sources, and then install Cairo and Pango simply run: .. code-block:: bash sudo apt update - sudo apt install build-essential python3-dev libcairo2-dev libpango1.0-dev ffmpeg + sudo apt install build-essential python3-dev libcairo2-dev libpango1.0-dev If you don't have python3-pip installed, install it via: @@ -72,14 +71,6 @@ need the Python development headers: sudo dnf install python3-devel -FFmpeg is only available via the RPMfusion repository which you have to -configure first – please consult https://rpmfusion.org/Configuration/ for -instructions. Then, install FFmpeg: - -.. code-block:: bash - - sudo dnf install ffmpeg - At this point you have all required dependencies and can install Manim by running: @@ -100,12 +91,12 @@ pacman – Arch / Manjaro If you don't want to use the packaged version from AUR, here is what you need to do manually: Update your package sources, then install -Cairo, Pango, and FFmpeg: +Cairo and Pango: .. code-block:: bash sudo pacman -Syu - sudo pacman -S cairo pango ffmpeg + sudo pacman -S cairo pango If you don't have ``python-pip`` installed, get it by running: diff --git a/docs/source/installation/macos.rst b/docs/source/installation/macos.rst index 13141beaea..8a0d2b817a 100644 --- a/docs/source/installation/macos.rst +++ b/docs/source/installation/macos.rst @@ -20,12 +20,12 @@ follow `Homebrew's installation instructions Required Dependencies --------------------- -To install all required dependencies for installing Manim (namely: ffmpeg, Python, +To install all required dependencies for installing Manim (namely: Python, and some required Python packages), run: .. code-block:: bash - brew install py3cairo ffmpeg + brew install py3cairo On *Apple Silicon* based machines (i.e., devices with the M1 chip or similar; if you are unsure which processor you have check by opening the Apple menu, select diff --git a/docs/source/installation/windows.rst b/docs/source/installation/windows.rst index fdb7e5814b..04fe2b735a 100644 --- a/docs/source/installation/windows.rst +++ b/docs/source/installation/windows.rst @@ -3,11 +3,8 @@ Windows The easiest way of installing Manim and its dependencies is by using a package manager like `Chocolatey `__ -or `Scoop `__. If you are not afraid of editing -your System's ``PATH``, a manual installation is also possible. -In fact, if you already have an existing Python -installation (3.8 or above), it might be the easiest way to get -everything up and running. +or `Scoop `__, especially if you need optional dependencies +like LaTeX support. If you choose to use one of the package managers, please follow their installation instructions @@ -19,7 +16,7 @@ to make one of them available on your system. Required Dependencies --------------------- -Manim requires a recent version of Python (3.8 or above) and ``ffmpeg`` +Manim requires a recent version of Python (3.9 or above) in order to work. Chocolatey @@ -34,53 +31,11 @@ Manim can be installed via Chocolatey simply by running: That's it, no further steps required. You can continue with installing the :ref:`optional dependencies ` below. -Scoop -***** - -While there is no recipe for installing Manim with Scoop directly, -you can install all requirements by running: - -.. code-block:: powershell - - scoop install python ffmpeg - -and then Manim can be installed by running: - -.. code-block:: powershell - - python -m pip install manim - -Manim should now be installed on your system. Continue reading -the :ref:`optional dependencies ` section -below. - -Winget -****** - -While there is no recipe for installing Manim with Winget directly, -you can install all requirements by running: - -.. code-block:: powershell - - winget install python - winget install ffmpeg - -and then Manim can be installed by running: - -.. code-block:: powershell - - python -m pip install manim - -Manim should now be installed on your system. Continue reading -the :ref:`optional dependencies ` section -below. - - -Manual Installation -******************* +Pip +*** As mentioned above, Manim needs a reasonably recent version of -Python 3 (3.8 or above) and FFmpeg. +Python 3 (3.9 or above). **Python:** Head over to https://www.python.org, download an installer for a recent version of Python, and follow its instructions to get Python @@ -94,35 +49,16 @@ installed on your system. install Python directly from the `official website `__. -**FFmpeg:** In order to install FFmpeg, you can get a -pre-compiled and ready-to-use version from one of the resources -linked at https://ffmpeg.org/download.html#build-windows, such as -`the version available here -`__ -(recommended), or if you know exactly what you are doing -you can alternatively get the source code -from https://ffmpeg.org/download.html and compile it yourself. - - -After downloading the pre-compiled archive, -`unzip it `__ and, if you like, move the -extracted directory to some more permanent place (e.g., -``C:\Program Files\``). Next, edit the ``PATH`` environment variable: -first, visit ``Control Panel`` > ``System`` > ``System settings`` > -``Environment Variables``, then add the full path to the ``bin`` -directory inside of the (moved) ffmpeg directory to the -``PATH`` variable. Finally, save your changes and exit. - -If you now open a new command line prompt (or PowerShell) and -run ``ffmpeg``, the command should be recognized. - -At this point, you have all the required dependencies and can now -install Manim via +Then, Manim can be installed via Pip simply by running: .. code-block:: powershell python -m pip install manim +Manim should now be installed on your system. Continue reading +the :ref:`optional dependencies ` section +below. + .. _win-optional-dependencies: diff --git a/manim/_config/default.cfg b/manim/_config/default.cfg index 9ca36fc1c5..9155d28dbd 100644 --- a/manim/_config/default.cfg +++ b/manim/_config/default.cfg @@ -221,8 +221,6 @@ repr_number = green # Uncomment the following line to manually set the loglevel for ffmpeg. See # ffmpeg manpage for accepted values loglevel = ERROR -# defaults to the one present in path -ffmpeg_executable = ffmpeg [jupyter] media_embed = False diff --git a/manim/_config/logger_utils.py b/manim/_config/logger_utils.py index e861d3899c..f3b43f8f78 100644 --- a/manim/_config/logger_utils.py +++ b/manim/_config/logger_utils.py @@ -100,6 +100,10 @@ def make_logger( logger.addHandler(rich_handler) logger.setLevel(verbosity) + if not (libav_logger := logging.getLogger()).hasHandlers(): + libav_logger.addHandler(rich_handler) + libav_logger.setLevel(verbosity) + return logger, console, error_console diff --git a/manim/_config/utils.py b/manim/_config/utils.py index 9b05ffd7d8..7fb8843eae 100644 --- a/manim/_config/utils.py +++ b/manim/_config/utils.py @@ -263,7 +263,6 @@ class MyScene(Scene): ... "dry_run", "enable_wireframe", "ffmpeg_loglevel", - "ffmpeg_executable", "format", "flush_cache", "frame_height", @@ -679,10 +678,6 @@ def digest_parser(self, parser: configparser.ConfigParser) -> Self: if val: self.ffmpeg_loglevel = val - # TODO: Fix the mess above and below - val = parser["ffmpeg"].get("ffmpeg_executable") - setattr(self, "ffmpeg_executable", val) - try: val = parser["jupyter"].getboolean("media_embed") except ValueError: @@ -1074,15 +1069,7 @@ def ffmpeg_loglevel(self, val: str) -> None: val, ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"], ) - - @property - def ffmpeg_executable(self) -> str: - """Custom path to the ffmpeg executable.""" - return self._d["ffmpeg_executable"] - - @ffmpeg_executable.setter - def ffmpeg_executable(self, value: str) -> None: - self._set_str("ffmpeg_executable", value) + logging.getLogger("libav").setLevel(self.ffmpeg_loglevel) @property def media_embed(self) -> bool: diff --git a/manim/animation/animation.py b/manim/animation/animation.py index 80ad691a41..d0fca1ec3e 100644 --- a/manim/animation/animation.py +++ b/manim/animation/animation.py @@ -192,11 +192,6 @@ def begin(self) -> None: method. """ - if self.run_time <= 0: - raise ValueError( - f"{self} has a run_time of <= 0 seconds, this cannot be rendered correctly. " - "Please set the run_time to be positive" - ) self.starting_mobject = self.create_starting_mobject() if self.suspend_mobject_updating: # All calls to self.mobject's internal updaters diff --git a/manim/animation/composition.py b/manim/animation/composition.py index 62d67d5807..65ab62832a 100644 --- a/manim/animation/composition.py +++ b/manim/animation/composition.py @@ -81,16 +81,12 @@ def get_all_mobjects(self) -> Sequence[Mobject]: return list(self.group) def begin(self) -> None: - if self.run_time <= 0: - tmp = ( - "Please set the run_time to be positive" - if len(self.animations) != 0 - else "Please add at least one Animation with positive run_time" - ) + if not self.animations: raise ValueError( - f"{self} has a run_time of 0 seconds, this cannot be " - f"rendered correctly. {tmp}." + f"Trying to play {self} without animations, this is not supported. " + "Please add at least one subanimation." ) + self.anim_group_time = 0.0 if self.suspend_mobject_updating: self.group.suspend_updating() @@ -233,7 +229,11 @@ def __init__(self, *animations: Animation, lag_ratio: float = 1, **kwargs) -> No super().__init__(*animations, lag_ratio=lag_ratio, **kwargs) def begin(self) -> None: - assert len(self.animations) > 0 + if not self.animations: + raise ValueError( + f"Trying to play {self} without animations, this is not supported. " + "Please add at least one subanimation." + ) self.update_active_animation(0) def finish(self) -> None: diff --git a/manim/cli/checkhealth/checks.py b/manim/cli/checkhealth/checks.py index ad7e71ce39..9859ced29f 100644 --- a/manim/cli/checkhealth/checks.py +++ b/manim/cli/checkhealth/checks.py @@ -104,45 +104,6 @@ def is_manim_executable_associated_to_this_library(): return b"manim.__main__" in manim_exec or b'"%~dp0\\manim"' in manim_exec -@healthcheck( - description="Checking whether ffmpeg is available", - recommendation=( - "Manim does not work without ffmpeg. Please follow our " - "installation instructions " - "at https://docs.manim.community/en/stable/installation.html " - "to download ffmpeg. Then, either ...\n\n" - "(a) ... make the ffmpeg executable available to your system's PATH,\n" - "(b) or, alternatively, use to create a " - "custom configuration and set the ffmpeg_executable variable to the " - "full absolute path to the ffmpeg executable." - ), -) -def is_ffmpeg_available(): - path_to_ffmpeg = shutil.which(config.ffmpeg_executable) - return path_to_ffmpeg is not None and os.access(path_to_ffmpeg, os.X_OK) - - -@healthcheck( - description="Checking whether ffmpeg is working", - recommendation=( - "Your installed version of ffmpeg does not support x264 encoding, " - "which manim requires. Please follow our installation instructions " - "at https://docs.manim.community/en/stable/installation.html " - "to download and install a newer version of ffmpeg." - ), - skip_on_failed=[is_ffmpeg_available], -) -def is_ffmpeg_working(): - ffmpeg_version = subprocess.run( - [config.ffmpeg_executable, "-version"], - stdout=subprocess.PIPE, - ).stdout.decode() - return ( - ffmpeg_version.startswith("ffmpeg version") - and "--enable-libx264" in ffmpeg_version - ) - - @healthcheck( description="Checking whether latex is available", recommendation=( diff --git a/manim/mobject/geometry/polygram.py b/manim/mobject/geometry/polygram.py index fdb3ef2fcc..de48c28998 100644 --- a/manim/mobject/geometry/polygram.py +++ b/manim/mobject/geometry/polygram.py @@ -472,7 +472,6 @@ class Star(Polygon): Examples -------- .. manim:: StarExample - :save_as_gif: class StarExample(Scene): def construct(self): diff --git a/manim/renderer/cairo_renderer.py b/manim/renderer/cairo_renderer.py index 156523755b..86324fda29 100644 --- a/manim/renderer/cairo_renderer.py +++ b/manim/renderer/cairo_renderer.py @@ -186,8 +186,7 @@ def add_frame(self, frame: np.ndarray, num_frames: int = 1): if self.skip_animations: return self.time += num_frames * dt - for _ in range(num_frames): - self.file_writer.write_frame(frame) + self.file_writer.write_frame(frame, num_frames=num_frames) def freeze_current_frame(self, duration: float): """Adds a static frame to the movie for a given duration. The static frame is the current frame. diff --git a/manim/renderer/opengl_renderer.py b/manim/renderer/opengl_renderer.py index d457682267..1e4da96b8b 100644 --- a/manim/renderer/opengl_renderer.py +++ b/manim/renderer/opengl_renderer.py @@ -425,8 +425,9 @@ def play(self, scene, *args, **kwargs): self.update_frame(scene) if not self.skip_animations: - for _ in range(int(config.frame_rate * scene.duration)): - self.file_writer.write_frame(self) + self.file_writer.write_frame( + self, num_frames=int(config.frame_rate * scene.duration) + ) if self.window is not None: self.window.swap_buffers() diff --git a/manim/scene/scene.py b/manim/scene/scene.py index 8f92d215c4..07a2411733 100644 --- a/manim/scene/scene.py +++ b/manim/scene/scene.py @@ -1030,12 +1030,28 @@ def get_run_time(self, animations: list[Animation]): float The total ``run_time`` of all of the animations in the list. """ + max_run_time = 0 + frame_rate = ( + 1 / config.frame_rate + ) # config.frame_rate holds the number of frames per second + for animation in animations: + if animation.run_time <= 0: + raise ValueError( + f"{animation} has a run_time of <= 0 seconds which Manim cannot render. " + "Please set the run_time to be positive." + ) + elif animation.run_time < frame_rate: + logger.warning( + f"Original run time of {animation} is shorter than current frame " + f"rate (1 frame every {frame_rate:.2f} sec.) which cannot be rendered. " + "Rendering with the shortest possible duration instead." + ) + animation.run_time = frame_rate - if len(animations) == 1 and isinstance(animations[0], Wait): - return animations[0].duration + if animation.run_time > max_run_time: + max_run_time = animation.run_time - else: - return np.max([animation.run_time for animation in animations]) + return max_run_time def play( self, @@ -1205,16 +1221,16 @@ def compile_animation_data( self.moving_mobjects = [] self.static_mobjects = [] + self.duration = self.get_run_time(self.animations) if len(self.animations) == 1 and isinstance(self.animations[0], Wait): if self.should_update_mobjects(): self.update_mobjects(dt=0) # Any problems with this? self.stop_condition = self.animations[0].stop_condition else: - self.duration = self.animations[0].duration # Static image logic when the wait is static is done by the renderer, not here. self.animations[0].is_static_wait = True return None - self.duration = self.get_run_time(self.animations) + return self def begin_animations(self) -> None: diff --git a/manim/scene/scene_file_writer.py b/manim/scene/scene_file_writer.py index 6d39cc35be..ebd7d13cac 100644 --- a/manim/scene/scene_file_writer.py +++ b/manim/scene/scene_file_writer.py @@ -5,12 +5,11 @@ __all__ = ["SceneFileWriter"] import json -import os import shutil -import subprocess from pathlib import Path from typing import TYPE_CHECKING, Any +import av import numpy as np import srt from PIL import Image @@ -24,11 +23,9 @@ from ..utils.file_ops import ( add_extension_if_not_present, add_version_before_extension, - ensure_executable, guarantee_existence, is_gif_format, is_png_format, - is_webm_format, modify_atime, write_to_movie, ) @@ -83,14 +80,6 @@ def __init__(self, renderer, scene_name, **kwargs): self.next_section( name="autocreated", type=DefaultSectionType.NORMAL, skip_animations=False ) - # fail fast if ffmpeg is not found - if not ensure_executable(Path(config.ffmpeg_executable)): - raise RuntimeError( - "Manim could not find ffmpeg, which is required for generating video output.\n" - "For installing ffmpeg please consult https://docs.manim.community/en/stable/installation.html\n" - "Make sure to either add ffmpeg to the PATH environment variable\n" - "or set path to the ffmpeg executable under the ffmpeg header in Manim's configuration." - ) def init_output_directories(self, scene_name): """Initialise output directories. @@ -358,7 +347,7 @@ def begin_animation(self, allow_write: bool = False, file_path=None): Whether or not to write to a video file. """ if write_to_movie() and allow_write: - self.open_movie_pipe(file_path=file_path) + self.open_partial_movie_stream(file_path=file_path) def end_animation(self, allow_write: bool = False): """ @@ -371,9 +360,11 @@ def end_animation(self, allow_write: bool = False): Whether or not to write to a video file. """ if write_to_movie() and allow_write: - self.close_movie_pipe() + self.close_partial_movie_stream() - def write_frame(self, frame_or_renderer: np.ndarray | OpenGLRenderer): + def write_frame( + self, frame_or_renderer: np.ndarray | OpenGLRenderer, num_frames: int = 1 + ): """ Used internally by Manim to write a frame to the FFMPEG input buffer. @@ -382,41 +373,41 @@ def write_frame(self, frame_or_renderer: np.ndarray | OpenGLRenderer): ---------- frame_or_renderer Pixel array of the frame. + num_frames + The number of times to write frame. """ - if config.renderer == RendererType.OPENGL: - self.write_opengl_frame(frame_or_renderer) - elif config.renderer == RendererType.CAIRO: - frame = frame_or_renderer - if write_to_movie(): - self.writing_process.stdin.write(frame.tobytes()) - if is_png_format() and not config["dry_run"]: - self.output_image_from_array(frame) - - def write_opengl_frame(self, renderer: OpenGLRenderer): if write_to_movie(): - self.writing_process.stdin.write( - renderer.get_raw_frame_buffer_object_data(), + frame: np.ndarray = ( + frame_or_renderer.get_frame() + if config.renderer == RendererType.OPENGL + else frame_or_renderer + ) + for _ in range(num_frames): + # Notes: precomputing reusing packets does not work! + # I.e., you cannot do `packets = encode(...)` + # and reuse it, as it seems that `mux(...)` + # consumes the packet. + # The same issue applies for `av_frame`, + # reusing it renders weird-looking frames. + av_frame = av.VideoFrame.from_ndarray(frame, format="rgba") + for packet in self.video_stream.encode(av_frame): + self.video_container.mux(packet) + + if is_png_format() and not config["dry_run"]: + image: Image = ( + frame_or_renderer.get_image() + if config.renderer == RendererType.OPENGL + else Image.fromarray(frame_or_renderer) ) - elif is_png_format() and not config["dry_run"]: target_dir = self.image_file_path.parent / self.image_file_path.stem extension = self.image_file_path.suffix self.output_image( - renderer.get_image(), + image, target_dir, extension, config["zero_pad"], ) - def output_image_from_array(self, frame_data): - target_dir = self.image_file_path.parent / self.image_file_path.stem - extension = self.image_file_path.suffix - self.output_image( - Image.fromarray(frame_data), - target_dir, - extension, - config["zero_pad"], - ) - def output_image(self, image: Image.Image, target_dir, ext, zero_pad: bool): if zero_pad: image.save(f"{target_dir}{str(self.frame_count).zfill(zero_pad)}{ext}") @@ -467,11 +458,11 @@ def finish(self): if self.subcaptions: self.write_subcaption_file() - def open_movie_pipe(self, file_path=None): - """ - Used internally by Manim to initialise - FFMPEG and begin writing to FFMPEG's input - buffer. + def open_partial_movie_stream(self, file_path=None): + """Open a container holding a video stream. + + This is used internally by Manim initialize the container holding + the video stream of a partial movie file. """ if file_path is None: file_path = self.partial_movie_files[self.renderer.num_plays] @@ -480,49 +471,48 @@ def open_movie_pipe(self, file_path=None): fps = config["frame_rate"] if fps == int(fps): # fps is integer fps = int(fps) - if config.renderer == RendererType.OPENGL: - width, height = self.renderer.get_pixel_shape() - else: - height = config["pixel_height"] - width = config["pixel_width"] - - command = [ - config.ffmpeg_executable, - "-y", # overwrite output file if it exists - "-f", - "rawvideo", - "-s", - "%dx%d" % (width, height), # size of one frame - "-pix_fmt", - "rgba", - "-r", - str(fps), # frames per second - "-i", - "-", # The input comes from a pipe - "-an", # Tells FFMPEG not to expect any audio - "-loglevel", - config["ffmpeg_loglevel"].lower(), - "-metadata", - f"comment=Rendered with Manim Community v{__version__}", - ] - if config.renderer == RendererType.OPENGL: - command += ["-vf", "vflip"] - if is_webm_format(): - command += ["-vcodec", "libvpx-vp9", "-auto-alt-ref", "0"] - # .mov format - elif config["transparent"]: - command += ["-vcodec", "qtrle"] - else: - command += ["-vcodec", "libx264", "-pix_fmt", "yuv420p"] - command += [file_path] - self.writing_process = subprocess.Popen(command, stdin=subprocess.PIPE) - def close_movie_pipe(self): - """ - Used internally by Manim to gracefully stop writing to FFMPEG's input buffer + partial_movie_file_codec = "libx264" + partial_movie_file_pix_fmt = "yuv420p" + av_options = { + "an": "1", # ffmpeg: -an, no audio + "crf": "23", # ffmpeg: -crf, constant rate factor (improved bitrate) + } + + if config.format == "webm": + partial_movie_file_codec = "libvpx-vp9" + av_options["-auto-alt-ref"] = "1" + if config.transparent: + partial_movie_file_pix_fmt = "yuva420p" + + elif config.transparent: + partial_movie_file_codec = "qtrle" + partial_movie_file_pix_fmt = "argb" + + with av.open(file_path, mode="w") as video_container: + stream = video_container.add_stream( + partial_movie_file_codec, + rate=config.frame_rate, + options=av_options, + ) + stream.pix_fmt = partial_movie_file_pix_fmt + stream.width = config.pixel_width + stream.height = config.pixel_height + + self.video_container = video_container + self.video_stream = stream + + def close_partial_movie_stream(self): + """Close the currently opened video container. + + Used internally by Manim to first flush the remaining packages + in the video stream holding a partial file, and then close + the corresponding container. """ - self.writing_process.stdin.close() - self.writing_process.wait() + for packet in self.video_stream.encode(): + self.video_container.mux(packet) + + self.video_container.close() logger.info( f"Animation {self.renderer.num_plays} : Partial movie file written in %(path)s", @@ -567,37 +557,92 @@ def combine_files( for pf_path in input_files: pf_path = Path(pf_path).as_posix() fp.write(f"file 'file:{pf_path}'\n") - commands = [ - config.ffmpeg_executable, - "-y", # overwrite output file if it exists - "-f", - "concat", - "-safe", - "0", - "-i", - str(file_list), - "-loglevel", - config.ffmpeg_loglevel.lower(), - "-metadata", - f"comment=Rendered with Manim Community v{__version__}", - "-nostdin", - ] + av_options = { + "safe": "0", # needed to read files + } + + if not includes_sound: + av_options["an"] = "1" + + partial_movies_input = av.open( + str(file_list), options=av_options, format="concat" + ) + partial_movies_stream = partial_movies_input.streams.video[0] + output_container = av.open(str(output_file), mode="w") + output_container.metadata["comment"] = ( + f"Rendered with Manim Community v{__version__}" + ) + output_stream = output_container.add_stream( + codec_name="gif" if create_gif else None, + template=partial_movies_stream if not create_gif else None, + ) + if config.transparent and config.format == "webm": + output_stream.pix_fmt = "yuva420p" if create_gif: - commands += [ - "-vf", - f"fps={np.clip(config['frame_rate'], 1, 50)},split[s0][s1];[s0]palettegen=stats_mode=diff[p];[s1][p]paletteuse=dither=bayer:bayer_scale=5:diff_mode=rectangle", - ] + """ + The following solution was largely inspired from this comment + https://github.com/imageio/imageio/issues/995#issuecomment-1580533018, + and the following code + https://github.com/imageio/imageio/blob/65d79140018bb7c64c0692ea72cb4093e8d632a0/imageio/plugins/pyav.py#L927-L996. + """ + output_stream.pix_fmt = "rgb8" + if config.transparent: + output_stream.pix_fmt = "pal8" + output_stream.width = config.pixel_width + output_stream.height = config.pixel_height + output_stream.rate = config.frame_rate + graph = av.filter.Graph() + input_buffer = graph.add_buffer(template=partial_movies_stream) + split = graph.add("split") + palettegen = graph.add("palettegen", "stats_mode=diff") + paletteuse = graph.add( + "paletteuse", "dither=bayer:bayer_scale=5:diff_mode=rectangle" + ) + output_sink = graph.add("buffersink") + + input_buffer.link_to(split) + split.link_to(palettegen, 0, 0) # 1st input of split -> input of palettegen + split.link_to(paletteuse, 1, 0) # 2nd output of split -> 1st input + palettegen.link_to(paletteuse, 0, 1) # output of palettegen -> 2nd input + paletteuse.link_to(output_sink) + + graph.configure() + + for frame in partial_movies_input.decode(video=0): + graph.push(frame) + + graph.push(None) # EOF: https://github.com/PyAV-Org/PyAV/issues/886. + + frames_written = 0 + while True: + try: + frame = graph.pull() + frame.time_base = output_stream.codec_context.time_base + frame.pts = frames_written + frames_written += 1 + output_container.mux(output_stream.encode(frame)) + except av.error.EOFError: + break + + for packet in output_stream.encode(): + output_container.mux(packet) + else: - commands += ["-c", "copy"] + for packet in partial_movies_input.demux(partial_movies_stream): + # We need to skip the "flushing" packets that `demux` generates. + if packet.dts is None: + continue - if not includes_sound: - commands += ["-an"] + packet.dts = None # This seems to be needed, as dts from consecutive + # files may not be monotically increasing, so we let libav compute it. - commands += [str(output_file)] + # We need to assign the packet to the new stream. + packet.stream = output_stream + output_container.mux(packet) - combine_process = subprocess.Popen(commands) - combine_process.wait() + partial_movies_input.close() + output_container.close() def combine_to_movie(self): """Used internally by Manim to combine the separate @@ -614,6 +659,10 @@ def combine_to_movie(self): movie_file_path = self.movie_file_path if is_gif_format(): movie_file_path = self.gif_file_path + if len(partial_movie_files) == 0: # Prevent calling concat on empty list + logger.info("No animations are contained in this scene.") + return + logger.info("Combining to Movie file.") self.combine_files( partial_movie_files, @@ -623,44 +672,78 @@ def combine_to_movie(self): ) # handle sound - if self.includes_sound: + if self.includes_sound and config.format != "gif": sound_file_path = movie_file_path.with_suffix(".wav") # Makes sure sound file length will match video file self.add_audio_segment(AudioSegment.silent(0)) self.audio_segment.export( sound_file_path, + format="wav", bitrate="312k", ) + # Audio added to a VP9 encoded (webm) video file needs + # to be encoded as vorbis or opus. Directly exporting + # self.audio_segment with such a codec works in principle, + # but tries to call ffmpeg via its CLI -- which we want + # to avoid. This is why we need to do the conversion + # manually. + if config.format == "webm": + with ( + av.open(sound_file_path) as wav_audio, + av.open(sound_file_path.with_suffix(".ogg"), "w") as opus_audio, + ): + wav_audio_stream = wav_audio.streams.audio[0] + opus_audio_stream = opus_audio.add_stream("libvorbis") + for frame in wav_audio.decode(wav_audio_stream): + for packet in opus_audio_stream.encode(frame): + opus_audio.mux(packet) + + for packet in opus_audio_stream.encode(): + opus_audio.mux(packet) + + sound_file_path = sound_file_path.with_suffix(".ogg") + temp_file_path = movie_file_path.with_name( f"{movie_file_path.stem}_temp{movie_file_path.suffix}" ) - commands = [ - config.ffmpeg_executable, - "-i", - str(movie_file_path), - "-i", - str(sound_file_path), - "-y", # overwrite output file if it exists - "-c:v", - "copy", - "-c:a", - "aac", - "-b:a", - "320k", - # select video stream from first file - "-map", - "0:v:0", - # select audio stream from second file - "-map", - "1:a:0", - "-loglevel", - config.ffmpeg_loglevel.lower(), - "-metadata", - f"comment=Rendered with Manim Community v{__version__}", - # "-shortest", - str(temp_file_path), - ] - subprocess.call(commands) + av_options = { + "shortest": "1", + "metadata": f"comment=Rendered with Manim Community v{__version__}", + } + + with ( + av.open(movie_file_path) as video_input, + av.open(sound_file_path) as audio_input, + ): + + video_stream = video_input.streams.video[0] + audio_stream = audio_input.streams.audio[0] + output_container = av.open( + str(temp_file_path), mode="w", options=av_options + ) + output_video_stream = output_container.add_stream(template=video_stream) + output_audio_stream = output_container.add_stream(template=audio_stream) + + for packet in video_input.demux(video_stream): + # We need to skip the "flushing" packets that `demux` generates. + if packet.dts is None: + continue + + # We need to assign the packet to the new stream. + packet.stream = output_video_stream + output_container.mux(packet) + + for packet in audio_input.demux(audio_stream): + # We need to skip the "flushing" packets that `demux` generates. + if packet.dts is None: + continue + + # We need to assign the packet to the new stream. + packet.stream = output_audio_stream + output_container.mux(packet) + + output_container.close() + shutil.move(str(temp_file_path), str(movie_file_path)) sound_file_path.unlink() diff --git a/manim/utils/commands.py b/manim/utils/commands.py index bcb205eb6a..65a64db8cd 100644 --- a/manim/utils/commands.py +++ b/manim/utils/commands.py @@ -1,11 +1,12 @@ from __future__ import annotations -import json import os from pathlib import Path from subprocess import run from typing import Generator +import av + __all__ = [ "capture", "get_video_metadata", @@ -27,21 +28,26 @@ def capture(command, cwd=None, command_input=None): def get_video_metadata(path_to_video: str | os.PathLike) -> dict[str]: - command = [ - "ffprobe", - "-v", - "error", - "-select_streams", - "v:0", - "-show_entries", - "stream=width,height,nb_frames,duration,avg_frame_rate,codec_name", - "-print_format", - "json", - str(path_to_video), - ] - config, err, exitcode = capture(command) - assert exitcode == 0, f"FFprobe error: {err}" - return json.loads(config)["streams"][0] + with av.open(str(path_to_video)) as container: + stream = container.streams.video[0] + ctxt = stream.codec_context + rate = stream.average_rate + if stream.duration is not None: + duration = float(stream.duration * stream.time_base) + num_frames = stream.frames + else: + num_frames = sum(1 for _ in container.decode(video=0)) + duration = float(num_frames / stream.base_rate) + + return { + "width": ctxt.width, + "height": ctxt.height, + "nb_frames": str(num_frames), + "duration": f"{duration:.6f}", + "avg_frame_rate": f"{rate.numerator}/{rate.denominator}", # Can be a Fraction + "codec_name": stream.codec_context.name, + "pix_fmt": stream.codec_context.pix_fmt, + } def get_dir_layout(dirpath: Path) -> Generator[str, None, None]: diff --git a/manim/utils/file_ops.py b/manim/utils/file_ops.py index df505a60f3..58c82464a1 100644 --- a/manim/utils/file_ops.py +++ b/manim/utils/file_ops.py @@ -198,10 +198,7 @@ def open_file(file_path, in_browser=False): commands = ["cygstart"] file_path = file_path if not in_browser else file_path.parent elif current_os == "Darwin": - if is_gif_format(): - commands = ["ffplay", "-loglevel", config["ffmpeg_loglevel"].lower()] - else: - commands = ["open"] if not in_browser else ["open", "-R"] + commands = ["open"] if not in_browser else ["open", "-R"] else: raise OSError("Unable to identify your operating system...") diff --git a/manim/utils/testing/_test_class_makers.py b/manim/utils/testing/_test_class_makers.py index aa9ab4f14f..ac5886d494 100644 --- a/manim/utils/testing/_test_class_makers.py +++ b/manim/utils/testing/_test_class_makers.py @@ -64,14 +64,14 @@ def combine_to_section_videos(self): def clean_cache(self): pass - def write_frame(self, frame_or_renderer): + def write_frame(self, frame_or_renderer, num_frames=1): self.i += 1 def _make_scene_file_writer_class(tester: _FramesTester) -> type[SceneFileWriter]: class TestSceneFileWriter(DummySceneFileWriter): - def write_frame(self, frame_or_renderer): + def write_frame(self, frame_or_renderer, num_frames=1): tester.check_frame(self.i, frame_or_renderer) - super().write_frame(frame_or_renderer) + super().write_frame(frame_or_renderer, num_frames=num_frames) return TestSceneFileWriter diff --git a/poetry.lock b/poetry.lock index c4932c97e6..16a5d81dbe 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,9 +1,10 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. +# This file is automatically @generated by Poetry and should not be changed by hand. [[package]] name = "alabaster" version = "0.7.16" description = "A light, configurable Sphinx theme" +category = "dev" optional = false python-versions = ">=3.9" files = [ @@ -13,13 +14,14 @@ files = [ [[package]] name = "anyio" -version = "4.2.0" +version = "4.3.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" +category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "anyio-4.2.0-py3-none-any.whl", hash = "sha256:745843b39e829e108e518c489b31dc757de7d2131d53fac32bd8df268227bfee"}, - {file = "anyio-4.2.0.tar.gz", hash = "sha256:e1875bb4b4e2de1669f4bc7869b6d3f54231cdced71605e6e64c9be77e3be50f"}, + {file = "anyio-4.3.0-py3-none-any.whl", hash = "sha256:048e05d0f6caeed70d731f3db756d35dcc1f35747c8c403364a8332c630441b8"}, + {file = "anyio-4.3.0.tar.gz", hash = "sha256:f75253795a87df48568485fd18cdd2a3fa5c4f7c5be8e5e36637733fce06fed6"}, ] [package.dependencies] @@ -35,19 +37,21 @@ trio = ["trio (>=0.23)"] [[package]] name = "appnope" -version = "0.1.3" +version = "0.1.4" description = "Disable App Nap on macOS >= 10.9" +category = "main" optional = true -python-versions = "*" +python-versions = ">=3.6" files = [ - {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, - {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, + {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, + {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, ] [[package]] name = "argon2-cffi" version = "23.1.0" description = "Argon2 for Python" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -68,6 +72,7 @@ typing = ["mypy"] name = "argon2-cffi-bindings" version = "21.2.0" description = "Low-level CFFI bindings for Argon2" +category = "main" optional = true python-versions = ">=3.6" files = [ @@ -105,6 +110,7 @@ tests = ["pytest"] name = "arrow" version = "1.3.0" description = "Better dates & times for Python" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -118,12 +124,13 @@ types-python-dateutil = ">=2.8.10" [package.extras] doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] -test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (==3.*)"] +test = ["dateparser (>=1.0.0,<2.0.0)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (>=3.0.0,<4.0.0)"] [[package]] name = "astor" version = "0.8.1" description = "Read/rewrite/write Python ASTs" +category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" files = [ @@ -135,6 +142,7 @@ files = [ name = "asttokens" version = "2.4.1" description = "Annotate AST trees with source code positions" +category = "main" optional = true python-versions = "*" files = [ @@ -153,6 +161,7 @@ test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] name = "async-lru" version = "2.0.4" description = "Simple LRU cache for asyncio" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -167,6 +176,7 @@ typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} name = "attrs" version = "23.2.0" description = "Classes Without Boilerplate" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -182,15 +192,71 @@ tests = ["attrs[tests-no-zope]", "zope-interface"] tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] +[[package]] +name = "av" +version = "12.0.0" +description = "Pythonic bindings for FFmpeg's libraries." +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "av-12.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b9d0890553951f76c479a9f2bb952aebae902b1c7d52feea614d37e1cd728a44"}, + {file = "av-12.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5d7f229a253c2e3fea9682c09c5ae179bd6d5d2da38d89eb7f29ef7bed10cb2f"}, + {file = "av-12.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61b3555d143aacf02e0446f6030319403538eba4dc713c18dfa653a2a23e7f9c"}, + {file = "av-12.0.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:607e13b2c2b26159a37525d7b6f647a32ce78711fccff23d146d3e255ffa115f"}, + {file = "av-12.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39f0b4cfb89f4f06b339c766f92648e798a96747d4163f2fa78660d1ab1f1b5e"}, + {file = "av-12.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:41dcb8c269fa58a56edf3a3c814c32a0c69586827f132b4e395a951b0ce14fad"}, + {file = "av-12.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4fa78fbe0e4469226512380180063116105048c66cb12e18ab4b518466c57e6c"}, + {file = "av-12.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:60a869be1d6af916e65ea461cb93922f5db0698655ed7a7eae7c3ecd4af4debb"}, + {file = "av-12.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df61811cc551c186f0a0e530d97b8b139453534d0f92c1790a923f666522ceda"}, + {file = "av-12.0.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99cd2fc53091ebfb9a2fa9dd3580267f5bd1c040d0efd99fbc1a162576b271cb"}, + {file = "av-12.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a6d4f1e261df48932128e6495772faa4cc23f5dd1512eec73daab82ad9f3240"}, + {file = "av-12.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:6aec88e41a498b1e01e2dce5371557e20f9a51aae0c16decc5924ec0be2e22b6"}, + {file = "av-12.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:90eb8f2d548e96cbc6f78e89c911cdb15a3d80fd944f31111660ce45939cd037"}, + {file = "av-12.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d7f3a02910e77d750dbd516256a16db15030e5371530ff5a5ae902dc03d9005d"}, + {file = "av-12.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2477cc51526aa50575313d66e5e8ad7ab944588469be5e557b360ed572ae536"}, + {file = "av-12.0.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a2f47149d3ca6deb79f3e515b8bef50e27ebdb160813e6d67dba77278d2a7883"}, + {file = "av-12.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3306e4a3ce8b5bfcc3075793d4ed3a2df69179d8fba22cb944a6164dc235dfb6"}, + {file = "av-12.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:dc1b742e7f6df1b499fb960bd6697d1dd8e7ada7484a041a8c20e70a87225f53"}, + {file = "av-12.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0183be6889e835e1b074b4037bfce4fd44671c606cf1c4ab92ea2f271b544aec"}, + {file = "av-12.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:57337f20b208292ec8d3b11e4d289d8688a43d728174850a81b865d3253fff2c"}, + {file = "av-12.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ec915e8f6521545a38566eefc281042ee504ea3cee0618d8558e4920588b3b2"}, + {file = "av-12.0.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:33ad5c0a23c45b72bd6bd47f3b2c1adcd2935ee3d0b6178ed66bba62b964ff31"}, + {file = "av-12.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfc3a652b12c93120514d56cf025da47442c5ba51530cdf7ba3660257dbb0de1"}, + {file = "av-12.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:037f793dd1ef4a1f57f090191a7f803ad10ec82da0d04ea26bbe0b8a145fe927"}, + {file = "av-12.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fc532376aa264722fae55063abd1871d17a563dc895978e142c8ecfcdeb3a2e8"}, + {file = "av-12.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:abf0c4bc40a0af8a30f4cd96f3be6f19fbce0f21222d7fcec148e085127153f7"}, + {file = "av-12.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81cedd1c072fbebf606724c406b1a1b00adc711f1dfd2bc04c633ce39d8439d8"}, + {file = "av-12.0.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:02d60f48be9f15dcda37d50f3ce8d7249d9a455643d4322dd3449986bacfc628"}, + {file = "av-12.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d2619e4c26d661eecfc404f7d739d8b35f0dcef353fabe61512e030254b7031"}, + {file = "av-12.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:1892cc91c888d101777d5432d54e0554c11d1c3a2c65d02a2cae0a2256a8fbb9"}, + {file = "av-12.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4819e3ef6c3a44ef6f75907229133a1ee7f688245b2cf49b6b8e969a81ca72c9"}, + {file = "av-12.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb16bb314cf1503b0250fc46b2c455ee196584231101be0123f4f78638227b62"}, + {file = "av-12.0.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3e6a62bda9a1e144feeb59bbee046d7a2d98399634a30f57e4990197313c158"}, + {file = "av-12.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e08175ffbafa3a70c7b2f81083e160e34122a208cdf70f150b8f5d02c2de6965"}, + {file = "av-12.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e1d255be317b7c1ebdc4dae98935b9f3869161112dc829c625e54f90d8bdd7ab"}, + {file = "av-12.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:17964b36e08435910aabd5b3f7dca12f99536902529767d276026bc08f94ced7"}, + {file = "av-12.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2d5f78de29edee06ddcdd4c2b759914575492d6a0cd4de2ce31ee63a4953eff"}, + {file = "av-12.0.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:309b32bc97158d0f0c19e273b8e17a855a86806b7194aebc23bd497326cff11f"}, + {file = "av-12.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c409c71bd9c7c2f8d018c822f36b1447cfa96eca158381a96f3319bb0ff6e79e"}, + {file = "av-12.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:08fc5eaef60a257d622998626e233bf3ff90d2f817f6695d6a27e0ffcfe9dcff"}, + {file = "av-12.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:746ab0eff8a7a21a6c6d16e6b6e61709527eba2ad1a524d92a01bb60d02a3df7"}, + {file = "av-12.0.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:013b3ac3de3aa1c137af0cedafd364fd1c7524ab3e1cd53e04564fd1632ac04d"}, + {file = "av-12.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fa55923527648f51ac005e44fe2797ebc67f53ad4850e0194d3753761ee33a2"}, + {file = "av-12.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:35d514f4dee0cf67e9e6b2a65fb4a28f98da88e71e8c7f7960bd04625d9fe965"}, + {file = "av-12.0.0.tar.gz", hash = "sha256:bcf21ebb722d4538b4099e5a78f730d78814dd70003511c185941dba5651b14d"}, +] + [[package]] name = "babel" -version = "2.14.0" +version = "2.15.0" description = "Internationalization utilities" +category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "Babel-2.14.0-py3-none-any.whl", hash = "sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287"}, - {file = "Babel-2.14.0.tar.gz", hash = "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363"}, + {file = "Babel-2.15.0-py3-none-any.whl", hash = "sha256:08706bdad8d0a3413266ab61bd6c34d0c28d6e1e7badf40a2cebe67644e2e1fb"}, + {file = "babel-2.15.0.tar.gz", hash = "sha256:8daf0e265d05768bc6c7a314cf1321e9a123afc328cc635c18622a2f30a04413"}, ] [package.extras] @@ -200,6 +266,7 @@ dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] name = "beautifulsoup4" version = "4.12.3" description = "Screen-scraping library" +category = "main" optional = false python-versions = ">=3.6.0" files = [ @@ -219,33 +286,34 @@ lxml = ["lxml"] [[package]] name = "black" -version = "24.3.0" +version = "24.4.2" description = "The uncompromising code formatter." +category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "black-24.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7d5e026f8da0322b5662fa7a8e752b3fa2dac1c1cbc213c3d7ff9bdd0ab12395"}, - {file = "black-24.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9f50ea1132e2189d8dff0115ab75b65590a3e97de1e143795adb4ce317934995"}, - {file = "black-24.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2af80566f43c85f5797365077fb64a393861a3730bd110971ab7a0c94e873e7"}, - {file = "black-24.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:4be5bb28e090456adfc1255e03967fb67ca846a03be7aadf6249096100ee32d0"}, - {file = "black-24.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4f1373a7808a8f135b774039f61d59e4be7eb56b2513d3d2f02a8b9365b8a8a9"}, - {file = "black-24.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:aadf7a02d947936ee418777e0247ea114f78aff0d0959461057cae8a04f20597"}, - {file = "black-24.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c02e4ea2ae09d16314d30912a58ada9a5c4fdfedf9512d23326128ac08ac3d"}, - {file = "black-24.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:bf21b7b230718a5f08bd32d5e4f1db7fc8788345c8aea1d155fc17852b3410f5"}, - {file = "black-24.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:2818cf72dfd5d289e48f37ccfa08b460bf469e67fb7c4abb07edc2e9f16fb63f"}, - {file = "black-24.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4acf672def7eb1725f41f38bf6bf425c8237248bb0804faa3965c036f7672d11"}, - {file = "black-24.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7ed6668cbbfcd231fa0dc1b137d3e40c04c7f786e626b405c62bcd5db5857e4"}, - {file = "black-24.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:56f52cfbd3dabe2798d76dbdd299faa046a901041faf2cf33288bc4e6dae57b5"}, - {file = "black-24.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:79dcf34b33e38ed1b17434693763301d7ccbd1c5860674a8f871bd15139e7837"}, - {file = "black-24.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e19cb1c6365fd6dc38a6eae2dcb691d7d83935c10215aef8e6c38edee3f77abd"}, - {file = "black-24.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65b76c275e4c1c5ce6e9870911384bff5ca31ab63d19c76811cb1fb162678213"}, - {file = "black-24.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:b5991d523eee14756f3c8d5df5231550ae8993e2286b8014e2fdea7156ed0959"}, - {file = "black-24.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c45f8dff244b3c431b36e3224b6be4a127c6aca780853574c00faf99258041eb"}, - {file = "black-24.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6905238a754ceb7788a73f02b45637d820b2f5478b20fec82ea865e4f5d4d9f7"}, - {file = "black-24.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7de8d330763c66663661a1ffd432274a2f92f07feeddd89ffd085b5744f85e7"}, - {file = "black-24.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:7bb041dca0d784697af4646d3b62ba4a6b028276ae878e53f6b4f74ddd6db99f"}, - {file = "black-24.3.0-py3-none-any.whl", hash = "sha256:41622020d7120e01d377f74249e677039d20e6344ff5851de8a10f11f513bf93"}, - {file = "black-24.3.0.tar.gz", hash = "sha256:a0c9c4a0771afc6919578cec71ce82a3e31e054904e7197deacbc9382671c41f"}, + {file = "black-24.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dd1b5a14e417189db4c7b64a6540f31730713d173f0b63e55fabd52d61d8fdce"}, + {file = "black-24.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e537d281831ad0e71007dcdcbe50a71470b978c453fa41ce77186bbe0ed6021"}, + {file = "black-24.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaea3008c281f1038edb473c1aa8ed8143a5535ff18f978a318f10302b254063"}, + {file = "black-24.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:7768a0dbf16a39aa5e9a3ded568bb545c8c2727396d063bbaf847df05b08cd96"}, + {file = "black-24.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:257d724c2c9b1660f353b36c802ccece186a30accc7742c176d29c146df6e474"}, + {file = "black-24.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bdde6f877a18f24844e381d45e9947a49e97933573ac9d4345399be37621e26c"}, + {file = "black-24.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e151054aa00bad1f4e1f04919542885f89f5f7d086b8a59e5000e6c616896ffb"}, + {file = "black-24.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:7e122b1c4fb252fd85df3ca93578732b4749d9be076593076ef4d07a0233c3e1"}, + {file = "black-24.4.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:accf49e151c8ed2c0cdc528691838afd217c50412534e876a19270fea1e28e2d"}, + {file = "black-24.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:88c57dc656038f1ab9f92b3eb5335ee9b021412feaa46330d5eba4e51fe49b04"}, + {file = "black-24.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be8bef99eb46d5021bf053114442914baeb3649a89dc5f3a555c88737e5e98fc"}, + {file = "black-24.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:415e686e87dbbe6f4cd5ef0fbf764af7b89f9057b97c908742b6008cc554b9c0"}, + {file = "black-24.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bf10f7310db693bb62692609b397e8d67257c55f949abde4c67f9cc574492cc7"}, + {file = "black-24.4.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:98e123f1d5cfd42f886624d84464f7756f60ff6eab89ae845210631714f6db94"}, + {file = "black-24.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48a85f2cb5e6799a9ef05347b476cce6c182d6c71ee36925a6c194d074336ef8"}, + {file = "black-24.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:b1530ae42e9d6d5b670a34db49a94115a64596bc77710b1d05e9801e62ca0a7c"}, + {file = "black-24.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:37aae07b029fa0174d39daf02748b379399b909652a806e5708199bd93899da1"}, + {file = "black-24.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:da33a1a5e49c4122ccdfd56cd021ff1ebc4a1ec4e2d01594fef9b6f267a9e741"}, + {file = "black-24.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef703f83fc32e131e9bcc0a5094cfe85599e7109f896fe8bc96cc402f3eb4b6e"}, + {file = "black-24.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:b9176b9832e84308818a99a561e90aa479e73c523b3f77afd07913380ae2eab7"}, + {file = "black-24.4.2-py3-none-any.whl", hash = "sha256:d36ed1124bb81b32f8614555b34cc4259c3fbc7eec17870e8ff8ded335b58d8c"}, + {file = "black-24.4.2.tar.gz", hash = "sha256:c872b53057f000085da66a19c55d68f6f8ddcac2642392ad3a355878406fbd4d"}, ] [package.dependencies] @@ -267,6 +335,7 @@ uvloop = ["uvloop (>=0.15.2)"] name = "bleach" version = "6.1.0" description = "An easy safelist-based HTML-sanitizing tool." +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -283,19 +352,21 @@ css = ["tinycss2 (>=1.1.0,<1.3)"] [[package]] name = "certifi" -version = "2023.11.17" +version = "2024.2.2" description = "Python package for providing Mozilla's CA Bundle." +category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"}, - {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"}, + {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, + {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, ] [[package]] name = "cffi" version = "1.16.0" description = "Foreign Function Interface for Python calling C code." +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -360,6 +431,7 @@ pycparser = "*" name = "cfgv" version = "3.4.0" description = "Validate configuration and produce human readable error messages." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -371,6 +443,7 @@ files = [ name = "charset-normalizer" version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -470,6 +543,7 @@ files = [ name = "click" version = "8.1.7" description = "Composable command line interface toolkit" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -482,13 +556,14 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} [[package]] name = "cloup" -version = "3.0.4" +version = "3.0.5" description = "Adds features to Click: option groups, constraints, subcommand sections and help themes." +category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "cloup-3.0.4-py2.py3-none-any.whl", hash = "sha256:57604639a754a501ce4168faeb629e2ca523942e0ae4e180d832a953cf87ea84"}, - {file = "cloup-3.0.4.tar.gz", hash = "sha256:658111e2f49b8256a822dac5fa0205bf64109fdefc435f39923490a32b13ec09"}, + {file = "cloup-3.0.5-py2.py3-none-any.whl", hash = "sha256:bf122036066584eb0db113561167c29969cc015972b7b7ee03158d9bc7de87f8"}, + {file = "cloup-3.0.5.tar.gz", hash = "sha256:c92b261c7bb7e13004930f3fb4b3edad8de2d1f12994dcddbe05bc21990443c5"}, ] [package.dependencies] @@ -498,6 +573,7 @@ click = ">=8.0,<9.0" name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." +category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -507,13 +583,14 @@ files = [ [[package]] name = "comm" -version = "0.2.1" +version = "0.2.2" description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." +category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "comm-0.2.1-py3-none-any.whl", hash = "sha256:87928485c0dfc0e7976fd89fc1e187023cf587e7c353e4a9b417555b44adf021"}, - {file = "comm-0.2.1.tar.gz", hash = "sha256:0bc91edae1344d39d3661dcbc36937181fdaddb304790458f8b044dbc064b89a"}, + {file = "comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3"}, + {file = "comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e"}, ] [package.dependencies] @@ -524,126 +601,128 @@ test = ["pytest"] [[package]] name = "contourpy" -version = "1.2.0" +version = "1.2.1" description = "Python library for calculating contours of 2D quadrilateral grids" +category = "dev" optional = false python-versions = ">=3.9" files = [ - {file = "contourpy-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0274c1cb63625972c0c007ab14dd9ba9e199c36ae1a231ce45d725cbcbfd10a8"}, - {file = "contourpy-1.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ab459a1cbbf18e8698399c595a01f6dcc5c138220ca3ea9e7e6126232d102bb4"}, - {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fdd887f17c2f4572ce548461e4f96396681212d858cae7bd52ba3310bc6f00f"}, - {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d16edfc3fc09968e09ddffada434b3bf989bf4911535e04eada58469873e28e"}, - {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c203f617abc0dde5792beb586f827021069fb6d403d7f4d5c2b543d87edceb9"}, - {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b69303ceb2e4d4f146bf82fda78891ef7bcd80c41bf16bfca3d0d7eb545448aa"}, - {file = "contourpy-1.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:884c3f9d42d7218304bc74a8a7693d172685c84bd7ab2bab1ee567b769696df9"}, - {file = "contourpy-1.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4a1b1208102be6e851f20066bf0e7a96b7d48a07c9b0cfe6d0d4545c2f6cadab"}, - {file = "contourpy-1.2.0-cp310-cp310-win32.whl", hash = "sha256:34b9071c040d6fe45d9826cbbe3727d20d83f1b6110d219b83eb0e2a01d79488"}, - {file = "contourpy-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:bd2f1ae63998da104f16a8b788f685e55d65760cd1929518fd94cd682bf03e41"}, - {file = "contourpy-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dd10c26b4eadae44783c45ad6655220426f971c61d9b239e6f7b16d5cdaaa727"}, - {file = "contourpy-1.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5c6b28956b7b232ae801406e529ad7b350d3f09a4fde958dfdf3c0520cdde0dd"}, - {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebeac59e9e1eb4b84940d076d9f9a6cec0064e241818bcb6e32124cc5c3e377a"}, - {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:139d8d2e1c1dd52d78682f505e980f592ba53c9f73bd6be102233e358b401063"}, - {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e9dc350fb4c58adc64df3e0703ab076f60aac06e67d48b3848c23647ae4310e"}, - {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18fc2b4ed8e4a8fe849d18dce4bd3c7ea637758c6343a1f2bae1e9bd4c9f4686"}, - {file = "contourpy-1.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:16a7380e943a6d52472096cb7ad5264ecee36ed60888e2a3d3814991a0107286"}, - {file = "contourpy-1.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8d8faf05be5ec8e02a4d86f616fc2a0322ff4a4ce26c0f09d9f7fb5330a35c95"}, - {file = "contourpy-1.2.0-cp311-cp311-win32.whl", hash = "sha256:67b7f17679fa62ec82b7e3e611c43a016b887bd64fb933b3ae8638583006c6d6"}, - {file = "contourpy-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:99ad97258985328b4f207a5e777c1b44a83bfe7cf1f87b99f9c11d4ee477c4de"}, - {file = "contourpy-1.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:575bcaf957a25d1194903a10bc9f316c136c19f24e0985a2b9b5608bdf5dbfe0"}, - {file = "contourpy-1.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9e6c93b5b2dbcedad20a2f18ec22cae47da0d705d454308063421a3b290d9ea4"}, - {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:464b423bc2a009088f19bdf1f232299e8b6917963e2b7e1d277da5041f33a779"}, - {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:68ce4788b7d93e47f84edd3f1f95acdcd142ae60bc0e5493bfd120683d2d4316"}, - {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d7d1f8871998cdff5d2ff6a087e5e1780139abe2838e85b0b46b7ae6cc25399"}, - {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e739530c662a8d6d42c37c2ed52a6f0932c2d4a3e8c1f90692ad0ce1274abe0"}, - {file = "contourpy-1.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:247b9d16535acaa766d03037d8e8fb20866d054d3c7fbf6fd1f993f11fc60ca0"}, - {file = "contourpy-1.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:461e3ae84cd90b30f8d533f07d87c00379644205b1d33a5ea03381edc4b69431"}, - {file = "contourpy-1.2.0-cp312-cp312-win32.whl", hash = "sha256:1c2559d6cffc94890b0529ea7eeecc20d6fadc1539273aa27faf503eb4656d8f"}, - {file = "contourpy-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:491b1917afdd8638a05b611a56d46587d5a632cabead889a5440f7c638bc6ed9"}, - {file = "contourpy-1.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5fd1810973a375ca0e097dee059c407913ba35723b111df75671a1976efa04bc"}, - {file = "contourpy-1.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:999c71939aad2780f003979b25ac5b8f2df651dac7b38fb8ce6c46ba5abe6ae9"}, - {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7caf9b241464c404613512d5594a6e2ff0cc9cb5615c9475cc1d9b514218ae8"}, - {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:266270c6f6608340f6c9836a0fb9b367be61dde0c9a9a18d5ece97774105ff3e"}, - {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbd50d0a0539ae2e96e537553aff6d02c10ed165ef40c65b0e27e744a0f10af8"}, - {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11f8d2554e52f459918f7b8e6aa20ec2a3bce35ce95c1f0ef4ba36fbda306df5"}, - {file = "contourpy-1.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ce96dd400486e80ac7d195b2d800b03e3e6a787e2a522bfb83755938465a819e"}, - {file = "contourpy-1.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6d3364b999c62f539cd403f8123ae426da946e142312a514162adb2addd8d808"}, - {file = "contourpy-1.2.0-cp39-cp39-win32.whl", hash = "sha256:1c88dfb9e0c77612febebb6ac69d44a8d81e3dc60f993215425b62c1161353f4"}, - {file = "contourpy-1.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:78e6ad33cf2e2e80c5dfaaa0beec3d61face0fb650557100ee36db808bfa6843"}, - {file = "contourpy-1.2.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:be16975d94c320432657ad2402f6760990cb640c161ae6da1363051805fa8108"}, - {file = "contourpy-1.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b95a225d4948b26a28c08307a60ac00fb8671b14f2047fc5476613252a129776"}, - {file = "contourpy-1.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0d7e03c0f9a4f90dc18d4e77e9ef4ec7b7bbb437f7f675be8e530d65ae6ef956"}, - {file = "contourpy-1.2.0.tar.gz", hash = "sha256:171f311cb758de7da13fc53af221ae47a5877be5a0843a9fe150818c51ed276a"}, + {file = "contourpy-1.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bd7c23df857d488f418439686d3b10ae2fbf9bc256cd045b37a8c16575ea1040"}, + {file = "contourpy-1.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5b9eb0ca724a241683c9685a484da9d35c872fd42756574a7cfbf58af26677fd"}, + {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c75507d0a55378240f781599c30e7776674dbaf883a46d1c90f37e563453480"}, + {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11959f0ce4a6f7b76ec578576a0b61a28bdc0696194b6347ba3f1c53827178b9"}, + {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb3315a8a236ee19b6df481fc5f997436e8ade24a9f03dfdc6bd490fea20c6da"}, + {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39f3ecaf76cd98e802f094e0d4fbc6dc9c45a8d0c4d185f0f6c2234e14e5f75b"}, + {file = "contourpy-1.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:94b34f32646ca0414237168d68a9157cb3889f06b096612afdd296003fdd32fd"}, + {file = "contourpy-1.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:457499c79fa84593f22454bbd27670227874cd2ff5d6c84e60575c8b50a69619"}, + {file = "contourpy-1.2.1-cp310-cp310-win32.whl", hash = "sha256:ac58bdee53cbeba2ecad824fa8159493f0bf3b8ea4e93feb06c9a465d6c87da8"}, + {file = "contourpy-1.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:9cffe0f850e89d7c0012a1fb8730f75edd4320a0a731ed0c183904fe6ecfc3a9"}, + {file = "contourpy-1.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6022cecf8f44e36af10bd9118ca71f371078b4c168b6e0fab43d4a889985dbb5"}, + {file = "contourpy-1.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ef5adb9a3b1d0c645ff694f9bca7702ec2c70f4d734f9922ea34de02294fdf72"}, + {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6150ffa5c767bc6332df27157d95442c379b7dce3a38dff89c0f39b63275696f"}, + {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c863140fafc615c14a4bf4efd0f4425c02230eb8ef02784c9a156461e62c965"}, + {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:00e5388f71c1a0610e6fe56b5c44ab7ba14165cdd6d695429c5cd94021e390b2"}, + {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4492d82b3bc7fbb7e3610747b159869468079fe149ec5c4d771fa1f614a14df"}, + {file = "contourpy-1.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:49e70d111fee47284d9dd867c9bb9a7058a3c617274900780c43e38d90fe1205"}, + {file = "contourpy-1.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b59c0ffceff8d4d3996a45f2bb6f4c207f94684a96bf3d9728dbb77428dd8cb8"}, + {file = "contourpy-1.2.1-cp311-cp311-win32.whl", hash = "sha256:7b4182299f251060996af5249c286bae9361fa8c6a9cda5efc29fe8bfd6062ec"}, + {file = "contourpy-1.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2855c8b0b55958265e8b5888d6a615ba02883b225f2227461aa9127c578a4922"}, + {file = "contourpy-1.2.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:62828cada4a2b850dbef89c81f5a33741898b305db244904de418cc957ff05dc"}, + {file = "contourpy-1.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:309be79c0a354afff9ff7da4aaed7c3257e77edf6c1b448a779329431ee79d7e"}, + {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e785e0f2ef0d567099b9ff92cbfb958d71c2d5b9259981cd9bee81bd194c9a4"}, + {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1cac0a8f71a041aa587410424ad46dfa6a11f6149ceb219ce7dd48f6b02b87a7"}, + {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af3f4485884750dddd9c25cb7e3915d83c2db92488b38ccb77dd594eac84c4a0"}, + {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ce6889abac9a42afd07a562c2d6d4b2b7134f83f18571d859b25624a331c90b"}, + {file = "contourpy-1.2.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a1eea9aecf761c661d096d39ed9026574de8adb2ae1c5bd7b33558af884fb2ce"}, + {file = "contourpy-1.2.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:187fa1d4c6acc06adb0fae5544c59898ad781409e61a926ac7e84b8f276dcef4"}, + {file = "contourpy-1.2.1-cp312-cp312-win32.whl", hash = "sha256:c2528d60e398c7c4c799d56f907664673a807635b857df18f7ae64d3e6ce2d9f"}, + {file = "contourpy-1.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:1a07fc092a4088ee952ddae19a2b2a85757b923217b7eed584fdf25f53a6e7ce"}, + {file = "contourpy-1.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bb6834cbd983b19f06908b45bfc2dad6ac9479ae04abe923a275b5f48f1a186b"}, + {file = "contourpy-1.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1d59e739ab0e3520e62a26c60707cc3ab0365d2f8fecea74bfe4de72dc56388f"}, + {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd3db01f59fdcbce5b22afad19e390260d6d0222f35a1023d9adc5690a889364"}, + {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a12a813949e5066148712a0626895c26b2578874e4cc63160bb007e6df3436fe"}, + {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe0ccca550bb8e5abc22f530ec0466136379c01321fd94f30a22231e8a48d985"}, + {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1d59258c3c67c865435d8fbeb35f8c59b8bef3d6f46c1f29f6123556af28445"}, + {file = "contourpy-1.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f32c38afb74bd98ce26de7cc74a67b40afb7b05aae7b42924ea990d51e4dac02"}, + {file = "contourpy-1.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d31a63bc6e6d87f77d71e1abbd7387ab817a66733734883d1fc0021ed9bfa083"}, + {file = "contourpy-1.2.1-cp39-cp39-win32.whl", hash = "sha256:ddcb8581510311e13421b1f544403c16e901c4e8f09083c881fab2be80ee31ba"}, + {file = "contourpy-1.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:10a37ae557aabf2509c79715cd20b62e4c7c28b8cd62dd7d99e5ed3ce28c3fd9"}, + {file = "contourpy-1.2.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a31f94983fecbac95e58388210427d68cd30fe8a36927980fab9c20062645609"}, + {file = "contourpy-1.2.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef2b055471c0eb466033760a521efb9d8a32b99ab907fc8358481a1dd29e3bd3"}, + {file = "contourpy-1.2.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b33d2bc4f69caedcd0a275329eb2198f560b325605810895627be5d4b876bf7f"}, + {file = "contourpy-1.2.1.tar.gz", hash = "sha256:4d8908b3bee1c889e547867ca4cdc54e5ab6be6d3e078556814a22457f49423c"}, ] [package.dependencies] -numpy = ">=1.20,<2.0" +numpy = ">=1.20" [package.extras] bokeh = ["bokeh", "selenium"] docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] -mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.6.1)", "types-Pillow"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.8.0)", "types-Pillow"] test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] test-no-images = ["pytest", "pytest-cov", "pytest-xdist", "wurlitzer"] [[package]] name = "coverage" -version = "7.4.0" +version = "7.5.1" description = "Code coverage measurement for Python" +category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "coverage-7.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36b0ea8ab20d6a7564e89cb6135920bc9188fb5f1f7152e94e8300b7b189441a"}, - {file = "coverage-7.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0676cd0ba581e514b7f726495ea75aba3eb20899d824636c6f59b0ed2f88c471"}, - {file = "coverage-7.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0ca5c71a5a1765a0f8f88022c52b6b8be740e512980362f7fdbb03725a0d6b9"}, - {file = "coverage-7.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7c97726520f784239f6c62506bc70e48d01ae71e9da128259d61ca5e9788516"}, - {file = "coverage-7.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:815ac2d0f3398a14286dc2cea223a6f338109f9ecf39a71160cd1628786bc6f5"}, - {file = "coverage-7.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:80b5ee39b7f0131ebec7968baa9b2309eddb35b8403d1869e08f024efd883566"}, - {file = "coverage-7.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5b2ccb7548a0b65974860a78c9ffe1173cfb5877460e5a229238d985565574ae"}, - {file = "coverage-7.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:995ea5c48c4ebfd898eacb098164b3cc826ba273b3049e4a889658548e321b43"}, - {file = "coverage-7.4.0-cp310-cp310-win32.whl", hash = "sha256:79287fd95585ed36e83182794a57a46aeae0b64ca53929d1176db56aacc83451"}, - {file = "coverage-7.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:5b14b4f8760006bfdb6e08667af7bc2d8d9bfdb648351915315ea17645347137"}, - {file = "coverage-7.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:04387a4a6ecb330c1878907ce0dc04078ea72a869263e53c72a1ba5bbdf380ca"}, - {file = "coverage-7.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ea81d8f9691bb53f4fb4db603203029643caffc82bf998ab5b59ca05560f4c06"}, - {file = "coverage-7.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74775198b702868ec2d058cb92720a3c5a9177296f75bd97317c787daf711505"}, - {file = "coverage-7.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76f03940f9973bfaee8cfba70ac991825611b9aac047e5c80d499a44079ec0bc"}, - {file = "coverage-7.4.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:485e9f897cf4856a65a57c7f6ea3dc0d4e6c076c87311d4bc003f82cfe199d25"}, - {file = "coverage-7.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6ae8c9d301207e6856865867d762a4b6fd379c714fcc0607a84b92ee63feff70"}, - {file = "coverage-7.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bf477c355274a72435ceb140dc42de0dc1e1e0bf6e97195be30487d8eaaf1a09"}, - {file = "coverage-7.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:83c2dda2666fe32332f8e87481eed056c8b4d163fe18ecc690b02802d36a4d26"}, - {file = "coverage-7.4.0-cp311-cp311-win32.whl", hash = "sha256:697d1317e5290a313ef0d369650cfee1a114abb6021fa239ca12b4849ebbd614"}, - {file = "coverage-7.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:26776ff6c711d9d835557ee453082025d871e30b3fd6c27fcef14733f67f0590"}, - {file = "coverage-7.4.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:13eaf476ec3e883fe3e5fe3707caeb88268a06284484a3daf8250259ef1ba143"}, - {file = "coverage-7.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846f52f46e212affb5bcf131c952fb4075b55aae6b61adc9856222df89cbe3e2"}, - {file = "coverage-7.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26f66da8695719ccf90e794ed567a1549bb2644a706b41e9f6eae6816b398c4a"}, - {file = "coverage-7.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:164fdcc3246c69a6526a59b744b62e303039a81e42cfbbdc171c91a8cc2f9446"}, - {file = "coverage-7.4.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:316543f71025a6565677d84bc4df2114e9b6a615aa39fb165d697dba06a54af9"}, - {file = "coverage-7.4.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bb1de682da0b824411e00a0d4da5a784ec6496b6850fdf8c865c1d68c0e318dd"}, - {file = "coverage-7.4.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:0e8d06778e8fbffccfe96331a3946237f87b1e1d359d7fbe8b06b96c95a5407a"}, - {file = "coverage-7.4.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a56de34db7b7ff77056a37aedded01b2b98b508227d2d0979d373a9b5d353daa"}, - {file = "coverage-7.4.0-cp312-cp312-win32.whl", hash = "sha256:51456e6fa099a8d9d91497202d9563a320513fcf59f33991b0661a4a6f2ad450"}, - {file = "coverage-7.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:cd3c1e4cb2ff0083758f09be0f77402e1bdf704adb7f89108007300a6da587d0"}, - {file = "coverage-7.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e9d1bf53c4c8de58d22e0e956a79a5b37f754ed1ffdbf1a260d9dcfa2d8a325e"}, - {file = "coverage-7.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:109f5985182b6b81fe33323ab4707011875198c41964f014579cf82cebf2bb85"}, - {file = "coverage-7.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cc9d4bc55de8003663ec94c2f215d12d42ceea128da8f0f4036235a119c88ac"}, - {file = "coverage-7.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cc6d65b21c219ec2072c1293c505cf36e4e913a3f936d80028993dd73c7906b1"}, - {file = "coverage-7.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a10a4920def78bbfff4eff8a05c51be03e42f1c3735be42d851f199144897ba"}, - {file = "coverage-7.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b8e99f06160602bc64da35158bb76c73522a4010f0649be44a4e167ff8555952"}, - {file = "coverage-7.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7d360587e64d006402b7116623cebf9d48893329ef035278969fa3bbf75b697e"}, - {file = "coverage-7.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:29f3abe810930311c0b5d1a7140f6395369c3db1be68345638c33eec07535105"}, - {file = "coverage-7.4.0-cp38-cp38-win32.whl", hash = "sha256:5040148f4ec43644702e7b16ca864c5314ccb8ee0751ef617d49aa0e2d6bf4f2"}, - {file = "coverage-7.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:9864463c1c2f9cb3b5db2cf1ff475eed2f0b4285c2aaf4d357b69959941aa555"}, - {file = "coverage-7.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:936d38794044b26c99d3dd004d8af0035ac535b92090f7f2bb5aa9c8e2f5cd42"}, - {file = "coverage-7.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:799c8f873794a08cdf216aa5d0531c6a3747793b70c53f70e98259720a6fe2d7"}, - {file = "coverage-7.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7defbb9737274023e2d7af02cac77043c86ce88a907c58f42b580a97d5bcca9"}, - {file = "coverage-7.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a1526d265743fb49363974b7aa8d5899ff64ee07df47dd8d3e37dcc0818f09ed"}, - {file = "coverage-7.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf635a52fc1ea401baf88843ae8708591aa4adff875e5c23220de43b1ccf575c"}, - {file = "coverage-7.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:756ded44f47f330666843b5781be126ab57bb57c22adbb07d83f6b519783b870"}, - {file = "coverage-7.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0eb3c2f32dabe3a4aaf6441dde94f35687224dfd7eb2a7f47f3fd9428e421058"}, - {file = "coverage-7.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bfd5db349d15c08311702611f3dccbef4b4e2ec148fcc636cf8739519b4a5c0f"}, - {file = "coverage-7.4.0-cp39-cp39-win32.whl", hash = "sha256:53d7d9158ee03956e0eadac38dfa1ec8068431ef8058fe6447043db1fb40d932"}, - {file = "coverage-7.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:cfd2a8b6b0d8e66e944d47cdec2f47c48fef2ba2f2dff5a9a75757f64172857e"}, - {file = "coverage-7.4.0-pp38.pp39.pp310-none-any.whl", hash = "sha256:c530833afc4707fe48524a44844493f36d8727f04dcce91fb978c414a8556cc6"}, - {file = "coverage-7.4.0.tar.gz", hash = "sha256:707c0f58cb1712b8809ece32b68996ee1e609f71bd14615bd8f87a1293cb610e"}, + {file = "coverage-7.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c0884920835a033b78d1c73b6d3bbcda8161a900f38a488829a83982925f6c2e"}, + {file = "coverage-7.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:39afcd3d4339329c5f58de48a52f6e4e50f6578dd6099961cf22228feb25f38f"}, + {file = "coverage-7.5.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a7b0ceee8147444347da6a66be737c9d78f3353b0681715b668b72e79203e4a"}, + {file = "coverage-7.5.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a9ca3f2fae0088c3c71d743d85404cec8df9be818a005ea065495bedc33da35"}, + {file = "coverage-7.5.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fd215c0c7d7aab005221608a3c2b46f58c0285a819565887ee0b718c052aa4e"}, + {file = "coverage-7.5.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4bf0655ab60d754491004a5efd7f9cccefcc1081a74c9ef2da4735d6ee4a6223"}, + {file = "coverage-7.5.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:61c4bf1ba021817de12b813338c9be9f0ad5b1e781b9b340a6d29fc13e7c1b5e"}, + {file = "coverage-7.5.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:db66fc317a046556a96b453a58eced5024af4582a8dbdc0c23ca4dbc0d5b3146"}, + {file = "coverage-7.5.1-cp310-cp310-win32.whl", hash = "sha256:b016ea6b959d3b9556cb401c55a37547135a587db0115635a443b2ce8f1c7228"}, + {file = "coverage-7.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:df4e745a81c110e7446b1cc8131bf986157770fa405fe90e15e850aaf7619bc8"}, + {file = "coverage-7.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:796a79f63eca8814ca3317a1ea443645c9ff0d18b188de470ed7ccd45ae79428"}, + {file = "coverage-7.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4fc84a37bfd98db31beae3c2748811a3fa72bf2007ff7902f68746d9757f3746"}, + {file = "coverage-7.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6175d1a0559986c6ee3f7fccfc4a90ecd12ba0a383dcc2da30c2b9918d67d8a3"}, + {file = "coverage-7.5.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fc81d5878cd6274ce971e0a3a18a8803c3fe25457165314271cf78e3aae3aa2"}, + {file = "coverage-7.5.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:556cf1a7cbc8028cb60e1ff0be806be2eded2daf8129b8811c63e2b9a6c43bca"}, + {file = "coverage-7.5.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9981706d300c18d8b220995ad22627647be11a4276721c10911e0e9fa44c83e8"}, + {file = "coverage-7.5.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d7fed867ee50edf1a0b4a11e8e5d0895150e572af1cd6d315d557758bfa9c057"}, + {file = "coverage-7.5.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ef48e2707fb320c8f139424a596f5b69955a85b178f15af261bab871873bb987"}, + {file = "coverage-7.5.1-cp311-cp311-win32.whl", hash = "sha256:9314d5678dcc665330df5b69c1e726a0e49b27df0461c08ca12674bcc19ef136"}, + {file = "coverage-7.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:5fa567e99765fe98f4e7d7394ce623e794d7cabb170f2ca2ac5a4174437e90dd"}, + {file = "coverage-7.5.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b6cf3764c030e5338e7f61f95bd21147963cf6aa16e09d2f74f1fa52013c1206"}, + {file = "coverage-7.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2ec92012fefebee89a6b9c79bc39051a6cb3891d562b9270ab10ecfdadbc0c34"}, + {file = "coverage-7.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16db7f26000a07efcf6aea00316f6ac57e7d9a96501e990a36f40c965ec7a95d"}, + {file = "coverage-7.5.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:beccf7b8a10b09c4ae543582c1319c6df47d78fd732f854ac68d518ee1fb97fa"}, + {file = "coverage-7.5.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8748731ad392d736cc9ccac03c9845b13bb07d020a33423fa5b3a36521ac6e4e"}, + {file = "coverage-7.5.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7352b9161b33fd0b643ccd1f21f3a3908daaddf414f1c6cb9d3a2fd618bf2572"}, + {file = "coverage-7.5.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7a588d39e0925f6a2bff87154752481273cdb1736270642aeb3635cb9b4cad07"}, + {file = "coverage-7.5.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:68f962d9b72ce69ea8621f57551b2fa9c70509af757ee3b8105d4f51b92b41a7"}, + {file = "coverage-7.5.1-cp312-cp312-win32.whl", hash = "sha256:f152cbf5b88aaeb836127d920dd0f5e7edff5a66f10c079157306c4343d86c19"}, + {file = "coverage-7.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:5a5740d1fb60ddf268a3811bcd353de34eb56dc24e8f52a7f05ee513b2d4f596"}, + {file = "coverage-7.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e2213def81a50519d7cc56ed643c9e93e0247f5bbe0d1247d15fa520814a7cd7"}, + {file = "coverage-7.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5037f8fcc2a95b1f0e80585bd9d1ec31068a9bcb157d9750a172836e98bc7a90"}, + {file = "coverage-7.5.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c3721c2c9e4c4953a41a26c14f4cef64330392a6d2d675c8b1db3b645e31f0e"}, + {file = "coverage-7.5.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca498687ca46a62ae590253fba634a1fe9836bc56f626852fb2720f334c9e4e5"}, + {file = "coverage-7.5.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0cdcbc320b14c3e5877ee79e649677cb7d89ef588852e9583e6b24c2e5072661"}, + {file = "coverage-7.5.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:57e0204b5b745594e5bc14b9b50006da722827f0b8c776949f1135677e88d0b8"}, + {file = "coverage-7.5.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8fe7502616b67b234482c3ce276ff26f39ffe88adca2acf0261df4b8454668b4"}, + {file = "coverage-7.5.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9e78295f4144f9dacfed4f92935fbe1780021247c2fabf73a819b17f0ccfff8d"}, + {file = "coverage-7.5.1-cp38-cp38-win32.whl", hash = "sha256:1434e088b41594baa71188a17533083eabf5609e8e72f16ce8c186001e6b8c41"}, + {file = "coverage-7.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:0646599e9b139988b63704d704af8e8df7fa4cbc4a1f33df69d97f36cb0a38de"}, + {file = "coverage-7.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4cc37def103a2725bc672f84bd939a6fe4522310503207aae4d56351644682f1"}, + {file = "coverage-7.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fc0b4d8bfeabd25ea75e94632f5b6e047eef8adaed0c2161ada1e922e7f7cece"}, + {file = "coverage-7.5.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d0a0f5e06881ecedfe6f3dd2f56dcb057b6dbeb3327fd32d4b12854df36bf26"}, + {file = "coverage-7.5.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9735317685ba6ec7e3754798c8871c2f49aa5e687cc794a0b1d284b2389d1bd5"}, + {file = "coverage-7.5.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d21918e9ef11edf36764b93101e2ae8cc82aa5efdc7c5a4e9c6c35a48496d601"}, + {file = "coverage-7.5.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c3e757949f268364b96ca894b4c342b41dc6f8f8b66c37878aacef5930db61be"}, + {file = "coverage-7.5.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:79afb6197e2f7f60c4824dd4b2d4c2ec5801ceb6ba9ce5d2c3080e5660d51a4f"}, + {file = "coverage-7.5.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d1d0d98d95dd18fe29dc66808e1accf59f037d5716f86a501fc0256455219668"}, + {file = "coverage-7.5.1-cp39-cp39-win32.whl", hash = "sha256:1cc0fe9b0b3a8364093c53b0b4c0c2dd4bb23acbec4c9240b5f284095ccf7981"}, + {file = "coverage-7.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:dde0070c40ea8bb3641e811c1cfbf18e265d024deff6de52c5950677a8fb1e0f"}, + {file = "coverage-7.5.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:6537e7c10cc47c595828b8a8be04c72144725c383c4702703ff4e42e44577312"}, + {file = "coverage-7.5.1.tar.gz", hash = "sha256:54de9ef3a9da981f7af93eafde4ede199e0846cd819eb27c88e2b712aae9708c"}, ] [package.dependencies] @@ -654,43 +733,44 @@ toml = ["tomli"] [[package]] name = "cryptography" -version = "42.0.4" +version = "42.0.6" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "cryptography-42.0.4-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:ffc73996c4fca3d2b6c1c8c12bfd3ad00def8621da24f547626bf06441400449"}, - {file = "cryptography-42.0.4-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:db4b65b02f59035037fde0998974d84244a64c3265bdef32a827ab9b63d61b18"}, - {file = "cryptography-42.0.4-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad9c385ba8ee025bb0d856714f71d7840020fe176ae0229de618f14dae7a6e2"}, - {file = "cryptography-42.0.4-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69b22ab6506a3fe483d67d1ed878e1602bdd5912a134e6202c1ec672233241c1"}, - {file = "cryptography-42.0.4-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:e09469a2cec88fb7b078e16d4adec594414397e8879a4341c6ace96013463d5b"}, - {file = "cryptography-42.0.4-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3e970a2119507d0b104f0a8e281521ad28fc26f2820687b3436b8c9a5fcf20d1"}, - {file = "cryptography-42.0.4-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:e53dc41cda40b248ebc40b83b31516487f7db95ab8ceac1f042626bc43a2f992"}, - {file = "cryptography-42.0.4-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:c3a5cbc620e1e17009f30dd34cb0d85c987afd21c41a74352d1719be33380885"}, - {file = "cryptography-42.0.4-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:6bfadd884e7280df24d26f2186e4e07556a05d37393b0f220a840b083dc6a824"}, - {file = "cryptography-42.0.4-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:01911714117642a3f1792c7f376db572aadadbafcd8d75bb527166009c9f1d1b"}, - {file = "cryptography-42.0.4-cp37-abi3-win32.whl", hash = "sha256:fb0cef872d8193e487fc6bdb08559c3aa41b659a7d9be48b2e10747f47863925"}, - {file = "cryptography-42.0.4-cp37-abi3-win_amd64.whl", hash = "sha256:c1f25b252d2c87088abc8bbc4f1ecbf7c919e05508a7e8628e6875c40bc70923"}, - {file = "cryptography-42.0.4-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:15a1fb843c48b4a604663fa30af60818cd28f895572386e5f9b8a665874c26e7"}, - {file = "cryptography-42.0.4-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1327f280c824ff7885bdeef8578f74690e9079267c1c8bd7dc5cc5aa065ae52"}, - {file = "cryptography-42.0.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ffb03d419edcab93b4b19c22ee80c007fb2d708429cecebf1dd3258956a563a"}, - {file = "cryptography-42.0.4-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:1df6fcbf60560d2113b5ed90f072dc0b108d64750d4cbd46a21ec882c7aefce9"}, - {file = "cryptography-42.0.4-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:44a64043f743485925d3bcac548d05df0f9bb445c5fcca6681889c7c3ab12764"}, - {file = "cryptography-42.0.4-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:3c6048f217533d89f2f8f4f0fe3044bf0b2090453b7b73d0b77db47b80af8dff"}, - {file = "cryptography-42.0.4-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6d0fbe73728c44ca3a241eff9aefe6496ab2656d6e7a4ea2459865f2e8613257"}, - {file = "cryptography-42.0.4-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:887623fe0d70f48ab3f5e4dbf234986b1329a64c066d719432d0698522749929"}, - {file = "cryptography-42.0.4-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:ce8613beaffc7c14f091497346ef117c1798c202b01153a8cc7b8e2ebaaf41c0"}, - {file = "cryptography-42.0.4-cp39-abi3-win32.whl", hash = "sha256:810bcf151caefc03e51a3d61e53335cd5c7316c0a105cc695f0959f2c638b129"}, - {file = "cryptography-42.0.4-cp39-abi3-win_amd64.whl", hash = "sha256:a0298bdc6e98ca21382afe914c642620370ce0470a01e1bef6dd9b5354c36854"}, - {file = "cryptography-42.0.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5f8907fcf57392cd917892ae83708761c6ff3c37a8e835d7246ff0ad251d9298"}, - {file = "cryptography-42.0.4-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:12d341bd42cdb7d4937b0cabbdf2a94f949413ac4504904d0cdbdce4a22cbf88"}, - {file = "cryptography-42.0.4-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1cdcdbd117681c88d717437ada72bdd5be9de117f96e3f4d50dab3f59fd9ab20"}, - {file = "cryptography-42.0.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0e89f7b84f421c56e7ff69f11c441ebda73b8a8e6488d322ef71746224c20fce"}, - {file = "cryptography-42.0.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f1e85a178384bf19e36779d91ff35c7617c885da487d689b05c1366f9933ad74"}, - {file = "cryptography-42.0.4-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d2a27aca5597c8a71abbe10209184e1a8e91c1fd470b5070a2ea60cafec35bcd"}, - {file = "cryptography-42.0.4-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4e36685cb634af55e0677d435d425043967ac2f3790ec652b2b88ad03b85c27b"}, - {file = "cryptography-42.0.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f47be41843200f7faec0683ad751e5ef11b9a56a220d57f300376cd8aba81660"}, - {file = "cryptography-42.0.4.tar.gz", hash = "sha256:831a4b37accef30cccd34fcb916a5d7b5be3cbbe27268a02832c3e450aea39cb"}, + {file = "cryptography-42.0.6-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:073104df012fc815eed976cd7d0a386c8725d0d0947cf9c37f6c36a6c20feb1b"}, + {file = "cryptography-42.0.6-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:5967e3632f42b0c0f9dc2c9da88c79eabdda317860b246d1fbbde4a8bbbc3b44"}, + {file = "cryptography-42.0.6-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b99831397fdc6e6e0aa088b060c278c6e635d25c0d4d14bdf045bf81792fda0a"}, + {file = "cryptography-42.0.6-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:089aeb297ff89615934b22c7631448598495ffd775b7d540a55cfee35a677bf4"}, + {file = "cryptography-42.0.6-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:97eeacae9aa526ddafe68b9202a535f581e21d78f16688a84c8dcc063618e121"}, + {file = "cryptography-42.0.6-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f4cece02478d73dacd52be57a521d168af64ae03d2a567c0c4eb6f189c3b9d79"}, + {file = "cryptography-42.0.6-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:aeb6f56b004e898df5530fa873e598ec78eb338ba35f6fa1449970800b1d97c2"}, + {file = "cryptography-42.0.6-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:8b90c57b3cd6128e0863b894ce77bd36fcb5f430bf2377bc3678c2f56e232316"}, + {file = "cryptography-42.0.6-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:d16a310c770cc49908c500c2ceb011f2840674101a587d39fa3ea828915b7e83"}, + {file = "cryptography-42.0.6-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e3442601d276bd9e961d618b799761b4e5d892f938e8a4fe1efbe2752be90455"}, + {file = "cryptography-42.0.6-cp37-abi3-win32.whl", hash = "sha256:00c0faa5b021457848d031ecff041262211cc1e2bce5f6e6e6c8108018f6b44a"}, + {file = "cryptography-42.0.6-cp37-abi3-win_amd64.whl", hash = "sha256:b16b90605c62bcb3aa7755d62cf5e746828cfc3f965a65211849e00c46f8348d"}, + {file = "cryptography-42.0.6-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:eecca86813c6a923cabff284b82ff4d73d9e91241dc176250192c3a9b9902a54"}, + {file = "cryptography-42.0.6-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d93080d2b01b292e7ee4d247bf93ed802b0100f5baa3fa5fd6d374716fa480d4"}, + {file = "cryptography-42.0.6-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ff75b88a4d273c06d968ad535e6cb6a039dd32db54fe36f05ed62ac3ef64a44"}, + {file = "cryptography-42.0.6-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:c05230d8aaaa6b8ab3ab41394dc06eb3d916131df1c9dcb4c94e8f041f704b74"}, + {file = "cryptography-42.0.6-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:9184aff0856261ecb566a3eb26a05dfe13a292c85ce5c59b04e4aa09e5814187"}, + {file = "cryptography-42.0.6-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:4bdb39ecbf05626e4bfa1efd773bb10346af297af14fb3f4c7cb91a1d2f34a46"}, + {file = "cryptography-42.0.6-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:e85f433230add2aa26b66d018e21134000067d210c9c68ef7544ba65fc52e3eb"}, + {file = "cryptography-42.0.6-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:65d529c31bd65d54ce6b926a01e1b66eacf770b7e87c0622516a840e400ec732"}, + {file = "cryptography-42.0.6-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f1e933b238978ccfa77b1fee0a297b3c04983f4cb84ae1c33b0ea4ae08266cc9"}, + {file = "cryptography-42.0.6-cp39-abi3-win32.whl", hash = "sha256:bc954251edcd8a952eeaec8ae989fec7fe48109ab343138d537b7ea5bb41071a"}, + {file = "cryptography-42.0.6-cp39-abi3-win_amd64.whl", hash = "sha256:9f1a3bc2747166b0643b00e0b56cd9b661afc9d5ff963acaac7a9c7b2b1ef638"}, + {file = "cryptography-42.0.6-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:945a43ebf036dd4b43ebfbbd6b0f2db29ad3d39df824fb77476ca5777a9dde33"}, + {file = "cryptography-42.0.6-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:f567a82b7c2b99257cca2a1c902c1b129787278ff67148f188784245c7ed5495"}, + {file = "cryptography-42.0.6-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3b750279f3e7715df6f68050707a0cee7cbe81ba2eeb2f21d081bd205885ffed"}, + {file = "cryptography-42.0.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:6981acac509cc9415344cb5bfea8130096ea6ebcc917e75503143a1e9e829160"}, + {file = "cryptography-42.0.6-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:076c92b08dd1ab88108bc84545187e10d3693a9299c593f98c4ea195a0b0ead7"}, + {file = "cryptography-42.0.6-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:81dbe47e28b703bc4711ac74a64ef8b758a0cf056ce81d08e39116ab4bc126fa"}, + {file = "cryptography-42.0.6-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e1f5f15c5ddadf6ee4d1d624a2ae940f14bd74536230b0056ccb28bb6248e42a"}, + {file = "cryptography-42.0.6-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:43e521f21c2458038d72e8cdfd4d4d9f1d00906a7b6636c4272e35f650d1699b"}, + {file = "cryptography-42.0.6.tar.gz", hash = "sha256:f987a244dfb0333fbd74a691c36000a2569eaf7c7cc2ac838f85f59f0588ddc9"}, ] [package.dependencies] @@ -710,6 +790,7 @@ test-randomorder = ["pytest-randomly"] name = "cycler" version = "0.12.1" description = "Composable style cycles" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -723,129 +804,137 @@ tests = ["pytest", "pytest-cov", "pytest-xdist"] [[package]] name = "cython" -version = "3.0.8" +version = "3.0.10" description = "The Cython compiler for writing C extensions in the Python language." +category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" files = [ - {file = "Cython-3.0.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a846e0a38e2b24e9a5c5dc74b0e54c6e29420d88d1dafabc99e0fc0f3e338636"}, - {file = "Cython-3.0.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45523fdc2b78d79b32834cc1cc12dc2ca8967af87e22a3ee1bff20e77c7f5520"}, - {file = "Cython-3.0.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa0b7f3f841fe087410cab66778e2d3fb20ae2d2078a2be3dffe66c6574be39"}, - {file = "Cython-3.0.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e87294e33e40c289c77a135f491cd721bd089f193f956f7b8ed5aa2d0b8c558f"}, - {file = "Cython-3.0.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a1df7a129344b1215c20096d33c00193437df1a8fcca25b71f17c23b1a44f782"}, - {file = "Cython-3.0.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:13c2a5e57a0358da467d97667297bf820b62a1a87ae47c5f87938b9bb593acbd"}, - {file = "Cython-3.0.8-cp310-cp310-win32.whl", hash = "sha256:96b028f044f5880e3cb18ecdcfc6c8d3ce9d0af28418d5ab464509f26d8adf12"}, - {file = "Cython-3.0.8-cp310-cp310-win_amd64.whl", hash = "sha256:8140597a8b5cc4f119a1190f5a2228a84f5ca6d8d9ec386cfce24663f48b2539"}, - {file = "Cython-3.0.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aae26f9663e50caf9657148403d9874eea41770ecdd6caf381d177c2b1bb82ba"}, - {file = "Cython-3.0.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:547eb3cdb2f8c6f48e6865d5a741d9dd051c25b3ce076fbca571727977b28ac3"}, - {file = "Cython-3.0.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a567d4b9ba70b26db89d75b243529de9e649a2f56384287533cf91512705bee"}, - {file = "Cython-3.0.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:51d1426263b0e82fb22bda8ea60dc77a428581cc19e97741011b938445d383f1"}, - {file = "Cython-3.0.8-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c26daaeccda072459b48d211415fd1e5507c06bcd976fa0d5b8b9f1063467d7b"}, - {file = "Cython-3.0.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:289ce7838208211cd166e975865fd73b0649bf118170b6cebaedfbdaf4a37795"}, - {file = "Cython-3.0.8-cp311-cp311-win32.whl", hash = "sha256:c8aa05f5e17f8042a3be052c24f2edc013fb8af874b0bf76907d16c51b4e7871"}, - {file = "Cython-3.0.8-cp311-cp311-win_amd64.whl", hash = "sha256:000dc9e135d0eec6ecb2b40a5b02d0868a2f8d2e027a41b0fe16a908a9e6de02"}, - {file = "Cython-3.0.8-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:90d3fe31db55685d8cb97d43b0ec39ef614fcf660f83c77ed06aa670cb0e164f"}, - {file = "Cython-3.0.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e24791ddae2324e88e3c902a765595c738f19ae34ee66bfb1a6dac54b1833419"}, - {file = "Cython-3.0.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f020fa1c0552052e0660790b8153b79e3fc9a15dbd8f1d0b841fe5d204a6ae6"}, - {file = "Cython-3.0.8-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18bfa387d7a7f77d7b2526af69a65dbd0b731b8d941aaff5becff8e21f6d7717"}, - {file = "Cython-3.0.8-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:fe81b339cffd87c0069c6049b4d33e28bdd1874625ee515785bf42c9fdff3658"}, - {file = "Cython-3.0.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:80fd94c076e1e1b1ee40a309be03080b75f413e8997cddcf401a118879863388"}, - {file = "Cython-3.0.8-cp312-cp312-win32.whl", hash = "sha256:85077915a93e359a9b920280d214dc0cf8a62773e1f3d7d30fab8ea4daed670c"}, - {file = "Cython-3.0.8-cp312-cp312-win_amd64.whl", hash = "sha256:0cb2dcc565c7851f75d496f724a384a790fab12d1b82461b663e66605bec429a"}, - {file = "Cython-3.0.8-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:870d2a0a7e3cbd5efa65aecdb38d715ea337a904ea7bb22324036e78fb7068e7"}, - {file = "Cython-3.0.8-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e8f2454128974905258d86534f4fd4f91d2f1343605657ecab779d80c9d6d5e"}, - {file = "Cython-3.0.8-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1949d6aa7bc792554bee2b67a9fe41008acbfe22f4f8df7b6ec7b799613a4b3"}, - {file = "Cython-3.0.8-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9f2c6e1b8f3bcd6cb230bac1843f85114780bb8be8614855b1628b36bb510e0"}, - {file = "Cython-3.0.8-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:05d7eddc668ae7993643f32c7661f25544e791edb745758672ea5b1a82ecffa6"}, - {file = "Cython-3.0.8-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bfabe115deef4ada5d23c87bddb11289123336dcc14347011832c07db616dd93"}, - {file = "Cython-3.0.8-cp36-cp36m-win32.whl", hash = "sha256:0c38c9f0bcce2df0c3347285863621be904ac6b64c5792d871130569d893efd7"}, - {file = "Cython-3.0.8-cp36-cp36m-win_amd64.whl", hash = "sha256:6c46939c3983217d140999de7c238c3141f56b1ea349e47ca49cae899969aa2c"}, - {file = "Cython-3.0.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:115f0a50f752da6c99941b103b5cb090da63eb206abbc7c2ad33856ffc73f064"}, - {file = "Cython-3.0.8-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9c0f29246734561c90f36e70ed0506b61aa3d044e4cc4cba559065a2a741fae"}, - {file = "Cython-3.0.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ab75242869ff71e5665fe5c96f3378e79e792fa3c11762641b6c5afbbbbe026"}, - {file = "Cython-3.0.8-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6717c06e9cfc6c1df18543cd31a21f5d8e378a40f70c851fa2d34f0597037abc"}, - {file = "Cython-3.0.8-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9d3f74388db378a3c6fd06e79a809ed98df3f56484d317b81ee762dbf3c263e0"}, - {file = "Cython-3.0.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ae7ac561fd8253a9ae96311e91d12af5f701383564edc11d6338a7b60b285a6f"}, - {file = "Cython-3.0.8-cp37-cp37m-win32.whl", hash = "sha256:97b2a45845b993304f1799664fa88da676ee19442b15fdcaa31f9da7e1acc434"}, - {file = "Cython-3.0.8-cp37-cp37m-win_amd64.whl", hash = "sha256:9e2be2b340fea46fb849d378f9b80d3c08ff2e81e2bfbcdb656e2e3cd8c6b2dc"}, - {file = "Cython-3.0.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2cde23c555470db3f149ede78b518e8274853745289c956a0e06ad8d982e4db9"}, - {file = "Cython-3.0.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7990ca127e1f1beedaf8fc8bf66541d066ef4723ad7d8d47a7cbf842e0f47580"}, - {file = "Cython-3.0.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b983c8e6803f016146c26854d9150ddad5662960c804ea7f0c752c9266752f0"}, - {file = "Cython-3.0.8-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a973268d7ca1a2bdf78575e459a94a78e1a0a9bb62a7db0c50041949a73b02ff"}, - {file = "Cython-3.0.8-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:61a237bc9dd23c7faef0fcfce88c11c65d0c9bb73c74ccfa408b3a012073c20e"}, - {file = "Cython-3.0.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3a3d67f079598af49e90ff9655bf85bd358f093d727eb21ca2708f467c489cae"}, - {file = "Cython-3.0.8-cp38-cp38-win32.whl", hash = "sha256:17a642bb01a693e34c914106566f59844b4461665066613913463a719e0dd15d"}, - {file = "Cython-3.0.8-cp38-cp38-win_amd64.whl", hash = "sha256:2cdfc32252f3b6dc7c94032ab744dcedb45286733443c294d8f909a4854e7f83"}, - {file = "Cython-3.0.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fa97893d99385386925d00074654aeae3a98867f298d1e12ceaf38a9054a9bae"}, - {file = "Cython-3.0.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f05c0bf9d085c031df8f583f0d506aa3be1692023de18c45d0aaf78685bbb944"}, - {file = "Cython-3.0.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de892422582f5758bd8de187e98ac829330ec1007bc42c661f687792999988a7"}, - {file = "Cython-3.0.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:314f2355a1f1d06e3c431eaad4708cf10037b5e91e4b231d89c913989d0bdafd"}, - {file = "Cython-3.0.8-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:78825a3774211e7d5089730f00cdf7f473042acc9ceb8b9eeebe13ed3a5541de"}, - {file = "Cython-3.0.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:df8093deabc55f37028190cf5e575c26aad23fc673f34b85d5f45076bc37ce39"}, - {file = "Cython-3.0.8-cp39-cp39-win32.whl", hash = "sha256:1aca1b97e0095b3a9a6c33eada3f661a4ed0d499067d121239b193e5ba3bb4f0"}, - {file = "Cython-3.0.8-cp39-cp39-win_amd64.whl", hash = "sha256:16873d78be63bd38ffb759da7ab82814b36f56c769ee02b1d5859560e4c3ac3c"}, - {file = "Cython-3.0.8-py2.py3-none-any.whl", hash = "sha256:171b27051253d3f9108e9759e504ba59ff06e7f7ba944457f94deaf9c21bf0b6"}, - {file = "Cython-3.0.8.tar.gz", hash = "sha256:8333423d8fd5765e7cceea3a9985dd1e0a5dfeb2734629e1a2ed2d6233d39de6"}, + {file = "Cython-3.0.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e876272548d73583e90babda94c1299537006cad7a34e515a06c51b41f8657aa"}, + {file = "Cython-3.0.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:adc377aa33c3309191e617bf675fdbb51ca727acb9dc1aa23fc698d8121f7e23"}, + {file = "Cython-3.0.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:401aba1869a57aba2922ccb656a6320447e55ace42709b504c2f8e8b166f46e1"}, + {file = "Cython-3.0.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:541fbe725d6534a90b93f8c577eb70924d664b227a4631b90a6e0506d1469591"}, + {file = "Cython-3.0.10-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:86998b01f6a6d48398df8467292c7637e57f7e3a2ca68655367f13f66fed7734"}, + {file = "Cython-3.0.10-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d092c0ddba7e9e530a5c5be4ac06db8360258acc27675d1fc86294a5dc8994c5"}, + {file = "Cython-3.0.10-cp310-cp310-win32.whl", hash = "sha256:3cffb666e649dba23810732497442fb339ee67ba4e0be1f0579991e83fcc2436"}, + {file = "Cython-3.0.10-cp310-cp310-win_amd64.whl", hash = "sha256:9ea31184c7b3a728ef1f81fccb161d8948c05aa86c79f63b74fb6f3ddec860ec"}, + {file = "Cython-3.0.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:051069638abfb076900b0c2bcb6facf545655b3f429e80dd14365192074af5a4"}, + {file = "Cython-3.0.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:712760879600907189c7d0d346851525545484e13cd8b787e94bfd293da8ccf0"}, + {file = "Cython-3.0.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38d40fa1324ac47c04483d151f5e092406a147eac88a18aec789cf01c089c3f2"}, + {file = "Cython-3.0.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5bd49a3a9fdff65446a3e1c2bfc0ec85c6ce4c3cad27cd4ad7ba150a62b7fb59"}, + {file = "Cython-3.0.10-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e8df79b596633b8295eaa48b1157d796775c2bb078f32267d32f3001b687f2fd"}, + {file = "Cython-3.0.10-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bcc9795990e525c192bc5c0775e441d7d56d7a7d02210451e9e13c0448dba51b"}, + {file = "Cython-3.0.10-cp311-cp311-win32.whl", hash = "sha256:09f2000041db482cad3bfce94e1fa3a4c82b0e57390a164c02566cbbda8c4f12"}, + {file = "Cython-3.0.10-cp311-cp311-win_amd64.whl", hash = "sha256:3919a55ec9b6c7db6f68a004c21c05ed540c40dbe459ced5d801d5a1f326a053"}, + {file = "Cython-3.0.10-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8f2864ab5fcd27a346f0b50f901ebeb8f60b25a60a575ccfd982e7f3e9674914"}, + {file = "Cython-3.0.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:407840c56385b9c085826fe300213e0e76ba15d1d47daf4b58569078ecb94446"}, + {file = "Cython-3.0.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a036d00caa73550a3a976432ef21c1e3fa12637e1616aab32caded35331ae96"}, + {file = "Cython-3.0.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9cc6a0e7e23a96dec3f3c9d39690d4281beabd5297855140d0d30855f950275e"}, + {file = "Cython-3.0.10-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a5e14a8c6a8157d2b0cdc2e8e3444905d20a0e78e19d2a097e89fb8b04b51f6b"}, + {file = "Cython-3.0.10-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f8a2b8fa0fd8358bccb5f3304be563c4750aae175100463d212d5ea0ec74cbe0"}, + {file = "Cython-3.0.10-cp312-cp312-win32.whl", hash = "sha256:2d29e617fd23cf4b83afe8f93f2966566c9f565918ad1e86a4502fe825cc0a79"}, + {file = "Cython-3.0.10-cp312-cp312-win_amd64.whl", hash = "sha256:6c5af936940a38c300977b81598d9c0901158f220a58c177820e17e1774f1cf1"}, + {file = "Cython-3.0.10-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:5f465443917d5c0f69825fca3b52b64c74ac3de0143b1fff6db8ba5b48c9fb4a"}, + {file = "Cython-3.0.10-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fadb84193c25641973666e583df8df4e27c52cdc05ddce7c6f6510d690ba34a"}, + {file = "Cython-3.0.10-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fa9e7786083b6aa61594c16979d621b62e61fcd9c2edd4761641b95c7fb34b2"}, + {file = "Cython-3.0.10-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4780d0f98ce28191c4d841c4358b5d5e79d96520650910cd59904123821c52d"}, + {file = "Cython-3.0.10-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:32fbad02d1189be75eb96456d9c73f5548078e5338d8fa153ecb0115b6ee279f"}, + {file = "Cython-3.0.10-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:90e2f514fc753b55245351305a399463103ec18666150bb1c36779b9862388e9"}, + {file = "Cython-3.0.10-cp36-cp36m-win32.whl", hash = "sha256:a9c976e9ec429539a4367cb4b24d15a1e46b925976f4341143f49f5f161171f5"}, + {file = "Cython-3.0.10-cp36-cp36m-win_amd64.whl", hash = "sha256:a9bb402674788a7f4061aeef8057632ec440123e74ed0fb425308a59afdfa10e"}, + {file = "Cython-3.0.10-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:206e803598010ecc3813db8748ed685f7beeca6c413f982df9f8a505fce56563"}, + {file = "Cython-3.0.10-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15b6d397f4ee5ad54e373589522af37935a32863f1b23fa8c6922adf833e28e2"}, + {file = "Cython-3.0.10-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a181144c2f893ed8e6a994d43d0b96300bc99873f21e3b7334ca26c61c37b680"}, + {file = "Cython-3.0.10-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b74b700d6a793113d03fb54b63bdbadba6365379424bac7c0470605672769260"}, + {file = "Cython-3.0.10-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:076e9fd4e0ca33c5fa00a7479180dbfb62f17fe928e2909f82da814536e96d2b"}, + {file = "Cython-3.0.10-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:269f06e6961e8591d56e30b46e1a51b6ccb42cab04c29fa3b30d3e8723485fb4"}, + {file = "Cython-3.0.10-cp37-cp37m-win32.whl", hash = "sha256:d4e83a8ceff7af60064da4ccfce0ac82372544dd5392f1b350c34f1b04d0fae6"}, + {file = "Cython-3.0.10-cp37-cp37m-win_amd64.whl", hash = "sha256:40fac59c3a7fbcd9c25aea64c342c890a5e2270ce64a1525e840807800167799"}, + {file = "Cython-3.0.10-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f43a58bf2434870d2fc42ac2e9ff8138c9e00c6251468de279d93fa279e9ba3b"}, + {file = "Cython-3.0.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e9a885ec63d3955a08cefc4eec39fefa9fe14989c6e5e2382bd4aeb6bdb9bc3"}, + {file = "Cython-3.0.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acfbe0fff364d54906058fc61f2393f38cd7fa07d344d80923937b87e339adcf"}, + {file = "Cython-3.0.10-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8adcde00a8a88fab27509b558cd8c2959ab0c70c65d3814cfea8c68b83fa6dcd"}, + {file = "Cython-3.0.10-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2c9c1e3e78909488f3b16fabae02308423fa6369ed96ab1e250807d344cfffd7"}, + {file = "Cython-3.0.10-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fc6e0faf5b57523b073f0cdefadcaef3a51235d519a0594865925cadb3aeadf0"}, + {file = "Cython-3.0.10-cp38-cp38-win32.whl", hash = "sha256:35f6ede7c74024ed1982832ae61c9fad7cf60cc3f5b8c6a63bb34e38bc291936"}, + {file = "Cython-3.0.10-cp38-cp38-win_amd64.whl", hash = "sha256:950c0c7b770d2a7cec74fb6f5ccc321d0b51d151f48c075c0d0db635a60ba1b5"}, + {file = "Cython-3.0.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:077b61ee789e48700e25d4a16daa4258b8e65167136e457174df400cf9b4feab"}, + {file = "Cython-3.0.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64f1f8bba9d8f37c0cffc934792b4ac7c42d0891077127c11deebe9fa0a0f7e4"}, + {file = "Cython-3.0.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:651a15a8534ebfb9b58cb0b87c269c70984b6f9c88bfe65e4f635f0e3f07dfcd"}, + {file = "Cython-3.0.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d10fc9aa82e5e53a0b7fd118f9771199cddac8feb4a6d8350b7d4109085aa775"}, + {file = "Cython-3.0.10-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4f610964ab252a83e573a427e28b103e2f1dd3c23bee54f32319f9e73c3c5499"}, + {file = "Cython-3.0.10-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8c9c4c4f3ab8f8c02817b0e16e8fa7b8cc880f76e9b63fe9c010e60c1a6c2b13"}, + {file = "Cython-3.0.10-cp39-cp39-win32.whl", hash = "sha256:0bac3ccdd4e03924028220c62ae3529e17efa8ca7e9df9330de95de02f582b26"}, + {file = "Cython-3.0.10-cp39-cp39-win_amd64.whl", hash = "sha256:81f356c1c8c0885b8435bfc468025f545c5d764aa9c75ab662616dd1193c331e"}, + {file = "Cython-3.0.10-py2.py3-none-any.whl", hash = "sha256:fcbb679c0b43514d591577fd0d20021c55c240ca9ccafbdb82d3fb95e5edfee2"}, + {file = "Cython-3.0.10.tar.gz", hash = "sha256:dcc96739331fb854dcf503f94607576cfe8488066c61ca50dfd55836f132de99"}, ] [[package]] name = "dearpygui" -version = "1.10.1" +version = "1.11.1" description = "DearPyGui: A simple Python GUI Toolkit" +category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "dearpygui-1.10.1-cp310-cp310-macosx_10_6_x86_64.whl", hash = "sha256:ef1f1a8dbbd2dac9ea4fbf9d37e7812741e9a33de03ce385e398258750966a85"}, - {file = "dearpygui-1.10.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:7dc32b229d89b10ec4f647414738783afc2d6aa09c28c9f7384b07023b6ee261"}, - {file = "dearpygui-1.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:8047f4ac06fb774c1335a98d3dbb47337b07e17629a85789740298a61e6ae999"}, - {file = "dearpygui-1.10.1-cp311-cp311-macosx_10_6_x86_64.whl", hash = "sha256:e87016bdd388d0e33080cd2033047f6c58df7808e1c3e14a1b0d736b2184e1ce"}, - {file = "dearpygui-1.10.1-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:ac4e1cb01cd53490df20365645fbd0296bac093b8a415c805c18cad0aa85cac6"}, - {file = "dearpygui-1.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:1711a5cc991eaa6bc8a7a3cadb3845236c16b6753dc46b2fd1f4285db57d998e"}, - {file = "dearpygui-1.10.1-cp312-cp312-macosx_10_6_x86_64.whl", hash = "sha256:e506507ee5344bb8d059d333c4dd77cd61bb4850f66fc4b5508ffa4f456f5a98"}, - {file = "dearpygui-1.10.1-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:ed0d58e057636c4b79aee14d09b78042b122f42a6bef08d9901239de3361449d"}, - {file = "dearpygui-1.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:5350d2a03da789684fcd384d7ee9e0ea029ecf134bef30d134c439d35c9d60b4"}, - {file = "dearpygui-1.10.1-cp37-cp37m-macosx_10_6_x86_64.whl", hash = "sha256:d36b16afd0dd22674a59195e2ba37b787ea18bfb4ca96c460d6b7795f2c56980"}, - {file = "dearpygui-1.10.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:2d94b23bed91e121ad4556b811fe164598c5b4dc94a19e3195bb70a4ff632759"}, - {file = "dearpygui-1.10.1-cp37-cp37m-win_amd64.whl", hash = "sha256:d1b877a147971e062d3c006027e880fd2b88dad9d198620f12b8407dddb1f795"}, - {file = "dearpygui-1.10.1-cp38-cp38-macosx_10_6_x86_64.whl", hash = "sha256:0e30634f1f8c13994ec59c58048e97103e672f792145a57aab4a7c39c6445e5e"}, - {file = "dearpygui-1.10.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:d2cb73d22ec6c186c039c60c22efa5fc94f0562793bf20996d9eeae5ee601d55"}, - {file = "dearpygui-1.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:2a8a1305ad6bfbc6f46968067b7f02d8404f2df21a13627e8c93cdabbb30f37b"}, - {file = "dearpygui-1.10.1-cp39-cp39-macosx_10_6_x86_64.whl", hash = "sha256:a2e722e5b1fb8ab8d25e3ed82a790778849c1c66a522a327a73e25e218f98873"}, - {file = "dearpygui-1.10.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:358a221d5f53b584e7bbc76e2ad7ca012991debdd74ea3a6cfc8e2ed0ea51c92"}, - {file = "dearpygui-1.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:5ccb75b5377e5d4fcd6358ac2164418301b2747a78fee55422e3995d167d364a"}, + {file = "dearpygui-1.11.1-cp310-cp310-macosx_10_6_x86_64.whl", hash = "sha256:b668f28aab63d8ad0b2768add4e689bedb7480e8c3390edcce7a0f5d296fd61f"}, + {file = "dearpygui-1.11.1-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:39d099b1ca97fd7d36934a5187fc4cd868d4772e504290a70fc95eda03c5125d"}, + {file = "dearpygui-1.11.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:3ba12334d993b653df2d07fe34c93c4ec65e54c022066ba245cd596a18b43a68"}, + {file = "dearpygui-1.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:6cf4c44db1f016ff3eab367f7bde7f169bad5f2f90b974c202808112a69a2b15"}, + {file = "dearpygui-1.11.1-cp311-cp311-macosx_10_6_x86_64.whl", hash = "sha256:cc15cd13c1aeae2847ed9c4b2201169add3efdedf564eb706f5b5896ddaa5d8a"}, + {file = "dearpygui-1.11.1-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:9eb7d581863d39543b213252041ed25856acbfa58c57291e6acb6ccbf0c2727b"}, + {file = "dearpygui-1.11.1-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:564ff3af657f7becd059b6611e162cc9cd8148befaf8aadb10e4fb76d57df3ef"}, + {file = "dearpygui-1.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:ac6e9bde61dcb3cc253da59e70fe2b743d3c3b5791d415eaa8d307f4517048ca"}, + {file = "dearpygui-1.11.1-cp312-cp312-macosx_10_6_x86_64.whl", hash = "sha256:ccf576117ed2159cd66b419458d060923c9dcebe7fe57c65b4f4c4889287845d"}, + {file = "dearpygui-1.11.1-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:1d632e1acdaa986a8c32b57112b84685b92d9a41f18580e14d463d7ed7a52673"}, + {file = "dearpygui-1.11.1-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:ca4f7ba667f64ee682dfcb3399d9d43df6821b2d962b96b4fa4535de5776f538"}, + {file = "dearpygui-1.11.1-cp312-cp312-win_amd64.whl", hash = "sha256:8ce9881a629de72e05ca8b1ce7cefcdd77b624eb7eba6f7d6629848d84a797f6"}, + {file = "dearpygui-1.11.1-cp38-cp38-macosx_10_6_x86_64.whl", hash = "sha256:39011ccb3a3ecfe3ebccfd8c4211c2c1446abd2865cbe4ccb67dc50a7a812bfb"}, + {file = "dearpygui-1.11.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:e1dde63d20ac062530debee001ad649190a7e09622762601454c4191799f13b8"}, + {file = "dearpygui-1.11.1-cp38-cp38-win_amd64.whl", hash = "sha256:23ce7ce8e5ba24d31bd6468cc43b56f8f257ace4dce3bc5fe449c546c340893a"}, + {file = "dearpygui-1.11.1-cp39-cp39-macosx_10_6_x86_64.whl", hash = "sha256:d22285f9a5f1377d87effd1f27020eec3ae0386f7c15a4893809909b82c62b1b"}, + {file = "dearpygui-1.11.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f632bd94772e00313d0956bb9f9822c3ebcb7aa93f135f09e2fa187f3b06cea8"}, + {file = "dearpygui-1.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:0c7c4849bc674e825750be69ee480450c3589c7d159955032776aaef5e7fda58"}, ] [[package]] name = "debugpy" -version = "1.8.0" +version = "1.8.1" description = "An implementation of the Debug Adapter Protocol for Python" +category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "debugpy-1.8.0-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:7fb95ca78f7ac43393cd0e0f2b6deda438ec7c5e47fa5d38553340897d2fbdfb"}, - {file = "debugpy-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef9ab7df0b9a42ed9c878afd3eaaff471fce3fa73df96022e1f5c9f8f8c87ada"}, - {file = "debugpy-1.8.0-cp310-cp310-win32.whl", hash = "sha256:a8b7a2fd27cd9f3553ac112f356ad4ca93338feadd8910277aff71ab24d8775f"}, - {file = "debugpy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:5d9de202f5d42e62f932507ee8b21e30d49aae7e46d5b1dd5c908db1d7068637"}, - {file = "debugpy-1.8.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:ef54404365fae8d45cf450d0544ee40cefbcb9cb85ea7afe89a963c27028261e"}, - {file = "debugpy-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60009b132c91951354f54363f8ebdf7457aeb150e84abba5ae251b8e9f29a8a6"}, - {file = "debugpy-1.8.0-cp311-cp311-win32.whl", hash = "sha256:8cd0197141eb9e8a4566794550cfdcdb8b3db0818bdf8c49a8e8f8053e56e38b"}, - {file = "debugpy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:a64093656c4c64dc6a438e11d59369875d200bd5abb8f9b26c1f5f723622e153"}, - {file = "debugpy-1.8.0-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:b05a6b503ed520ad58c8dc682749113d2fd9f41ffd45daec16e558ca884008cd"}, - {file = "debugpy-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c6fb41c98ec51dd010d7ed650accfd07a87fe5e93eca9d5f584d0578f28f35f"}, - {file = "debugpy-1.8.0-cp38-cp38-win32.whl", hash = "sha256:46ab6780159eeabb43c1495d9c84cf85d62975e48b6ec21ee10c95767c0590aa"}, - {file = "debugpy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:bdc5ef99d14b9c0fcb35351b4fbfc06ac0ee576aeab6b2511702e5a648a2e595"}, - {file = "debugpy-1.8.0-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:61eab4a4c8b6125d41a34bad4e5fe3d2cc145caecd63c3fe953be4cc53e65bf8"}, - {file = "debugpy-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:125b9a637e013f9faac0a3d6a82bd17c8b5d2c875fb6b7e2772c5aba6d082332"}, - {file = "debugpy-1.8.0-cp39-cp39-win32.whl", hash = "sha256:57161629133113c97b387382045649a2b985a348f0c9366e22217c87b68b73c6"}, - {file = "debugpy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:e3412f9faa9ade82aa64a50b602544efcba848c91384e9f93497a458767e6926"}, - {file = "debugpy-1.8.0-py2.py3-none-any.whl", hash = "sha256:9c9b0ac1ce2a42888199df1a1906e45e6f3c9555497643a85e0bf2406e3ffbc4"}, - {file = "debugpy-1.8.0.zip", hash = "sha256:12af2c55b419521e33d5fb21bd022df0b5eb267c3e178f1d374a63a2a6bdccd0"}, + {file = "debugpy-1.8.1-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:3bda0f1e943d386cc7a0e71bfa59f4137909e2ed947fb3946c506e113000f741"}, + {file = "debugpy-1.8.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dda73bf69ea479c8577a0448f8c707691152e6c4de7f0c4dec5a4bc11dee516e"}, + {file = "debugpy-1.8.1-cp310-cp310-win32.whl", hash = "sha256:3a79c6f62adef994b2dbe9fc2cc9cc3864a23575b6e387339ab739873bea53d0"}, + {file = "debugpy-1.8.1-cp310-cp310-win_amd64.whl", hash = "sha256:7eb7bd2b56ea3bedb009616d9e2f64aab8fc7000d481faec3cd26c98a964bcdd"}, + {file = "debugpy-1.8.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:016a9fcfc2c6b57f939673c874310d8581d51a0fe0858e7fac4e240c5eb743cb"}, + {file = "debugpy-1.8.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd97ed11a4c7f6d042d320ce03d83b20c3fb40da892f994bc041bbc415d7a099"}, + {file = "debugpy-1.8.1-cp311-cp311-win32.whl", hash = "sha256:0de56aba8249c28a300bdb0672a9b94785074eb82eb672db66c8144fff673146"}, + {file = "debugpy-1.8.1-cp311-cp311-win_amd64.whl", hash = "sha256:1a9fe0829c2b854757b4fd0a338d93bc17249a3bf69ecf765c61d4c522bb92a8"}, + {file = "debugpy-1.8.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:3ebb70ba1a6524d19fa7bb122f44b74170c447d5746a503e36adc244a20ac539"}, + {file = "debugpy-1.8.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2e658a9630f27534e63922ebf655a6ab60c370f4d2fc5c02a5b19baf4410ace"}, + {file = "debugpy-1.8.1-cp312-cp312-win32.whl", hash = "sha256:caad2846e21188797a1f17fc09c31b84c7c3c23baf2516fed5b40b378515bbf0"}, + {file = "debugpy-1.8.1-cp312-cp312-win_amd64.whl", hash = "sha256:edcc9f58ec0fd121a25bc950d4578df47428d72e1a0d66c07403b04eb93bcf98"}, + {file = "debugpy-1.8.1-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:7a3afa222f6fd3d9dfecd52729bc2e12c93e22a7491405a0ecbf9e1d32d45b39"}, + {file = "debugpy-1.8.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d915a18f0597ef685e88bb35e5d7ab968964b7befefe1aaea1eb5b2640b586c7"}, + {file = "debugpy-1.8.1-cp38-cp38-win32.whl", hash = "sha256:92116039b5500633cc8d44ecc187abe2dfa9b90f7a82bbf81d079fcdd506bae9"}, + {file = "debugpy-1.8.1-cp38-cp38-win_amd64.whl", hash = "sha256:e38beb7992b5afd9d5244e96ad5fa9135e94993b0c551ceebf3fe1a5d9beb234"}, + {file = "debugpy-1.8.1-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:bfb20cb57486c8e4793d41996652e5a6a885b4d9175dd369045dad59eaacea42"}, + {file = "debugpy-1.8.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efd3fdd3f67a7e576dd869c184c5dd71d9aaa36ded271939da352880c012e703"}, + {file = "debugpy-1.8.1-cp39-cp39-win32.whl", hash = "sha256:58911e8521ca0c785ac7a0539f1e77e0ce2df753f786188f382229278b4cdf23"}, + {file = "debugpy-1.8.1-cp39-cp39-win_amd64.whl", hash = "sha256:6df9aa9599eb05ca179fb0b810282255202a66835c6efb1d112d21ecb830ddd3"}, + {file = "debugpy-1.8.1-py2.py3-none-any.whl", hash = "sha256:28acbe2241222b87e255260c76741e1fbf04fdc3b6d094fcf57b6c6f75ce1242"}, + {file = "debugpy-1.8.1.zip", hash = "sha256:f696d6be15be87aef621917585f9bb94b1dc9e8aced570db1b8a6fc14e8f9b42"}, ] [[package]] name = "decorator" version = "5.1.1" description = "Decorators for Humans" +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -857,6 +946,7 @@ files = [ 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.*" files = [ @@ -868,6 +958,7 @@ files = [ name = "deprecated" version = "1.2.14" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -885,6 +976,7 @@ dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] name = "distlib" version = "0.3.8" description = "Distribution utilities" +category = "dev" optional = false python-versions = "*" files = [ @@ -896,6 +988,7 @@ files = [ name = "docutils" version = "0.20.1" description = "Docutils -- Python Documentation Utilities" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -905,13 +998,14 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.2.0" +version = "1.2.1" description = "Backport of PEP 654 (exception groups)" +category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, - {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, + {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"}, + {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"}, ] [package.extras] @@ -919,13 +1013,14 @@ test = ["pytest (>=6)"] [[package]] name = "execnet" -version = "2.0.2" +version = "2.1.1" description = "execnet: rapid multi-Python deployment" +category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "execnet-2.0.2-py3-none-any.whl", hash = "sha256:88256416ae766bc9e8895c76a87928c0012183da3cc4fc18016e6f050e025f41"}, - {file = "execnet-2.0.2.tar.gz", hash = "sha256:cc59bc4423742fd71ad227122eb0dd44db51efb3dc4095b45ac9a08c770096af"}, + {file = "execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc"}, + {file = "execnet-2.1.1.tar.gz", hash = "sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3"}, ] [package.extras] @@ -935,6 +1030,7 @@ testing = ["hatch", "pre-commit", "pytest", "tox"] name = "executing" version = "2.0.1" description = "Get the currently executing AST node of a frame, and other information" +category = "main" optional = true python-versions = ">=3.5" files = [ @@ -949,6 +1045,7 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth name = "fastjsonschema" version = "2.19.1" description = "Fastest Python implementation of JSON schema" +category = "main" optional = true python-versions = "*" files = [ @@ -961,24 +1058,26 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc [[package]] name = "filelock" -version = "3.13.1" +version = "3.14.0" description = "A platform independent file lock." +category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "filelock-3.13.1-py3-none-any.whl", hash = "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"}, - {file = "filelock-3.13.1.tar.gz", hash = "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"}, + {file = "filelock-3.14.0-py3-none-any.whl", hash = "sha256:43339835842f110ca7ae60f1e1c160714c5a6afd15a2873419ab185334975c0f"}, + {file = "filelock-3.14.0.tar.gz", hash = "sha256:6ea72da3be9b8c82afd3edcf99f2fffbb5076335a5ae4d03248bb5b6c3eae78a"}, ] [package.extras] -docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.24)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] +docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] typing = ["typing-extensions (>=4.8)"] [[package]] name = "flake8" version = "6.1.0" description = "the modular source code checker: pep8 pyflakes and co" +category = "dev" optional = false python-versions = ">=3.8.1" files = [ @@ -995,6 +1094,7 @@ pyflakes = ">=3.1.0,<3.2.0" name = "flake8-bugbear" version = "23.12.2" description = "A plugin for flake8 finding likely bugs and design problems in your program. Contains warnings that don't belong in pyflakes and pycodestyle." +category = "dev" optional = false python-versions = ">=3.8.1" files = [ @@ -1011,13 +1111,14 @@ dev = ["coverage", "hypothesis", "hypothesmith (>=0.2)", "pre-commit", "pytest", [[package]] name = "flake8-builtins" -version = "2.2.0" +version = "2.5.0" description = "Check for python builtins being used as variables or parameters" +category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "flake8_builtins-2.2.0-py3-none-any.whl", hash = "sha256:7ee5766d9c60e5d579dfda84e65c6d0e6c26005f6f59cb9bf722462d7987a807"}, - {file = "flake8_builtins-2.2.0.tar.gz", hash = "sha256:392d5af3a0720c5a863aa93dc47f48c879081345a143fe9f20d995fe9ff5686a"}, + {file = "flake8_builtins-2.5.0-py3-none-any.whl", hash = "sha256:8cac7c52c6f0708c0902b46b385bc7e368a9068965083796f1431c0d2e6550cf"}, + {file = "flake8_builtins-2.5.0.tar.gz", hash = "sha256:bdaa3dd823e4f5308c5e712d19fa5f69daa52781ea874f5ea9c3637bcf56faa6"}, ] [package.dependencies] @@ -1030,6 +1131,7 @@ test = ["pytest"] name = "flake8-comprehensions" version = "3.14.0" description = "A flake8 plugin to help you write better list/set/dict comprehensions." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1044,6 +1146,7 @@ flake8 = ">=3.0,<3.2.0 || >3.2.0" name = "flake8-docstrings" version = "1.7.0" description = "Extension for flake8 which uses pydocstyle to check docstrings" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1059,6 +1162,7 @@ pydocstyle = ">=2.1" name = "flake8-plugin-utils" version = "1.3.3" description = "The package provides base classes and utils for flake8 plugin writing" +category = "dev" optional = false python-versions = ">=3.6,<4.0" files = [ @@ -1070,6 +1174,7 @@ files = [ name = "flake8-pytest-style" version = "1.7.2" description = "A flake8 plugin checking common style issues or inconsistencies with pytest-based tests." +category = "dev" optional = false python-versions = ">=3.7.2,<4.0.0" files = [ @@ -1084,6 +1189,7 @@ flake8-plugin-utils = ">=1.3.2,<2.0.0" name = "flake8-rst-docstrings" version = "0.3.0" description = "Python docstring reStructuredText (RST) validator for flake8" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1103,6 +1209,7 @@ develop = ["build", "twine"] name = "flake8-simplify" version = "0.14.6" description = "flake8 plugin which checks for code that can be simplified" +category = "dev" optional = false python-versions = ">=3.6.1" files = [ @@ -1116,60 +1223,61 @@ flake8 = ">=3.7" [[package]] name = "fonttools" -version = "4.47.2" +version = "4.51.0" description = "Tools to manipulate font files" +category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.47.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3b629108351d25512d4ea1a8393a2dba325b7b7d7308116b605ea3f8e1be88df"}, - {file = "fonttools-4.47.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c19044256c44fe299d9a73456aabee4b4d06c6b930287be93b533b4737d70aa1"}, - {file = "fonttools-4.47.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8be28c036b9f186e8c7eaf8a11b42373e7e4949f9e9f370202b9da4c4c3f56c"}, - {file = "fonttools-4.47.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f83a4daef6d2a202acb9bf572958f91cfde5b10c8ee7fb1d09a4c81e5d851fd8"}, - {file = "fonttools-4.47.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4a5a5318ba5365d992666ac4fe35365f93004109d18858a3e18ae46f67907670"}, - {file = "fonttools-4.47.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8f57ecd742545362a0f7186774b2d1c53423ed9ece67689c93a1055b236f638c"}, - {file = "fonttools-4.47.2-cp310-cp310-win32.whl", hash = "sha256:a1c154bb85dc9a4cf145250c88d112d88eb414bad81d4cb524d06258dea1bdc0"}, - {file = "fonttools-4.47.2-cp310-cp310-win_amd64.whl", hash = "sha256:3e2b95dce2ead58fb12524d0ca7d63a63459dd489e7e5838c3cd53557f8933e1"}, - {file = "fonttools-4.47.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:29495d6d109cdbabe73cfb6f419ce67080c3ef9ea1e08d5750240fd4b0c4763b"}, - {file = "fonttools-4.47.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0a1d313a415eaaba2b35d6cd33536560deeebd2ed758b9bfb89ab5d97dc5deac"}, - {file = "fonttools-4.47.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90f898cdd67f52f18049250a6474185ef6544c91f27a7bee70d87d77a8daf89c"}, - {file = "fonttools-4.47.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3480eeb52770ff75140fe7d9a2ec33fb67b07efea0ab5129c7e0c6a639c40c70"}, - {file = "fonttools-4.47.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0255dbc128fee75fb9be364806b940ed450dd6838672a150d501ee86523ac61e"}, - {file = "fonttools-4.47.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f791446ff297fd5f1e2247c188de53c1bfb9dd7f0549eba55b73a3c2087a2703"}, - {file = "fonttools-4.47.2-cp311-cp311-win32.whl", hash = "sha256:740947906590a878a4bde7dd748e85fefa4d470a268b964748403b3ab2aeed6c"}, - {file = "fonttools-4.47.2-cp311-cp311-win_amd64.whl", hash = "sha256:63fbed184979f09a65aa9c88b395ca539c94287ba3a364517698462e13e457c9"}, - {file = "fonttools-4.47.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4ec558c543609e71b2275c4894e93493f65d2f41c15fe1d089080c1d0bb4d635"}, - {file = "fonttools-4.47.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e040f905d542362e07e72e03612a6270c33d38281fd573160e1003e43718d68d"}, - {file = "fonttools-4.47.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6dd58cc03016b281bd2c74c84cdaa6bd3ce54c5a7f47478b7657b930ac3ed8eb"}, - {file = "fonttools-4.47.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32ab2e9702dff0dd4510c7bb958f265a8d3dd5c0e2547e7b5f7a3df4979abb07"}, - {file = "fonttools-4.47.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3a808f3c1d1df1f5bf39be869b6e0c263570cdafb5bdb2df66087733f566ea71"}, - {file = "fonttools-4.47.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ac71e2e201df041a2891067dc36256755b1229ae167edbdc419b16da78732c2f"}, - {file = "fonttools-4.47.2-cp312-cp312-win32.whl", hash = "sha256:69731e8bea0578b3c28fdb43dbf95b9386e2d49a399e9a4ad736b8e479b08085"}, - {file = "fonttools-4.47.2-cp312-cp312-win_amd64.whl", hash = "sha256:b3e1304e5f19ca861d86a72218ecce68f391646d85c851742d265787f55457a4"}, - {file = "fonttools-4.47.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:254d9a6f7be00212bf0c3159e0a420eb19c63793b2c05e049eb337f3023c5ecc"}, - {file = "fonttools-4.47.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eabae77a07c41ae0b35184894202305c3ad211a93b2eb53837c2a1143c8bc952"}, - {file = "fonttools-4.47.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a86a5ab2873ed2575d0fcdf1828143cfc6b977ac448e3dc616bb1e3d20efbafa"}, - {file = "fonttools-4.47.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13819db8445a0cec8c3ff5f243af6418ab19175072a9a92f6cc8ca7d1452754b"}, - {file = "fonttools-4.47.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4e743935139aa485fe3253fc33fe467eab6ea42583fa681223ea3f1a93dd01e6"}, - {file = "fonttools-4.47.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d49ce3ea7b7173faebc5664872243b40cf88814ca3eb135c4a3cdff66af71946"}, - {file = "fonttools-4.47.2-cp38-cp38-win32.whl", hash = "sha256:94208ea750e3f96e267f394d5588579bb64cc628e321dbb1d4243ffbc291b18b"}, - {file = "fonttools-4.47.2-cp38-cp38-win_amd64.whl", hash = "sha256:0f750037e02beb8b3569fbff701a572e62a685d2a0e840d75816592280e5feae"}, - {file = "fonttools-4.47.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3d71606c9321f6701642bd4746f99b6089e53d7e9817fc6b964e90d9c5f0ecc6"}, - {file = "fonttools-4.47.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:86e0427864c6c91cf77f16d1fb9bf1bbf7453e824589e8fb8461b6ee1144f506"}, - {file = "fonttools-4.47.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a00bd0e68e88987dcc047ea31c26d40a3c61185153b03457956a87e39d43c37"}, - {file = "fonttools-4.47.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5d77479fb885ef38a16a253a2f4096bc3d14e63a56d6246bfdb56365a12b20c"}, - {file = "fonttools-4.47.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5465df494f20a7d01712b072ae3ee9ad2887004701b95cb2cc6dcb9c2c97a899"}, - {file = "fonttools-4.47.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4c811d3c73b6abac275babb8aa439206288f56fdb2c6f8835e3d7b70de8937a7"}, - {file = "fonttools-4.47.2-cp39-cp39-win32.whl", hash = "sha256:5b60e3afa9635e3dfd3ace2757039593e3bd3cf128be0ddb7a1ff4ac45fa5a50"}, - {file = "fonttools-4.47.2-cp39-cp39-win_amd64.whl", hash = "sha256:7ee48bd9d6b7e8f66866c9090807e3a4a56cf43ffad48962725a190e0dd774c8"}, - {file = "fonttools-4.47.2-py3-none-any.whl", hash = "sha256:7eb7ad665258fba68fd22228a09f347469d95a97fb88198e133595947a20a184"}, - {file = "fonttools-4.47.2.tar.gz", hash = "sha256:7df26dd3650e98ca45f1e29883c96a0b9f5bb6af8d632a6a108bc744fa0bd9b3"}, + {file = "fonttools-4.51.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:84d7751f4468dd8cdd03ddada18b8b0857a5beec80bce9f435742abc9a851a74"}, + {file = "fonttools-4.51.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8b4850fa2ef2cfbc1d1f689bc159ef0f45d8d83298c1425838095bf53ef46308"}, + {file = "fonttools-4.51.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5b48a1121117047d82695d276c2af2ee3a24ffe0f502ed581acc2673ecf1037"}, + {file = "fonttools-4.51.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:180194c7fe60c989bb627d7ed5011f2bef1c4d36ecf3ec64daec8302f1ae0716"}, + {file = "fonttools-4.51.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:96a48e137c36be55e68845fc4284533bda2980f8d6f835e26bca79d7e2006438"}, + {file = "fonttools-4.51.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:806e7912c32a657fa39d2d6eb1d3012d35f841387c8fc6cf349ed70b7c340039"}, + {file = "fonttools-4.51.0-cp310-cp310-win32.whl", hash = "sha256:32b17504696f605e9e960647c5f64b35704782a502cc26a37b800b4d69ff3c77"}, + {file = "fonttools-4.51.0-cp310-cp310-win_amd64.whl", hash = "sha256:c7e91abdfae1b5c9e3a543f48ce96013f9a08c6c9668f1e6be0beabf0a569c1b"}, + {file = "fonttools-4.51.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a8feca65bab31479d795b0d16c9a9852902e3a3c0630678efb0b2b7941ea9c74"}, + {file = "fonttools-4.51.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ac27f436e8af7779f0bb4d5425aa3535270494d3bc5459ed27de3f03151e4c2"}, + {file = "fonttools-4.51.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e19bd9e9964a09cd2433a4b100ca7f34e34731e0758e13ba9a1ed6e5468cc0f"}, + {file = "fonttools-4.51.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2b92381f37b39ba2fc98c3a45a9d6383bfc9916a87d66ccb6553f7bdd129097"}, + {file = "fonttools-4.51.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5f6bc991d1610f5c3bbe997b0233cbc234b8e82fa99fc0b2932dc1ca5e5afec0"}, + {file = "fonttools-4.51.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9696fe9f3f0c32e9a321d5268208a7cc9205a52f99b89479d1b035ed54c923f1"}, + {file = "fonttools-4.51.0-cp311-cp311-win32.whl", hash = "sha256:3bee3f3bd9fa1d5ee616ccfd13b27ca605c2b4270e45715bd2883e9504735034"}, + {file = "fonttools-4.51.0-cp311-cp311-win_amd64.whl", hash = "sha256:0f08c901d3866a8905363619e3741c33f0a83a680d92a9f0e575985c2634fcc1"}, + {file = "fonttools-4.51.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4060acc2bfa2d8e98117828a238889f13b6f69d59f4f2d5857eece5277b829ba"}, + {file = "fonttools-4.51.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1250e818b5f8a679ad79660855528120a8f0288f8f30ec88b83db51515411fcc"}, + {file = "fonttools-4.51.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76f1777d8b3386479ffb4a282e74318e730014d86ce60f016908d9801af9ca2a"}, + {file = "fonttools-4.51.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b5ad456813d93b9c4b7ee55302208db2b45324315129d85275c01f5cb7e61a2"}, + {file = "fonttools-4.51.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:68b3fb7775a923be73e739f92f7e8a72725fd333eab24834041365d2278c3671"}, + {file = "fonttools-4.51.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8e2f1a4499e3b5ee82c19b5ee57f0294673125c65b0a1ff3764ea1f9db2f9ef5"}, + {file = "fonttools-4.51.0-cp312-cp312-win32.whl", hash = "sha256:278e50f6b003c6aed19bae2242b364e575bcb16304b53f2b64f6551b9c000e15"}, + {file = "fonttools-4.51.0-cp312-cp312-win_amd64.whl", hash = "sha256:b3c61423f22165541b9403ee39874dcae84cd57a9078b82e1dce8cb06b07fa2e"}, + {file = "fonttools-4.51.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:1621ee57da887c17312acc4b0e7ac30d3a4fb0fec6174b2e3754a74c26bbed1e"}, + {file = "fonttools-4.51.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e9d9298be7a05bb4801f558522adbe2feea1b0b103d5294ebf24a92dd49b78e5"}, + {file = "fonttools-4.51.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee1af4be1c5afe4c96ca23badd368d8dc75f611887fb0c0dac9f71ee5d6f110e"}, + {file = "fonttools-4.51.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c18b49adc721a7d0b8dfe7c3130c89b8704baf599fb396396d07d4aa69b824a1"}, + {file = "fonttools-4.51.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de7c29bdbdd35811f14493ffd2534b88f0ce1b9065316433b22d63ca1cd21f14"}, + {file = "fonttools-4.51.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cadf4e12a608ef1d13e039864f484c8a968840afa0258b0b843a0556497ea9ed"}, + {file = "fonttools-4.51.0-cp38-cp38-win32.whl", hash = "sha256:aefa011207ed36cd280babfaa8510b8176f1a77261833e895a9d96e57e44802f"}, + {file = "fonttools-4.51.0-cp38-cp38-win_amd64.whl", hash = "sha256:865a58b6e60b0938874af0968cd0553bcd88e0b2cb6e588727117bd099eef836"}, + {file = "fonttools-4.51.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:60a3409c9112aec02d5fb546f557bca6efa773dcb32ac147c6baf5f742e6258b"}, + {file = "fonttools-4.51.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f7e89853d8bea103c8e3514b9f9dc86b5b4120afb4583b57eb10dfa5afbe0936"}, + {file = "fonttools-4.51.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56fc244f2585d6c00b9bcc59e6593e646cf095a96fe68d62cd4da53dd1287b55"}, + {file = "fonttools-4.51.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d145976194a5242fdd22df18a1b451481a88071feadf251221af110ca8f00ce"}, + {file = "fonttools-4.51.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5b8cab0c137ca229433570151b5c1fc6af212680b58b15abd797dcdd9dd5051"}, + {file = "fonttools-4.51.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:54dcf21a2f2d06ded676e3c3f9f74b2bafded3a8ff12f0983160b13e9f2fb4a7"}, + {file = "fonttools-4.51.0-cp39-cp39-win32.whl", hash = "sha256:0118ef998a0699a96c7b28457f15546815015a2710a1b23a7bf6c1be60c01636"}, + {file = "fonttools-4.51.0-cp39-cp39-win_amd64.whl", hash = "sha256:599bdb75e220241cedc6faebfafedd7670335d2e29620d207dd0378a4e9ccc5a"}, + {file = "fonttools-4.51.0-py3-none-any.whl", hash = "sha256:15c94eeef6b095831067f72c825eb0e2d48bb4cea0647c1b05c981ecba2bf39f"}, + {file = "fonttools-4.51.0.tar.gz", hash = "sha256:dc0673361331566d7a663d7ce0f6fdcbfbdc1f59c6e3ed1165ad7202ca183c68"}, ] [package.extras] -all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] +all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] graphite = ["lz4 (>=1.7.4.2)"] interpolatable = ["munkres", "pycairo", "scipy"] -lxml = ["lxml (>=4.0,<5)"] +lxml = ["lxml (>=4.0)"] pathops = ["skia-pathops (>=0.5.0)"] plot = ["matplotlib"] repacker = ["uharfbuzz (>=0.23.0)"] @@ -1183,6 +1291,7 @@ woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] name = "fqdn" version = "1.5.1" description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" +category = "main" optional = true python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" files = [ @@ -1194,6 +1303,7 @@ files = [ name = "furo" version = "2023.9.10" description = "A clean customisable Sphinx documentation theme." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1211,6 +1321,7 @@ sphinx-basic-ng = "*" name = "gitdb" version = "4.0.11" description = "Git Object Database" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1223,25 +1334,28 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.41" +version = "3.1.43" description = "GitPython is a Python library used to interact with Git repositories" +category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "GitPython-3.1.41-py3-none-any.whl", hash = "sha256:c36b6634d069b3f719610175020a9aed919421c87552185b085e04fbbdb10b7c"}, - {file = "GitPython-3.1.41.tar.gz", hash = "sha256:ed66e624884f76df22c8e16066d567aaa5a37d5b5fa19db2c6df6f7156db9048"}, + {file = "GitPython-3.1.43-py3-none-any.whl", hash = "sha256:eec7ec56b92aad751f9912a73404bc02ba212a23adb2c7098ee668417051a1ff"}, + {file = "GitPython-3.1.43.tar.gz", hash = "sha256:35f314a9f878467f5453cc1fee295c3e18e52f1b99f10f6cf5b1682e968a9e7c"}, ] [package.dependencies] gitdb = ">=4.0.1,<5" [package.extras] -test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "sumtypes"] +doc = ["sphinx (==4.3.2)", "sphinx-autodoc-typehints", "sphinx-rtd-theme", "sphinxcontrib-applehelp (>=1.0.2,<=1.0.4)", "sphinxcontrib-devhelp (==1.0.2)", "sphinxcontrib-htmlhelp (>=2.0.0,<=2.0.1)", "sphinxcontrib-qthelp (==1.0.3)", "sphinxcontrib-serializinghtml (==1.1.5)"] +test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions"] [[package]] name = "glcontext" version = "2.5.0" description = "Portable OpenGL Context" +category = "main" optional = false python-versions = "*" files = [ @@ -1313,15 +1427,75 @@ files = [ {file = "glcontext-2.5.0.tar.gz", hash = "sha256:0f70d4be0cdd2b532a16da76c8f786b6367754a4086aaadffdbf3e37badbad02"}, ] +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +category = "main" +optional = true +python-versions = ">=3.7" +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + +[[package]] +name = "httpcore" +version = "1.0.5" +description = "A minimal low-level HTTP client." +category = "main" +optional = true +python-versions = ">=3.8" +files = [ + {file = "httpcore-1.0.5-py3-none-any.whl", hash = "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5"}, + {file = "httpcore-1.0.5.tar.gz", hash = "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61"}, +] + +[package.dependencies] +certifi = "*" +h11 = ">=0.13,<0.15" + +[package.extras] +asyncio = ["anyio (>=4.0,<5.0)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (>=1.0.0,<2.0.0)"] +trio = ["trio (>=0.22.0,<0.26.0)"] + +[[package]] +name = "httpx" +version = "0.27.0" +description = "The next generation HTTP client." +category = "main" +optional = true +python-versions = ">=3.8" +files = [ + {file = "httpx-0.27.0-py3-none-any.whl", hash = "sha256:71d5465162c13681bff01ad59b2cc68dd838ea1f10e51574bac27103f00c91a5"}, + {file = "httpx-0.27.0.tar.gz", hash = "sha256:a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5"}, +] + +[package.dependencies] +anyio = "*" +certifi = "*" +httpcore = ">=1.0.0,<2.0.0" +idna = "*" +sniffio = "*" + +[package.extras] +brotli = ["brotli", "brotlicffi"] +cli = ["click (>=8.0.0,<9.0.0)", "pygments (>=2.0.0,<3.0.0)", "rich (>=10,<14)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (>=1.0.0,<2.0.0)"] + [[package]] name = "identify" -version = "2.5.33" +version = "2.5.36" description = "File identification library for Python" +category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "identify-2.5.33-py2.py3-none-any.whl", hash = "sha256:d40ce5fcd762817627670da8a7d8d8e65f24342d14539c59488dc603bf662e34"}, - {file = "identify-2.5.33.tar.gz", hash = "sha256:161558f9fe4559e1557e1bff323e8631f6a0e4837f7497767c1782832f16b62d"}, + {file = "identify-2.5.36-py2.py3-none-any.whl", hash = "sha256:37d93f380f4de590500d9dba7db359d0d3da95ffe7f9de1753faa159e71e7dfa"}, + {file = "identify-2.5.36.tar.gz", hash = "sha256:e5e00f54165f9047fbebeb4a560f9acfb8af4c88232be60a488e9b68d122745d"}, ] [package.extras] @@ -1331,6 +1505,7 @@ license = ["ukkonen"] name = "idna" version = "3.7" description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1342,6 +1517,7 @@ files = [ name = "imagesize" version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1351,32 +1527,34 @@ files = [ [[package]] name = "importlib-metadata" -version = "7.0.1" +version = "7.1.0" description = "Read metadata from Python packages" +category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-7.0.1-py3-none-any.whl", hash = "sha256:4805911c3a4ec7c3966410053e9ec6a1fecd629117df5adee56dfc9432a1081e"}, - {file = "importlib_metadata-7.0.1.tar.gz", hash = "sha256:f238736bb06590ae52ac1fab06a3a9ef1d8dce2b7a35b5ab329371d6c8f5d2cc"}, + {file = "importlib_metadata-7.1.0-py3-none-any.whl", hash = "sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570"}, + {file = "importlib_metadata-7.1.0.tar.gz", hash = "sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2"}, ] [package.dependencies] zipp = ">=0.5" [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] [[package]] name = "importlib-resources" -version = "6.1.1" +version = "6.4.0" description = "Read resources from Python packages" +category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_resources-6.1.1-py3-none-any.whl", hash = "sha256:e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6"}, - {file = "importlib_resources-6.1.1.tar.gz", hash = "sha256:3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a"}, + {file = "importlib_resources-6.4.0-py3-none-any.whl", hash = "sha256:50d10f043df931902d4194ea07ec57960f66a80449ff867bfe782b4c486ba78c"}, + {file = "importlib_resources-6.4.0.tar.gz", hash = "sha256:cdb2b453b8046ca4e3798eb1d84f3cce1446a0e8e7b5ef4efb600f19fc398145"}, ] [package.dependencies] @@ -1384,12 +1562,13 @@ zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff", "zipp (>=3.17)"] +testing = ["jaraco.test (>=5.4)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)", "zipp (>=3.17)"] [[package]] name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1399,13 +1578,14 @@ files = [ [[package]] name = "ipykernel" -version = "6.29.0" +version = "6.29.4" description = "IPython Kernel for Jupyter" +category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "ipykernel-6.29.0-py3-none-any.whl", hash = "sha256:076663ca68492576f051e4af7720d33f34383e655f2be0d544c8b1c9de915b2f"}, - {file = "ipykernel-6.29.0.tar.gz", hash = "sha256:b5dd3013cab7b330df712891c96cd1ab868c27a7159e606f762015e9bf8ceb3f"}, + {file = "ipykernel-6.29.4-py3-none-any.whl", hash = "sha256:1181e653d95c6808039c509ef8e67c4126b3b3af7781496c7cbfb5ed938a27da"}, + {file = "ipykernel-6.29.4.tar.gz", hash = "sha256:3d44070060f9475ac2092b760123fadf105d2e2493c24848b6691a7c4f42af5c"}, ] [package.dependencies] @@ -1414,7 +1594,7 @@ comm = ">=0.1.1" debugpy = ">=1.6.5" ipython = ">=7.23.1" jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" matplotlib-inline = ">=0.1" nest-asyncio = "*" packaging = "*" @@ -1428,12 +1608,13 @@ cov = ["coverage[toml]", "curio", "matplotlib", "pytest-cov", "trio"] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"] pyqt5 = ["pyqt5"] pyside6 = ["pyside6"] -test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (==0.23.2)", "pytest-cov", "pytest-timeout"] +test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.23.5)", "pytest-cov", "pytest-timeout"] [[package]] name = "ipython" version = "8.18.1" description = "IPython: Productive Interactive Computing" +category = "main" optional = true python-versions = ">=3.9" files = [ @@ -1471,6 +1652,7 @@ test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pa name = "isoduration" version = "20.11.0" description = "Operations with ISO 8601 durations" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -1485,6 +1667,7 @@ arrow = ">=0.15.0" name = "isort" version = "5.13.2" description = "A Python utility / library to sort Python imports." +category = "dev" optional = false python-versions = ">=3.8.0" files = [ @@ -1497,13 +1680,14 @@ colors = ["colorama (>=0.4.6)"] [[package]] name = "isosurfaces" -version = "0.1.0" +version = "0.1.2" description = "Construct isolines/isosurfaces over a 2D/3D scalar field defined by a function (not a uniform grid)" +category = "main" optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "isosurfaces-0.1.0-py3-none-any.whl", hash = "sha256:a3421f7e7115f72f8f1af538ac4723e5570b1aaa0ddfc6a86520d2d781f3e91f"}, - {file = "isosurfaces-0.1.0.tar.gz", hash = "sha256:fa1b44e5e59d2f429add49289ab89e36f8dcda49b7badd99e0beea273be331f4"}, + {file = "isosurfaces-0.1.2-py3-none-any.whl", hash = "sha256:525a49ba93f4dbc35303cd2faf30976af0f99d9274cfa2787aec016b8ef96c64"}, + {file = "isosurfaces-0.1.2.tar.gz", hash = "sha256:fa51ebe864ea9355b26830e27fdd6a41d5a58b419fa8d4b47e3b8b80718d6e21"}, ] [package.dependencies] @@ -1513,6 +1697,7 @@ numpy = "*" name = "jedi" version = "0.19.1" description = "An autocompletion tool for Python that can be used for text editors." +category = "main" optional = true python-versions = ">=3.6" files = [ @@ -1532,6 +1717,7 @@ testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] name = "jinja2" version = "3.1.4" description = "A very fast and expressive template engine." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1547,22 +1733,21 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "json5" -version = "0.9.14" +version = "0.9.25" description = "A Python implementation of the JSON5 data format." +category = "main" optional = true -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "json5-0.9.14-py2.py3-none-any.whl", hash = "sha256:740c7f1b9e584a468dbb2939d8d458db3427f2c93ae2139d05f47e453eae964f"}, - {file = "json5-0.9.14.tar.gz", hash = "sha256:9ed66c3a6ca3510a976a9ef9b8c0787de24802724ab1860bc0153c7fdd589b02"}, + {file = "json5-0.9.25-py3-none-any.whl", hash = "sha256:34ed7d834b1341a86987ed52f3f76cd8ee184394906b6e22a1e0deb9ab294e8f"}, + {file = "json5-0.9.25.tar.gz", hash = "sha256:548e41b9be043f9426776f05df8635a00fe06104ea51ed24b67f908856e151ae"}, ] -[package.extras] -dev = ["hypothesis"] - [[package]] name = "jsonpointer" version = "2.4" description = "Identify specific nodes in a JSON document (RFC 6901)" +category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" files = [ @@ -1572,13 +1757,14 @@ files = [ [[package]] name = "jsonschema" -version = "4.21.1" +version = "4.22.0" description = "An implementation of JSON Schema validation for Python" +category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "jsonschema-4.21.1-py3-none-any.whl", hash = "sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f"}, - {file = "jsonschema-4.21.1.tar.gz", hash = "sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5"}, + {file = "jsonschema-4.22.0-py3-none-any.whl", hash = "sha256:ff4cfd6b1367a40e7bc6411caec72effadd3db0bbe5017de188f2d6108335802"}, + {file = "jsonschema-4.22.0.tar.gz", hash = "sha256:5b22d434a45935119af990552c862e5d6d564e8f6601206b305a61fdf661a2b7"}, ] [package.dependencies] @@ -1603,6 +1789,7 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- name = "jsonschema-specifications" version = "2023.12.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -1615,18 +1802,19 @@ referencing = ">=0.31.0" [[package]] name = "jupyter-client" -version = "8.6.0" +version = "8.6.1" description = "Jupyter protocol implementation and client libraries" +category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "jupyter_client-8.6.0-py3-none-any.whl", hash = "sha256:909c474dbe62582ae62b758bca86d6518c85234bdee2d908c778db6d72f39d99"}, - {file = "jupyter_client-8.6.0.tar.gz", hash = "sha256:0642244bb83b4764ae60d07e010e15f0e2d275ec4e918a8f7b80fbbef3ca60c7"}, + {file = "jupyter_client-8.6.1-py3-none-any.whl", hash = "sha256:3b7bd22f058434e3b9a7ea4b1500ed47de2713872288c0d511d19926f99b459f"}, + {file = "jupyter_client-8.6.1.tar.gz", hash = "sha256:e842515e2bab8e19186d89fdfea7abd15e39dd581f94e399f00e2af5a1652d3f"}, ] [package.dependencies] importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" python-dateutil = ">=2.8.2" pyzmq = ">=23.0" tornado = ">=6.2" @@ -1638,13 +1826,14 @@ test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pyt [[package]] name = "jupyter-core" -version = "5.7.1" +version = "5.7.2" description = "Jupyter core package. A base package on which Jupyter projects rely." +category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "jupyter_core-5.7.1-py3-none-any.whl", hash = "sha256:c65c82126453a723a2804aa52409930434598fd9d35091d63dfb919d2b765bb7"}, - {file = "jupyter_core-5.7.1.tar.gz", hash = "sha256:de61a9d7fc71240f688b2fb5ab659fbb56979458dc66a71decd098e03c79e218"}, + {file = "jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409"}, + {file = "jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9"}, ] [package.dependencies] @@ -1654,17 +1843,18 @@ traitlets = ">=5.3" [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] -test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] +test = ["ipykernel", "pre-commit", "pytest (<8)", "pytest-cov", "pytest-timeout"] [[package]] name = "jupyter-events" -version = "0.9.0" +version = "0.10.0" description = "Jupyter Event System library" +category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "jupyter_events-0.9.0-py3-none-any.whl", hash = "sha256:d853b3c10273ff9bc8bb8b30076d65e2c9685579db736873de6c2232dde148bf"}, - {file = "jupyter_events-0.9.0.tar.gz", hash = "sha256:81ad2e4bc710881ec274d31c6c50669d71bbaa5dd9d01e600b56faa85700d399"}, + {file = "jupyter_events-0.10.0-py3-none-any.whl", hash = "sha256:4b72130875e59d57716d327ea70d3ebc3af1944d3717e5a498b8a06c6c159960"}, + {file = "jupyter_events-0.10.0.tar.gz", hash = "sha256:670b8229d3cc882ec782144ed22e0d29e1c2d639263f92ca8383e66682845e22"}, ] [package.dependencies] @@ -1683,13 +1873,14 @@ test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "p [[package]] name = "jupyter-lsp" -version = "2.2.2" +version = "2.2.5" description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server" +category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "jupyter-lsp-2.2.2.tar.gz", hash = "sha256:256d24620542ae4bba04a50fc1f6ffe208093a07d8e697fea0a8d1b8ca1b7e5b"}, - {file = "jupyter_lsp-2.2.2-py3-none-any.whl", hash = "sha256:3b95229e4168355a8c91928057c1621ac3510ba98b2a925e82ebd77f078b1aa5"}, + {file = "jupyter-lsp-2.2.5.tar.gz", hash = "sha256:793147a05ad446f809fd53ef1cd19a9f5256fd0a2d6b7ce943a982cb4f545001"}, + {file = "jupyter_lsp-2.2.5-py3-none-any.whl", hash = "sha256:45fbddbd505f3fbfb0b6cb2f1bc5e15e83ab7c79cd6e89416b248cb3c00c11da"}, ] [package.dependencies] @@ -1698,49 +1889,51 @@ jupyter-server = ">=1.1.2" [[package]] name = "jupyter-server" -version = "2.12.5" +version = "2.14.0" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." +category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "jupyter_server-2.12.5-py3-none-any.whl", hash = "sha256:184a0f82809a8522777cfb6b760ab6f4b1bb398664c5860a27cec696cb884923"}, - {file = "jupyter_server-2.12.5.tar.gz", hash = "sha256:0edb626c94baa22809be1323f9770cf1c00a952b17097592e40d03e6a3951689"}, + {file = "jupyter_server-2.14.0-py3-none-any.whl", hash = "sha256:fb6be52c713e80e004fac34b35a0990d6d36ba06fd0a2b2ed82b899143a64210"}, + {file = "jupyter_server-2.14.0.tar.gz", hash = "sha256:659154cea512083434fd7c93b7fe0897af7a2fd0b9dd4749282b42eaac4ae677"}, ] [package.dependencies] anyio = ">=3.1.0" -argon2-cffi = "*" -jinja2 = "*" +argon2-cffi = ">=21.1" +jinja2 = ">=3.0.3" jupyter-client = ">=7.4.4" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" jupyter-events = ">=0.9.0" -jupyter-server-terminals = "*" +jupyter-server-terminals = ">=0.4.4" nbconvert = ">=6.4.4" nbformat = ">=5.3.0" -overrides = "*" -packaging = "*" -prometheus-client = "*" -pywinpty = {version = "*", markers = "os_name == \"nt\""} +overrides = ">=5.0" +packaging = ">=22.0" +prometheus-client = ">=0.9" +pywinpty = {version = ">=2.0.1", markers = "os_name == \"nt\""} pyzmq = ">=24" send2trash = ">=1.8.2" terminado = ">=0.8.3" tornado = ">=6.2.0" traitlets = ">=5.6.0" -websocket-client = "*" +websocket-client = ">=1.7" [package.extras] docs = ["ipykernel", "jinja2", "jupyter-client", "jupyter-server", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi (>=0.8.0)", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"] -test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.4)", "pytest-timeout", "requests"] +test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0,<9)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.7)", "pytest-timeout", "requests"] [[package]] name = "jupyter-server-terminals" -version = "0.5.2" +version = "0.5.3" description = "A Jupyter Server Extension Providing Terminals." +category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "jupyter_server_terminals-0.5.2-py3-none-any.whl", hash = "sha256:1b80c12765da979513c42c90215481bbc39bd8ae7c0350b4f85bc3eb58d0fa80"}, - {file = "jupyter_server_terminals-0.5.2.tar.gz", hash = "sha256:396b5ccc0881e550bf0ee7012c6ef1b53edbde69e67cab1d56e89711b46052e8"}, + {file = "jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa"}, + {file = "jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269"}, ] [package.dependencies] @@ -1753,40 +1946,44 @@ test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (> [[package]] name = "jupyterlab" -version = "4.0.11" +version = "4.1.8" description = "JupyterLab computational environment" +category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "jupyterlab-4.0.11-py3-none-any.whl", hash = "sha256:536bf0e78723153a5016ca7efb88ed0ecd7070d3f1555d5b0e2770658f900a3c"}, - {file = "jupyterlab-4.0.11.tar.gz", hash = "sha256:d1aec24712566bc25a36229788242778e498ca4088028e2f9aa156b8b7fdc8fc"}, + {file = "jupyterlab-4.1.8-py3-none-any.whl", hash = "sha256:c3baf3a2f91f89d110ed5786cd18672b9a357129d4e389d2a0dead15e11a4d2c"}, + {file = "jupyterlab-4.1.8.tar.gz", hash = "sha256:3384aded8680e7ce504fd63b8bb89a39df21c9c7694d9e7dc4a68742cdb30f9b"}, ] [package.dependencies] async-lru = ">=1.0.0" +httpx = ">=0.25.0" importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} -ipykernel = "*" +ipykernel = ">=6.5.0" jinja2 = ">=3.0.3" jupyter-core = "*" jupyter-lsp = ">=2.0.0" jupyter-server = ">=2.4.0,<3" -jupyterlab-server = ">=2.19.0,<3" +jupyterlab-server = ">=2.27.1,<3" notebook-shim = ">=0.2" packaging = "*" -tomli = {version = "*", markers = "python_version < \"3.11\""} +tomli = {version = ">=1.2.2", markers = "python_version < \"3.11\""} tornado = ">=6.2.0" traitlets = "*" [package.extras] -dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.1.6)"] -docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-tornasync", "sphinx (>=1.8,<7.2.0)", "sphinx-copybutton"] -docs-screenshots = ["altair (==5.0.1)", "ipython (==8.14.0)", "ipywidgets (==8.0.6)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.0.post0)", "matplotlib (==3.7.1)", "nbconvert (>=7.0.0)", "pandas (==2.0.2)", "scipy (==1.10.1)", "vega-datasets (==0.9.0)"] +dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.2.0)"] +docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-jupyter", "sphinx (>=1.8,<7.3.0)", "sphinx-copybutton"] +docs-screenshots = ["altair (==5.2.0)", "ipython (==8.16.1)", "ipywidgets (==8.1.1)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.0.post6)", "matplotlib (==3.8.2)", "nbconvert (>=7.0.0)", "pandas (==2.2.0)", "scipy (==1.12.0)", "vega-datasets (==0.9.0)"] test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "requests", "requests-cache", "virtualenv"] +upgrade-extension = ["copier (>=8.0,<9.0)", "jinja2-time (<0.3)", "pydantic (<2.0)", "pyyaml-include (<2.0)", "tomli-w (<2.0)"] [[package]] name = "jupyterlab-pygments" version = "0.3.0" description = "Pygments theme using JupyterLab CSS variables" +category = "main" optional = true python-versions = ">=3.8" files = [ @@ -1796,13 +1993,14 @@ files = [ [[package]] name = "jupyterlab-server" -version = "2.25.2" +version = "2.27.1" description = "A set of server components for JupyterLab and JupyterLab like applications." +category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "jupyterlab_server-2.25.2-py3-none-any.whl", hash = "sha256:5b1798c9cc6a44f65c757de9f97fc06fc3d42535afbf47d2ace5e964ab447aaf"}, - {file = "jupyterlab_server-2.25.2.tar.gz", hash = "sha256:bd0ec7a99ebcedc8bcff939ef86e52c378e44c2707e053fcd81d046ce979ee63"}, + {file = "jupyterlab_server-2.27.1-py3-none-any.whl", hash = "sha256:f5e26156e5258b24d532c84e7c74cc212e203bff93eb856f81c24c16daeecc75"}, + {file = "jupyterlab_server-2.27.1.tar.gz", hash = "sha256:097b5ac709b676c7284ac9c5e373f11930a561f52cd5a86e4fc7e5a9c8a8631d"}, ] [package.dependencies] @@ -1818,12 +2016,13 @@ requests = ">=2.31" [package.extras] docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] openapi = ["openapi-core (>=0.18.0,<0.19.0)", "ruamel-yaml"] -test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-validator (>=0.6.0,<0.8.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "ruamel-yaml", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] +test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-validator (>=0.6.0,<0.8.0)", "pytest (>=7.0,<8)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "ruamel-yaml", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] [[package]] name = "kiwisolver" version = "1.4.5" description = "A fast implementation of the Cassowary constraint solver" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1937,6 +2136,7 @@ files = [ name = "manimpango" version = "0.5.0" description = "Bindings for Pango for using with Manim." +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1962,6 +2162,7 @@ files = [ name = "mapbox-earcut" version = "1.0.1" description = "Python bindings for the mapbox earcut C++ polygon triangulation library." +category = "main" optional = false python-versions = "*" files = [ @@ -2044,6 +2245,7 @@ test = ["pytest"] name = "markdown-it-py" version = "3.0.0" description = "Python port of markdown-it. Markdown parsing, done right!" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2066,108 +2268,110 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "markupsafe" -version = "2.1.4" +version = "2.1.5" description = "Safely add untrusted strings to HTML/XML markup." +category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "MarkupSafe-2.1.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:de8153a7aae3835484ac168a9a9bdaa0c5eee4e0bc595503c95d53b942879c84"}, - {file = "MarkupSafe-2.1.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e888ff76ceb39601c59e219f281466c6d7e66bd375b4ec1ce83bcdc68306796b"}, - {file = "MarkupSafe-2.1.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0b838c37ba596fcbfca71651a104a611543077156cb0a26fe0c475e1f152ee8"}, - {file = "MarkupSafe-2.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac1ebf6983148b45b5fa48593950f90ed6d1d26300604f321c74a9ca1609f8e"}, - {file = "MarkupSafe-2.1.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0fbad3d346df8f9d72622ac71b69565e621ada2ce6572f37c2eae8dacd60385d"}, - {file = "MarkupSafe-2.1.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5291d98cd3ad9a562883468c690a2a238c4a6388ab3bd155b0c75dd55ece858"}, - {file = "MarkupSafe-2.1.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a7cc49ef48a3c7a0005a949f3c04f8baa5409d3f663a1b36f0eba9bfe2a0396e"}, - {file = "MarkupSafe-2.1.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b83041cda633871572f0d3c41dddd5582ad7d22f65a72eacd8d3d6d00291df26"}, - {file = "MarkupSafe-2.1.4-cp310-cp310-win32.whl", hash = "sha256:0c26f67b3fe27302d3a412b85ef696792c4a2386293c53ba683a89562f9399b0"}, - {file = "MarkupSafe-2.1.4-cp310-cp310-win_amd64.whl", hash = "sha256:a76055d5cb1c23485d7ddae533229039b850db711c554a12ea64a0fd8a0129e2"}, - {file = "MarkupSafe-2.1.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9e9e3c4020aa2dc62d5dd6743a69e399ce3de58320522948af6140ac959ab863"}, - {file = "MarkupSafe-2.1.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0042d6a9880b38e1dd9ff83146cc3c9c18a059b9360ceae207805567aacccc69"}, - {file = "MarkupSafe-2.1.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55d03fea4c4e9fd0ad75dc2e7e2b6757b80c152c032ea1d1de487461d8140efc"}, - {file = "MarkupSafe-2.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ab3a886a237f6e9c9f4f7d272067e712cdb4efa774bef494dccad08f39d8ae6"}, - {file = "MarkupSafe-2.1.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abf5ebbec056817057bfafc0445916bb688a255a5146f900445d081db08cbabb"}, - {file = "MarkupSafe-2.1.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e1a0d1924a5013d4f294087e00024ad25668234569289650929ab871231668e7"}, - {file = "MarkupSafe-2.1.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e7902211afd0af05fbadcc9a312e4cf10f27b779cf1323e78d52377ae4b72bea"}, - {file = "MarkupSafe-2.1.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c669391319973e49a7c6230c218a1e3044710bc1ce4c8e6eb71f7e6d43a2c131"}, - {file = "MarkupSafe-2.1.4-cp311-cp311-win32.whl", hash = "sha256:31f57d64c336b8ccb1966d156932f3daa4fee74176b0fdc48ef580be774aae74"}, - {file = "MarkupSafe-2.1.4-cp311-cp311-win_amd64.whl", hash = "sha256:54a7e1380dfece8847c71bf7e33da5d084e9b889c75eca19100ef98027bd9f56"}, - {file = "MarkupSafe-2.1.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:a76cd37d229fc385738bd1ce4cba2a121cf26b53864c1772694ad0ad348e509e"}, - {file = "MarkupSafe-2.1.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:987d13fe1d23e12a66ca2073b8d2e2a75cec2ecb8eab43ff5624ba0ad42764bc"}, - {file = "MarkupSafe-2.1.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5244324676254697fe5c181fc762284e2c5fceeb1c4e3e7f6aca2b6f107e60dc"}, - {file = "MarkupSafe-2.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78bc995e004681246e85e28e068111a4c3f35f34e6c62da1471e844ee1446250"}, - {file = "MarkupSafe-2.1.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4d176cfdfde84f732c4a53109b293d05883e952bbba68b857ae446fa3119b4f"}, - {file = "MarkupSafe-2.1.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:f9917691f410a2e0897d1ef99619fd3f7dd503647c8ff2475bf90c3cf222ad74"}, - {file = "MarkupSafe-2.1.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:f06e5a9e99b7df44640767842f414ed5d7bedaaa78cd817ce04bbd6fd86e2dd6"}, - {file = "MarkupSafe-2.1.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:396549cea79e8ca4ba65525470d534e8a41070e6b3500ce2414921099cb73e8d"}, - {file = "MarkupSafe-2.1.4-cp312-cp312-win32.whl", hash = "sha256:f6be2d708a9d0e9b0054856f07ac7070fbe1754be40ca8525d5adccdbda8f475"}, - {file = "MarkupSafe-2.1.4-cp312-cp312-win_amd64.whl", hash = "sha256:5045e892cfdaecc5b4c01822f353cf2c8feb88a6ec1c0adef2a2e705eef0f656"}, - {file = "MarkupSafe-2.1.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7a07f40ef8f0fbc5ef1000d0c78771f4d5ca03b4953fc162749772916b298fc4"}, - {file = "MarkupSafe-2.1.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d18b66fe626ac412d96c2ab536306c736c66cf2a31c243a45025156cc190dc8a"}, - {file = "MarkupSafe-2.1.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:698e84142f3f884114ea8cf83e7a67ca8f4ace8454e78fe960646c6c91c63bfa"}, - {file = "MarkupSafe-2.1.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49a3b78a5af63ec10d8604180380c13dcd870aba7928c1fe04e881d5c792dc4e"}, - {file = "MarkupSafe-2.1.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:15866d7f2dc60cfdde12ebb4e75e41be862348b4728300c36cdf405e258415ec"}, - {file = "MarkupSafe-2.1.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:6aa5e2e7fc9bc042ae82d8b79d795b9a62bd8f15ba1e7594e3db243f158b5565"}, - {file = "MarkupSafe-2.1.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:54635102ba3cf5da26eb6f96c4b8c53af8a9c0d97b64bdcb592596a6255d8518"}, - {file = "MarkupSafe-2.1.4-cp37-cp37m-win32.whl", hash = "sha256:3583a3a3ab7958e354dc1d25be74aee6228938312ee875a22330c4dc2e41beb0"}, - {file = "MarkupSafe-2.1.4-cp37-cp37m-win_amd64.whl", hash = "sha256:d6e427c7378c7f1b2bef6a344c925b8b63623d3321c09a237b7cc0e77dd98ceb"}, - {file = "MarkupSafe-2.1.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:bf1196dcc239e608605b716e7b166eb5faf4bc192f8a44b81e85251e62584bd2"}, - {file = "MarkupSafe-2.1.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4df98d4a9cd6a88d6a585852f56f2155c9cdb6aec78361a19f938810aa020954"}, - {file = "MarkupSafe-2.1.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b835aba863195269ea358cecc21b400276747cc977492319fd7682b8cd2c253d"}, - {file = "MarkupSafe-2.1.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23984d1bdae01bee794267424af55eef4dfc038dc5d1272860669b2aa025c9e3"}, - {file = "MarkupSafe-2.1.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c98c33ffe20e9a489145d97070a435ea0679fddaabcafe19982fe9c971987d5"}, - {file = "MarkupSafe-2.1.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9896fca4a8eb246defc8b2a7ac77ef7553b638e04fbf170bff78a40fa8a91474"}, - {file = "MarkupSafe-2.1.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b0fe73bac2fed83839dbdbe6da84ae2a31c11cfc1c777a40dbd8ac8a6ed1560f"}, - {file = "MarkupSafe-2.1.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c7556bafeaa0a50e2fe7dc86e0382dea349ebcad8f010d5a7dc6ba568eaaa789"}, - {file = "MarkupSafe-2.1.4-cp38-cp38-win32.whl", hash = "sha256:fc1a75aa8f11b87910ffd98de62b29d6520b6d6e8a3de69a70ca34dea85d2a8a"}, - {file = "MarkupSafe-2.1.4-cp38-cp38-win_amd64.whl", hash = "sha256:3a66c36a3864df95e4f62f9167c734b3b1192cb0851b43d7cc08040c074c6279"}, - {file = "MarkupSafe-2.1.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:765f036a3d00395a326df2835d8f86b637dbaf9832f90f5d196c3b8a7a5080cb"}, - {file = "MarkupSafe-2.1.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:21e7af8091007bf4bebf4521184f4880a6acab8df0df52ef9e513d8e5db23411"}, - {file = "MarkupSafe-2.1.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5c31fe855c77cad679b302aabc42d724ed87c043b1432d457f4976add1c2c3e"}, - {file = "MarkupSafe-2.1.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7653fa39578957bc42e5ebc15cf4361d9e0ee4b702d7d5ec96cdac860953c5b4"}, - {file = "MarkupSafe-2.1.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:47bb5f0142b8b64ed1399b6b60f700a580335c8e1c57f2f15587bd072012decc"}, - {file = "MarkupSafe-2.1.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:fe8512ed897d5daf089e5bd010c3dc03bb1bdae00b35588c49b98268d4a01e00"}, - {file = "MarkupSafe-2.1.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:36d7626a8cca4d34216875aee5a1d3d654bb3dac201c1c003d182283e3205949"}, - {file = "MarkupSafe-2.1.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b6f14a9cd50c3cb100eb94b3273131c80d102e19bb20253ac7bd7336118a673a"}, - {file = "MarkupSafe-2.1.4-cp39-cp39-win32.whl", hash = "sha256:c8f253a84dbd2c63c19590fa86a032ef3d8cc18923b8049d91bcdeeb2581fbf6"}, - {file = "MarkupSafe-2.1.4-cp39-cp39-win_amd64.whl", hash = "sha256:8b570a1537367b52396e53325769608f2a687ec9a4363647af1cded8928af959"}, - {file = "MarkupSafe-2.1.4.tar.gz", hash = "sha256:3aae9af4cac263007fd6309c64c6ab4506dd2b79382d9d19a1994f9240b8db4f"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, + {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, ] [[package]] name = "matplotlib" -version = "3.8.2" +version = "3.8.4" description = "Python plotting package" +category = "dev" optional = false python-versions = ">=3.9" files = [ - {file = "matplotlib-3.8.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:09796f89fb71a0c0e1e2f4bdaf63fb2cefc84446bb963ecdeb40dfee7dfa98c7"}, - {file = "matplotlib-3.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6f9c6976748a25e8b9be51ea028df49b8e561eed7809146da7a47dbecebab367"}, - {file = "matplotlib-3.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b78e4f2cedf303869b782071b55fdde5987fda3038e9d09e58c91cc261b5ad18"}, - {file = "matplotlib-3.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e208f46cf6576a7624195aa047cb344a7f802e113bb1a06cfd4bee431de5e31"}, - {file = "matplotlib-3.8.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:46a569130ff53798ea5f50afce7406e91fdc471ca1e0e26ba976a8c734c9427a"}, - {file = "matplotlib-3.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:830f00640c965c5b7f6bc32f0d4ce0c36dfe0379f7dd65b07a00c801713ec40a"}, - {file = "matplotlib-3.8.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d86593ccf546223eb75a39b44c32788e6f6440d13cfc4750c1c15d0fcb850b63"}, - {file = "matplotlib-3.8.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9a5430836811b7652991939012f43d2808a2db9b64ee240387e8c43e2e5578c8"}, - {file = "matplotlib-3.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9576723858a78751d5aacd2497b8aef29ffea6d1c95981505877f7ac28215c6"}, - {file = "matplotlib-3.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ba9cbd8ac6cf422f3102622b20f8552d601bf8837e49a3afed188d560152788"}, - {file = "matplotlib-3.8.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:03f9d160a29e0b65c0790bb07f4f45d6a181b1ac33eb1bb0dd225986450148f0"}, - {file = "matplotlib-3.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:3773002da767f0a9323ba1a9b9b5d00d6257dbd2a93107233167cfb581f64717"}, - {file = "matplotlib-3.8.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:4c318c1e95e2f5926fba326f68177dee364aa791d6df022ceb91b8221bd0a627"}, - {file = "matplotlib-3.8.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:091275d18d942cf1ee9609c830a1bc36610607d8223b1b981c37d5c9fc3e46a4"}, - {file = "matplotlib-3.8.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b0f3b8ea0e99e233a4bcc44590f01604840d833c280ebb8fe5554fd3e6cfe8d"}, - {file = "matplotlib-3.8.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7b1704a530395aaf73912be741c04d181f82ca78084fbd80bc737be04848331"}, - {file = "matplotlib-3.8.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:533b0e3b0c6768eef8cbe4b583731ce25a91ab54a22f830db2b031e83cca9213"}, - {file = "matplotlib-3.8.2-cp312-cp312-win_amd64.whl", hash = "sha256:0f4fc5d72b75e2c18e55eb32292659cf731d9d5b312a6eb036506304f4675630"}, - {file = "matplotlib-3.8.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:deaed9ad4da0b1aea77fe0aa0cebb9ef611c70b3177be936a95e5d01fa05094f"}, - {file = "matplotlib-3.8.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:172f4d0fbac3383d39164c6caafd3255ce6fa58f08fc392513a0b1d3b89c4f89"}, - {file = "matplotlib-3.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7d36c2209d9136cd8e02fab1c0ddc185ce79bc914c45054a9f514e44c787917"}, - {file = "matplotlib-3.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5864bdd7da445e4e5e011b199bb67168cdad10b501750367c496420f2ad00843"}, - {file = "matplotlib-3.8.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ef8345b48e95cee45ff25192ed1f4857273117917a4dcd48e3905619bcd9c9b8"}, - {file = "matplotlib-3.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:7c48d9e221b637c017232e3760ed30b4e8d5dfd081daf327e829bf2a72c731b4"}, - {file = "matplotlib-3.8.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:aa11b3c6928a1e496c1a79917d51d4cd5d04f8a2e75f21df4949eeefdf697f4b"}, - {file = "matplotlib-3.8.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1095fecf99eeb7384dabad4bf44b965f929a5f6079654b681193edf7169ec20"}, - {file = "matplotlib-3.8.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:bddfb1db89bfaa855912261c805bd0e10218923cc262b9159a49c29a7a1c1afa"}, - {file = "matplotlib-3.8.2.tar.gz", hash = "sha256:01a978b871b881ee76017152f1f1a0cbf6bd5f7b8ff8c96df0df1bd57d8755a1"}, + {file = "matplotlib-3.8.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:abc9d838f93583650c35eca41cfcec65b2e7cb50fd486da6f0c49b5e1ed23014"}, + {file = "matplotlib-3.8.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f65c9f002d281a6e904976007b2d46a1ee2bcea3a68a8c12dda24709ddc9106"}, + {file = "matplotlib-3.8.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce1edd9f5383b504dbc26eeea404ed0a00656c526638129028b758fd43fc5f10"}, + {file = "matplotlib-3.8.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecd79298550cba13a43c340581a3ec9c707bd895a6a061a78fa2524660482fc0"}, + {file = "matplotlib-3.8.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:90df07db7b599fe7035d2f74ab7e438b656528c68ba6bb59b7dc46af39ee48ef"}, + {file = "matplotlib-3.8.4-cp310-cp310-win_amd64.whl", hash = "sha256:ac24233e8f2939ac4fd2919eed1e9c0871eac8057666070e94cbf0b33dd9c338"}, + {file = "matplotlib-3.8.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:72f9322712e4562e792b2961971891b9fbbb0e525011e09ea0d1f416c4645661"}, + {file = "matplotlib-3.8.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:232ce322bfd020a434caaffbd9a95333f7c2491e59cfc014041d95e38ab90d1c"}, + {file = "matplotlib-3.8.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6addbd5b488aedb7f9bc19f91cd87ea476206f45d7116fcfe3d31416702a82fa"}, + {file = "matplotlib-3.8.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc4ccdc64e3039fc303defd119658148f2349239871db72cd74e2eeaa9b80b71"}, + {file = "matplotlib-3.8.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b7a2a253d3b36d90c8993b4620183b55665a429da8357a4f621e78cd48b2b30b"}, + {file = "matplotlib-3.8.4-cp311-cp311-win_amd64.whl", hash = "sha256:8080d5081a86e690d7688ffa542532e87f224c38a6ed71f8fbed34dd1d9fedae"}, + {file = "matplotlib-3.8.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:6485ac1f2e84676cff22e693eaa4fbed50ef5dc37173ce1f023daef4687df616"}, + {file = "matplotlib-3.8.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c89ee9314ef48c72fe92ce55c4e95f2f39d70208f9f1d9db4e64079420d8d732"}, + {file = "matplotlib-3.8.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50bac6e4d77e4262c4340d7a985c30912054745ec99756ce213bfbc3cb3808eb"}, + {file = "matplotlib-3.8.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f51c4c869d4b60d769f7b4406eec39596648d9d70246428745a681c327a8ad30"}, + {file = "matplotlib-3.8.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b12ba985837e4899b762b81f5b2845bd1a28f4fdd1a126d9ace64e9c4eb2fb25"}, + {file = "matplotlib-3.8.4-cp312-cp312-win_amd64.whl", hash = "sha256:7a6769f58ce51791b4cb8b4d7642489df347697cd3e23d88266aaaee93b41d9a"}, + {file = "matplotlib-3.8.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:843cbde2f0946dadd8c5c11c6d91847abd18ec76859dc319362a0964493f0ba6"}, + {file = "matplotlib-3.8.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1c13f041a7178f9780fb61cc3a2b10423d5e125480e4be51beaf62b172413b67"}, + {file = "matplotlib-3.8.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb44f53af0a62dc80bba4443d9b27f2fde6acfdac281d95bc872dc148a6509cc"}, + {file = "matplotlib-3.8.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:606e3b90897554c989b1e38a258c626d46c873523de432b1462f295db13de6f9"}, + {file = "matplotlib-3.8.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9bb0189011785ea794ee827b68777db3ca3f93f3e339ea4d920315a0e5a78d54"}, + {file = "matplotlib-3.8.4-cp39-cp39-win_amd64.whl", hash = "sha256:6209e5c9aaccc056e63b547a8152661324404dd92340a6e479b3a7f24b42a5d0"}, + {file = "matplotlib-3.8.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c7064120a59ce6f64103c9cefba8ffe6fba87f2c61d67c401186423c9a20fd35"}, + {file = "matplotlib-3.8.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0e47eda4eb2614300fc7bb4657fced3e83d6334d03da2173b09e447418d499f"}, + {file = "matplotlib-3.8.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:493e9f6aa5819156b58fce42b296ea31969f2aab71c5b680b4ea7a3cb5c07d94"}, + {file = "matplotlib-3.8.4.tar.gz", hash = "sha256:8aac397d5e9ec158960e31c381c5ffc52ddd52bd9a47717e2a694038167dffea"}, ] [package.dependencies] @@ -2176,7 +2380,7 @@ cycler = ">=0.10" fonttools = ">=4.22.0" importlib-resources = {version = ">=3.2.0", markers = "python_version < \"3.10\""} kiwisolver = ">=1.3.1" -numpy = ">=1.21,<2" +numpy = ">=1.21" packaging = ">=20.0" pillow = ">=8" pyparsing = ">=2.3.1" @@ -2184,13 +2388,14 @@ python-dateutil = ">=2.7" [[package]] name = "matplotlib-inline" -version = "0.1.6" +version = "0.1.7" description = "Inline Matplotlib backend for Jupyter" +category = "main" optional = true -python-versions = ">=3.5" +python-versions = ">=3.8" files = [ - {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, - {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, + {file = "matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca"}, + {file = "matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90"}, ] [package.dependencies] @@ -2200,6 +2405,7 @@ traitlets = "*" name = "mccabe" version = "0.7.0" description = "McCabe checker, plugin for flake8" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2211,6 +2417,7 @@ files = [ name = "mdit-py-plugins" version = "0.4.0" description = "Collection of plugins for markdown-it-py" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2230,6 +2437,7 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] name = "mdurl" version = "0.1.2" description = "Markdown URL utilities" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2241,6 +2449,7 @@ files = [ name = "mistune" version = "3.0.2" description = "A sane and fast Markdown parser with useful plugins and renderers" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -2252,6 +2461,7 @@ files = [ name = "moderngl" version = "5.10.0" description = "ModernGL: High performance rendering for Python 3" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2326,36 +2536,41 @@ glcontext = ">=2.5.0,<3" [[package]] name = "moderngl-window" -version = "2.4.1" +version = "2.4.6" description = "A cross platform helper library for ModernGL making window creation and resource loading simple" +category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "moderngl-window-2.4.1.tar.gz", hash = "sha256:691de764640b87af3d851257be544e1cafddb9cfa47cb144d0c1f1a0ed0a3936"}, - {file = "moderngl_window-2.4.1-py3-none-any.whl", hash = "sha256:5f2aaa6ae8d8a40fcd877febaf7494229c2bf1ef01d3fa9faa3a342075d4126a"}, + {file = "moderngl_window-2.4.6-py3-none-any.whl", hash = "sha256:cfa81c2b222536270a077e2901f5f7a18e317f7332026ae443662555ebf7a66d"}, ] [package.dependencies] moderngl = "<6" numpy = ">=1.16,<2" -Pillow = ">=5" -pyglet = ">=1.5.8,<2" +Pillow = ">=10.0.1" +pyglet = ">=2.0.0" pyrr = ">=0.10.3,<1" [package.extras] +dev = ["build", "coverage", "flake8", "mypy", "pytest", "pywavefront", "scipy", "trimesh"] +docs = ["Sphinx (>=7.2.6,<7.3.0)", "doc8", "sphinx-rtd-theme (>=1.3.0,<1.4.0)"] glfw = ["glfw"] +pdf = ["ReportLab (>=1.2)"] pygame = ["pygame (>=2.0.1)"] +pygame-ce = ["pygame-ce (>=2.0.1)"] pyqt5 = ["PyQt5"] pysdl2 = ["PySDL2"] pyside2 = ["PySide2 (<6)"] pywavefront = ["pywavefront (>=1.2.0,<2)"] tk = ["pyopengltk (>=0.0.3)"] -trimesh = ["scipy (>=1.3.2)", "trimesh (>=3.2.6,<4)"] +trimesh = ["trimesh (>=3.2.6,<4)"] [[package]] name = "multipledispatch" version = "1.0.0" description = "Multiple dispatch" +category = "main" optional = false python-versions = "*" files = [ @@ -2367,6 +2582,7 @@ files = [ name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -2378,6 +2594,7 @@ files = [ name = "myst-parser" version = "2.0.0" description = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2402,35 +2619,37 @@ testing-docutils = ["pygments", "pytest (>=7,<8)", "pytest-param-files (>=0.3.4, [[package]] name = "nbclient" -version = "0.9.0" +version = "0.10.0" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." +category = "main" optional = true python-versions = ">=3.8.0" files = [ - {file = "nbclient-0.9.0-py3-none-any.whl", hash = "sha256:a3a1ddfb34d4a9d17fc744d655962714a866639acd30130e9be84191cd97cd15"}, - {file = "nbclient-0.9.0.tar.gz", hash = "sha256:4b28c207877cf33ef3a9838cdc7a54c5ceff981194a82eac59d558f05487295e"}, + {file = "nbclient-0.10.0-py3-none-any.whl", hash = "sha256:f13e3529332a1f1f81d82a53210322476a168bb7090a0289c795fe9cc11c9d3f"}, + {file = "nbclient-0.10.0.tar.gz", hash = "sha256:4b3f1b7dba531e498449c4db4f53da339c91d449dc11e9af3a43b4eb5c5abb09"}, ] [package.dependencies] jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" nbformat = ">=5.1" traitlets = ">=5.4" [package.extras] dev = ["pre-commit"] docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] -test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] +test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] [[package]] name = "nbconvert" -version = "7.14.2" -description = "Converting Jupyter Notebooks" +version = "7.16.4" +description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script. nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)." +category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "nbconvert-7.14.2-py3-none-any.whl", hash = "sha256:db28590cef90f7faf2ebbc71acd402cbecf13d29176df728c0a9025a49345ea1"}, - {file = "nbconvert-7.14.2.tar.gz", hash = "sha256:a7f8808fd4e082431673ac538400218dd45efd076fbeb07cc6e5aa5a3a4e949e"}, + {file = "nbconvert-7.16.4-py3-none-any.whl", hash = "sha256:05873c620fe520b6322bf8a5ad562692343fe3452abda5765c7a34b7d1aa3eb3"}, + {file = "nbconvert-7.16.4.tar.gz", hash = "sha256:86ca91ba266b0a448dc96fa6c5b9d98affabde2867b363258703536807f9f7f4"}, ] [package.dependencies] @@ -2452,29 +2671,30 @@ tinycss2 = "*" traitlets = ">=5.1" [package.extras] -all = ["nbconvert[docs,qtpdf,serve,test,webpdf]"] +all = ["flaky", "ipykernel", "ipython", "ipywidgets (>=7.5)", "myst-parser", "nbsphinx (>=0.2.12)", "playwright", "pydata-sphinx-theme", "pyqtwebengine (>=5.15)", "pytest (>=7)", "sphinx (==5.0.2)", "sphinxcontrib-spelling", "tornado (>=6.1)"] docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"] -qtpdf = ["nbconvert[qtpng]"] +qtpdf = ["pyqtwebengine (>=5.15)"] qtpng = ["pyqtwebengine (>=5.15)"] serve = ["tornado (>=6.1)"] -test = ["flaky", "ipykernel", "ipywidgets (>=7.5)", "pytest"] +test = ["flaky", "ipykernel", "ipywidgets (>=7.5)", "pytest (>=7)"] webpdf = ["playwright"] [[package]] name = "nbformat" -version = "5.9.2" +version = "5.10.4" description = "The Jupyter Notebook format" +category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "nbformat-5.9.2-py3-none-any.whl", hash = "sha256:1c5172d786a41b82bcfd0c23f9e6b6f072e8fb49c39250219e4acfff1efe89e9"}, - {file = "nbformat-5.9.2.tar.gz", hash = "sha256:5f98b5ba1997dff175e77e0c17d5c10a96eaed2cbd1de3533d1fc35d5e111192"}, + {file = "nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b"}, + {file = "nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a"}, ] [package.dependencies] -fastjsonschema = "*" +fastjsonschema = ">=2.15" jsonschema = ">=2.6" -jupyter-core = "*" +jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" traitlets = ">=5.1" [package.extras] @@ -2485,6 +2705,7 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] name = "nest-asyncio" version = "1.6.0" description = "Patch asyncio to allow nested event loops" +category = "main" optional = true python-versions = ">=3.5" files = [ @@ -2496,6 +2717,7 @@ files = [ name = "networkx" version = "3.2.1" description = "Python package for creating and manipulating graphs and networks" +category = "main" optional = false python-versions = ">=3.9" files = [ @@ -2514,6 +2736,7 @@ test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] name = "nodeenv" version = "1.8.0" description = "Node.js virtual environment builder" +category = "dev" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" files = [ @@ -2526,18 +2749,19 @@ setuptools = "*" [[package]] name = "notebook" -version = "7.0.7" +version = "7.1.3" description = "Jupyter Notebook - A web-based notebook environment for interactive computing" +category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "notebook-7.0.7-py3-none-any.whl", hash = "sha256:289b606d7e173f75a18beb1406ef411b43f97f7a9c55ba03efa3622905a62346"}, - {file = "notebook-7.0.7.tar.gz", hash = "sha256:3bcff00c17b3ac142ef5f436d50637d936b274cfa0b41f6ac0175363de9b4e09"}, + {file = "notebook-7.1.3-py3-none-any.whl", hash = "sha256:919b911e59f41f6e3857ce93c9d93535ba66bb090059712770e5968c07e1004d"}, + {file = "notebook-7.1.3.tar.gz", hash = "sha256:41fcebff44cf7bb9377180808bcbae066629b55d8c7722f1ebbe75ca44f9cfc1"}, ] [package.dependencies] jupyter-server = ">=2.4.0,<3" -jupyterlab = ">=4.0.2,<5" +jupyterlab = ">=4.1.1,<4.2" jupyterlab-server = ">=2.22.1,<3" notebook-shim = ">=0.2,<0.3" tornado = ">=6.2.0" @@ -2549,13 +2773,14 @@ test = ["importlib-resources (>=5.0)", "ipykernel", "jupyter-server[test] (>=2.4 [[package]] name = "notebook-shim" -version = "0.2.3" +version = "0.2.4" description = "A shim layer for notebook traits and config" +category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "notebook_shim-0.2.3-py3-none-any.whl", hash = "sha256:a83496a43341c1674b093bfcebf0fe8e74cbe7eda5fd2bbc56f8e39e1486c0c7"}, - {file = "notebook_shim-0.2.3.tar.gz", hash = "sha256:f69388ac283ae008cd506dda10d0288b09a017d822d5e8c7129a152cbd3ce7e9"}, + {file = "notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef"}, + {file = "notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb"}, ] [package.dependencies] @@ -2566,75 +2791,79 @@ test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync" [[package]] name = "numpy" -version = "1.26.3" +version = "1.26.4" description = "Fundamental package for array computing in Python" +category = "main" optional = false python-versions = ">=3.9" files = [ - {file = "numpy-1.26.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:806dd64230dbbfaca8a27faa64e2f414bf1c6622ab78cc4264f7f5f028fee3bf"}, - {file = "numpy-1.26.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02f98011ba4ab17f46f80f7f8f1c291ee7d855fcef0a5a98db80767a468c85cd"}, - {file = "numpy-1.26.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d45b3ec2faed4baca41c76617fcdcfa4f684ff7a151ce6fc78ad3b6e85af0a6"}, - {file = "numpy-1.26.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdd2b45bf079d9ad90377048e2747a0c82351989a2165821f0c96831b4a2a54b"}, - {file = "numpy-1.26.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:211ddd1e94817ed2d175b60b6374120244a4dd2287f4ece45d49228b4d529178"}, - {file = "numpy-1.26.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b1240f767f69d7c4c8a29adde2310b871153df9b26b5cb2b54a561ac85146485"}, - {file = "numpy-1.26.3-cp310-cp310-win32.whl", hash = "sha256:21a9484e75ad018974a2fdaa216524d64ed4212e418e0a551a2d83403b0531d3"}, - {file = "numpy-1.26.3-cp310-cp310-win_amd64.whl", hash = "sha256:9e1591f6ae98bcfac2a4bbf9221c0b92ab49762228f38287f6eeb5f3f55905ce"}, - {file = "numpy-1.26.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b831295e5472954104ecb46cd98c08b98b49c69fdb7040483aff799a755a7374"}, - {file = "numpy-1.26.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9e87562b91f68dd8b1c39149d0323b42e0082db7ddb8e934ab4c292094d575d6"}, - {file = "numpy-1.26.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c66d6fec467e8c0f975818c1796d25c53521124b7cfb760114be0abad53a0a2"}, - {file = "numpy-1.26.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f25e2811a9c932e43943a2615e65fc487a0b6b49218899e62e426e7f0a57eeda"}, - {file = "numpy-1.26.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:af36e0aa45e25c9f57bf684b1175e59ea05d9a7d3e8e87b7ae1a1da246f2767e"}, - {file = "numpy-1.26.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:51c7f1b344f302067b02e0f5b5d2daa9ed4a721cf49f070280ac202738ea7f00"}, - {file = "numpy-1.26.3-cp311-cp311-win32.whl", hash = "sha256:7ca4f24341df071877849eb2034948459ce3a07915c2734f1abb4018d9c49d7b"}, - {file = "numpy-1.26.3-cp311-cp311-win_amd64.whl", hash = "sha256:39763aee6dfdd4878032361b30b2b12593fb445ddb66bbac802e2113eb8a6ac4"}, - {file = "numpy-1.26.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a7081fd19a6d573e1a05e600c82a1c421011db7935ed0d5c483e9dd96b99cf13"}, - {file = "numpy-1.26.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12c70ac274b32bc00c7f61b515126c9205323703abb99cd41836e8125ea0043e"}, - {file = "numpy-1.26.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f784e13e598e9594750b2ef6729bcd5a47f6cfe4a12cca13def35e06d8163e3"}, - {file = "numpy-1.26.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f24750ef94d56ce6e33e4019a8a4d68cfdb1ef661a52cdaee628a56d2437419"}, - {file = "numpy-1.26.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:77810ef29e0fb1d289d225cabb9ee6cf4d11978a00bb99f7f8ec2132a84e0166"}, - {file = "numpy-1.26.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8ed07a90f5450d99dad60d3799f9c03c6566709bd53b497eb9ccad9a55867f36"}, - {file = "numpy-1.26.3-cp312-cp312-win32.whl", hash = "sha256:f73497e8c38295aaa4741bdfa4fda1a5aedda5473074369eca10626835445511"}, - {file = "numpy-1.26.3-cp312-cp312-win_amd64.whl", hash = "sha256:da4b0c6c699a0ad73c810736303f7fbae483bcb012e38d7eb06a5e3b432c981b"}, - {file = "numpy-1.26.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1666f634cb3c80ccbd77ec97bc17337718f56d6658acf5d3b906ca03e90ce87f"}, - {file = "numpy-1.26.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:18c3319a7d39b2c6a9e3bb75aab2304ab79a811ac0168a671a62e6346c29b03f"}, - {file = "numpy-1.26.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b7e807d6888da0db6e7e75838444d62495e2b588b99e90dd80c3459594e857b"}, - {file = "numpy-1.26.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4d362e17bcb0011738c2d83e0a65ea8ce627057b2fdda37678f4374a382a137"}, - {file = "numpy-1.26.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b8c275f0ae90069496068c714387b4a0eba5d531aace269559ff2b43655edd58"}, - {file = "numpy-1.26.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cc0743f0302b94f397a4a65a660d4cd24267439eb16493fb3caad2e4389bccbb"}, - {file = "numpy-1.26.3-cp39-cp39-win32.whl", hash = "sha256:9bc6d1a7f8cedd519c4b7b1156d98e051b726bf160715b769106661d567b3f03"}, - {file = "numpy-1.26.3-cp39-cp39-win_amd64.whl", hash = "sha256:867e3644e208c8922a3be26fc6bbf112a035f50f0a86497f98f228c50c607bb2"}, - {file = "numpy-1.26.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3c67423b3703f8fbd90f5adaa37f85b5794d3366948efe9a5190a5f3a83fc34e"}, - {file = "numpy-1.26.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46f47ee566d98849323f01b349d58f2557f02167ee301e5e28809a8c0e27a2d0"}, - {file = "numpy-1.26.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a8474703bffc65ca15853d5fd4d06b18138ae90c17c8d12169968e998e448bb5"}, - {file = "numpy-1.26.3.tar.gz", hash = "sha256:697df43e2b6310ecc9d95f05d5ef20eacc09c7c4ecc9da3f235d39e71b7da1e4"}, + {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, + {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, + {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, + {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, + {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, + {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, + {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, + {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, + {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, + {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, + {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, ] [[package]] name = "overrides" -version = "7.6.0" +version = "7.7.0" description = "A decorator to automatically detect mismatch when overriding a method." +category = "main" optional = true python-versions = ">=3.6" files = [ - {file = "overrides-7.6.0-py3-none-any.whl", hash = "sha256:c36e6635519ea9c5b043b65c36d4b886aee8bd45b7d4681d2a6df0898df4b654"}, - {file = "overrides-7.6.0.tar.gz", hash = "sha256:01e15bbbf15b766f0675c275baa1878bd1c7dc9bc7b9ee13e677cdba93dc1bd9"}, + {file = "overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"}, + {file = "overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a"}, ] [[package]] name = "packaging" -version = "23.2" +version = "24.0" description = "Core utilities for Python packages" +category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, - {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, + {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, + {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, ] [[package]] name = "pandocfilters" version = "1.5.1" description = "Utilities for writing pandoc filters in python" +category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2644,23 +2873,25 @@ files = [ [[package]] name = "parso" -version = "0.8.3" +version = "0.8.4" description = "A Python Parser" +category = "main" optional = true python-versions = ">=3.6" files = [ - {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, - {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, + {file = "parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"}, + {file = "parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d"}, ] [package.extras] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] -testing = ["docopt", "pytest (<6.0.0)"] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +testing = ["docopt", "pytest"] [[package]] name = "pathspec" version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2672,6 +2903,7 @@ files = [ name = "pexpect" version = "4.9.0" description = "Pexpect allows easy control of interactive console applications." +category = "main" optional = true python-versions = "*" files = [ @@ -2686,6 +2918,7 @@ ptyprocess = ">=0.5" name = "pillow" version = "10.3.0" description = "Python Imaging Library (Fork)" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2770,28 +3003,31 @@ xmp = ["defusedxml"] [[package]] name = "platformdirs" -version = "4.1.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +version = "4.2.1" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "platformdirs-4.1.0-py3-none-any.whl", hash = "sha256:11c8f37bcca40db96d8144522d925583bdb7a31f7b0e37e3ed4318400a8e2380"}, - {file = "platformdirs-4.1.0.tar.gz", hash = "sha256:906d548203468492d432bcb294d4bc2fff751bf84971fbb2c10918cc206ee420"}, + {file = "platformdirs-4.2.1-py3-none-any.whl", hash = "sha256:17d5a1161b3fd67b390023cb2d3b026bbd40abde6fdb052dfbd3a29c3ba22ee1"}, + {file = "platformdirs-4.2.1.tar.gz", hash = "sha256:031cd18d4ec63ec53e82dceaac0417d218a6863f7745dfcc9efe7793b7039bdf"}, ] [package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] +docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] +type = ["mypy (>=1.8)"] [[package]] name = "pluggy" -version = "1.4.0" +version = "1.5.0" description = "plugin and hook calling mechanisms for python" +category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, - {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, ] [package.extras] @@ -2800,13 +3036,14 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "pre-commit" -version = "3.6.0" +version = "3.7.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." +category = "dev" optional = false python-versions = ">=3.9" files = [ - {file = "pre_commit-3.6.0-py2.py3-none-any.whl", hash = "sha256:c255039ef399049a5544b6ce13d135caba8f2c28c3b4033277a788f434308376"}, - {file = "pre_commit-3.6.0.tar.gz", hash = "sha256:d30bad9abf165f7785c15a21a1f46da7d0677cb00ee7ff4c579fd38922efe15d"}, + {file = "pre_commit-3.7.0-py2.py3-none-any.whl", hash = "sha256:5eae9e10c2b5ac51577c3452ec0a490455c45a0533f7960f993a0d01e59decab"}, + {file = "pre_commit-3.7.0.tar.gz", hash = "sha256:e209d61b8acdcf742404408531f0c37d49d2c734fd7cff2d6076083d191cb060"}, ] [package.dependencies] @@ -2818,13 +3055,14 @@ virtualenv = ">=20.10.0" [[package]] name = "prometheus-client" -version = "0.19.0" +version = "0.20.0" description = "Python client for the Prometheus monitoring system." +category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "prometheus_client-0.19.0-py3-none-any.whl", hash = "sha256:c88b1e6ecf6b41cd8fb5731c7ae919bf66df6ec6fafa555cd6c0e16ca169ae92"}, - {file = "prometheus_client-0.19.0.tar.gz", hash = "sha256:4585b0d1223148c27a225b10dbec5ae9bc4c81a99a3fa80774fa6209935324e1"}, + {file = "prometheus_client-0.20.0-py3-none-any.whl", hash = "sha256:cde524a85bce83ca359cc837f28b8c0db5cac7aa653a588fd7e84ba061c329e7"}, + {file = "prometheus_client-0.20.0.tar.gz", hash = "sha256:287629d00b147a32dcb2be0b9df905da599b2d82f80377083ec8463309a4bb89"}, ] [package.extras] @@ -2834,6 +3072,7 @@ twisted = ["twisted"] name = "prompt-toolkit" version = "3.0.43" description = "Library for building powerful interactive command lines in Python" +category = "main" optional = true python-versions = ">=3.7.0" files = [ @@ -2848,6 +3087,7 @@ wcwidth = "*" name = "psutil" version = "5.9.8" description = "Cross-platform lib for process and system monitoring in Python." +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ @@ -2876,6 +3116,7 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] name = "psutil-wheels" version = "5.8.0" description = "Cross-platform lib for process and system monitoring in Python." +category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2901,6 +3142,7 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "unittest2", "wmi"] name = "ptyprocess" version = "0.7.0" description = "Run a subprocess in a pseudo terminal" +category = "main" optional = true python-versions = "*" files = [ @@ -2912,6 +3154,7 @@ files = [ name = "pure-eval" version = "0.2.2" description = "Safely evaluate AST nodes without side effects" +category = "main" optional = true python-versions = "*" files = [ @@ -2926,6 +3169,7 @@ tests = ["pytest"] name = "py" version = "1.11.0" description = "library with cross-python path, ini-parsing, io, code, log facilities" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -2935,32 +3179,34 @@ files = [ [[package]] name = "pycairo" -version = "1.25.1" +version = "1.26.0" description = "Python interface for cairo" +category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "pycairo-1.25.1-cp310-cp310-win32.whl", hash = "sha256:cacb5c2abbfdfc79c728ab261ff791511e4957b606c660f9b380975b678b728f"}, - {file = "pycairo-1.25.1-cp310-cp310-win_amd64.whl", hash = "sha256:109ebbeb5bbc510b726fc31251071264dec241e5084d0668f846d7e17e5af8e0"}, - {file = "pycairo-1.25.1-cp310-cp310-win_arm64.whl", hash = "sha256:b19269a8bf9ab5e3c617f2699bed00977fd02ff304339a233654456c0236f7c6"}, - {file = "pycairo-1.25.1-cp311-cp311-win32.whl", hash = "sha256:b10e58a3ce41e487aae15050b630742e880d4135cee7a69cee2c0ea2a0b4bd0a"}, - {file = "pycairo-1.25.1-cp311-cp311-win_amd64.whl", hash = "sha256:fcf5511b05a652a0ef87f626bf26bfc1b796a67f0d1bd40781c62986fb41c356"}, - {file = "pycairo-1.25.1-cp311-cp311-win_arm64.whl", hash = "sha256:4133ba3ef6d875aa1b16643dc0801846f463b8e78750f5308c41902dfeac5b9a"}, - {file = "pycairo-1.25.1-cp312-cp312-win32.whl", hash = "sha256:56fee2837a07ecd914f4fbf78ff59445f78becd658fe36125101925dd489eb94"}, - {file = "pycairo-1.25.1-cp312-cp312-win_amd64.whl", hash = "sha256:fb31eec2c41ec74e23dc0fc9feb4007b4c37f78ec76220ed92530b342e09821a"}, - {file = "pycairo-1.25.1-cp312-cp312-win_arm64.whl", hash = "sha256:27011d822952d7817130fc17f490de94328590bc8d45bdbca9ec4a47039fca22"}, - {file = "pycairo-1.25.1-cp38-cp38-win32.whl", hash = "sha256:9a7c5ed92fe87f60e9796777d5255f2df2deeb8ab1e3c296e67a1d8c9790808c"}, - {file = "pycairo-1.25.1-cp38-cp38-win_amd64.whl", hash = "sha256:48603ad31616140ad6fa097f13086d0ce8f29ead35ad6a215962f3b0496a5a70"}, - {file = "pycairo-1.25.1-cp39-cp39-win32.whl", hash = "sha256:97666c084e9eb1c08c7fd6d306d153767acdf03c0d80349ec55863cecd4138e0"}, - {file = "pycairo-1.25.1-cp39-cp39-win_amd64.whl", hash = "sha256:ac5437d140eccd97af12a618cc1ace0d9a85f1269f29e963751949f132828b21"}, - {file = "pycairo-1.25.1-cp39-cp39-win_arm64.whl", hash = "sha256:bda5d10adbf1f5eba6b524b5a70ccf7f659680b77e691ff94b312f25a6fcc91f"}, - {file = "pycairo-1.25.1.tar.gz", hash = "sha256:7e2be4fbc3b4536f16db7a11982cbf713e75069a4d73d44fe5a49b68423f5c0c"}, + {file = "pycairo-1.26.0-cp310-cp310-win32.whl", hash = "sha256:696ba8024d2827e66e088a6e05a3b0aea30d289476bcb2ca47c9670d40900a50"}, + {file = "pycairo-1.26.0-cp310-cp310-win_amd64.whl", hash = "sha256:b6690a00fb225c19f42d76660e676aba7ae7cb18f3632cb02bce7f0d9b9c3800"}, + {file = "pycairo-1.26.0-cp310-cp310-win_arm64.whl", hash = "sha256:1d54e28170a5e790269d9db4c195cca5152ff018ba7e330d0ed05d86ccc2ea7d"}, + {file = "pycairo-1.26.0-cp311-cp311-win32.whl", hash = "sha256:5986b8da3e7de7ab931d7ad527938df38f75d3a3bdea2b515c786c5ca2c5093c"}, + {file = "pycairo-1.26.0-cp311-cp311-win_amd64.whl", hash = "sha256:d374d9ec6d2f791bf57105d87a9028db1ef2b687848f64a524e447033eae7229"}, + {file = "pycairo-1.26.0-cp311-cp311-win_arm64.whl", hash = "sha256:20a31af89d92ffd5fc60c08e65ff649f16e18621a14a40dbdb049fc74942d7a9"}, + {file = "pycairo-1.26.0-cp312-cp312-win32.whl", hash = "sha256:d63929ab5a2f890a333f2f2f51de9f1c9fe20d1bddc982c2ca577b737448d72f"}, + {file = "pycairo-1.26.0-cp312-cp312-win_amd64.whl", hash = "sha256:8616408ae93de4824a3777ec532ea75643e4bf74e49d601062c0b1788180c962"}, + {file = "pycairo-1.26.0-cp312-cp312-win_arm64.whl", hash = "sha256:a611e4d82ad8470138bb46d465d47e8db826d9d80b6a520ccd83ee007f2073e4"}, + {file = "pycairo-1.26.0-cp38-cp38-win32.whl", hash = "sha256:675578bc6d62d15ff8669f264783efc9c8c73e3a6f564b294a70fb45a2f78667"}, + {file = "pycairo-1.26.0-cp38-cp38-win_amd64.whl", hash = "sha256:aac447b423b33b64119ecdd1ffebf9163b07f5401c5da50c707197efdd1c918a"}, + {file = "pycairo-1.26.0-cp39-cp39-win32.whl", hash = "sha256:9fa51168010e2dfb45499df071fca2d921893f724646f3454951000a7ad0cabb"}, + {file = "pycairo-1.26.0-cp39-cp39-win_amd64.whl", hash = "sha256:3e4e18ea03122e60abe3eb611e2849859cc950083ff85d8369328eadf3df63f5"}, + {file = "pycairo-1.26.0-cp39-cp39-win_arm64.whl", hash = "sha256:a8f3b567ba2ad55624a809823ccf75aff8d768c20216cb5888365f6fc695c1d2"}, + {file = "pycairo-1.26.0.tar.gz", hash = "sha256:2dddd0a874fbddb21e14acd9b955881ee1dc6e63b9c549a192d613a907f9cbeb"}, ] [[package]] name = "pycodestyle" version = "2.11.1" description = "Python style guide checker" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2970,19 +3216,21 @@ files = [ [[package]] name = "pycparser" -version = "2.21" +version = "2.22" description = "C parser in Python" +category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.8" files = [ - {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, - {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, + {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, + {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, ] [[package]] name = "pydocstyle" version = "6.3.0" description = "Python docstring style checker" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -3000,6 +3248,7 @@ toml = ["tomli (>=1.2.3)"] name = "pydub" version = "0.25.1" description = "Manipulate audio with an simple and easy high level interface" +category = "main" optional = false python-versions = "*" files = [ @@ -3011,6 +3260,7 @@ files = [ name = "pyflakes" version = "3.1.0" description = "passive checker of Python programs" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -3020,54 +3270,56 @@ files = [ [[package]] name = "pygithub" -version = "2.1.1" +version = "2.3.0" description = "Use the full Github API v3" +category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "PyGithub-2.1.1-py3-none-any.whl", hash = "sha256:4b528d5d6f35e991ea5fd3f942f58748f24938805cb7fcf24486546637917337"}, - {file = "PyGithub-2.1.1.tar.gz", hash = "sha256:ecf12c2809c44147bce63b047b3d2e9dac8a41b63e90fcb263c703f64936b97c"}, + {file = "PyGithub-2.3.0-py3-none-any.whl", hash = "sha256:65b499728be3ce7b0cd2cd760da3b32f0f4d7bc55e5e0677617f90f6564e793e"}, + {file = "PyGithub-2.3.0.tar.gz", hash = "sha256:0148d7347a1cdeed99af905077010aef81a4dad988b0ba51d4108bf66b443f7e"}, ] [package.dependencies] Deprecated = "*" pyjwt = {version = ">=2.4.0", extras = ["crypto"]} pynacl = ">=1.4.0" -python-dateutil = "*" requests = ">=2.14.0" typing-extensions = ">=4.0.0" urllib3 = ">=1.26.0" [[package]] name = "pyglet" -version = "1.5.28" -description = "Cross-platform windowing and multimedia library" +version = "2.0.15" +description = "pyglet is a cross-platform games and multimedia package." +category = "main" optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "pyglet-1.5.28-py3-none-any.whl", hash = "sha256:ea312a553c266a0f45a9c209f565e3c02371c83d89fd8931422c6475ce4ecbae"}, - {file = "pyglet-1.5.28.zip", hash = "sha256:68bff532226b0e8f54dfcc2f6df7d0e463b451fae97fe9fa4af4131d34afbc00"}, + {file = "pyglet-2.0.15-py3-none-any.whl", hash = "sha256:9e4cc16efc308106fd3a9ff8f04e7a6f4f6a807c6ac8a331375efbbac8be85af"}, + {file = "pyglet-2.0.15.tar.gz", hash = "sha256:42085567cece0c7f1c14e36eef799938cbf528cfbb0150c484b984f3ff1aa771"}, ] [[package]] name = "pygments" -version = "2.17.2" +version = "2.18.0" description = "Pygments is a syntax highlighting package written in Python." +category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, - {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, + {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, + {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, ] [package.extras] -plugins = ["importlib-metadata"] windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pyjwt" version = "2.8.0" description = "JSON Web Token implementation in Python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3088,6 +3340,7 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] name = "pynacl" version = "1.5.0" description = "Python binding to the Networking and Cryptography (NaCl) library" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -3112,48 +3365,51 @@ tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] [[package]] name = "pyobjc-core" -version = "10.1" +version = "10.2" description = "Python<->ObjC Interoperability Module" +category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "pyobjc-core-10.1.tar.gz", hash = "sha256:1844f1c8e282839e6fdcb9a9722396c1c12fb1e9331eb68828a26f28a3b2b2b1"}, - {file = "pyobjc_core-10.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2a72a88222539ad07b5c8be411edc52ff9147d7cef311a2c849869d7bb9603fd"}, - {file = "pyobjc_core-10.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fe1b9987b7b0437685fb529832876c2a8463500114960d4e76bb8ae96b6bf208"}, - {file = "pyobjc_core-10.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:9f628779c345d3abd0e20048fb0e256d894c22254577a81a6dcfdb92c3647682"}, - {file = "pyobjc_core-10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25a9e5a2de19238787d24cfa7def6b7fbb94bbe89c0e3109f71c1cb108e8ab44"}, - {file = "pyobjc_core-10.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:2d43205d3a784aa87055b84c0ec0dfa76498e5f18d1ad16bdc58a3dcf5a7d5d0"}, - {file = "pyobjc_core-10.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0aa9799b5996a893944999a2f1afcf1de119cab3551c169ad9f54d12e1d38c99"}, + {file = "pyobjc-core-10.2.tar.gz", hash = "sha256:0153206e15d0e0d7abd53ee8a7fbaf5606602a032e177a028fc8589516a8771c"}, + {file = "pyobjc_core-10.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b8eab50ce7f17017a0f1d68c3b7e88bb1bb033415fdff62b8e0a9ee4ab72f242"}, + {file = "pyobjc_core-10.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f2115971463073426ab926416e17e5c16de5b90d1a1f2a2d8724637eb1c21308"}, + {file = "pyobjc_core-10.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:a70546246177c23acb323c9324330e37638f1a0a3d13664abcba3bb75e43012c"}, + {file = "pyobjc_core-10.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a9b5a215080d13bd7526031d21d5eb27a410780878d863f486053a0eba7ca9a5"}, + {file = "pyobjc_core-10.2-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:eb1ab700a44bcc4ceb125091dfaae0b998b767b49990df5fdc83eb58158d8e3f"}, + {file = "pyobjc_core-10.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c9a7163aff9c47d654f835f80361c1b112886ec754800d34e75d1e02ff52c3d7"}, ] [[package]] name = "pyobjc-framework-cocoa" -version = "10.1" +version = "10.2" description = "Wrappers for the Cocoa frameworks on macOS" +category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "pyobjc-framework-Cocoa-10.1.tar.gz", hash = "sha256:8faaf1292a112e488b777d0c19862d993f3f384f3927dc6eca0d8d2221906a14"}, - {file = "pyobjc_framework_Cocoa-10.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2e82c2e20b89811d92a7e6e487b6980f360b7c142e2576e90f0e7569caf8202b"}, - {file = "pyobjc_framework_Cocoa-10.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0860a9beb7e5c72a1f575679a6d1428a398fa19ad710fb116df899972912e304"}, - {file = "pyobjc_framework_Cocoa-10.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:34b791ea740e1afce211f19334e45469fea9a48d8fce5072e146199fd19ff49f"}, - {file = "pyobjc_framework_Cocoa-10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1398c1a9bebad1a0f2549980e20f4aade00c341b9bac56b4493095a65917d34a"}, - {file = "pyobjc_framework_Cocoa-10.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:22be21226e223d26c9e77645564225787f2b12a750dd17c7ad99c36f428eda14"}, - {file = "pyobjc_framework_Cocoa-10.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0280561f4fb98a864bd23f2c480d907b0edbffe1048654f5dfab160cea8198e6"}, + {file = "pyobjc-framework-Cocoa-10.2.tar.gz", hash = "sha256:6383141379636b13855dca1b39c032752862b829f93a49d7ddb35046abfdc035"}, + {file = "pyobjc_framework_Cocoa-10.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f9227b4f271fda2250f5a88cbc686ff30ae02c0f923bb7854bb47972397496b2"}, + {file = "pyobjc_framework_Cocoa-10.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6a6042b7703bdc33b7491959c715c1e810a3f8c7a560c94b36e00ef321480797"}, + {file = "pyobjc_framework_Cocoa-10.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:18886d5013cd7dc7ecd6e0df5134c767569b5247fc10a5e293c72ee3937b217b"}, + {file = "pyobjc_framework_Cocoa-10.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1ecf01400ee698d2e0ff4c907bcf9608d9d710e97203fbb97b37d208507a9362"}, + {file = "pyobjc_framework_Cocoa-10.2-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:0def036a7b24e3ae37a244c77bec96b7c9c8384bf6bb4d33369f0a0c8807a70d"}, + {file = "pyobjc_framework_Cocoa-10.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5f47ecc393bc1019c4b47e8653207188df784ac006ad54d8c2eb528906ff7013"}, ] [package.dependencies] -pyobjc-core = ">=10.1" +pyobjc-core = ">=10.2" [[package]] name = "pyparsing" -version = "3.1.1" +version = "3.1.2" description = "pyparsing module - Classes and methods to define and execute parsing grammars" +category = "dev" optional = false python-versions = ">=3.6.8" files = [ - {file = "pyparsing-3.1.1-py3-none-any.whl", hash = "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb"}, - {file = "pyparsing-3.1.1.tar.gz", hash = "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db"}, + {file = "pyparsing-3.1.2-py3-none-any.whl", hash = "sha256:f9db75911801ed778fe61bb643079ff86601aca99fcae6345aa67292038fb742"}, + {file = "pyparsing-3.1.2.tar.gz", hash = "sha256:a1bac0ce561155ecc3ed78ca94d3c9378656ad4c94c1270de543f621420f94ad"}, ] [package.extras] @@ -3163,6 +3419,7 @@ diagrams = ["jinja2", "railroad-diagrams"] name = "pyrr" version = "0.10.3" description = "3D mathematical functions using NumPy" +category = "main" optional = false python-versions = "*" files = [ @@ -3178,6 +3435,7 @@ numpy = "*" name = "pytest" version = "7.4.4" description = "pytest: simple powerful testing with Python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3200,6 +3458,7 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no name = "pytest-cov" version = "4.1.0" description = "Pytest plugin for measuring coverage." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3218,6 +3477,7 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale name = "pytest-forked" version = "1.6.0" description = "run tests in isolated forked subprocesses" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3233,6 +3493,7 @@ pytest = ">=3.10" name = "pytest-xdist" version = "2.5.0" description = "pytest xdist plugin for distributed testing and loop-on-failing modes" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -3252,13 +3513,14 @@ testing = ["filelock"] [[package]] name = "python-dateutil" -version = "2.8.2" +version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" +category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ - {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"}, + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, ] [package.dependencies] @@ -3268,6 +3530,7 @@ six = ">=1.5" name = "python-json-logger" version = "2.0.7" description = "A python library adding a json log formatter" +category = "main" optional = true python-versions = ">=3.6" files = [ @@ -3279,6 +3542,7 @@ files = [ name = "pywin32" version = "306" description = "Python for Window Extensions" +category = "main" optional = true python-versions = "*" files = [ @@ -3300,23 +3564,25 @@ files = [ [[package]] name = "pywinpty" -version = "2.0.12" +version = "2.0.13" description = "Pseudo terminal support for Windows from Python." +category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "pywinpty-2.0.12-cp310-none-win_amd64.whl", hash = "sha256:21319cd1d7c8844fb2c970fb3a55a3db5543f112ff9cfcd623746b9c47501575"}, - {file = "pywinpty-2.0.12-cp311-none-win_amd64.whl", hash = "sha256:853985a8f48f4731a716653170cd735da36ffbdc79dcb4c7b7140bce11d8c722"}, - {file = "pywinpty-2.0.12-cp312-none-win_amd64.whl", hash = "sha256:1617b729999eb6713590e17665052b1a6ae0ad76ee31e60b444147c5b6a35dca"}, - {file = "pywinpty-2.0.12-cp38-none-win_amd64.whl", hash = "sha256:189380469ca143d06e19e19ff3fba0fcefe8b4a8cc942140a6b863aed7eebb2d"}, - {file = "pywinpty-2.0.12-cp39-none-win_amd64.whl", hash = "sha256:7520575b6546db23e693cbd865db2764097bd6d4ef5dc18c92555904cd62c3d4"}, - {file = "pywinpty-2.0.12.tar.gz", hash = "sha256:8197de460ae8ebb7f5d1701dfa1b5df45b157bb832e92acba316305e18ca00dd"}, + {file = "pywinpty-2.0.13-cp310-none-win_amd64.whl", hash = "sha256:697bff211fb5a6508fee2dc6ff174ce03f34a9a233df9d8b5fe9c8ce4d5eaf56"}, + {file = "pywinpty-2.0.13-cp311-none-win_amd64.whl", hash = "sha256:b96fb14698db1284db84ca38c79f15b4cfdc3172065b5137383910567591fa99"}, + {file = "pywinpty-2.0.13-cp312-none-win_amd64.whl", hash = "sha256:2fd876b82ca750bb1333236ce98488c1be96b08f4f7647cfdf4129dfad83c2d4"}, + {file = "pywinpty-2.0.13-cp38-none-win_amd64.whl", hash = "sha256:61d420c2116c0212808d31625611b51caf621fe67f8a6377e2e8b617ea1c1f7d"}, + {file = "pywinpty-2.0.13-cp39-none-win_amd64.whl", hash = "sha256:71cb613a9ee24174730ac7ae439fd179ca34ccb8c5349e8d7b72ab5dea2c6f4b"}, + {file = "pywinpty-2.0.13.tar.gz", hash = "sha256:c34e32351a3313ddd0d7da23d27f835c860d32fe4ac814d372a3ea9594f41dde"}, ] [[package]] name = "pyyaml" version = "6.0.1" description = "YAML parser and emitter for Python" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -3375,104 +3641,100 @@ files = [ [[package]] name = "pyzmq" -version = "25.1.2" +version = "26.0.3" description = "Python bindings for 0MQ" +category = "main" optional = true -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "pyzmq-25.1.2-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:e624c789359f1a16f83f35e2c705d07663ff2b4d4479bad35621178d8f0f6ea4"}, - {file = "pyzmq-25.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:49151b0efece79f6a79d41a461d78535356136ee70084a1c22532fc6383f4ad0"}, - {file = "pyzmq-25.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9a5f194cf730f2b24d6af1f833c14c10f41023da46a7f736f48b6d35061e76e"}, - {file = "pyzmq-25.1.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:faf79a302f834d9e8304fafdc11d0d042266667ac45209afa57e5efc998e3872"}, - {file = "pyzmq-25.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f51a7b4ead28d3fca8dda53216314a553b0f7a91ee8fc46a72b402a78c3e43d"}, - {file = "pyzmq-25.1.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:0ddd6d71d4ef17ba5a87becf7ddf01b371eaba553c603477679ae817a8d84d75"}, - {file = "pyzmq-25.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:246747b88917e4867e2367b005fc8eefbb4a54b7db363d6c92f89d69abfff4b6"}, - {file = "pyzmq-25.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:00c48ae2fd81e2a50c3485de1b9d5c7c57cd85dc8ec55683eac16846e57ac979"}, - {file = "pyzmq-25.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5a68d491fc20762b630e5db2191dd07ff89834086740f70e978bb2ef2668be08"}, - {file = "pyzmq-25.1.2-cp310-cp310-win32.whl", hash = "sha256:09dfe949e83087da88c4a76767df04b22304a682d6154de2c572625c62ad6886"}, - {file = "pyzmq-25.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:fa99973d2ed20417744fca0073390ad65ce225b546febb0580358e36aa90dba6"}, - {file = "pyzmq-25.1.2-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:82544e0e2d0c1811482d37eef297020a040c32e0687c1f6fc23a75b75db8062c"}, - {file = "pyzmq-25.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:01171fc48542348cd1a360a4b6c3e7d8f46cdcf53a8d40f84db6707a6768acc1"}, - {file = "pyzmq-25.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc69c96735ab501419c432110016329bf0dea8898ce16fab97c6d9106dc0b348"}, - {file = "pyzmq-25.1.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3e124e6b1dd3dfbeb695435dff0e383256655bb18082e094a8dd1f6293114642"}, - {file = "pyzmq-25.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7598d2ba821caa37a0f9d54c25164a4fa351ce019d64d0b44b45540950458840"}, - {file = "pyzmq-25.1.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d1299d7e964c13607efd148ca1f07dcbf27c3ab9e125d1d0ae1d580a1682399d"}, - {file = "pyzmq-25.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4e6f689880d5ad87918430957297c975203a082d9a036cc426648fcbedae769b"}, - {file = "pyzmq-25.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cc69949484171cc961e6ecd4a8911b9ce7a0d1f738fcae717177c231bf77437b"}, - {file = "pyzmq-25.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9880078f683466b7f567b8624bfc16cad65077be046b6e8abb53bed4eeb82dd3"}, - {file = "pyzmq-25.1.2-cp311-cp311-win32.whl", hash = "sha256:4e5837af3e5aaa99a091302df5ee001149baff06ad22b722d34e30df5f0d9097"}, - {file = "pyzmq-25.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:25c2dbb97d38b5ac9fd15586e048ec5eb1e38f3d47fe7d92167b0c77bb3584e9"}, - {file = "pyzmq-25.1.2-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:11e70516688190e9c2db14fcf93c04192b02d457b582a1f6190b154691b4c93a"}, - {file = "pyzmq-25.1.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:313c3794d650d1fccaaab2df942af9f2c01d6217c846177cfcbc693c7410839e"}, - {file = "pyzmq-25.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b3cbba2f47062b85fe0ef9de5b987612140a9ba3a9c6d2543c6dec9f7c2ab27"}, - {file = "pyzmq-25.1.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc31baa0c32a2ca660784d5af3b9487e13b61b3032cb01a115fce6588e1bed30"}, - {file = "pyzmq-25.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02c9087b109070c5ab0b383079fa1b5f797f8d43e9a66c07a4b8b8bdecfd88ee"}, - {file = "pyzmq-25.1.2-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:f8429b17cbb746c3e043cb986328da023657e79d5ed258b711c06a70c2ea7537"}, - {file = "pyzmq-25.1.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5074adeacede5f810b7ef39607ee59d94e948b4fd954495bdb072f8c54558181"}, - {file = "pyzmq-25.1.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7ae8f354b895cbd85212da245f1a5ad8159e7840e37d78b476bb4f4c3f32a9fe"}, - {file = "pyzmq-25.1.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b264bf2cc96b5bc43ce0e852be995e400376bd87ceb363822e2cb1964fcdc737"}, - {file = "pyzmq-25.1.2-cp312-cp312-win32.whl", hash = "sha256:02bbc1a87b76e04fd780b45e7f695471ae6de747769e540da909173d50ff8e2d"}, - {file = "pyzmq-25.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:ced111c2e81506abd1dc142e6cd7b68dd53747b3b7ae5edbea4578c5eeff96b7"}, - {file = "pyzmq-25.1.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:7b6d09a8962a91151f0976008eb7b29b433a560fde056ec7a3db9ec8f1075438"}, - {file = "pyzmq-25.1.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:967668420f36878a3c9ecb5ab33c9d0ff8d054f9c0233d995a6d25b0e95e1b6b"}, - {file = "pyzmq-25.1.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5edac3f57c7ddaacdb4d40f6ef2f9e299471fc38d112f4bc6d60ab9365445fb0"}, - {file = "pyzmq-25.1.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0dabfb10ef897f3b7e101cacba1437bd3a5032ee667b7ead32bbcdd1a8422fe7"}, - {file = "pyzmq-25.1.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:2c6441e0398c2baacfe5ba30c937d274cfc2dc5b55e82e3749e333aabffde561"}, - {file = "pyzmq-25.1.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:16b726c1f6c2e7625706549f9dbe9b06004dfbec30dbed4bf50cbdfc73e5b32a"}, - {file = "pyzmq-25.1.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:a86c2dd76ef71a773e70551a07318b8e52379f58dafa7ae1e0a4be78efd1ff16"}, - {file = "pyzmq-25.1.2-cp36-cp36m-win32.whl", hash = "sha256:359f7f74b5d3c65dae137f33eb2bcfa7ad9ebefd1cab85c935f063f1dbb245cc"}, - {file = "pyzmq-25.1.2-cp36-cp36m-win_amd64.whl", hash = "sha256:55875492f820d0eb3417b51d96fea549cde77893ae3790fd25491c5754ea2f68"}, - {file = "pyzmq-25.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b8c8a419dfb02e91b453615c69568442e897aaf77561ee0064d789705ff37a92"}, - {file = "pyzmq-25.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8807c87fa893527ae8a524c15fc505d9950d5e856f03dae5921b5e9aa3b8783b"}, - {file = "pyzmq-25.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5e319ed7d6b8f5fad9b76daa0a68497bc6f129858ad956331a5835785761e003"}, - {file = "pyzmq-25.1.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:3c53687dde4d9d473c587ae80cc328e5b102b517447456184b485587ebd18b62"}, - {file = "pyzmq-25.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9add2e5b33d2cd765ad96d5eb734a5e795a0755f7fc49aa04f76d7ddda73fd70"}, - {file = "pyzmq-25.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:e690145a8c0c273c28d3b89d6fb32c45e0d9605b2293c10e650265bf5c11cfec"}, - {file = "pyzmq-25.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:00a06faa7165634f0cac1abb27e54d7a0b3b44eb9994530b8ec73cf52e15353b"}, - {file = "pyzmq-25.1.2-cp37-cp37m-win32.whl", hash = "sha256:0f97bc2f1f13cb16905a5f3e1fbdf100e712d841482b2237484360f8bc4cb3d7"}, - {file = "pyzmq-25.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6cc0020b74b2e410287e5942e1e10886ff81ac77789eb20bec13f7ae681f0fdd"}, - {file = "pyzmq-25.1.2-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:bef02cfcbded83473bdd86dd8d3729cd82b2e569b75844fb4ea08fee3c26ae41"}, - {file = "pyzmq-25.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e10a4b5a4b1192d74853cc71a5e9fd022594573926c2a3a4802020360aa719d8"}, - {file = "pyzmq-25.1.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8c5f80e578427d4695adac6fdf4370c14a2feafdc8cb35549c219b90652536ae"}, - {file = "pyzmq-25.1.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5dde6751e857910c1339890f3524de74007958557593b9e7e8c5f01cd919f8a7"}, - {file = "pyzmq-25.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea1608dd169da230a0ad602d5b1ebd39807ac96cae1845c3ceed39af08a5c6df"}, - {file = "pyzmq-25.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0f513130c4c361201da9bc69df25a086487250e16b5571ead521b31ff6b02220"}, - {file = "pyzmq-25.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:019744b99da30330798bb37df33549d59d380c78e516e3bab9c9b84f87a9592f"}, - {file = "pyzmq-25.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2e2713ef44be5d52dd8b8e2023d706bf66cb22072e97fc71b168e01d25192755"}, - {file = "pyzmq-25.1.2-cp38-cp38-win32.whl", hash = "sha256:07cd61a20a535524906595e09344505a9bd46f1da7a07e504b315d41cd42eb07"}, - {file = "pyzmq-25.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb7e49a17fb8c77d3119d41a4523e432eb0c6932187c37deb6fbb00cc3028088"}, - {file = "pyzmq-25.1.2-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:94504ff66f278ab4b7e03e4cba7e7e400cb73bfa9d3d71f58d8972a8dc67e7a6"}, - {file = "pyzmq-25.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6dd0d50bbf9dca1d0bdea219ae6b40f713a3fb477c06ca3714f208fd69e16fd8"}, - {file = "pyzmq-25.1.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:004ff469d21e86f0ef0369717351073e0e577428e514c47c8480770d5e24a565"}, - {file = "pyzmq-25.1.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c0b5ca88a8928147b7b1e2dfa09f3b6c256bc1135a1338536cbc9ea13d3b7add"}, - {file = "pyzmq-25.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c9a79f1d2495b167119d02be7448bfba57fad2a4207c4f68abc0bab4b92925b"}, - {file = "pyzmq-25.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:518efd91c3d8ac9f9b4f7dd0e2b7b8bf1a4fe82a308009016b07eaa48681af82"}, - {file = "pyzmq-25.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1ec23bd7b3a893ae676d0e54ad47d18064e6c5ae1fadc2f195143fb27373f7f6"}, - {file = "pyzmq-25.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db36c27baed588a5a8346b971477b718fdc66cf5b80cbfbd914b4d6d355e44e2"}, - {file = "pyzmq-25.1.2-cp39-cp39-win32.whl", hash = "sha256:39b1067f13aba39d794a24761e385e2eddc26295826530a8c7b6c6c341584289"}, - {file = "pyzmq-25.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:8e9f3fabc445d0ce320ea2c59a75fe3ea591fdbdeebec5db6de530dd4b09412e"}, - {file = "pyzmq-25.1.2-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a8c1d566344aee826b74e472e16edae0a02e2a044f14f7c24e123002dcff1c05"}, - {file = "pyzmq-25.1.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:759cfd391a0996345ba94b6a5110fca9c557ad4166d86a6e81ea526c376a01e8"}, - {file = "pyzmq-25.1.2-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c61e346ac34b74028ede1c6b4bcecf649d69b707b3ff9dc0fab453821b04d1e"}, - {file = "pyzmq-25.1.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cb8fc1f8d69b411b8ec0b5f1ffbcaf14c1db95b6bccea21d83610987435f1a4"}, - {file = "pyzmq-25.1.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:3c00c9b7d1ca8165c610437ca0c92e7b5607b2f9076f4eb4b095c85d6e680a1d"}, - {file = "pyzmq-25.1.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:df0c7a16ebb94452d2909b9a7b3337940e9a87a824c4fc1c7c36bb4404cb0cde"}, - {file = "pyzmq-25.1.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:45999e7f7ed5c390f2e87ece7f6c56bf979fb213550229e711e45ecc7d42ccb8"}, - {file = "pyzmq-25.1.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ac170e9e048b40c605358667aca3d94e98f604a18c44bdb4c102e67070f3ac9b"}, - {file = "pyzmq-25.1.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1b604734bec94f05f81b360a272fc824334267426ae9905ff32dc2be433ab96"}, - {file = "pyzmq-25.1.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:a793ac733e3d895d96f865f1806f160696422554e46d30105807fdc9841b9f7d"}, - {file = "pyzmq-25.1.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0806175f2ae5ad4b835ecd87f5f85583316b69f17e97786f7443baaf54b9bb98"}, - {file = "pyzmq-25.1.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ef12e259e7bc317c7597d4f6ef59b97b913e162d83b421dd0db3d6410f17a244"}, - {file = "pyzmq-25.1.2-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea253b368eb41116011add00f8d5726762320b1bda892f744c91997b65754d73"}, - {file = "pyzmq-25.1.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b9b1f2ad6498445a941d9a4fee096d387fee436e45cc660e72e768d3d8ee611"}, - {file = "pyzmq-25.1.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:8b14c75979ce932c53b79976a395cb2a8cd3aaf14aef75e8c2cb55a330b9b49d"}, - {file = "pyzmq-25.1.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:889370d5174a741a62566c003ee8ddba4b04c3f09a97b8000092b7ca83ec9c49"}, - {file = "pyzmq-25.1.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a18fff090441a40ffda8a7f4f18f03dc56ae73f148f1832e109f9bffa85df15"}, - {file = "pyzmq-25.1.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99a6b36f95c98839ad98f8c553d8507644c880cf1e0a57fe5e3a3f3969040882"}, - {file = "pyzmq-25.1.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4345c9a27f4310afbb9c01750e9461ff33d6fb74cd2456b107525bbeebcb5be3"}, - {file = "pyzmq-25.1.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3516e0b6224cf6e43e341d56da15fd33bdc37fa0c06af4f029f7d7dfceceabbc"}, - {file = "pyzmq-25.1.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:146b9b1f29ead41255387fb07be56dc29639262c0f7344f570eecdcd8d683314"}, - {file = "pyzmq-25.1.2.tar.gz", hash = "sha256:93f1aa311e8bb912e34f004cf186407a4e90eec4f0ecc0efd26056bf7eda0226"}, + {file = "pyzmq-26.0.3-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:44dd6fc3034f1eaa72ece33588867df9e006a7303725a12d64c3dff92330f625"}, + {file = "pyzmq-26.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:acb704195a71ac5ea5ecf2811c9ee19ecdc62b91878528302dd0be1b9451cc90"}, + {file = "pyzmq-26.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dbb9c997932473a27afa93954bb77a9f9b786b4ccf718d903f35da3232317de"}, + {file = "pyzmq-26.0.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6bcb34f869d431799c3ee7d516554797f7760cb2198ecaa89c3f176f72d062be"}, + {file = "pyzmq-26.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38ece17ec5f20d7d9b442e5174ae9f020365d01ba7c112205a4d59cf19dc38ee"}, + {file = "pyzmq-26.0.3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:ba6e5e6588e49139a0979d03a7deb9c734bde647b9a8808f26acf9c547cab1bf"}, + {file = "pyzmq-26.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3bf8b000a4e2967e6dfdd8656cd0757d18c7e5ce3d16339e550bd462f4857e59"}, + {file = "pyzmq-26.0.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2136f64fbb86451dbbf70223635a468272dd20075f988a102bf8a3f194a411dc"}, + {file = "pyzmq-26.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e8918973fbd34e7814f59143c5f600ecd38b8038161239fd1a3d33d5817a38b8"}, + {file = "pyzmq-26.0.3-cp310-cp310-win32.whl", hash = "sha256:0aaf982e68a7ac284377d051c742610220fd06d330dcd4c4dbb4cdd77c22a537"}, + {file = "pyzmq-26.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:f1a9b7d00fdf60b4039f4455afd031fe85ee8305b019334b72dcf73c567edc47"}, + {file = "pyzmq-26.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:80b12f25d805a919d53efc0a5ad7c0c0326f13b4eae981a5d7b7cc343318ebb7"}, + {file = "pyzmq-26.0.3-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:a72a84570f84c374b4c287183debc776dc319d3e8ce6b6a0041ce2e400de3f32"}, + {file = "pyzmq-26.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ca684ee649b55fd8f378127ac8462fb6c85f251c2fb027eb3c887e8ee347bcd"}, + {file = "pyzmq-26.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e222562dc0f38571c8b1ffdae9d7adb866363134299264a1958d077800b193b7"}, + {file = "pyzmq-26.0.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f17cde1db0754c35a91ac00b22b25c11da6eec5746431d6e5092f0cd31a3fea9"}, + {file = "pyzmq-26.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b7c0c0b3244bb2275abe255d4a30c050d541c6cb18b870975553f1fb6f37527"}, + {file = "pyzmq-26.0.3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:ac97a21de3712afe6a6c071abfad40a6224fd14fa6ff0ff8d0c6e6cd4e2f807a"}, + {file = "pyzmq-26.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:88b88282e55fa39dd556d7fc04160bcf39dea015f78e0cecec8ff4f06c1fc2b5"}, + {file = "pyzmq-26.0.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:72b67f966b57dbd18dcc7efbc1c7fc9f5f983e572db1877081f075004614fcdd"}, + {file = "pyzmq-26.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f4b6cecbbf3b7380f3b61de3a7b93cb721125dc125c854c14ddc91225ba52f83"}, + {file = "pyzmq-26.0.3-cp311-cp311-win32.whl", hash = "sha256:eed56b6a39216d31ff8cd2f1d048b5bf1700e4b32a01b14379c3b6dde9ce3aa3"}, + {file = "pyzmq-26.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:3191d312c73e3cfd0f0afdf51df8405aafeb0bad71e7ed8f68b24b63c4f36500"}, + {file = "pyzmq-26.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:b6907da3017ef55139cf0e417c5123a84c7332520e73a6902ff1f79046cd3b94"}, + {file = "pyzmq-26.0.3-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:068ca17214038ae986d68f4a7021f97e187ed278ab6dccb79f837d765a54d753"}, + {file = "pyzmq-26.0.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:7821d44fe07335bea256b9f1f41474a642ca55fa671dfd9f00af8d68a920c2d4"}, + {file = "pyzmq-26.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eeb438a26d87c123bb318e5f2b3d86a36060b01f22fbdffd8cf247d52f7c9a2b"}, + {file = "pyzmq-26.0.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:69ea9d6d9baa25a4dc9cef5e2b77b8537827b122214f210dd925132e34ae9b12"}, + {file = "pyzmq-26.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7daa3e1369355766dea11f1d8ef829905c3b9da886ea3152788dc25ee6079e02"}, + {file = "pyzmq-26.0.3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:6ca7a9a06b52d0e38ccf6bca1aeff7be178917893f3883f37b75589d42c4ac20"}, + {file = "pyzmq-26.0.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1b7d0e124948daa4d9686d421ef5087c0516bc6179fdcf8828b8444f8e461a77"}, + {file = "pyzmq-26.0.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:e746524418b70f38550f2190eeee834db8850088c834d4c8406fbb9bc1ae10b2"}, + {file = "pyzmq-26.0.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:6b3146f9ae6af82c47a5282ac8803523d381b3b21caeae0327ed2f7ecb718798"}, + {file = "pyzmq-26.0.3-cp312-cp312-win32.whl", hash = "sha256:2b291d1230845871c00c8462c50565a9cd6026fe1228e77ca934470bb7d70ea0"}, + {file = "pyzmq-26.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:926838a535c2c1ea21c903f909a9a54e675c2126728c21381a94ddf37c3cbddf"}, + {file = "pyzmq-26.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:5bf6c237f8c681dfb91b17f8435b2735951f0d1fad10cc5dfd96db110243370b"}, + {file = "pyzmq-26.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c0991f5a96a8e620f7691e61178cd8f457b49e17b7d9cfa2067e2a0a89fc1d5"}, + {file = "pyzmq-26.0.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:dbf012d8fcb9f2cf0643b65df3b355fdd74fc0035d70bb5c845e9e30a3a4654b"}, + {file = "pyzmq-26.0.3-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:01fbfbeb8249a68d257f601deb50c70c929dc2dfe683b754659569e502fbd3aa"}, + {file = "pyzmq-26.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c8eb19abe87029c18f226d42b8a2c9efdd139d08f8bf6e085dd9075446db450"}, + {file = "pyzmq-26.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:5344b896e79800af86ad643408ca9aa303a017f6ebff8cee5a3163c1e9aec987"}, + {file = "pyzmq-26.0.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:204e0f176fd1d067671157d049466869b3ae1fc51e354708b0dc41cf94e23a3a"}, + {file = "pyzmq-26.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a42db008d58530efa3b881eeee4991146de0b790e095f7ae43ba5cc612decbc5"}, + {file = "pyzmq-26.0.3-cp37-cp37m-win32.whl", hash = "sha256:8d7a498671ca87e32b54cb47c82a92b40130a26c5197d392720a1bce1b3c77cf"}, + {file = "pyzmq-26.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:3b4032a96410bdc760061b14ed6a33613ffb7f702181ba999df5d16fb96ba16a"}, + {file = "pyzmq-26.0.3-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:2cc4e280098c1b192c42a849de8de2c8e0f3a84086a76ec5b07bfee29bda7d18"}, + {file = "pyzmq-26.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5bde86a2ed3ce587fa2b207424ce15b9a83a9fa14422dcc1c5356a13aed3df9d"}, + {file = "pyzmq-26.0.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:34106f68e20e6ff253c9f596ea50397dbd8699828d55e8fa18bd4323d8d966e6"}, + {file = "pyzmq-26.0.3-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ebbbd0e728af5db9b04e56389e2299a57ea8b9dd15c9759153ee2455b32be6ad"}, + {file = "pyzmq-26.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6b1d1c631e5940cac5a0b22c5379c86e8df6a4ec277c7a856b714021ab6cfad"}, + {file = "pyzmq-26.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e891ce81edd463b3b4c3b885c5603c00141151dd9c6936d98a680c8c72fe5c67"}, + {file = "pyzmq-26.0.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9b273ecfbc590a1b98f014ae41e5cf723932f3b53ba9367cfb676f838038b32c"}, + {file = "pyzmq-26.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b32bff85fb02a75ea0b68f21e2412255b5731f3f389ed9aecc13a6752f58ac97"}, + {file = "pyzmq-26.0.3-cp38-cp38-win32.whl", hash = "sha256:f6c21c00478a7bea93caaaef9e7629145d4153b15a8653e8bb4609d4bc70dbfc"}, + {file = "pyzmq-26.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:3401613148d93ef0fd9aabdbddb212de3db7a4475367f49f590c837355343972"}, + {file = "pyzmq-26.0.3-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:2ed8357f4c6e0daa4f3baf31832df8a33334e0fe5b020a61bc8b345a3db7a606"}, + {file = "pyzmq-26.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c1c8f2a2ca45292084c75bb6d3a25545cff0ed931ed228d3a1810ae3758f975f"}, + {file = "pyzmq-26.0.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b63731993cdddcc8e087c64e9cf003f909262b359110070183d7f3025d1c56b5"}, + {file = "pyzmq-26.0.3-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b3cd31f859b662ac5d7f4226ec7d8bd60384fa037fc02aee6ff0b53ba29a3ba8"}, + {file = "pyzmq-26.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:115f8359402fa527cf47708d6f8a0f8234f0e9ca0cab7c18c9c189c194dbf620"}, + {file = "pyzmq-26.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:715bdf952b9533ba13dfcf1f431a8f49e63cecc31d91d007bc1deb914f47d0e4"}, + {file = "pyzmq-26.0.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e1258c639e00bf5e8a522fec6c3eaa3e30cf1c23a2f21a586be7e04d50c9acab"}, + {file = "pyzmq-26.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:15c59e780be8f30a60816a9adab900c12a58d79c1ac742b4a8df044ab2a6d920"}, + {file = "pyzmq-26.0.3-cp39-cp39-win32.whl", hash = "sha256:d0cdde3c78d8ab5b46595054e5def32a755fc028685add5ddc7403e9f6de9879"}, + {file = "pyzmq-26.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:ce828058d482ef860746bf532822842e0ff484e27f540ef5c813d516dd8896d2"}, + {file = "pyzmq-26.0.3-cp39-cp39-win_arm64.whl", hash = "sha256:788f15721c64109cf720791714dc14afd0f449d63f3a5487724f024345067381"}, + {file = "pyzmq-26.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2c18645ef6294d99b256806e34653e86236eb266278c8ec8112622b61db255de"}, + {file = "pyzmq-26.0.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e6bc96ebe49604df3ec2c6389cc3876cabe475e6bfc84ced1bf4e630662cb35"}, + {file = "pyzmq-26.0.3-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:971e8990c5cc4ddcff26e149398fc7b0f6a042306e82500f5e8db3b10ce69f84"}, + {file = "pyzmq-26.0.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8416c23161abd94cc7da80c734ad7c9f5dbebdadfdaa77dad78244457448223"}, + {file = "pyzmq-26.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:082a2988364b60bb5de809373098361cf1dbb239623e39e46cb18bc035ed9c0c"}, + {file = "pyzmq-26.0.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d57dfbf9737763b3a60d26e6800e02e04284926329aee8fb01049635e957fe81"}, + {file = "pyzmq-26.0.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:77a85dca4c2430ac04dc2a2185c2deb3858a34fe7f403d0a946fa56970cf60a1"}, + {file = "pyzmq-26.0.3-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4c82a6d952a1d555bf4be42b6532927d2a5686dd3c3e280e5f63225ab47ac1f5"}, + {file = "pyzmq-26.0.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4496b1282c70c442809fc1b151977c3d967bfb33e4e17cedbf226d97de18f709"}, + {file = "pyzmq-26.0.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:e4946d6bdb7ba972dfda282f9127e5756d4f299028b1566d1245fa0d438847e6"}, + {file = "pyzmq-26.0.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:03c0ae165e700364b266876d712acb1ac02693acd920afa67da2ebb91a0b3c09"}, + {file = "pyzmq-26.0.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:3e3070e680f79887d60feeda051a58d0ac36622e1759f305a41059eff62c6da7"}, + {file = "pyzmq-26.0.3-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6ca08b840fe95d1c2bd9ab92dac5685f949fc6f9ae820ec16193e5ddf603c3b2"}, + {file = "pyzmq-26.0.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e76654e9dbfb835b3518f9938e565c7806976c07b37c33526b574cc1a1050480"}, + {file = "pyzmq-26.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:871587bdadd1075b112e697173e946a07d722459d20716ceb3d1bd6c64bd08ce"}, + {file = "pyzmq-26.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d0a2d1bd63a4ad79483049b26514e70fa618ce6115220da9efdff63688808b17"}, + {file = "pyzmq-26.0.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0270b49b6847f0d106d64b5086e9ad5dc8a902413b5dbbb15d12b60f9c1747a4"}, + {file = "pyzmq-26.0.3-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:703c60b9910488d3d0954ca585c34f541e506a091a41930e663a098d3b794c67"}, + {file = "pyzmq-26.0.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74423631b6be371edfbf7eabb02ab995c2563fee60a80a30829176842e71722a"}, + {file = "pyzmq-26.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4adfbb5451196842a88fda3612e2c0414134874bffb1c2ce83ab4242ec9e027d"}, + {file = "pyzmq-26.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3516119f4f9b8671083a70b6afaa0a070f5683e431ab3dc26e9215620d7ca1ad"}, + {file = "pyzmq-26.0.3.tar.gz", hash = "sha256:dba7d9f2e047dfa2bca3b01f4f84aa5246725203d6284e3790f2ca15fba6b40a"}, ] [package.dependencies] @@ -3480,13 +3742,14 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} [[package]] name = "referencing" -version = "0.32.1" +version = "0.35.1" description = "JSON Referencing + Python" +category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "referencing-0.32.1-py3-none-any.whl", hash = "sha256:7e4dc12271d8e15612bfe35792f5ea1c40970dadf8624602e33db2758f7ee554"}, - {file = "referencing-0.32.1.tar.gz", hash = "sha256:3c57da0513e9563eb7e203ebe9bb3a1b509b042016433bd1e45a2853466c3dd3"}, + {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"}, + {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"}, ] [package.dependencies] @@ -3497,6 +3760,7 @@ rpds-py = ">=0.7.0" name = "requests" version = "2.31.0" description = "Python HTTP for Humans." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3518,6 +3782,7 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "restructuredtext-lint" version = "1.4.0" description = "reStructuredText linter" +category = "dev" optional = false python-versions = "*" files = [ @@ -3531,6 +3796,7 @@ docutils = ">=0.11,<1.0" name = "rfc3339-validator" version = "0.1.4" description = "A pure python RFC3339 validator" +category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -3545,6 +3811,7 @@ six = "*" name = "rfc3986-validator" version = "0.1.1" description = "Pure python rfc3986 validator" +category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -3554,13 +3821,14 @@ files = [ [[package]] name = "rich" -version = "13.7.0" +version = "13.7.1" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +category = "main" optional = false python-versions = ">=3.7.0" files = [ - {file = "rich-13.7.0-py3-none-any.whl", hash = "sha256:6da14c108c4866ee9520bbffa71f6fe3962e193b7da68720583850cd4548e235"}, - {file = "rich-13.7.0.tar.gz", hash = "sha256:5cb5123b5cf9ee70584244246816e9114227e0b98ad9176eede6ad54bf5403fa"}, + {file = "rich-13.7.1-py3-none-any.whl", hash = "sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222"}, + {file = "rich-13.7.1.tar.gz", hash = "sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432"}, ] [package.dependencies] @@ -3572,158 +3840,161 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "rpds-py" -version = "0.17.1" +version = "0.18.0" description = "Python bindings to Rust's persistent data structures (rpds)" +category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "rpds_py-0.17.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:4128980a14ed805e1b91a7ed551250282a8ddf8201a4e9f8f5b7e6225f54170d"}, - {file = "rpds_py-0.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ff1dcb8e8bc2261a088821b2595ef031c91d499a0c1b031c152d43fe0a6ecec8"}, - {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d65e6b4f1443048eb7e833c2accb4fa7ee67cc7d54f31b4f0555b474758bee55"}, - {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a71169d505af63bb4d20d23a8fbd4c6ce272e7bce6cc31f617152aa784436f29"}, - {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:436474f17733c7dca0fbf096d36ae65277e8645039df12a0fa52445ca494729d"}, - {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10162fe3f5f47c37ebf6d8ff5a2368508fe22007e3077bf25b9c7d803454d921"}, - {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:720215373a280f78a1814becb1312d4e4d1077b1202a56d2b0815e95ccb99ce9"}, - {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:70fcc6c2906cfa5c6a552ba7ae2ce64b6c32f437d8f3f8eea49925b278a61453"}, - {file = "rpds_py-0.17.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:91e5a8200e65aaac342a791272c564dffcf1281abd635d304d6c4e6b495f29dc"}, - {file = "rpds_py-0.17.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:99f567dae93e10be2daaa896e07513dd4bf9c2ecf0576e0533ac36ba3b1d5394"}, - {file = "rpds_py-0.17.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:24e4900a6643f87058a27320f81336d527ccfe503984528edde4bb660c8c8d59"}, - {file = "rpds_py-0.17.1-cp310-none-win32.whl", hash = "sha256:0bfb09bf41fe7c51413f563373e5f537eaa653d7adc4830399d4e9bdc199959d"}, - {file = "rpds_py-0.17.1-cp310-none-win_amd64.whl", hash = "sha256:20de7b7179e2031a04042e85dc463a93a82bc177eeba5ddd13ff746325558aa6"}, - {file = "rpds_py-0.17.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:65dcf105c1943cba45d19207ef51b8bc46d232a381e94dd38719d52d3980015b"}, - {file = "rpds_py-0.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:01f58a7306b64e0a4fe042047dd2b7d411ee82e54240284bab63e325762c1147"}, - {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:071bc28c589b86bc6351a339114fb7a029f5cddbaca34103aa573eba7b482382"}, - {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae35e8e6801c5ab071b992cb2da958eee76340e6926ec693b5ff7d6381441745"}, - {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:149c5cd24f729e3567b56e1795f74577aa3126c14c11e457bec1b1c90d212e38"}, - {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e796051f2070f47230c745d0a77a91088fbee2cc0502e9b796b9c6471983718c"}, - {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60e820ee1004327609b28db8307acc27f5f2e9a0b185b2064c5f23e815f248f8"}, - {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1957a2ab607f9added64478a6982742eb29f109d89d065fa44e01691a20fc20a"}, - {file = "rpds_py-0.17.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8587fd64c2a91c33cdc39d0cebdaf30e79491cc029a37fcd458ba863f8815383"}, - {file = "rpds_py-0.17.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4dc889a9d8a34758d0fcc9ac86adb97bab3fb7f0c4d29794357eb147536483fd"}, - {file = "rpds_py-0.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:2953937f83820376b5979318840f3ee47477d94c17b940fe31d9458d79ae7eea"}, - {file = "rpds_py-0.17.1-cp311-none-win32.whl", hash = "sha256:1bfcad3109c1e5ba3cbe2f421614e70439f72897515a96c462ea657261b96518"}, - {file = "rpds_py-0.17.1-cp311-none-win_amd64.whl", hash = "sha256:99da0a4686ada4ed0f778120a0ea8d066de1a0a92ab0d13ae68492a437db78bf"}, - {file = "rpds_py-0.17.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:1dc29db3900cb1bb40353772417800f29c3d078dbc8024fd64655a04ee3c4bdf"}, - {file = "rpds_py-0.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:82ada4a8ed9e82e443fcef87e22a3eed3654dd3adf6e3b3a0deb70f03e86142a"}, - {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d36b2b59e8cc6e576f8f7b671e32f2ff43153f0ad6d0201250a7c07f25d570e"}, - {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3677fcca7fb728c86a78660c7fb1b07b69b281964673f486ae72860e13f512ad"}, - {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:516fb8c77805159e97a689e2f1c80655c7658f5af601c34ffdb916605598cda2"}, - {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df3b6f45ba4515632c5064e35ca7f31d51d13d1479673185ba8f9fefbbed58b9"}, - {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a967dd6afda7715d911c25a6ba1517975acd8d1092b2f326718725461a3d33f9"}, - {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dbbb95e6fc91ea3102505d111b327004d1c4ce98d56a4a02e82cd451f9f57140"}, - {file = "rpds_py-0.17.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:02866e060219514940342a1f84303a1ef7a1dad0ac311792fbbe19b521b489d2"}, - {file = "rpds_py-0.17.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:2528ff96d09f12e638695f3a2e0c609c7b84c6df7c5ae9bfeb9252b6fa686253"}, - {file = "rpds_py-0.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bd345a13ce06e94c753dab52f8e71e5252aec1e4f8022d24d56decd31e1b9b23"}, - {file = "rpds_py-0.17.1-cp312-none-win32.whl", hash = "sha256:2a792b2e1d3038daa83fa474d559acfd6dc1e3650ee93b2662ddc17dbff20ad1"}, - {file = "rpds_py-0.17.1-cp312-none-win_amd64.whl", hash = "sha256:292f7344a3301802e7c25c53792fae7d1593cb0e50964e7bcdcc5cf533d634e3"}, - {file = "rpds_py-0.17.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:8ffe53e1d8ef2520ebcf0c9fec15bb721da59e8ef283b6ff3079613b1e30513d"}, - {file = "rpds_py-0.17.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4341bd7579611cf50e7b20bb8c2e23512a3dc79de987a1f411cb458ab670eb90"}, - {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f4eb548daf4836e3b2c662033bfbfc551db58d30fd8fe660314f86bf8510b93"}, - {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b686f25377f9c006acbac63f61614416a6317133ab7fafe5de5f7dc8a06d42eb"}, - {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4e21b76075c01d65d0f0f34302b5a7457d95721d5e0667aea65e5bb3ab415c25"}, - {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b86b21b348f7e5485fae740d845c65a880f5d1eda1e063bc59bef92d1f7d0c55"}, - {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f175e95a197f6a4059b50757a3dca33b32b61691bdbd22c29e8a8d21d3914cae"}, - {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1701fc54460ae2e5efc1dd6350eafd7a760f516df8dbe51d4a1c79d69472fbd4"}, - {file = "rpds_py-0.17.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:9051e3d2af8f55b42061603e29e744724cb5f65b128a491446cc029b3e2ea896"}, - {file = "rpds_py-0.17.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:7450dbd659fed6dd41d1a7d47ed767e893ba402af8ae664c157c255ec6067fde"}, - {file = "rpds_py-0.17.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5a024fa96d541fd7edaa0e9d904601c6445e95a729a2900c5aec6555fe921ed6"}, - {file = "rpds_py-0.17.1-cp38-none-win32.whl", hash = "sha256:da1ead63368c04a9bded7904757dfcae01eba0e0f9bc41d3d7f57ebf1c04015a"}, - {file = "rpds_py-0.17.1-cp38-none-win_amd64.whl", hash = "sha256:841320e1841bb53fada91c9725e766bb25009cfd4144e92298db296fb6c894fb"}, - {file = "rpds_py-0.17.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:f6c43b6f97209e370124baf2bf40bb1e8edc25311a158867eb1c3a5d449ebc7a"}, - {file = "rpds_py-0.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7d63ec01fe7c76c2dbb7e972fece45acbb8836e72682bde138e7e039906e2c"}, - {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81038ff87a4e04c22e1d81f947c6ac46f122e0c80460b9006e6517c4d842a6ec"}, - {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:810685321f4a304b2b55577c915bece4c4a06dfe38f6e62d9cc1d6ca8ee86b99"}, - {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:25f071737dae674ca8937a73d0f43f5a52e92c2d178330b4c0bb6ab05586ffa6"}, - {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa5bfb13f1e89151ade0eb812f7b0d7a4d643406caaad65ce1cbabe0a66d695f"}, - {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dfe07308b311a8293a0d5ef4e61411c5c20f682db6b5e73de6c7c8824272c256"}, - {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a000133a90eea274a6f28adc3084643263b1e7c1a5a66eb0a0a7a36aa757ed74"}, - {file = "rpds_py-0.17.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d0e8a6434a3fbf77d11448c9c25b2f25244226cfbec1a5159947cac5b8c5fa4"}, - {file = "rpds_py-0.17.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:efa767c220d94aa4ac3a6dd3aeb986e9f229eaf5bce92d8b1b3018d06bed3772"}, - {file = "rpds_py-0.17.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:dbc56680ecf585a384fbd93cd42bc82668b77cb525343170a2d86dafaed2a84b"}, - {file = "rpds_py-0.17.1-cp39-none-win32.whl", hash = "sha256:270987bc22e7e5a962b1094953ae901395e8c1e1e83ad016c5cfcfff75a15a3f"}, - {file = "rpds_py-0.17.1-cp39-none-win_amd64.whl", hash = "sha256:2a7b2f2f56a16a6d62e55354dd329d929560442bd92e87397b7a9586a32e3e76"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a3264e3e858de4fc601741498215835ff324ff2482fd4e4af61b46512dd7fc83"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:f2f3b28b40fddcb6c1f1f6c88c6f3769cd933fa493ceb79da45968a21dccc920"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9584f8f52010295a4a417221861df9bea4c72d9632562b6e59b3c7b87a1522b7"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c64602e8be701c6cfe42064b71c84ce62ce66ddc6422c15463fd8127db3d8066"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:060f412230d5f19fc8c8b75f315931b408d8ebf56aec33ef4168d1b9e54200b1"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9412abdf0ba70faa6e2ee6c0cc62a8defb772e78860cef419865917d86c7342"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9737bdaa0ad33d34c0efc718741abaafce62fadae72c8b251df9b0c823c63b22"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9f0e4dc0f17dcea4ab9d13ac5c666b6b5337042b4d8f27e01b70fae41dd65c57"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1db228102ab9d1ff4c64148c96320d0be7044fa28bd865a9ce628ce98da5973d"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:d8bbd8e56f3ba25a7d0cf980fc42b34028848a53a0e36c9918550e0280b9d0b6"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:be22ae34d68544df293152b7e50895ba70d2a833ad9566932d750d3625918b82"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bf046179d011e6114daf12a534d874958b039342b347348a78b7cdf0dd9d6041"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:1a746a6d49665058a5896000e8d9d2f1a6acba8a03b389c1e4c06e11e0b7f40d"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0b8bf5b8db49d8fd40f54772a1dcf262e8be0ad2ab0206b5a2ec109c176c0a4"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f7f4cb1f173385e8a39c29510dd11a78bf44e360fb75610594973f5ea141028b"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7fbd70cb8b54fe745301921b0816c08b6d917593429dfc437fd024b5ba713c58"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9bdf1303df671179eaf2cb41e8515a07fc78d9d00f111eadbe3e14262f59c3d0"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fad059a4bd14c45776600d223ec194e77db6c20255578bb5bcdd7c18fd169361"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3664d126d3388a887db44c2e293f87d500c4184ec43d5d14d2d2babdb4c64cad"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:698ea95a60c8b16b58be9d854c9f993c639f5c214cf9ba782eca53a8789d6b19"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:c3d2010656999b63e628a3c694f23020322b4178c450dc478558a2b6ef3cb9bb"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:938eab7323a736533f015e6069a7d53ef2dcc841e4e533b782c2bfb9fb12d84b"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:1e626b365293a2142a62b9a614e1f8e331b28f3ca57b9f05ebbf4cf2a0f0bdc5"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:380e0df2e9d5d5d339803cfc6d183a5442ad7ab3c63c2a0982e8c824566c5ccc"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b760a56e080a826c2e5af09002c1a037382ed21d03134eb6294812dda268c811"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5576ee2f3a309d2bb403ec292d5958ce03953b0e57a11d224c1f134feaf8c40f"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3c3461ebb4c4f1bbc70b15d20b565759f97a5aaf13af811fcefc892e9197ba"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:637b802f3f069a64436d432117a7e58fab414b4e27a7e81049817ae94de45d8d"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffee088ea9b593cc6160518ba9bd319b5475e5f3e578e4552d63818773c6f56a"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3ac732390d529d8469b831949c78085b034bff67f584559340008d0f6041a049"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:93432e747fb07fa567ad9cc7aaadd6e29710e515aabf939dfbed8046041346c6"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:7b7d9ca34542099b4e185b3c2a2b2eda2e318a7dbde0b0d83357a6d4421b5296"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:0387ce69ba06e43df54e43968090f3626e231e4bc9150e4c3246947567695f68"}, - {file = "rpds_py-0.17.1.tar.gz", hash = "sha256:0210b2668f24c078307260bf88bdac9d6f1093635df5123789bfee4d8d7fc8e7"}, + {file = "rpds_py-0.18.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:5b4e7d8d6c9b2e8ee2d55c90b59c707ca59bc30058269b3db7b1f8df5763557e"}, + {file = "rpds_py-0.18.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c463ed05f9dfb9baebef68048aed8dcdc94411e4bf3d33a39ba97e271624f8f7"}, + {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01e36a39af54a30f28b73096dd39b6802eddd04c90dbe161c1b8dbe22353189f"}, + {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d62dec4976954a23d7f91f2f4530852b0c7608116c257833922a896101336c51"}, + {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd18772815d5f008fa03d2b9a681ae38d5ae9f0e599f7dda233c439fcaa00d40"}, + {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:923d39efa3cfb7279a0327e337a7958bff00cc447fd07a25cddb0a1cc9a6d2da"}, + {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39514da80f971362f9267c600b6d459bfbbc549cffc2cef8e47474fddc9b45b1"}, + {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a34d557a42aa28bd5c48a023c570219ba2593bcbbb8dc1b98d8cf5d529ab1434"}, + {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:93df1de2f7f7239dc9cc5a4a12408ee1598725036bd2dedadc14d94525192fc3"}, + {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:34b18ba135c687f4dac449aa5157d36e2cbb7c03cbea4ddbd88604e076aa836e"}, + {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c0b5dcf9193625afd8ecc92312d6ed78781c46ecbf39af9ad4681fc9f464af88"}, + {file = "rpds_py-0.18.0-cp310-none-win32.whl", hash = "sha256:c4325ff0442a12113a6379af66978c3fe562f846763287ef66bdc1d57925d337"}, + {file = "rpds_py-0.18.0-cp310-none-win_amd64.whl", hash = "sha256:7223a2a5fe0d217e60a60cdae28d6949140dde9c3bcc714063c5b463065e3d66"}, + {file = "rpds_py-0.18.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3a96e0c6a41dcdba3a0a581bbf6c44bb863f27c541547fb4b9711fd8cf0ffad4"}, + {file = "rpds_py-0.18.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30f43887bbae0d49113cbaab729a112251a940e9b274536613097ab8b4899cf6"}, + {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcb25daa9219b4cf3a0ab24b0eb9a5cc8949ed4dc72acb8fa16b7e1681aa3c58"}, + {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d68c93e381010662ab873fea609bf6c0f428b6d0bb00f2c6939782e0818d37bf"}, + {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b34b7aa8b261c1dbf7720b5d6f01f38243e9b9daf7e6b8bc1fd4657000062f2c"}, + {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e6d75ab12b0bbab7215e5d40f1e5b738aa539598db27ef83b2ec46747df90e1"}, + {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b8612cd233543a3781bc659c731b9d607de65890085098986dfd573fc2befe5"}, + {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aec493917dd45e3c69d00a8874e7cbed844efd935595ef78a0f25f14312e33c6"}, + {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:661d25cbffaf8cc42e971dd570d87cb29a665f49f4abe1f9e76be9a5182c4688"}, + {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1df3659d26f539ac74fb3b0c481cdf9d725386e3552c6fa2974f4d33d78e544b"}, + {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a1ce3ba137ed54f83e56fb983a5859a27d43a40188ba798993812fed73c70836"}, + {file = "rpds_py-0.18.0-cp311-none-win32.whl", hash = "sha256:69e64831e22a6b377772e7fb337533c365085b31619005802a79242fee620bc1"}, + {file = "rpds_py-0.18.0-cp311-none-win_amd64.whl", hash = "sha256:998e33ad22dc7ec7e030b3df701c43630b5bc0d8fbc2267653577e3fec279afa"}, + {file = "rpds_py-0.18.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:7f2facbd386dd60cbbf1a794181e6aa0bd429bd78bfdf775436020172e2a23f0"}, + {file = "rpds_py-0.18.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1d9a5be316c15ffb2b3c405c4ff14448c36b4435be062a7f578ccd8b01f0c4d8"}, + {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd5bf1af8efe569654bbef5a3e0a56eca45f87cfcffab31dd8dde70da5982475"}, + {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5417558f6887e9b6b65b4527232553c139b57ec42c64570569b155262ac0754f"}, + {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:56a737287efecafc16f6d067c2ea0117abadcd078d58721f967952db329a3e5c"}, + {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8f03bccbd8586e9dd37219bce4d4e0d3ab492e6b3b533e973fa08a112cb2ffc9"}, + {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4457a94da0d5c53dc4b3e4de1158bdab077db23c53232f37a3cb7afdb053a4e3"}, + {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0ab39c1ba9023914297dd88ec3b3b3c3f33671baeb6acf82ad7ce883f6e8e157"}, + {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9d54553c1136b50fd12cc17e5b11ad07374c316df307e4cfd6441bea5fb68496"}, + {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0af039631b6de0397ab2ba16eaf2872e9f8fca391b44d3d8cac317860a700a3f"}, + {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:84ffab12db93b5f6bad84c712c92060a2d321b35c3c9960b43d08d0f639d60d7"}, + {file = "rpds_py-0.18.0-cp312-none-win32.whl", hash = "sha256:685537e07897f173abcf67258bee3c05c374fa6fff89d4c7e42fb391b0605e98"}, + {file = "rpds_py-0.18.0-cp312-none-win_amd64.whl", hash = "sha256:e003b002ec72c8d5a3e3da2989c7d6065b47d9eaa70cd8808b5384fbb970f4ec"}, + {file = "rpds_py-0.18.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:08f9ad53c3f31dfb4baa00da22f1e862900f45908383c062c27628754af2e88e"}, + {file = "rpds_py-0.18.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c0013fe6b46aa496a6749c77e00a3eb07952832ad6166bd481c74bda0dcb6d58"}, + {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e32a92116d4f2a80b629778280103d2a510a5b3f6314ceccd6e38006b5e92dcb"}, + {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e541ec6f2ec456934fd279a3120f856cd0aedd209fc3852eca563f81738f6861"}, + {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bed88b9a458e354014d662d47e7a5baafd7ff81c780fd91584a10d6ec842cb73"}, + {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2644e47de560eb7bd55c20fc59f6daa04682655c58d08185a9b95c1970fa1e07"}, + {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e8916ae4c720529e18afa0b879473049e95949bf97042e938530e072fde061d"}, + {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:465a3eb5659338cf2a9243e50ad9b2296fa15061736d6e26240e713522b6235c"}, + {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:ea7d4a99f3b38c37eac212dbd6ec42b7a5ec51e2c74b5d3223e43c811609e65f"}, + {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:67071a6171e92b6da534b8ae326505f7c18022c6f19072a81dcf40db2638767c"}, + {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:41ef53e7c58aa4ef281da975f62c258950f54b76ec8e45941e93a3d1d8580594"}, + {file = "rpds_py-0.18.0-cp38-none-win32.whl", hash = "sha256:fdea4952db2793c4ad0bdccd27c1d8fdd1423a92f04598bc39425bcc2b8ee46e"}, + {file = "rpds_py-0.18.0-cp38-none-win_amd64.whl", hash = "sha256:7cd863afe7336c62ec78d7d1349a2f34c007a3cc6c2369d667c65aeec412a5b1"}, + {file = "rpds_py-0.18.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:5307def11a35f5ae4581a0b658b0af8178c65c530e94893345bebf41cc139d33"}, + {file = "rpds_py-0.18.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:77f195baa60a54ef9d2de16fbbfd3ff8b04edc0c0140a761b56c267ac11aa467"}, + {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39f5441553f1c2aed4de4377178ad8ff8f9d733723d6c66d983d75341de265ab"}, + {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a00312dea9310d4cb7dbd7787e722d2e86a95c2db92fbd7d0155f97127bcb40"}, + {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f2fc11e8fe034ee3c34d316d0ad8808f45bc3b9ce5857ff29d513f3ff2923a1"}, + {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:586f8204935b9ec884500498ccc91aa869fc652c40c093bd9e1471fbcc25c022"}, + {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddc2f4dfd396c7bfa18e6ce371cba60e4cf9d2e5cdb71376aa2da264605b60b9"}, + {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5ddcba87675b6d509139d1b521e0c8250e967e63b5909a7e8f8944d0f90ff36f"}, + {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7bd339195d84439cbe5771546fe8a4e8a7a045417d8f9de9a368c434e42a721e"}, + {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:d7c36232a90d4755b720fbd76739d8891732b18cf240a9c645d75f00639a9024"}, + {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6b0817e34942b2ca527b0e9298373e7cc75f429e8da2055607f4931fded23e20"}, + {file = "rpds_py-0.18.0-cp39-none-win32.whl", hash = "sha256:99f70b740dc04d09e6b2699b675874367885217a2e9f782bdf5395632ac663b7"}, + {file = "rpds_py-0.18.0-cp39-none-win_amd64.whl", hash = "sha256:6ef687afab047554a2d366e112dd187b62d261d49eb79b77e386f94644363294"}, + {file = "rpds_py-0.18.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ad36cfb355e24f1bd37cac88c112cd7730873f20fb0bdaf8ba59eedf8216079f"}, + {file = "rpds_py-0.18.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:36b3ee798c58ace201289024b52788161e1ea133e4ac93fba7d49da5fec0ef9e"}, + {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8a2f084546cc59ea99fda8e070be2fd140c3092dc11524a71aa8f0f3d5a55ca"}, + {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e4461d0f003a0aa9be2bdd1b798a041f177189c1a0f7619fe8c95ad08d9a45d7"}, + {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8db715ebe3bb7d86d77ac1826f7d67ec11a70dbd2376b7cc214199360517b641"}, + {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:793968759cd0d96cac1e367afd70c235867831983f876a53389ad869b043c948"}, + {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66e6a3af5a75363d2c9a48b07cb27c4ea542938b1a2e93b15a503cdfa8490795"}, + {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6ef0befbb5d79cf32d0266f5cff01545602344eda89480e1dd88aca964260b18"}, + {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1d4acf42190d449d5e89654d5c1ed3a4f17925eec71f05e2a41414689cda02d1"}, + {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:a5f446dd5055667aabaee78487f2b5ab72e244f9bc0b2ffebfeec79051679984"}, + {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:9dbbeb27f4e70bfd9eec1be5477517365afe05a9b2c441a0b21929ee61048124"}, + {file = "rpds_py-0.18.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:22806714311a69fd0af9b35b7be97c18a0fc2826e6827dbb3a8c94eac6cf7eeb"}, + {file = "rpds_py-0.18.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:b34ae4636dfc4e76a438ab826a0d1eed2589ca7d9a1b2d5bb546978ac6485461"}, + {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c8370641f1a7f0e0669ddccca22f1da893cef7628396431eb445d46d893e5cd"}, + {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c8362467a0fdeccd47935f22c256bec5e6abe543bf0d66e3d3d57a8fb5731863"}, + {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11a8c85ef4a07a7638180bf04fe189d12757c696eb41f310d2426895356dcf05"}, + {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b316144e85316da2723f9d8dc75bada12fa58489a527091fa1d5a612643d1a0e"}, + {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf1ea2e34868f6fbf070e1af291c8180480310173de0b0c43fc38a02929fc0e3"}, + {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e546e768d08ad55b20b11dbb78a745151acbd938f8f00d0cfbabe8b0199b9880"}, + {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4901165d170a5fde6f589acb90a6b33629ad1ec976d4529e769c6f3d885e3e80"}, + {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:618a3d6cae6ef8ec88bb76dd80b83cfe415ad4f1d942ca2a903bf6b6ff97a2da"}, + {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ed4eb745efbff0a8e9587d22a84be94a5eb7d2d99c02dacf7bd0911713ed14dd"}, + {file = "rpds_py-0.18.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6c81e5f372cd0dc5dc4809553d34f832f60a46034a5f187756d9b90586c2c307"}, + {file = "rpds_py-0.18.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:43fbac5f22e25bee1d482c97474f930a353542855f05c1161fd804c9dc74a09d"}, + {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d7faa6f14017c0b1e69f5e2c357b998731ea75a442ab3841c0dbbbfe902d2c4"}, + {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:08231ac30a842bd04daabc4d71fddd7e6d26189406d5a69535638e4dcb88fe76"}, + {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:044a3e61a7c2dafacae99d1e722cc2d4c05280790ec5a05031b3876809d89a5c"}, + {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3f26b5bd1079acdb0c7a5645e350fe54d16b17bfc5e71f371c449383d3342e17"}, + {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:482103aed1dfe2f3b71a58eff35ba105289b8d862551ea576bd15479aba01f66"}, + {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1374f4129f9bcca53a1bba0bb86bf78325a0374577cf7e9e4cd046b1e6f20e24"}, + {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:635dc434ff724b178cb192c70016cc0ad25a275228f749ee0daf0eddbc8183b1"}, + {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:bc362ee4e314870a70f4ae88772d72d877246537d9f8cb8f7eacf10884862432"}, + {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:4832d7d380477521a8c1644bbab6588dfedea5e30a7d967b5fb75977c45fd77f"}, + {file = "rpds_py-0.18.0.tar.gz", hash = "sha256:42821446ee7a76f5d9f71f9e33a4fb2ffd724bb3e7f93386150b61a43115788d"}, ] [[package]] name = "scipy" -version = "1.12.0" +version = "1.13.0" description = "Fundamental algorithms for scientific computing in Python" +category = "main" optional = false python-versions = ">=3.9" files = [ - {file = "scipy-1.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:78e4402e140879387187f7f25d91cc592b3501a2e51dfb320f48dfb73565f10b"}, - {file = "scipy-1.12.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:f5f00ebaf8de24d14b8449981a2842d404152774c1a1d880c901bf454cb8e2a1"}, - {file = "scipy-1.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e53958531a7c695ff66c2e7bb7b79560ffdc562e2051644c5576c39ff8efb563"}, - {file = "scipy-1.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e32847e08da8d895ce09d108a494d9eb78974cf6de23063f93306a3e419960c"}, - {file = "scipy-1.12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4c1020cad92772bf44b8e4cdabc1df5d87376cb219742549ef69fc9fd86282dd"}, - {file = "scipy-1.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:75ea2a144096b5e39402e2ff53a36fecfd3b960d786b7efd3c180e29c39e53f2"}, - {file = "scipy-1.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:408c68423f9de16cb9e602528be4ce0d6312b05001f3de61fe9ec8b1263cad08"}, - {file = "scipy-1.12.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5adfad5dbf0163397beb4aca679187d24aec085343755fcdbdeb32b3679f254c"}, - {file = "scipy-1.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3003652496f6e7c387b1cf63f4bb720951cfa18907e998ea551e6de51a04467"}, - {file = "scipy-1.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b8066bce124ee5531d12a74b617d9ac0ea59245246410e19bca549656d9a40a"}, - {file = "scipy-1.12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8bee4993817e204d761dba10dbab0774ba5a8612e57e81319ea04d84945375ba"}, - {file = "scipy-1.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:a24024d45ce9a675c1fb8494e8e5244efea1c7a09c60beb1eeb80373d0fecc70"}, - {file = "scipy-1.12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e7e76cc48638228212c747ada851ef355c2bb5e7f939e10952bc504c11f4e372"}, - {file = "scipy-1.12.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:f7ce148dffcd64ade37b2df9315541f9adad6efcaa86866ee7dd5db0c8f041c3"}, - {file = "scipy-1.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c39f92041f490422924dfdb782527a4abddf4707616e07b021de33467f917bc"}, - {file = "scipy-1.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7ebda398f86e56178c2fa94cad15bf457a218a54a35c2a7b4490b9f9cb2676c"}, - {file = "scipy-1.12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:95e5c750d55cf518c398a8240571b0e0782c2d5a703250872f36eaf737751338"}, - {file = "scipy-1.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:e646d8571804a304e1da01040d21577685ce8e2db08ac58e543eaca063453e1c"}, - {file = "scipy-1.12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:913d6e7956c3a671de3b05ccb66b11bc293f56bfdef040583a7221d9e22a2e35"}, - {file = "scipy-1.12.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba1b0c7256ad75401c73e4b3cf09d1f176e9bd4248f0d3112170fb2ec4db067"}, - {file = "scipy-1.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:730badef9b827b368f351eacae2e82da414e13cf8bd5051b4bdfd720271a5371"}, - {file = "scipy-1.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6546dc2c11a9df6926afcbdd8a3edec28566e4e785b915e849348c6dd9f3f490"}, - {file = "scipy-1.12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:196ebad3a4882081f62a5bf4aeb7326aa34b110e533aab23e4374fcccb0890dc"}, - {file = "scipy-1.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:b360f1b6b2f742781299514e99ff560d1fe9bd1bff2712894b52abe528d1fd1e"}, - {file = "scipy-1.12.0.tar.gz", hash = "sha256:4bf5abab8a36d20193c698b0f1fc282c1d083c94723902c447e5d2f1780936a3"}, + {file = "scipy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ba419578ab343a4e0a77c0ef82f088238a93eef141b2b8017e46149776dfad4d"}, + {file = "scipy-1.13.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:22789b56a999265431c417d462e5b7f2b487e831ca7bef5edeb56efe4c93f86e"}, + {file = "scipy-1.13.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05f1432ba070e90d42d7fd836462c50bf98bd08bed0aa616c359eed8a04e3922"}, + {file = "scipy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8434f6f3fa49f631fae84afee424e2483289dfc30a47755b4b4e6b07b2633a4"}, + {file = "scipy-1.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:dcbb9ea49b0167de4167c40eeee6e167caeef11effb0670b554d10b1e693a8b9"}, + {file = "scipy-1.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:1d2f7bb14c178f8b13ebae93f67e42b0a6b0fc50eba1cd8021c9b6e08e8fb1cd"}, + {file = "scipy-1.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fbcf8abaf5aa2dc8d6400566c1a727aed338b5fe880cde64907596a89d576fa"}, + {file = "scipy-1.13.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5e4a756355522eb60fcd61f8372ac2549073c8788f6114449b37e9e8104f15a5"}, + {file = "scipy-1.13.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5acd8e1dbd8dbe38d0004b1497019b2dbbc3d70691e65d69615f8a7292865d7"}, + {file = "scipy-1.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ff7dad5d24a8045d836671e082a490848e8639cabb3dbdacb29f943a678683d"}, + {file = "scipy-1.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4dca18c3ffee287ddd3bc8f1dabaf45f5305c5afc9f8ab9cbfab855e70b2df5c"}, + {file = "scipy-1.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:a2f471de4d01200718b2b8927f7d76b5d9bde18047ea0fa8bd15c5ba3f26a1d6"}, + {file = "scipy-1.13.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d0de696f589681c2802f9090fff730c218f7c51ff49bf252b6a97ec4a5d19e8b"}, + {file = "scipy-1.13.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:b2a3ff461ec4756b7e8e42e1c681077349a038f0686132d623fa404c0bee2551"}, + {file = "scipy-1.13.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf9fe63e7a4bf01d3645b13ff2aa6dea023d38993f42aaac81a18b1bda7a82a"}, + {file = "scipy-1.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e7626dfd91cdea5714f343ce1176b6c4745155d234f1033584154f60ef1ff42"}, + {file = "scipy-1.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:109d391d720fcebf2fbe008621952b08e52907cf4c8c7efc7376822151820820"}, + {file = "scipy-1.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:8930ae3ea371d6b91c203b1032b9600d69c568e537b7988a3073dfe4d4774f21"}, + {file = "scipy-1.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5407708195cb38d70fd2d6bb04b1b9dd5c92297d86e9f9daae1576bd9e06f602"}, + {file = "scipy-1.13.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:ac38c4c92951ac0f729c4c48c9e13eb3675d9986cc0c83943784d7390d540c78"}, + {file = "scipy-1.13.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09c74543c4fbeb67af6ce457f6a6a28e5d3739a87f62412e4a16e46f164f0ae5"}, + {file = "scipy-1.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28e286bf9ac422d6beb559bc61312c348ca9b0f0dae0d7c5afde7f722d6ea13d"}, + {file = "scipy-1.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:33fde20efc380bd23a78a4d26d59fc8704e9b5fd9b08841693eb46716ba13d86"}, + {file = "scipy-1.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:45c08bec71d3546d606989ba6e7daa6f0992918171e2a6f7fbedfa7361c2de1e"}, + {file = "scipy-1.13.0.tar.gz", hash = "sha256:58569af537ea29d3f78e5abd18398459f195546bb3be23d16677fb26616cc11e"}, ] [package.dependencies] -numpy = ">=1.22.4,<1.29.0" +numpy = ">=1.22.4,<2.3" [package.extras] -dev = ["click", "cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] -doc = ["jupytext", "matplotlib (>2)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"] -test = ["asv", "gmpy2", "hypothesis", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] +doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.12.0)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0)", "sphinx-design (>=0.4.0)"] +test = ["array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] [[package]] name = "screeninfo" version = "0.8.1" description = "Fetch location and size of physical screens." +category = "main" optional = false python-versions = ">=3.6.2,<4.0.0" files = [ @@ -3737,13 +4008,14 @@ pyobjc-framework-Cocoa = {version = "*", markers = "sys_platform == \"darwin\""} [[package]] name = "send2trash" -version = "1.8.2" +version = "1.8.3" description = "Send file to trash natively under Mac OS X, Windows and Linux" +category = "main" optional = true -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ - {file = "Send2Trash-1.8.2-py3-none-any.whl", hash = "sha256:a384719d99c07ce1eefd6905d2decb6f8b7ed054025bb0e618919f945de4f679"}, - {file = "Send2Trash-1.8.2.tar.gz", hash = "sha256:c132d59fa44b9ca2b1699af5c86f57ce9f4c5eb56629d5d55fbb7a35f84e2312"}, + {file = "Send2Trash-1.8.3-py3-none-any.whl", hash = "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9"}, + {file = "Send2Trash-1.8.3.tar.gz", hash = "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf"}, ] [package.extras] @@ -3753,24 +4025,26 @@ win32 = ["pywin32"] [[package]] name = "setuptools" -version = "69.0.3" +version = "69.5.1" description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-69.0.3-py3-none-any.whl", hash = "sha256:385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05"}, - {file = "setuptools-69.0.3.tar.gz", hash = "sha256:be1af57fc409f93647f2e8e4573a142ed38724b8cdd389706a867bb4efcf1e78"}, + {file = "setuptools-69.5.1-py3-none-any.whl", hash = "sha256:c636ac361bc47580504644275c9ad802c50415c7522212252c033bd15f301f32"}, + {file = "setuptools-69.5.1.tar.gz", hash = "sha256:6c1fccdac05a97e598fb0ae3bbed5904ccb317337a51139dcd51453611bbb987"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[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.*" files = [ @@ -3782,6 +4056,7 @@ files = [ name = "skia-pathops" version = "0.8.0.post1" description = "Python access to operations on paths using the Skia library" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -3833,6 +4108,7 @@ testing = ["coverage", "pytest", "pytest-randomly", "pytest-xdist"] name = "smmap" version = "5.0.1" description = "A pure Python implementation of a sliding window memory map manager" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3842,19 +4118,21 @@ files = [ [[package]] name = "sniffio" -version = "1.3.0" +version = "1.3.1" description = "Sniff out which async library your code is running under" +category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, - {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, ] [[package]] name = "snowballstemmer" version = "2.2.0" description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." +category = "dev" optional = false python-versions = "*" files = [ @@ -3866,6 +4144,7 @@ files = [ name = "soupsieve" version = "2.5" description = "A modern CSS selector implementation for Beautiful Soup." +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -3875,20 +4154,21 @@ files = [ [[package]] name = "sphinx" -version = "7.2.6" +version = "7.3.7" description = "Python documentation generator" +category = "dev" optional = false python-versions = ">=3.9" files = [ - {file = "sphinx-7.2.6-py3-none-any.whl", hash = "sha256:1e09160a40b956dc623c910118fa636da93bd3ca0b9876a7b3df90f07d691560"}, - {file = "sphinx-7.2.6.tar.gz", hash = "sha256:9a5160e1ea90688d5963ba09a2dcd8bdd526620edbb65c328728f1b2228d5ab5"}, + {file = "sphinx-7.3.7-py3-none-any.whl", hash = "sha256:413f75440be4cacf328f580b4274ada4565fb2187d696a84970c23f77b64d8c3"}, + {file = "sphinx-7.3.7.tar.gz", hash = "sha256:a4a7db75ed37531c05002d56ed6948d4c42f473a36f46e1382b0bd76ca9627bc"}, ] [package.dependencies] -alabaster = ">=0.7,<0.8" +alabaster = ">=0.7.14,<0.8.0" babel = ">=2.9" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} -docutils = ">=0.18.1,<0.21" +docutils = ">=0.18.1,<0.22" imagesize = ">=1.3" importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""} Jinja2 = ">=3.0" @@ -3902,16 +4182,18 @@ sphinxcontrib-htmlhelp = ">=2.0.0" sphinxcontrib-jsmath = "*" sphinxcontrib-qthelp = "*" sphinxcontrib-serializinghtml = ">=1.1.9" +tomli = {version = ">=2", markers = "python_version < \"3.11\""} [package.extras] docs = ["sphinxcontrib-websupport"] -lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-simplify", "isort", "mypy (>=0.990)", "ruff", "sphinx-lint", "types-requests"] -test = ["cython (>=3.0)", "filelock", "html5lib", "pytest (>=4.6)", "setuptools (>=67.0)"] +lint = ["flake8 (>=3.5.0)", "importlib_metadata", "mypy (==1.9.0)", "pytest (>=6.0)", "ruff (==0.3.7)", "sphinx-lint", "tomli", "types-docutils", "types-requests"] +test = ["cython (>=3.0)", "defusedxml (>=0.7.1)", "pytest (>=6.0)", "setuptools (>=67.0)"] [[package]] name = "sphinx-basic-ng" version = "1.0.0b2" description = "A modern skeleton for Sphinx themes." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3929,6 +4211,7 @@ docs = ["furo", "ipython", "myst-parser", "sphinx-copybutton", "sphinx-inline-ta name = "sphinx-copybutton" version = "0.5.2" description = "Add a copy button to each of your code cells." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3947,6 +4230,7 @@ rtd = ["ipython", "myst-nb", "sphinx", "sphinx-book-theme", "sphinx-examples"] name = "sphinxcontrib-applehelp" version = "1.0.8" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" +category = "dev" optional = false python-versions = ">=3.9" files = [ @@ -3963,6 +4247,7 @@ test = ["pytest"] name = "sphinxcontrib-devhelp" version = "1.0.6" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" +category = "dev" optional = false python-versions = ">=3.9" files = [ @@ -3979,6 +4264,7 @@ test = ["pytest"] name = "sphinxcontrib-htmlhelp" version = "2.0.5" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" +category = "dev" optional = false python-versions = ">=3.9" files = [ @@ -3995,6 +4281,7 @@ test = ["html5lib", "pytest"] name = "sphinxcontrib-jsmath" version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -4009,6 +4296,7 @@ test = ["flake8", "mypy", "pytest"] name = "sphinxcontrib-programoutput" version = "0.17" description = "Sphinx extension to include program output" +category = "dev" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" files = [ @@ -4023,6 +4311,7 @@ Sphinx = ">=1.7.0" name = "sphinxcontrib-qthelp" version = "1.0.7" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" +category = "dev" optional = false python-versions = ">=3.9" files = [ @@ -4039,6 +4328,7 @@ test = ["pytest"] name = "sphinxcontrib-serializinghtml" version = "1.1.10" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" +category = "dev" optional = false python-versions = ">=3.9" files = [ @@ -4055,6 +4345,7 @@ test = ["pytest"] name = "sphinxext-opengraph" version = "0.9.1" description = "Sphinx Extension to enable OGP support" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -4069,6 +4360,7 @@ sphinx = ">=4.0" name = "srt" version = "3.5.3" description = "A tiny library for parsing, modifying, and composing SRT files." +category = "main" optional = false python-versions = ">=2.7" files = [ @@ -4079,6 +4371,7 @@ files = [ name = "stack-data" version = "0.6.3" description = "Extract data from python stack frames and tracebacks for informative displays" +category = "main" optional = true python-versions = "*" files = [ @@ -4098,6 +4391,7 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] name = "svgelements" version = "1.9.6" description = "Svg Elements Parsing" +category = "main" optional = false python-versions = "*" files = [ @@ -4107,13 +4401,14 @@ files = [ [[package]] name = "terminado" -version = "0.18.0" +version = "0.18.1" description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." +category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "terminado-0.18.0-py3-none-any.whl", hash = "sha256:87b0d96642d0fe5f5abd7783857b9cab167f221a39ff98e3b9619a788a3c0f2e"}, - {file = "terminado-0.18.0.tar.gz", hash = "sha256:1ea08a89b835dd1b8c0c900d92848147cef2537243361b2e3f4dc15df9b6fded"}, + {file = "terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0"}, + {file = "terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e"}, ] [package.dependencies] @@ -4128,13 +4423,14 @@ typing = ["mypy (>=1.6,<2.0)", "traitlets (>=5.11.1)"] [[package]] name = "tinycss2" -version = "1.2.1" +version = "1.3.0" description = "A tiny CSS parser" +category = "main" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "tinycss2-1.2.1-py3-none-any.whl", hash = "sha256:2b80a96d41e7c3914b8cda8bc7f705a4d9c49275616e886103dd839dfc847847"}, - {file = "tinycss2-1.2.1.tar.gz", hash = "sha256:8cff3a8f066c2ec677c06dbc7b45619804a6938478d9d73c284b29d14ecb0627"}, + {file = "tinycss2-1.3.0-py3-none-any.whl", hash = "sha256:54a8dbdffb334d536851be0226030e9505965bb2f30f21a4a82c55fb2a80fae7"}, + {file = "tinycss2-1.3.0.tar.gz", hash = "sha256:152f9acabd296a8375fbca5b84c961ff95971fcfc32e79550c8df8e29118c54d"}, ] [package.dependencies] @@ -4142,12 +4438,13 @@ webencodings = ">=0.4" [package.extras] doc = ["sphinx", "sphinx_rtd_theme"] -test = ["flake8", "isort", "pytest"] +test = ["pytest", "ruff"] [[package]] name = "tomli" version = "2.0.1" description = "A lil' TOML parser" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4159,6 +4456,7 @@ files = [ name = "tornado" version = "6.4" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." +category = "main" optional = true python-versions = ">= 3.8" files = [ @@ -4177,13 +4475,14 @@ files = [ [[package]] name = "tqdm" -version = "4.66.3" +version = "4.66.4" description = "Fast, Extensible Progress Meter" +category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.66.3-py3-none-any.whl", hash = "sha256:4f41d54107ff9a223dca80b53efe4fb654c67efaba7f47bada3ee9d50e05bd53"}, - {file = "tqdm-4.66.3.tar.gz", hash = "sha256:23097a41eba115ba99ecae40d06444c15d1c0c698d527a01c6c8bd1c5d0647e5"}, + {file = "tqdm-4.66.4-py3-none-any.whl", hash = "sha256:b75ca56b413b030bc3f00af51fd2c1a1a5eac6a0c1cca83cbb37a5c52abce644"}, + {file = "tqdm-4.66.4.tar.gz", hash = "sha256:e4d936c9de8727928f3be6079590e97d9abfe8d39a590be678eb5919ffc186bb"}, ] [package.dependencies] @@ -4197,23 +4496,25 @@ telegram = ["requests"] [[package]] name = "traitlets" -version = "5.14.1" +version = "5.14.3" description = "Traitlets Python configuration system" +category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "traitlets-5.14.1-py3-none-any.whl", hash = "sha256:2e5a030e6eff91737c643231bfcf04a65b0132078dad75e4936700b213652e74"}, - {file = "traitlets-5.14.1.tar.gz", hash = "sha256:8585105b371a04b8316a43d5ce29c098575c2e477850b62b848b964f1444527e"}, + {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"}, + {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"}, ] [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<7.5)", "pytest-mock", "pytest-mypy-testing"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] [[package]] name = "types-decorator" version = "0.1.7" description = "Typing stubs for decorator" +category = "dev" optional = false python-versions = "*" files = [ @@ -4223,35 +4524,38 @@ files = [ [[package]] name = "types-docutils" -version = "0.20.0.20240106" +version = "0.21.0.20240423" description = "Typing stubs for docutils" +category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "types-docutils-0.20.0.20240106.tar.gz", hash = "sha256:03992ec976fbe080db588e1e56a83c5e4aba5c733022b25bb26cb84397b96049"}, - {file = "types_docutils-0.20.0.20240106-py3-none-any.whl", hash = "sha256:d408f9305761905b157ea3cb80f53d4026bce7d4cc47312939118715467d0278"}, + {file = "types-docutils-0.21.0.20240423.tar.gz", hash = "sha256:7716ec6c68b5179b7ba1738cace2f1326e64df9f44b7ab08d9904d32c23fc15f"}, + {file = "types_docutils-0.21.0.20240423-py3-none-any.whl", hash = "sha256:7f6e84ba8fcd2454c5b8bb8d77384d091a901929cc2b31079316e10eb346580a"}, ] [[package]] name = "types-pillow" -version = "10.2.0.20240111" +version = "10.2.0.20240423" description = "Typing stubs for Pillow" +category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "types-Pillow-10.2.0.20240111.tar.gz", hash = "sha256:e8d359bfdc5a149a3c90a7e153cb2d0750ddf7fc3508a20dfadabd8a9435e354"}, - {file = "types_Pillow-10.2.0.20240111-py3-none-any.whl", hash = "sha256:1f4243b30c143b56b0646626f052e4269123e550f9096cdfb5fbd999daee7dbb"}, + {file = "types-Pillow-10.2.0.20240423.tar.gz", hash = "sha256:696e68b9b6a58548fc307a8669830469237c5b11809ddf978ac77fafa79251cd"}, + {file = "types_Pillow-10.2.0.20240423-py3-none-any.whl", hash = "sha256:bd12923093b96c91d523efcdb66967a307f1a843bcfaf2d5a529146c10a9ced3"}, ] [[package]] name = "types-pygments" -version = "2.17.0.20240106" +version = "2.17.0.20240310" description = "Typing stubs for Pygments" +category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "types-Pygments-2.17.0.20240106.tar.gz", hash = "sha256:92e62ac37793e567cd2b0f64f1456c24fccce4041d9c5f869697a6739fde4fce"}, - {file = "types_Pygments-2.17.0.20240106-py3-none-any.whl", hash = "sha256:8052c574b0ab8f2dc94bdc4a31b9d48e8aa5a0f12398ef40cadadbe551da949b"}, + {file = "types-Pygments-2.17.0.20240310.tar.gz", hash = "sha256:b1d97e905ce36343c7283b0319182ae6d4f967188f361f45502a18ae43e03e1f"}, + {file = "types_Pygments-2.17.0.20240310-py3-none-any.whl", hash = "sha256:b101ca9448aaff52af6966506f1fdd73b1e60a79b8a79a8bace3366cbf1f7ed9"}, ] [package.dependencies] @@ -4260,41 +4564,45 @@ types-setuptools = "*" [[package]] name = "types-python-dateutil" -version = "2.8.19.20240106" +version = "2.9.0.20240316" description = "Typing stubs for python-dateutil" +category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "types-python-dateutil-2.8.19.20240106.tar.gz", hash = "sha256:1f8db221c3b98e6ca02ea83a58371b22c374f42ae5bbdf186db9c9a76581459f"}, - {file = "types_python_dateutil-2.8.19.20240106-py3-none-any.whl", hash = "sha256:efbbdc54590d0f16152fa103c9879c7d4a00e82078f6e2cf01769042165acaa2"}, + {file = "types-python-dateutil-2.9.0.20240316.tar.gz", hash = "sha256:5d2f2e240b86905e40944dd787db6da9263f0deabef1076ddaed797351ec0202"}, + {file = "types_python_dateutil-2.9.0.20240316-py3-none-any.whl", hash = "sha256:6b8cb66d960771ce5ff974e9dd45e38facb81718cc1e208b10b1baccbfdbee3b"}, ] [[package]] name = "types-setuptools" -version = "69.0.0.20240115" +version = "69.5.0.20240423" description = "Typing stubs for setuptools" +category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-69.0.0.20240115.tar.gz", hash = "sha256:1a9c863899f40cbe2053d0cd1d00ddef0330b492335467d018f73c1fec9462a3"}, - {file = "types_setuptools-69.0.0.20240115-py3-none-any.whl", hash = "sha256:7409e774c69e1810cb45052dbaed839fc30302e86a3ff945172ef2a2e7ab46f8"}, + {file = "types-setuptools-69.5.0.20240423.tar.gz", hash = "sha256:a7ba908f1746c4337d13f027fa0f4a5bcad6d1d92048219ba792b3295c58586d"}, + {file = "types_setuptools-69.5.0.20240423-py3-none-any.whl", hash = "sha256:a4381e041510755a6c9210e26ad55b1629bc10237aeb9cb8b6bd24996b73db48"}, ] [[package]] name = "typing-extensions" -version = "4.9.0" +version = "4.11.0" description = "Backported and Experimental Type Hints for Python 3.8+" +category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, - {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, + {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, + {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, ] [[package]] name = "uri-template" version = "1.3.0" description = "RFC 6570 URI Template Processor" +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4307,29 +4615,32 @@ dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake [[package]] name = "urllib3" -version = "2.1.0" +version = "2.2.1" description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "urllib3-2.1.0-py3-none-any.whl", hash = "sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3"}, - {file = "urllib3-2.1.0.tar.gz", hash = "sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54"}, + {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"}, + {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, ] [package.extras] brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.25.0" +version = "20.26.1" description = "Virtual Python Environment builder" +category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.25.0-py3-none-any.whl", hash = "sha256:4238949c5ffe6876362d9c0180fc6c3a824a7b12b80604eeb8085f2ed7460de3"}, - {file = "virtualenv-20.25.0.tar.gz", hash = "sha256:bf51c0d9c7dd63ea8e44086fa1e4fb1093a31e963b86959257378aef020e1f1b"}, + {file = "virtualenv-20.26.1-py3-none-any.whl", hash = "sha256:7aa9982a728ae5892558bff6a2839c00b9ed145523ece2274fad6f414690ae75"}, + {file = "virtualenv-20.26.1.tar.gz", hash = "sha256:604bfdceaeece392802e6ae48e69cec49168b9c5f4a44e483963f9242eb0e78b"}, ] [package.dependencies] @@ -4338,43 +4649,46 @@ filelock = ">=3.12.2,<4" platformdirs = ">=3.9.1,<5" [package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] [[package]] name = "watchdog" -version = "3.0.0" +version = "4.0.0" description = "Filesystem events monitoring" +category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:336adfc6f5cc4e037d52db31194f7581ff744b67382eb6021c868322e32eef41"}, - {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a70a8dcde91be523c35b2bf96196edc5730edb347e374c7de7cd20c43ed95397"}, - {file = "watchdog-3.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:adfdeab2da79ea2f76f87eb42a3ab1966a5313e5a69a0213a3cc06ef692b0e96"}, - {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2b57a1e730af3156d13b7fdddfc23dea6487fceca29fc75c5a868beed29177ae"}, - {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ade88d0d778b1b222adebcc0927428f883db07017618a5e684fd03b83342bd9"}, - {file = "watchdog-3.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7e447d172af52ad204d19982739aa2346245cc5ba6f579d16dac4bfec226d2e7"}, - {file = "watchdog-3.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9fac43a7466eb73e64a9940ac9ed6369baa39b3bf221ae23493a9ec4d0022674"}, - {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8ae9cda41fa114e28faf86cb137d751a17ffd0316d1c34ccf2235e8a84365c7f"}, - {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25f70b4aa53bd743729c7475d7ec41093a580528b100e9a8c5b5efe8899592fc"}, - {file = "watchdog-3.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4f94069eb16657d2c6faada4624c39464f65c05606af50bb7902e036e3219be3"}, - {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7c5f84b5194c24dd573fa6472685b2a27cc5a17fe5f7b6fd40345378ca6812e3"}, - {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3aa7f6a12e831ddfe78cdd4f8996af9cf334fd6346531b16cec61c3b3c0d8da0"}, - {file = "watchdog-3.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:233b5817932685d39a7896b1090353fc8efc1ef99c9c054e46c8002561252fb8"}, - {file = "watchdog-3.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:13bbbb462ee42ec3c5723e1205be8ced776f05b100e4737518c67c8325cf6100"}, - {file = "watchdog-3.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8f3ceecd20d71067c7fd4c9e832d4e22584318983cabc013dbf3f70ea95de346"}, - {file = "watchdog-3.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c9d8c8ec7efb887333cf71e328e39cffbf771d8f8f95d308ea4125bf5f90ba64"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0e06ab8858a76e1219e68c7573dfeba9dd1c0219476c5a44d5333b01d7e1743a"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:d00e6be486affb5781468457b21a6cbe848c33ef43f9ea4a73b4882e5f188a44"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:c07253088265c363d1ddf4b3cdb808d59a0468ecd017770ed716991620b8f77a"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:5113334cf8cf0ac8cd45e1f8309a603291b614191c9add34d33075727a967709"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:51f90f73b4697bac9c9a78394c3acbbd331ccd3655c11be1a15ae6fe289a8c83"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:ba07e92756c97e3aca0912b5cbc4e5ad802f4557212788e72a72a47ff376950d"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:d429c2430c93b7903914e4db9a966c7f2b068dd2ebdd2fa9b9ce094c7d459f33"}, - {file = "watchdog-3.0.0-py3-none-win32.whl", hash = "sha256:3ed7c71a9dccfe838c2f0b6314ed0d9b22e77d268c67e015450a29036a81f60f"}, - {file = "watchdog-3.0.0-py3-none-win_amd64.whl", hash = "sha256:4c9956d27be0bb08fc5f30d9d0179a855436e655f046d288e2bcc11adfae893c"}, - {file = "watchdog-3.0.0-py3-none-win_ia64.whl", hash = "sha256:5d9f3a10e02d7371cd929b5d8f11e87d4bad890212ed3901f9b4d68767bee759"}, - {file = "watchdog-3.0.0.tar.gz", hash = "sha256:4d98a320595da7a7c5a18fc48cb633c2e73cda78f93cac2ef42d42bf609a33f9"}, + {file = "watchdog-4.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:39cb34b1f1afbf23e9562501673e7146777efe95da24fab5707b88f7fb11649b"}, + {file = "watchdog-4.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c522392acc5e962bcac3b22b9592493ffd06d1fc5d755954e6be9f4990de932b"}, + {file = "watchdog-4.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6c47bdd680009b11c9ac382163e05ca43baf4127954c5f6d0250e7d772d2b80c"}, + {file = "watchdog-4.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8350d4055505412a426b6ad8c521bc7d367d1637a762c70fdd93a3a0d595990b"}, + {file = "watchdog-4.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c17d98799f32e3f55f181f19dd2021d762eb38fdd381b4a748b9f5a36738e935"}, + {file = "watchdog-4.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4986db5e8880b0e6b7cd52ba36255d4793bf5cdc95bd6264806c233173b1ec0b"}, + {file = "watchdog-4.0.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:11e12fafb13372e18ca1bbf12d50f593e7280646687463dd47730fd4f4d5d257"}, + {file = "watchdog-4.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5369136a6474678e02426bd984466343924d1df8e2fd94a9b443cb7e3aa20d19"}, + {file = "watchdog-4.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76ad8484379695f3fe46228962017a7e1337e9acadafed67eb20aabb175df98b"}, + {file = "watchdog-4.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:45cc09cc4c3b43fb10b59ef4d07318d9a3ecdbff03abd2e36e77b6dd9f9a5c85"}, + {file = "watchdog-4.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eed82cdf79cd7f0232e2fdc1ad05b06a5e102a43e331f7d041e5f0e0a34a51c4"}, + {file = "watchdog-4.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ba30a896166f0fee83183cec913298151b73164160d965af2e93a20bbd2ab605"}, + {file = "watchdog-4.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d18d7f18a47de6863cd480734613502904611730f8def45fc52a5d97503e5101"}, + {file = "watchdog-4.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2895bf0518361a9728773083908801a376743bcc37dfa252b801af8fd281b1ca"}, + {file = "watchdog-4.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:87e9df830022488e235dd601478c15ad73a0389628588ba0b028cb74eb72fed8"}, + {file = "watchdog-4.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6e949a8a94186bced05b6508faa61b7adacc911115664ccb1923b9ad1f1ccf7b"}, + {file = "watchdog-4.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6a4db54edea37d1058b08947c789a2354ee02972ed5d1e0dca9b0b820f4c7f92"}, + {file = "watchdog-4.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d31481ccf4694a8416b681544c23bd271f5a123162ab603c7d7d2dd7dd901a07"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:8fec441f5adcf81dd240a5fe78e3d83767999771630b5ddfc5867827a34fa3d3"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:6a9c71a0b02985b4b0b6d14b875a6c86ddea2fdbebd0c9a720a806a8bbffc69f"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:557ba04c816d23ce98a06e70af6abaa0485f6d94994ec78a42b05d1c03dcbd50"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:d0f9bd1fd919134d459d8abf954f63886745f4660ef66480b9d753a7c9d40927"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:f9b2fdca47dc855516b2d66eef3c39f2672cbf7e7a42e7e67ad2cbfcd6ba107d"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:73c7a935e62033bd5e8f0da33a4dcb763da2361921a69a5a95aaf6c93aa03a87"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:6a80d5cae8c265842c7419c560b9961561556c4361b297b4c431903f8c33b269"}, + {file = "watchdog-4.0.0-py3-none-win32.whl", hash = "sha256:8f9a542c979df62098ae9c58b19e03ad3df1c9d8c6895d96c0d51da17b243b1c"}, + {file = "watchdog-4.0.0-py3-none-win_amd64.whl", hash = "sha256:f970663fa4f7e80401a7b0cbeec00fa801bf0287d93d48368fc3e6fa32716245"}, + {file = "watchdog-4.0.0-py3-none-win_ia64.whl", hash = "sha256:9a03e16e55465177d416699331b0f3564138f1807ecc5f2de9d55d8f188d08c7"}, + {file = "watchdog-4.0.0.tar.gz", hash = "sha256:e3e7065cbdabe6183ab82199d7a4f6b3ba0a438c5a512a68559846ccb76a78ec"}, ] [package.extras] @@ -4384,6 +4698,7 @@ watchmedo = ["PyYAML (>=3.10)"] name = "wcwidth" version = "0.2.13" description = "Measures the displayed width of unicode strings in a terminal" +category = "main" optional = true python-versions = "*" files = [ @@ -4395,6 +4710,7 @@ files = [ name = "webcolors" version = "1.13" description = "A library for working with the color formats defined by HTML and CSS." +category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4410,6 +4726,7 @@ tests = ["pytest", "pytest-cov"] name = "webencodings" version = "0.5.1" description = "Character encoding aliases for legacy web content" +category = "main" optional = true python-versions = "*" files = [ @@ -4419,17 +4736,18 @@ files = [ [[package]] name = "websocket-client" -version = "1.7.0" +version = "1.8.0" description = "WebSocket client for Python with low level API options" +category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "websocket-client-1.7.0.tar.gz", hash = "sha256:10e511ea3a8c744631d3bd77e61eb17ed09304c413ad42cf6ddfa4c7787e8fe6"}, - {file = "websocket_client-1.7.0-py3-none-any.whl", hash = "sha256:f4c3d22fec12a2461427a29957ff07d35098ee2d976d3ba244e688b8b4057588"}, + {file = "websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526"}, + {file = "websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da"}, ] [package.extras] -docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"] +docs = ["Sphinx (>=6.0)", "myst-parser (>=2.0.0)", "sphinx-rtd-theme (>=1.1.0)"] optional = ["python-socks", "wsaccel"] test = ["websockets"] @@ -4437,6 +4755,7 @@ test = ["websockets"] name = "wrapt" version = "1.16.0" description = "Module for decorators, wrappers and monkey patching." +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -4514,18 +4833,19 @@ files = [ [[package]] name = "zipp" -version = "3.17.0" +version = "3.18.1" description = "Backport of pathlib-compatible object wrapper for zip files" +category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, - {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, + {file = "zipp-3.18.1-py3-none-any.whl", hash = "sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b"}, + {file = "zipp-3.18.1.tar.gz", hash = "sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [extras] gui = ["dearpygui"] @@ -4534,4 +4854,4 @@ jupyterlab = ["jupyterlab", "notebook"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.13" -content-hash = "36d6cb5963f1e9a0ab3d646de64b016ff2afeb6a9ed770188ce04ffadf030bbc" +content-hash = "0ff94622805480bc3b254c0df42a18e36b473a273b07af5de32726f53c34b2ad" diff --git a/pyproject.toml b/pyproject.toml index 8afcf1a35a..fbcc907511 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,6 +28,7 @@ packages = [ [tool.poetry.dependencies] python = ">=3.9,<3.13" +av = ">=9.0.0" click = ">=8.0" cloup = ">=2.0.0" dearpygui = { version = ">=1.0.0", optional = true } diff --git a/tests/control_data/videos_data/InputFileViaCfg.json b/tests/control_data/videos_data/InputFileViaCfg.json index 37d9165674..7c945a390e 100644 --- a/tests/control_data/videos_data/InputFileViaCfg.json +++ b/tests/control_data/videos_data/InputFileViaCfg.json @@ -6,7 +6,8 @@ "height": 480, "avg_frame_rate": "15/1", "duration": "1.000000", - "nb_frames": "15" + "nb_frames": "15", + "pix_fmt": "yuv420p" }, "section_dir_layout": [], "section_index": [] diff --git a/tests/control_data/videos_data/SceneWithDisabledSections.json b/tests/control_data/videos_data/SceneWithDisabledSections.json index e524af09cb..355f4c3804 100644 --- a/tests/control_data/videos_data/SceneWithDisabledSections.json +++ b/tests/control_data/videos_data/SceneWithDisabledSections.json @@ -6,7 +6,8 @@ "height": 480, "avg_frame_rate": "15/1", "duration": "1.000000", - "nb_frames": "15" + "nb_frames": "15", + "pix_fmt": "yuv420p" }, "section_dir_layout": [], "section_index": [] diff --git a/tests/control_data/videos_data/SceneWithEnabledSections.json b/tests/control_data/videos_data/SceneWithEnabledSections.json index 7b47b1919f..0b26f15ae4 100644 --- a/tests/control_data/videos_data/SceneWithEnabledSections.json +++ b/tests/control_data/videos_data/SceneWithEnabledSections.json @@ -6,7 +6,8 @@ "height": 480, "avg_frame_rate": "15/1", "duration": "1.000000", - "nb_frames": "15" + "nb_frames": "15", + "pix_fmt": "yuv420p" }, "section_dir_layout": [ "SquareToCircle.json", @@ -23,7 +24,8 @@ "height": 480, "avg_frame_rate": "15/1", "duration": "1.000000", - "nb_frames": "15" + "nb_frames": "15", + "pix_fmt": "yuv420p" } ] } diff --git a/tests/control_data/videos_data/SceneWithMultipleCallsWithNFlag.json b/tests/control_data/videos_data/SceneWithMultipleCallsWithNFlag.json index 6af344a8c7..8b662ba6e8 100644 --- a/tests/control_data/videos_data/SceneWithMultipleCallsWithNFlag.json +++ b/tests/control_data/videos_data/SceneWithMultipleCallsWithNFlag.json @@ -6,7 +6,8 @@ "height": 480, "avg_frame_rate": "15/1", "duration": "4.000000", - "nb_frames": "60" + "nb_frames": "60", + "pix_fmt": "yuv420p" }, "section_dir_layout": [], "section_index": [] diff --git a/tests/control_data/videos_data/SceneWithMultiplePlayCallsWithNFlag.json b/tests/control_data/videos_data/SceneWithMultiplePlayCallsWithNFlag.json index d7117145f0..194c196faf 100644 --- a/tests/control_data/videos_data/SceneWithMultiplePlayCallsWithNFlag.json +++ b/tests/control_data/videos_data/SceneWithMultiplePlayCallsWithNFlag.json @@ -6,7 +6,8 @@ "height": 480, "avg_frame_rate": "15/1", "duration": "7.000000", - "nb_frames": "105" + "nb_frames": "105", + "pix_fmt": "yuv420p" }, "section_dir_layout": [], "section_index": [] diff --git a/tests/control_data/videos_data/SceneWithMultipleWaitCallsWithNFlag.json b/tests/control_data/videos_data/SceneWithMultipleWaitCallsWithNFlag.json index 9640c3cc31..2fa413b5e6 100644 --- a/tests/control_data/videos_data/SceneWithMultipleWaitCallsWithNFlag.json +++ b/tests/control_data/videos_data/SceneWithMultipleWaitCallsWithNFlag.json @@ -6,7 +6,8 @@ "height": 480, "avg_frame_rate": "15/1", "duration": "5.000000", - "nb_frames": "75" + "nb_frames": "75", + "pix_fmt": "yuv420p" }, "section_dir_layout": [], "section_index": [] diff --git a/tests/control_data/videos_data/SceneWithSections.json b/tests/control_data/videos_data/SceneWithSections.json index 575842ee38..5278526e57 100644 --- a/tests/control_data/videos_data/SceneWithSections.json +++ b/tests/control_data/videos_data/SceneWithSections.json @@ -6,7 +6,8 @@ "height": 480, "avg_frame_rate": "15/1", "duration": "7.000000", - "nb_frames": "105" + "nb_frames": "105", + "pix_fmt": "yuv420p" }, "section_dir_layout": [ "SceneWithSections.json", @@ -27,7 +28,8 @@ "height": 480, "avg_frame_rate": "15/1", "duration": "1.000000", - "nb_frames": "15" + "nb_frames": "15", + "pix_fmt": "yuv420p" }, { "name": "unnamed", @@ -38,7 +40,8 @@ "height": 480, "avg_frame_rate": "15/1", "duration": "2.000000", - "nb_frames": "30" + "nb_frames": "30", + "pix_fmt": "yuv420p" }, { "name": "test", @@ -49,7 +52,8 @@ "height": 480, "avg_frame_rate": "15/1", "duration": "1.000000", - "nb_frames": "15" + "nb_frames": "15", + "pix_fmt": "yuv420p" }, { "name": "Prepare For Unforeseen Consequences.", @@ -60,7 +64,8 @@ "height": 480, "avg_frame_rate": "15/1", "duration": "2.000000", - "nb_frames": "30" + "nb_frames": "30", + "pix_fmt": "yuv420p" }, { "name": "unnamed", @@ -71,7 +76,8 @@ "height": 480, "avg_frame_rate": "15/1", "duration": "1.000000", - "nb_frames": "15" + "nb_frames": "15", + "pix_fmt": "yuv420p" } ] } diff --git a/tests/control_data/videos_data/SceneWithSkipAnimations.json b/tests/control_data/videos_data/SceneWithSkipAnimations.json index afe9efe028..71bb21abb3 100644 --- a/tests/control_data/videos_data/SceneWithSkipAnimations.json +++ b/tests/control_data/videos_data/SceneWithSkipAnimations.json @@ -6,7 +6,8 @@ "height": 480, "avg_frame_rate": "15/1", "duration": "6.000000", - "nb_frames": "90" + "nb_frames": "90", + "pix_fmt": "yuv420p" }, "section_dir_layout": [ "ElaborateSceneWithSections.json", @@ -25,7 +26,8 @@ "height": 480, "avg_frame_rate": "15/1", "duration": "2.000000", - "nb_frames": "30" + "nb_frames": "30", + "pix_fmt": "yuv420p" }, { "name": "transform to circle", @@ -36,7 +38,8 @@ "height": 480, "avg_frame_rate": "15/1", "duration": "2.000000", - "nb_frames": "30" + "nb_frames": "30", + "pix_fmt": "yuv420p" }, { "name": "fade out", @@ -47,7 +50,8 @@ "height": 480, "avg_frame_rate": "15/1", "duration": "2.000000", - "nb_frames": "30" + "nb_frames": "30", + "pix_fmt": "yuv420p" } ] } diff --git a/tests/control_data/videos_data/SquareToCircleWithDefaultValues.json b/tests/control_data/videos_data/SquareToCircleWithDefaultValues.json index 9625ff36ce..b9465a9412 100644 --- a/tests/control_data/videos_data/SquareToCircleWithDefaultValues.json +++ b/tests/control_data/videos_data/SquareToCircleWithDefaultValues.json @@ -6,7 +6,8 @@ "height": 1080, "avg_frame_rate": "60/1", "duration": "1.000000", - "nb_frames": "60" + "nb_frames": "60", + "pix_fmt": "yuv420p" }, "section_dir_layout": [], "section_index": [] diff --git a/tests/control_data/videos_data/SquareToCircleWithlFlag.json b/tests/control_data/videos_data/SquareToCircleWithlFlag.json index ce3ef93872..5e8763446e 100644 --- a/tests/control_data/videos_data/SquareToCircleWithlFlag.json +++ b/tests/control_data/videos_data/SquareToCircleWithlFlag.json @@ -6,7 +6,8 @@ "height": 480, "avg_frame_rate": "15/1", "duration": "1.000000", - "nb_frames": "15" + "nb_frames": "15", + "pix_fmt": "yuv420p" }, "section_dir_layout": [], "section_index": [] diff --git a/tests/interface/test_commands.py b/tests/interface/test_commands.py index fce3efde82..d902d3b07b 100644 --- a/tests/interface/test_commands.py +++ b/tests/interface/test_commands.py @@ -4,6 +4,7 @@ import sys from pathlib import Path from textwrap import dedent +from unittest.mock import patch from click.testing import CliRunner @@ -83,11 +84,20 @@ def test_manim_checkhealth_subcommand(): def test_manim_checkhealth_failing_subcommand(): command = ["checkhealth"] runner = CliRunner() - with tempconfig({"ffmpeg_executable": "/path/to/nowhere"}): + true_f = shutil.which + + def mock_f(s): + if s == "latex": + return None + + return true_f(s) + + with patch.object(shutil, "which", new=mock_f): result = runner.invoke(main, command) + output_lines = result.output.split("\n") - assert "- Checking whether ffmpeg is available ... FAILED" in output_lines - assert "- Checking whether ffmpeg is working ... SKIPPED" in output_lines + assert "- Checking whether latex is available ... FAILED" in output_lines + assert "- Checking whether dvisvgm is available ... SKIPPED" in output_lines def test_manim_init_subcommand(): diff --git a/tests/module/animation/test_animation.py b/tests/module/animation/test_animation.py new file mode 100644 index 0000000000..67579c4fbf --- /dev/null +++ b/tests/module/animation/test_animation.py @@ -0,0 +1,34 @@ +from __future__ import annotations + +import pytest + +from manim import FadeIn, Scene, config + + +@pytest.mark.parametrize( + "run_time", + [0, -1], +) +def test_animation_forbidden_run_time(run_time): + test_scene = Scene() + with pytest.raises(ValueError, match="Please set the run_time to be positive"): + test_scene.play(FadeIn(None, run_time=run_time)) + + +def test_animation_run_time_shorter_than_frame_rate(caplog): + test_scene = Scene() + test_scene.play(FadeIn(None, run_time=1 / (config.frame_rate + 1))) + assert ( + "Original run time of FadeIn(Mobject) is shorter than current frame rate" + in caplog.text + ) + + +@pytest.mark.parametrize("frozen_frame", [False, True]) +def test_wait_run_time_shorter_than_frame_rate(caplog, frozen_frame): + test_scene = Scene() + test_scene.wait(1e-9, frozen_frame=frozen_frame) + assert ( + "Original run time of Wait(Mobject) is shorter than current frame rate" + in caplog.text + ) diff --git a/tests/module/animation/test_composition.py b/tests/module/animation/test_composition.py index 878176de7e..89eb22658b 100644 --- a/tests/module/animation/test_composition.py +++ b/tests/module/animation/test_composition.py @@ -172,10 +172,10 @@ def test_animationgroup_is_passing_remover_to_nested_animationgroups(): def test_empty_animation_group_fails(): - with pytest.raises(ValueError, match="Please add at least one Animation"): + with pytest.raises(ValueError, match="Please add at least one subanimation."): AnimationGroup().begin() -def test_empty_animation_fails(): - with pytest.raises(ValueError, match="Please set the run_time to be positive"): - FadeIn(None, run_time=0).begin() +def test_empty_succession_fails(): + with pytest.raises(ValueError, match="Please add at least one subanimation."): + Succession().begin() diff --git a/tests/test_graphical_units/control_data/coordinate_system/implicit_graph.npz b/tests/test_graphical_units/control_data/coordinate_system/implicit_graph.npz index 45c14a54081ea8d2d6c12b8d6b78721e8a86ac9c..838080847cb4eacbc462fcfdf248e61cbf5927b2 100644 GIT binary patch literal 9602 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 literal 9753 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 A8~^|S diff --git a/tests/test_graphical_units/control_data/creation/bring_to_back_introducer.npz b/tests/test_graphical_units/control_data/creation/bring_to_back_introducer.npz index 596a4cdbb6f684545d634ffb9f3d1df77171cde2..e710cfa49dd1489bc1cf081f1c3212f3ca62c6af 100644 GIT binary patch literal 5857 zcmWIWW@Zs#U|`??Vnqg3R`+y&F$RVPE+Ym$1`&p|qQu{zwM7_L%N=60&unbTs z14tDJyuEt9J2sv1*vFYZ?>yg?THR4;4rbF{yrR>B*VO!SN|CUY&%ss+Pt9O04m0z~ z&)8LYjn%k&bvaWehHC2NEth`j#^Ecj#JjXf_fqdAd2iPj^+q3N?U=kHBfaok@y_|o z^O>K&x%WM?rvCrut(Vj53@r<5A8lv9em;NRZHtPehYxzQ?d^8#DERO++`MjY;kQ%k z{`PJaGy=j?se4EtvN^xK`of9=@0!^P&c-x+F5qgWlR)-ox~4P%_( zx0=CYc__n@%UTSVGDR6)ZsBSu85Yv(qPL#fa9`S*|NPxAcbNxQ{0v&xSndj4&GUP2 z+MJlIGyBSR`}nDjz@fX7b)&GI3h$bzeee&Y6`} zQ``_}yl(BUgWvh59^d!(?yWO5&#Qqk;yjvk31`@2TSL3u`=;Jhul{PeXGti7^_8_z zsW;wVegEX*r*B#N4U3EWr|m08uUjF7?&Ek(| z8QsqA*p^lL!7EZGX64z3+_Oj1GjSCVFg+s&=@qR8Spsn}cvI1!a+%F4NC|!Sn(^_| zcZ>B+(<=XZMaJxp+8vg@3!GqUmd9>m&rVMNaPRojGr#9wd$#lU{OQK^|Eh29e(wNl zX6XO_u>8|y`+rN#?05eTU(0kuakP~|xNY_L)~bWm^3#pq*GJ8M{;qxI_AJ)NL%?CpXuvAe%D=9__JB(I0swP&sU|A6ge z>m{QNV}kvLyqM_Hht22z-R|3!DSF`gbx3<7FZ*dl<@Zai$JXTR39FiIo_&2*-5OxA zGI-O@U~*Z5dntIdVC(IuNWJfR@i}K+ZH-QS`Rnbi(96as?TzVne-`ceadP_B?DOZq z3H;({hmM49Z0z=|sfqi;cdwoLwCMe(qsP|7?GBx`?*6)1Q`^gQXkZ_iu4E->!Tlhe1hrazauFOzU3V{{CHgpn7>@Y(9S*G?7f zEdQC59Jc+5FC%d9CTGPdZc>_Pos_5g22CJ|;_1JVfBG=S>{)Zys>Z&o&t O3PvEb0n+{8A!-0;i4bQ1 literal 9305 zcmeHNe^gRu7``;C9nVoZwWWngTdj8bp_MZ<3HHx&%aV3FY9~`>In7cbv4DYG+m@b= zWoO6r!w^}y<~B#z)IdHz54ZxtkHlJb*UM(RzwnxV%_WBe~)y>K(@mxGJ(INfkf%che-J7WTFd--{v zZO+NLTnps84cq1uL3Iao22e3!kI*({QgOIS?O@h-OnM*?SE>#Kjq0u8-Ll9xF*j zf(OHl+KE3Od@SstC(Mii=ST%+a(oH9 z`cO{t{`o^IZ>p?s}BFlElsO8gg`9mgbf9AEXCkBCKD4 z;l(5kCImh4N2iR%&|YalEeuP$+0l_l%U`%&(;Fi7NyYN~rEL*V5jbK|jTVO#5qycQ zza6QtYvJtWfs=A2Qmi)EPR7E}D><#}oYLqCGhrZz$!Kp%Ek#HenVUj@(^pQi429}b{j!gUr^*X5`q=Qbe ztQGl-;}nkep%Ia_c}Uxbi=H+c6`)n4lG>l*BaIq^jp>oF9Z(Y@f(` zP1-_pDUy-xgie>>Fjex0CE66kx!qHgt#8=c9f95#POy$%ggWdta0k!ygz(Zk- z+9`uw?NpQjPnZpZ=bfIvd|06;n*TcAqEpsw*L4d*1eQB$k3XL4gm~$Xn`uHwel%`P z6=*b7lAcMlY6Nqtn@gWwtZ0X0mM2<<`eYo|c9hE#pN&m>_hXhP%z}aZ%~~+mC-pxc z_sa892xLBO@NTk+pa?vXDPJb1A0my2VbPZd$7)mx)vdd=6SpFv^+*OitpRSU66zmQN|>sKX1FHJ!~9y z{4k{-Iv2@1Vd{1kt&)%SUyA{bd%|oOO!vS4q6N8*3~u4>%kco<9k<~7MH{?sg|7bO z(^dMF`{J8MQ*u8}dAswyCHoxpOZcaWcw42&>?P`D_Ppb1)8@kQ9$r^xJMjRvP(NC| zT+$^@F2$OlEV92mz2Q<_c;huHzc!GeNVJ!jrCimR(yYC1(64o_3#ZlHbsAewm<@x> z)HvvvElkkXb|j2|Dx%sS!|%zHva2iyN7Qq9KAtf^BY{^{q2eH%r!>q4dewOq)jn4JrR3e56@`=<|^Mf&o8P~>aWJBGz&?A73Fn+$}(YtknNJ! z;dR`3KN~$^77T=}1fS-yK5aCvLRBZNs{Gy%5g{xg>e*-RhaasTX diff --git a/tests/test_graphical_units/control_data/creation/z_index_introducer.npz b/tests/test_graphical_units/control_data/creation/z_index_introducer.npz index 4837034b4ceef55e3f639235ed758a5f6ab7b2d9..a7c29edf9958c9e9778ee3bbe62b2de855210b48 100644 GIT binary patch delta 13431 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 Fe*-gdGHd_< delta 25240 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 diff --git a/tests/test_graphical_units/control_data/functions/ImplicitFunction.npz b/tests/test_graphical_units/control_data/functions/ImplicitFunction.npz index fc7de179f1211eb97c59714e375d2ffc16a1624a..3089087b5e54b56fbace4c66c92d1f29e78d9ea7 100644 GIT binary patch literal 13525 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 F{tKdBsv`gZ literal 26856 zcmeFac~sMPzW;9*bviCgYZY09wic-(ARr=Z#;TyAMA?@>R8~Pih#^2osAZ}}S!9B?TA^aj8zvQddLNgbN zmSwelO!E2}&b{TA7<7kA7tJL-RW)e|q1ALRm#$s6&hO`!`5*P~AAN)U&wh9KHvTP{ z@O~>>UB8@k^|iJ3HW#z;8l}2=Rs6|?A?P<)5q52bGb#buy9MQoR!N&KUb@s!WDfO* zx~U_OQ;)M3go{|o7*Uy|U0!4l;vuwP8Ww|G)~W*XAxo)9(QsWSr#Ih}kZ0`ZEt#Z{ zJGFD;4UP!GTS`;7CG7qWV?UhQuly-X&)*~8q{$2K7TTeC(Gt#j`RG!^7UvY-h5$l! ziuS|nX`JkR*^2BE>#jFnD<=@l&?^PmlKwJl!Y1o5*fKe4uwp@#tz|-%Gb~A`CcDxw z>cwou>h;EV$F(!9O#gh>xjyJeqCTX`jGt|i;EzaQ$Xc?uWGkN+5PJCy_oVmjuxtDVbxu6oB{<HwklHTi&#g7+U(R1f(EcIO8{1G`j)m;rY z>Y6SM5e0H4=TCR>N3vGy`A0LVUZ+(L?v+iK!J7#_De2985v*u%zJm=eg8-MQtxm6R zlFd03$rj2JUr$GSVI>($QC)oT{!8nXje~S9o#0t!B@v|+HB@MtKM#0MI~=yQ54DI8 zGL*NEm1hRE#hidLa1#}2)nQedZhiR7=!@9Y-aL_T&)K`xmihVmV)FUPHV28+5Axot zJbL(Xfyih1>a17n@25%v!s@~>N>&_1NHQ)8caHZF_;|BNUZ?pt!-6DS8qEnkH$zNW zdPc>t%K8Iu&LWz#B4Gu=-+6JZGqVyhmWFRdtl!05X(-9Km9w(Hh?jwS@U2MIpDON_ zr=D0XE2}7^BN|~V-wr*txqHI2Og53N9Pdap)xV_J%U;pDR280lHmry(FqX7!M}AQ5 z6DuUr9qX<@jl3=Jj&&_*ui(PLhDqy@oTVy5+OTT6m2XdvFTWHgq&OP{L{?RFl_PGC zWDMOo#_K7))PG-8)_?6ybU%-&pIGLi)E3tE6%l16%(qc#vJy)wA!*~T&2A=H-n=SO z0a-@X+#w9Qx)?bmRJ|c}?IB_u11uzm6At4-obhJ77I4ow=hs`dP+jg)gXGWRP1CHB zoQXMg60)!w9h@%9*Fl{-D8=T*WNAG}KCb8Ppdx#4+Rd->WTYrCF`nGDDFBpRY2o)M=|^=n~+#(0+! z7pG^+XEoiG(;23vnY4f@K&ka zRKF8y_AgB~4Sv+;_eV%*{=RbaSd{krE-S}dEt?MZc$0b^;w-1f{BLYZSF}oqC@EAL2w?fFkc>&(irRqzcrX@$9rt78L(pxBTnJo zZuq7S<+{o&@jS08n`@9CVe;kdZeBe*4Bf*h3n_s_X<4`+PR|0vy1NZ!_gNniPIkrP-;?c zg=jxKDbl@m6zN3M0rTXhx^l;cl*s1#an+o_>E(@3a{Yd@B~?AgKySJN*1@c_8Od!X zrQE`=I7$)Qe1-VDJdVox^PpkZdbgHS{K z>R!)5LHZcUywQiAom-JRjB86aJug`4LoTPG8tlKr&4Ig%;B78;DMF{WUQF#Vs9X62 zbAV)SjuaL2sza;$ZGt+!AiNf0|6~vlk>A*O@L3Ehd7qRu=w@QzP}6g(CCWGXfZKkD z5v1rq^U7@jHU8ETMuz_!u21#duzXsxUvSeF!j3_S{O@`AK{OxzQAXU9WxHG~_Ae*r zyGR9#{?=b6Mp@RtqCHIpF^B7FWIbaTN^w=?Y?x>o5pRb$LHFbYl7G-G$>hhMRouX@ z(0;k<*;?&~ugq<}k9uYPM@aU*-TNW$EgW8Z(_rDFr_j@X7<>wL-cPb(E@Iz*TeSIr z-P;Y<@qhl&b)BSc!BpyO-Bk2t{8wRH3`fhvH%=e!m4WvWT>0SK=wRoYT>JN1H^G@hfl({$V$+pZ${9P}VJcd<2<={!q3@nBZQ(I5&Qz{Ev-QXt6sY!M7 zkDordFH%l*^tEJ$=B3e$hf)VSJSWqSK;B!`Gn2C~j@{hU97YM2ZFw%;yglwo)RwpW zM*q3l81}7hl)GXOSygqmWJa5K{!(qSeW{sGmhV@hk4XmiY8F1)g&Szz zTnigpMKcH+8JN>2F^VwK>*d zU4gC$!BOR!$bq@O(N<+xZ*GdYLlo^NuSo>+6?fXAwGqD}D=O;o^_AV$n`HSTiJ5^t zTV=&Ihp?!Yy~k&ENVluMLO;&O#K&5AU#ea#F@DAfn{(`)?k^jUMfZ5oO9GlZ>aS)c&ykr;m4&2?UiT7N_?b? zlJtqjVS+#Z=#n0rbn2$?lVxbt-V->>@M}@Rwq#h(-n!8kqC|I^5;DE5A)_rMRh*E4 z+u+ubIy>dWjygIrpkY`~8fz=H7<#~!=zZV=G5S;Q^$z!NDZbbR8B#=WJpbxA2I_Zu z@c=V%^j-}EQiQ8Lp{eGD#H+yJE4bctU|!6p7qRMmYDHB}&uqZCp)Q~F%+VXaf^U2SFWaC2K0w zj0_ZF-(TDLAa5Vu$dK-5eg0ftjc3^i`@^CRTX;$O#mAbVM~_(1{r82#1zVMY+mvh5 z+;}Y+X?5X)^*DG)%;;oiyb2dy`CXq%-^-&S=a=jx}nFM~57yJAB1p^k!)2ck>`REx5xb+x3k*9Ed*?B zNtr=;>X+ACuP-&`)TKa^#u1jgh#%L#Cj^_U`h`ooSLmx$F@pA+slFygi=mkD5P`>-t#{d%cOvi;>`s z;FFUYm9n;zl6pEOg8N`bQf;V$Z^vR|_|-245}T@5Nvf8jQot(Y{J&bT|7NYnS+_s@ z@;P*Y6L4YF0{y!==k>N)WG3P8f0Q=-&wVo2!b&%WociRoxmMcn;|!82$~2Bx@PxcZ z!B<8RYHRlyU0c#^mYt?q0tPOGlhnI~HAz7?ynOjmq+3CXpl(69y-7Eh9BFWJN<0R( z3|U4hgiOK+0S@P6E^Ar5d`KA130a?@n&tI2Z1u?VC8K1`2{i3oEThU1lPC@Z`#|HK zvoDUj&i|CfdUngBVW<|$mbihhG;;pU%h=w$Ei4hMp*9rqUQ8J3^zo^T)6;9LyNHdc9EBfr^=AhO)OPJHk3MK^ZnQ+Y^F%0gOIkkA%yyBtdXV= zaaG&d(R-bo2LGmd@W+5mheOoC7JVz&-F$HXcwW$Go3C0H3Or2etl-oM{~5*$(Ii^d z1eO(VVQ1ZCEj>54YshORfiEZvORpOv#<7dF%fUaK+~+#!$smcF$-!7mGD1GaY6xf; ztaN||0r7WKWAoLlQwx?^?HYQf{{uaj6A>=5z_<4;dIen5}FQCRf0SA7fewKX8@&pOtdd5cp-((p)T!b+1h^nsD7h-3- z_0fCU4JTV}Es)k3)dLB~>t3+JIY^F?(JbhS&T#qWV$#AeB%-UR;@i~el7RXEI7T_f zOtb3czwjC_Ru>Nwk?GYX76JYmm5jisc11VgGTRd2%4yrun8hmbNrQmf{x^nH{oLzD zc!=_=@(%`37u=n>Uxh!A^Y?N?f4IJ&wVh0FaS0oKpsBeNAvd-F$KTyaYh#Cdr=3x! zwR4j3-tLz!4ErBjAi`_Lm25uI(Zf0Z2&WG~Uw(8b}tXs_6_CJXE|MZM~Z z{VhmskF^q`-kEkRIYjVsEKTOs<7ZI2Em2@xXU}arGjzXY`lW62!nEzS#ZmdZqI(=1 zcxe1Od4vQ#ZAS^3L`Pnc#lcpty_ny7eRywl0$&Pb>+3j#9!jh zhIk7{7}5098F0@XaQi(Qt@Y{?OEb=odsKT)cv*(WYNRA#b?KyYcpqQrKVFq~cVa_H zMd7f5`|5t1cjyRfz+vp=7A0eJGVoY zLCsJzFX-D0MnQVk@I`1!v$5vsemxe#Pcr=8w!}Mm=kD-^G|Hj zmihfTE!&*odGQmniP%cT*rGNW5@6SB4mHd7I*&PjW;V)^duf_0E6J2q&d81@hcpKX zu=n06=1w5lv&zKKrY<+fZ8omqcLy{_i=(Skr?O-FOD#80-PBejtMH3P(_Qol6c>Z6 zj+>k3H&_>^EX$rg*(~NBnP4D^L*18cdR?_|hm;e~4hWxMy!0T8=Wx!+l2%+wZO^Sy z7i5#9ritW#&GAmQG=Jf|8m2zVy}ysjbbY8^x=KUEA-+xC_!PFi*zC#juvcLPnqa28jUio%FR z9SdFpdpmdYAWOVjZ$!dCc4tue**yz-bUWOzwuU32?m+~R2n{Wh?s8~y)CfDZmVYaw zbW4LjiydP(Ik4BJ*G(~Cr-TKX|Dq-7Mx4FTQ>dP;<*N_74Bi(J*Be>RpJ$I?gM9$a~k)b+0`%!PnwhHY_eSicue0-XNNzP)J^>G3;j1@$6+v zEUITeX&YOjh{{3UifiV)0y76$`r1C&Ap!he&)E(J9uXOOJw^OuWkJQ;HgaVWgl&mV zOHBNdCUEUkchHrT;o7(NbW(TL=Bp%#_-WMox*>$a$Zg47=N~uFi6nl57kfT#cx#l^ zcI5_20;-u)!@)JrmZ_=3vA0cbJBYXIMhh61Rc2weJ(i9Zirq~ENdAkSPO%!bLpAWE z>(~^sXNP7^5_iV(a$`~fsX9gak=Qr+^sT6^Nb{zN)wr|=!wCWzC-&H>THW29*t^P% z$*-Pl{Jc8JJ@&n1(-TtqVO%;t30o#iK04C$ByNFZda7sR=vIrk6T8Q7u&ZcfYraR% zvAWrqMuQUL0_M|PB+jWI?gHJfj^#xmrt2r4!Gn#H=TYr@cFFfX8~M*Nolpp2+#eovAZnO zNREimQW}SbrAu_qJ?i|?*_1QAdOb7i(zcGu=HUV+f$9?Nh5Q;Q3C2wBz992m>epa# zQid6(WwhE)14%k($1uD{hmV@q4^dpe=yrbaxzu#iv_4U`Gw?Wu!f#}j^+Lj6JKSt` z+cu|D=9`jd;AP>H*1fyK6q3S@>gUjJF4#DSKLuM~0~kS%pf9yKyZ0I13tH{!*ieFT z8B@m0;+|zFIECmiYsVPG8Uj4fC1^2;?qj+>m)}SzMeGEZIFmTneLdI6VMKFgCm3~G z2>SyqG-h+jS_P(ibtJ6JSm92$?l_-H^|(y4P&Y3g*M|9^?HE+-`$x@NEmlS5-_5D* zq@WV!%%p>pvsu@WDRf@y=UXPWu>Xh zN>+oIvIdiJ#c7fh;g42OWr!2jJ3}*aZQhh@UG}v`!lN?eY9U2 zv{I7i&QjP(w>b3NQS19fstLOVl)CSom?<}~iP<-MrCW1LIc{1y`@}hNZ6P;w=lV~{ zm(fSu`b=iS;gw^Thi{l?nt8OfmSGr4YWZ~gSapj}@-*0Q>vhMkxRFNn3!BkQN2D>& zP4VqY7T7JtaryKP@Ex^$f=ha(zlRL!K!@+RxT0m=VG= z!&KqC|2PF4zDh-_?UtO<0?Z96K2MQ^z|&c@GFm zkBjbtkfl41C+WSbcr_y~Y)102b2o`!B{O9Qc-QzH6trptDKikah13?P2JhFi*pXfq zGMu_4XWGqash{|8-Sjoq^sH<5jj7(tgc8`2_E{XZydT}br`o?0^$9fUXTiA=!8MrRDH0h5Q zKH$Y#=52BI?@%Vnx)2YErIQvUk*Apl2htBdfI7KJ*|YnTtjv2?gadoc(tc_JrU?T7 zRX&2!JRUFG9f0xe`OYGsxlu@6IyZDj1nm!0#7(1UVbz+t8wE&f0ps~E%DVE(@^;>z zP@b@al;(PapvuLpPlQ~Hw1y%3FA}~~9H9h4cOfs(gTR9#)?(K#Jbe1(g$RFyn%=lZ zs42MF!Vt4e+MSgj*YyViw=Xc@n+T*tZ%s96Fw0*KkY>S@4yYKF5i-sU|qf0a1^x*O|I?H23*FQ8j{TS zC_)-)_c_8d*rFb=Mj_Fe~TkUwf7$%BZJ zO~!($hHeE>@{6GU=3Z5IGZ`{qAcmN-mzkNIMYWb)pMIaiG2I&ndt57AtX5;e5JRzW!xWY z3HKnTD@AA6&=nPI+~(rF_(1i;HP*gNAX|x>%U@74)bd#1LMmxsJ+8~dzgS*WFxiDh zg2765856%Z^QRv#baI$(nzPCm;rV`G%F>WPmb8mTLK2(CDW|(HJ9TUeFuP>$#$(`| zHKiS;JA=HJ*A0~d?H!Qswh%)^ibtHxfl<_$psM$4s0V*!an}_lB4)l@qc7qu0HHQE z6twn8BbHy_Q4hvH9UIAZ?VYMgbOTschDizar!$kox60Z!kc~*{nzFF^6v>!<^%Sad2_V`sh%V=)E)RG-PbdEAt)&f zI##SMJ9uT2l0QLjDi^-)Cc!giyQ_1XE}~}cViO)+6afjB+Cudd9zzdF!;~AokzR9I z71`{j)H9IXzVlgF+H{GC6#%EqA%NfE*gmu;(#;GRkE@QJ?kiy}X*CV4(af+op{Zm% z07J?#GlU480(&;r`Mr9pl{>uZ5kg&$2v#UUuRmir^acLl;>bYh@4Snp<#dGY%-2W0 z!Padrcj?s~e~%ew87h<13|t@$qnS%e+MAD9cW#F1xUE-UpBB$}=2hwKaMiIUC9JZl zsB^yUbE3Sw$guL#5^}Ojq&+?Oidi@7iGjO$h80berrl4OBo`(5_0-WT9X(DTBp^!1Zl$5M-xj`VWU$T!+`g)Uh-_dvS*YVku*|r z;==c*O0=&xkLJa2CC8Z=dd0!u*_(-_R@T zwpPvDS9hD{Y+6t5a`| zfr0s-2vDkLbN{uM?v9DJDh>*c6IQsosYPpQILpqvZF?3vKIuS&O3t^O9!P>hwC7z> zyPr8GnC5IP2Plj^(9k&anYiYSQF&)>YHqoOx&^omIV4<_A@a{rA$%EU ztm?YXd{=HRPP>`H&VM2pTWZyigAFL#|gr3^6Br%+-}C>I`NA<2kP8@zSe&6cJ8@}uU+%rhu5 zVG!mo6~{Jq6f721l`HKhf#rdZ?5+1x+K=Tp*m(`KFkKW!UG+x}|Dq-3?hcIddED$F z!M;zRcFpM$B3rarjJGo{w$JJG<8scB5!#)^^YERLv|9dMy`JHniwt@Zl5D463cHHD z(y8o_jc}d08{}I)Bkg7iFN1%3(}oQ-D@v1VjVgE1-qi6 zyfrpJP~VA3Ol;m@GDd80@}0^gjNxXFH`9@tE`xB+tBN=Wol8$P$+FciRF^f{j5jHS zups@r9H%!?x3{@Uq)`)0WPjM?xDlO@mY=W`pNz3qZl}xushgOw_Q(X&sjYm!=gj>xcq?`Nko}UO^80enBiaLmaa(09w^fGPl1)C&ky6w@CuTAVqFa5+|4}rcIU%GYrXivCzJhRmCvOE(UIJ`4EP~S zI296MwL^i(O{q;VL;EUQ@hjej#o2tNfRYkQNSY_S1V*CrYkAa&cOSBy|7@bHICvqU zk;C?+lMG}vVQ%a_cKRhG?&scRua$2t2284L5M>uDIE0?!`sppiFD=ZX!7|xuenA&8I7LY&OdVy?^r1obyr{ z*siUaoK};pE8y25=xH zVb@$ASxC?ht~G(W{PI3s#DH=~1J&GuYBHt|rbzX`f26DA+Nw12Ck zxMAA(3b@2rCB`O(*ORNn8iG;xOrP3zqz{`-fh}jiXZIPf&3d~|$onm~RLcscWJjnL z5MLU5crvGzfL}30pSiqmbn6aYU4jf(iOEK{q87hTES~k151V)1w|?<_YW$X3^waHL zW;2ku4t5T!YL-4jH~={mJWDp4%)}@~>9U7muvYT9mtW)7kkc3gbxol_kC}6KET_cn zd~ps~GQmITM<)U0|6t(qzPL;7A|BN~$}6fd6MpaZByS0ffO)Zt_X6Gwigr{KXw#i3 z>#qgp-tx!~8)wc>bzfoGMKgS9$9v8as$4^4$O(`I2%lRc<-4kKmO`nvIx!Oy<-Ruf z_~Pl=r5NqprAQaKmq8XErGMpv?&hiL!u)$4i!a!B+P^@)qQmJQOJ*YR2pBbk)YKk5 zQw&Q3`|Z2qSA~6?TguTnxYw56`^>JB`-ot-To?4f7;1kmHni1?m}!7kb2)ZjDPD7P$wn7RqPn^)I?qe@~N%?up$xY|>J4PYXGN4I!=Ub-Y%*rw|-&Vi{ z^2r^f#KCu>Ugw6AZWO?jU#}JhcAh_jIkqd!Lg7~zeW(lK>H@>G=b*i|IC|$tdNZ#I z?M%igXjHF#rX$>(0IhaD_tTH}gRg}5=CR_nBh3rm^b;!Pyprq=`TAqE>d2(%eD3!~^e%7fkqt*fPbQaQ z-ybl}GR>my+HKpuP+Lea5kFL8Z^tw$(utQOUYG+STj18POB6M8U)bjWvw;o$#vtlV z_|vW%1;pNdJ>=jYN1|Nq7c^1Kf=<o7?yYrMjMVe~uPAoQ7l}%qW z%^Uqd#O%8ktNOIVmHobtQNco9qgHqFuQb7v>iD%YwI%4Qmo8mGca3NUz|7^diXfX9 zuL2uZz>)Roi38YUMe5!{_T=L&JF)0{_@|+)W1#645?3B9R1># zMC-jvCuzLThTtky#fSe<+VDU2$$axVGN@(awgT*P8TI!AVZw%`-hFpyzYGD=(+%4$ zyoQ3*Qk}*o2IOa1TTl}xBph;wp@~VeZUu2w^NU#78_Y#`g$5XiBfZLH1>7NXX)#v2 zpk!%PT)6AfJnvnmBgGVg?Q%-yA0mQ;v1o2QkpRTjkg7e82(mu0k1nobW$C#EZgEX- zbHXf~=Saa<+V7H{X>-cVixW*@l=Lwmhy+OURb~uxf9jiuYgh=TE6UP+Te~%!+7;ZD znxvJ1^;pC;pMwC|O5|TmQwWsP3Uh|(-gDOzRIN<65ZAdE;Vdv^sUJ@uH+3pULc}SA zz?PegCb}Q}R4(&An1)iPo6I~*hch3wO#|)Cx|Q!19M9<_G7bZys9~HE%c_qBK?x-) zi$89Re);gbh5K0Wyynht%KD_iG>u;%0^^_fZfQ=Fl%kpxfn^2RTv`7DKk?#;v*fYV zJpuc=rmQ}coN{b*nXq!rrePk1UqzO7HcYe49n1-#lyu@)SDK<2T$9lTa-M_@V%5y( zP)WPXn;$=50Ye#$jek=bl28|pMDwo97KZ4VxCG)H5qE@Xdw5-Ca4d=HHTs%V*nl{; zhsO<5fy)q0v#Nn?ZKsZNk5a|a)S5E9qnfBtSI!m^^tLz+x9%~|G^bgGcD6MLk2S|i z$rr(a-v@2;6?Yb7n%G5qB9|hc-8|^(h)RwVq@^cG_2C&U(cuj*w>a11$A7qy-tOWS z)+l?PHZ<8r4gmQ#=WQUI*Z|e;?{Ti%{(V4LT1~o=6+qBd0lyIwk$M46J z^Qmi((nFzqYrL!971eY;gcRqhHdY(%c{}RGp{LjcaCBch=b*q`dm-cZ9nX~oSWx4E? zbA5ZvC9n10ctWi+)r5(c@} zDug{EL+&eob%5sd=1EF*kvTseLMGX}C{Z6#mJO z-Nn8x=7BUpwt4m4_Oqk5FU3W&La}Ys{S%DJ0gQ?hAS6ZQL#Yd2pHVHZ&&_FBYI-bz z1vrN`ZbnQDK_Q{cEyvF1O$gton^u>uP13 zAxT+*%b)imlc9c-1YFw9)mOMyGELU=Ir)`fIU8aP3)K424<=d%`%Vj=+Tx~KTPf(-eArK#Ec!&#fSMF z^7$`Xvg=tcVjDKvr7-R4;~{XuM@xuKkZIw-N0IApC9qJaF)0kq% ziX1sP?N0mz_k?&SO3*k~LaI;Tj#rBRbSXtrzrJLi+mI6NQXH4eaZBt8bm$a}&(uo|q%n8X$Fz zz(S>JT^}#F>g0+FKQ@*?ShKqTR_RFvCnK7>>uEuuH{_W(MK~5Z#(8a+SuXQzau@AO zZ>_$m8!hyPAD=?TP87DfxFAd4L>eFDt$d@IAsuhd(&sCkEg4vhU+{` zgeVa6h~QlAx`Wqz90eo$-!U4xYb zQ`(#rL8GW0Tz&8UGMQfamA*yTElyns-Na7|v^s?yytZ%Ar#U22>L$NmsR*H5?J6f0 zC*v&BcB{;4N~uP1Dy4UFLJzvGj7c0EIA~^#43|9AEy>b<7W)17Pd!DOcfS&Bs=UJM zuDy)kj=hbMFwJS+0HuEeJ}!^ zxNk_C*_hGVc{wVAHt9w9;Eq4<)w5gdIXi0V>}lmdxgE>8*k;@!nmK~r;xLArxTgKq zIgROhE3=F+pc69{8kbqa6B;B2&Sn8&q~w}+$1hN$%HL9?E%WKMk=j`Y9*^fzDb%@Z8P3nd z+Z3#4!MRYTE&*E)j5HEcY3+^}&MciB79N@5o-5+%nYzJ*7qhE97a>Vg2axSKrz&tm zeMttq+flbz?Yh%cHN=y$7||;L>!~x!YkmUgaWSmYCdf|aOiM+)O`KDi!7Zy-f)7Ll zP)U=9xui^Q`EdL(ssIGPl&*f+vm0D#k^QAk%SThH-6iO}L?Q@gb~;h7b3-u+F<%Byo<49awF(V}Z#X*Hm*FQe_(TTP(+j{` z@~VA2@`l69hwb?4oZb}KBqwPQ&S2BUMZ)#Qdv`UDOo0v@GGuv<;cO0zdrc{9p!y~c zYu_cob#gOq|5lrMb8;#p$ER@hWN>?@P>v#s?*Y)lAm+NZKQd;tygNtUh-I(|cM=Q*nBc0+MjnB)}M$F!g`2e>uJ>5Mwcp>;f9 zHYhioylAkvd3Rz=gk)B}Kh*9jF$kKwL>)!kmb#){F^D!dDXl+M`-sloS8P^g8--rLFtA7 zZ_oEp{%b3IB91Cc3bQ7STH!+xOD%k&LqAPVMba8X1JNo8=DhTugP;}Q@OteHPA^t}R z;(zgEPDTZtm{{ZU^T0vStngdreP##$IjM|tb^c)N#{pp8Xot0%cLVSCojI#((60k? zEOTgeV>Nc+wFrb%luWhu;yNRc)Lm8+LhheCg%sjY{<^U7yY%uu$R-1ywE|RLb=hPv z2W$W~nxC#V_fN9PAkt*;*V*Lfp4NVV1@-V`NVs(`UnwU)>=(5RESFA@0jX?DG z>0f1&0UJvBcmvc|mrd4{VmayJCL}qaDcDaq!msE5&=U>9L(yFMhz|HfJ2jTPw5S%% z_L>rOeyx*v6BuA7sDO`LuWR)D<81OwOYdK@$;(TcU$V)af1OR%VUcv%xXKr!qC(Dir z?_SYdk3P?=!^9=^2PeRfU@Fe`q!FkKu^8OFA%t0gu;OeFjUok?iG!?i1)aWlOb4wz zgU!tFw1yz$aYBUy&kSzrbpCF1yw{Q!Hk6u?7Qn28u_jRKNWXtoJ9qjxm4|mmHJiux zE%q0hd8Q{z`6C00w^I|=w8dm*kN+cp=c4^^#z&cvmeF;;^{=zZPJf+E1}>IJ$%fPZ zE}IN;*ngc(mi^0Ya>uXPWXt-c>mZwKm0x!LT{hY2|CCLR2Uw{`r?vlWHW?6|q)FlZ zk0N2phRCDyAc!ZtjPk5rz|wuD>0_$C=yYXH}}Pjr>&1k|g3uj*ddPIWLrP4sSi7$7jI)<~3X_io1YC{C}CkpN< z!`Vd2br>cWUupJ{V~0g*b7x&Pnf^kyMxiLbVqGd+YR#z5XjXYL#@G)v<^=PAjv?T7 zG3PfIzbH}9MfI$%GwWB@J${{C&2;omygK%#j!_b>3nQdA*W;Xisg&jhoRxpBqjWSH-z3c2=Hwwoq`!UUA)Y9R!%Nzn z?M(&+b#d|5@q@&N12)IbXAal)3;UuMdcOQ0VW9GyrFZ`x1NCwW)%O<+l=T(;fXvY3 zXJpS(-$W3n_;)Z+l%FwBK|X)RKmlAG>t_tq>wkcOa+plL^^Y)6-#xEZ0Sr`(4g&?^ zG#&p81J&F2V!o-ch_P0Wt^89t+Ee1*0Yb)abs=M!ZP34ofr?eXa0I1Kh?|KZtyhY~ez#%7llAS|&)(T7=>yYcA#1Wt3hHtP7 z5xNFOZb-7f;7oA2_(@AHlC6-PmzEc#RX!Hy_<_0~`+4xELA);zu9ArjBX#`8?t|_k zuV9j%lj7St&H$Ips(9!H+~&9Cpqu;uP@xvvQnNQ~F?ANv4c$o4%bn?09%^aish+)K zM}480i3*+XF}x6T#d>)UU-)DJ9aLM#(H4=X8B@_$P@c}%T~Uco=sFBk==~oSVDAygy^0TKU&40R}2*_WUfUT4G#&!9X1V9lS0Qz(6HV!T<&e(1rdM1688KK!yB* zfwEYlzQaIibQmZVaD9pfn*JFEs$PeIvi=zZm9{tmFi=Nz0qu7fD2wjIPiX-F0|oF^ ze}{p(SmXI$F;J)0zr#Q^Z*DvF7YtNBI8gjM7$_9LKzRZT)Yw15Kq1~?pi&-RKiF-p zZ<+@%P%wajD)|cr%0m5bVxZu(r44_^KmowrUtyr?e#Sr{{t5%t4=_-0fPoqX7%0xa z!a(VOBkwR!tiNEOKmq3$43yQ*NfUs9+D{Mg6#nrS3=~R-fhu(&Hq+V0;4nh1-C={h zDeOq#1Pk$XjG?<2=4?|ty8H4*OO{^LB2vz$gFdYf(hK+M8sK9N_a05r6>7Z~c|R9w z83n+f{!5{@{qbbo|F}?_V7xpX{PIrnz?giVI(2+@LpS?~)$-CSd)mM>#V47&;0S`X z`y5`_yaK^mlBi}qqXlGS7b;H5{RIsmh@6_4o_c@bsDY}=DfzZZ|Ly9}nb9uoAljH0 zx0Fov3d6ggKwB<}xCx+Q8pan;s0o{w!JekYFlBe)Et9Hn;D4Xb+LAT7*)aP7gwu_P zsw#AO!??UrNrD#llET=Mc2q?}LUGbdknz_=lRGt15ZirMsMXb#2A)3Y)K>^&zzyb{ z?7eOY5VT1THD*>0&H=2P#$!t-vK6MqU98uJ9~b>?G}#20?rsoWG+9_ksDAZdqsaij z_Tq1%$w9hk^0)t8GXmZrOipNp>>L2(N5OM@w{LbCz(@#fl6i}@C^oYw= z`O7!?-@;7|>$3XOJ%fB+Ma+IZTMlS*d76gg0lnUt_mslOqeOJYcy-)`y4*t;j}a`K zlstVbpE=9`?S=ELRRC0jH`}+S6llQ*4 z9h{U9`^3pEY6r3rByIyL_r%wmVCP?oKvakIdZ<>MV(OgI=mhE;M37OA1;uf@X8elX z1ZO}Tachz5YN=tVFTabkv2DTVnwbDvA0HCs0EDRe^{s$lt=%oLM>Q#|9PPnq_yAv zrBDlMyT2A{PXPjf8Wd`iqRSYSb9Xotk@*Ua4HB?qFd|di$-~F?bH_a=*3V*7?8;h!a}lv=WZ+m`9qF{cf-@yn(4%+xlDX| z@xXfm@*i*E5=&Z6rX^R&tb%>D`wS8(Fca(7KWV*vY>{~-;P_jyca^<}C&xLrU;#RY zH+9ZLX!z3$JmP5HV4Qrc>K1NKO~Pl0Ba*H?j^@bOGy7ww?ab}>=xN76xb9N-!ZW-N zuWW&uQQEbQWT`kO=|Y+F>T`UG91wZK67D^O8**OoRTJE{R%HO z_!(XdYO%t1@Zw5`#Oi+oUfgN)XABeoNc{s06f^}kR{C?HRtO5UJDJ+(cZJ%rzb(|_ z|9PR-M^~toKiT?Mg<8@5@48L%K%v$;yhvZ+n6P)744+YMGvX`kZ^_l*06aOYk_MLw zV+Hg4I{vfl=6oybNh_h|{-TB=mwn))-Et(M-@bnWI^qQsOc=lq#lA__)|If$d%wIB zy|yF`pDiEofx7yEh(Gcn+nj60jvUw(#Hj4kkbAX3>vhouW2r-dfFhg)9GsY%XH90~3tHo4>G zbtMa78%z}oV#YitQtb{Io8j{8QMasErQLT1tv+a}7Q;7LH!pSaZ=yi9a1u<10LjQg zpfH2(9?3jZ{ra}lT9Tk5miPBzLUWaS3Ns7sTB$u~Gt=qTnZVXNRQJl+sGe-cIe_$P z5I%GQq46O=SvoTLs>g8y&CZ1Ga%k#Ik6&WftUC@bM+p9O@8XFL5!pE&)r_wxm9D9A zm6aGPpIxi?j_aCsF99WZSh(h1!ikQhInDxFi2j=T!Ix!%1xbEM%WTNsMU!>%IC3)b zUT`+3hx*td{3U%bzYdvX5czOFImPeNkwuvw+0LZTo|J%h0Ojdl*u}K}jmfM1zp;zy z|A<}u`hUSLer=bw_DD6|l@heyg_kq@KHu%;L{X8G@(FLziaC9)F{FU~76EyfV{y;J zf8=INn=|P%l_<(IKc~{0_bkwEhvOIc8%AO$_avTa6C*<2yBCXp+jq_cXO**zJPjr_&F+ELJd2@ z7)-TR%1Q0zq`Ul@gvQVpVgQf|{o8WY-(iXWt-#wV&f;m$q^|kdDdA=OjxbXlySU(V z(7(Yh#&t6{$x45YCKu7My~~}THa-nlcpHGYJ10n3+vjwF4lT0^tyevN!mDiBj#sMh z0dmUKV@rK*Cvei~XZ7~oi6tq^KYT^Ii-~@AQzSNv#x%Pu(Wks;!GSM{RoR_b7QTGP zSaHhn&TK_uS(h>gXo(z>L6(m8sO#TMI^X8lc#m8ibb3V(YMS9aYwo=w%Mnz{N+%Ri z^nD@0soJTj*Hh3V)eEUHUq)kyRpHs7@|TLRUKKytMVf?$1A+!1srCeqTDO#m@iGgy z9lTEdwT>fLQq3cUtN$W~j+(wCQdN#sCP_hza$9+b%~$9HkuEF=1<`7qlsK1XI-6@- z4IaQ(U$rtMECan8zNJb&Phvs8DUX`#xjt+fAr%B%=6;1GJk}5hp&_!+7gyp^bm&LK zDF?XmGzM@0cubcLl#9yxu1Sck(PB!Tk;E%u0Q&&f zC9Hl%>kkkF0u?ei^ZmXnm*G}!#!cL%`#Bzy7U5SHrKgjwzwny~ke`_Q-c&O-?0!LZ&}}-`2X#GTzs|9 zzPT?-gMYrtSbJ>wbKp7AY*&E`Rqs6iHGQ$=tNo`cUTs$WmcQ%dN6==m;=?ZIRsYQg z9{y<+eaztOxy+|KdJ2O!U(C7H~#GV56{@spb;3-gc8arQgtGe4-9EYxZ-fIXt1!@=c z6sWnt^R{S(CfwV^(Ei$UY$R68Y1|t18M_WV(E)bGY=JwdYwI#na=xBdjkmqn`uVTN z#fax$v-oe%{nc?L6}Z7_qxN&}x2{Q8vlnH1Fhw2>L#koMEY%Kdi*?x(dw+E3dG zJYzk7n#}ib*nZm6!2Pr)$opx5vsGC3)4l=krv+xgILLn5UkSkdw81}@1NYPF{kOY? zw4c^I>kZ?~J!Kyr9Nczo74S5HgT}j)FXSE#c2@q)mzMwi%8vh0AG@8EzaL4f%YMs~ z@%)VWZs3W~m(fmiBBL~aSyQO*qX^kgyBo5f)_Ab)r_Fo!pE1Cjkx7>U^u^Aq%Cn<-P3HQJHJ$69?q|NY@9^C<#Yz86BJC@TK1MsS;{idx zdKdf9Un35l;BCVd+V42NZ=v~iByL>We=5IFl0KZSoD*2G3^cQS{K5P5}6!f zeYw_QTaeTHOnt$kSZrgev#K}l*_JAzAa6;h21Z9y5Iq`J>8b)LOCUh@_VyNHoA5;p z2E(9#)^3=RRvDg4N)2|a*_cpwW%duT~lYxvx;wUQ-})?{3$Imr-qnBAP`<1UonwAGcz+70{zRU z|J#8OC_9;zSVNR`bw#^u#Tt6pP`yf}QcFBR43k#Y+}b*v$WF#$OXPK^ix7@5hL-6} zyD$6Xo;$bO)5|NE;0|##JvaQ*iNyMQ`2C$&SxOVfTPzpl%?0=N^KDBQGZ)1yzJXkqZy zt@lAXMe{RTjFc~ojv&^juxL77m|xwB5j8Y4Y^n8t^1iD}%FN7skL!JR;9ahdLCMS{NFC3H9@3IwWsw}W%{e%a=-JlQ1!Jc+K)j(} za^SUw1RT(&KxNES+zEn5*N0AT@dsbe-b#jL`MnMSv;}yyQ~PV60Du3T3(T)H{k2=2 zDLQq1{cm<)a2{Q!UTaC~lKlPsU3vdBV2#OSQq#bS__-IOEo$1eW4kfVGB}{zmrli+ z*t)lrB5G|b#%i^y9CoWSgfO=5Nbdaf;j{4*Mx(K4ewz^8DI9w6VBbj+35{}x9B)r$ z@40^cdLfU;OJK|PG6q+Y#)WGGQTZoh$JqK8FA5b3g<)2~Zx#sBY@`Mp=gRNb1x)|( zjXSn)YC@@HI(gI8Y~I@uk&z{mMTBV=ENc(9z5Qx+b+th&V`rT|?=8G+^%3S<-lEtR z{~)9;2cW2qRDd3Wh_am$xO^rjCk#Qc-J3qD4TT0emaNwMN+o`f(Gn3JzA`2z=8@bj zTF1MfOa3-00?njY=4UX|T5YT_7{W>KUtLFyV^aPU7>IU_r>Cb$r)5u`9Cgv9F^%u@ zgGO^7>dY4%GBEbO~ncU+8n!b>VSPaK+F(}UXF_*OWB1Mm zeRSy1208n4bA5!4Tk+N6QW!~DI669-HTT2!>P+{EexH}v4NYN2fZuZ_00-q}sZ`p> zhwf}UyDk)oOdB(sJIQx57H~}j5nS2MU<6q_p@(v{`jc=3qO%M|+oJ5>rKD~#y$d}Y zl2+{~zo@OMsHjl4K%3FLR^sW?+bzI?fph9*#Mfl8*^+;RfN4@(;&S~>bo`P7yee7z z{2=nbkb1#}!ixck_)k6`b{%@gk9bN0+H&2`=#V&Xv&{WZ_gK)8oLI2>#%qp&ypJCb za^_wB(||2PA-&TD9y*d-*@-#)S%#|&XSps#3@h>9R`bj9i$p3lYD`3pa)!XN5?7Z7 zAVd0AAy6n`8A@y}mgm&mzP(bf*8?ewHe*4*}7+ zG#ag$&-Ygf$i8ju?Ip`MlGrlCM7R58w>RJ5nL%{L zMJ*cH4q=i5fk?{Q$fekT)5W?MiK|9;o{n45B2fLG#$(%Xw zdGGtaxw+4Co_kJkz=n66006&&zaIfp-8Kv8O?wYmfUnL)$A3wTjXocZPB?P`1-1Y$ zu_NpW!1o`nc3|dZM?jHeU~s5pu*`a^aqOqxZs{~7OE+KH|6O)l#bAYv`R{Lto{4t1 z)RTN~e3<+0m5;ZUlnk4kaA~1E7!S(|$nO0D-=}EyVXd^5u?2-@+4UMd^mr$vYdPP6 z3y1!=G;vIcgPuIar58e48gy8Odr<&san=zlnx{gmudE}+bCg1;p4I`8lyXRqgJidq>QL410Y{+qW#12A!?7D0AE-o$?A3uKlU4Q?v%-p%q z8e@8Wr9glUJai~quh*YBd)7Qtzhs$^m?+ZgGZyta%A!_9((V-q`FuwxeVHc`iS{@< zht3|E_5{IA4Sc>xsXWW`lO(64SYc@^Mbytg7^|$TY+gILqd4tMMuu%dMW4CLWpaSjf?MZb2Ll zCz?Xh9L-%?n2DNv^(s)X8B`H5F_u?bbKD<(^UW4AnVeT+ORq11+ud+pkS$%dpd5LU z6WP<#!=QG6MyL4r_{fc3y~BI0;I6ap#S2GrPx)b1Ud?al^*adZ1b=o~diqUdR8m*x zx*LrSmsT+tjQNQWIPSEyB($)wP_h&?SVI(EVltVd>ELfmjp-V6U|`^_xd?L>UfrMW z=%ZB0g*3D7?(QMcWizp6Q?uL&TjMa0I6OT)?URufNOf)N>dI4~LB#=#_o1Mm+bo@~ z%Qd@p8e-=+8eHwXT)NK4t*X=_1$7lHcc`^Xhs^Gc6WJiz$82?KjQCS;T+{B-xQG_z;<_s7^a0p*xV^o7&0N~l^yd@bYKJMVe|PO zAK2ODr@uZ%B9Vqv6B4n;$V+{SOm<*hCv;VAmdRvyN=tXFk_QYK+PzRSUtixfZgFvW z?H9EdgDIjO24VRP4Gnwt?XyluNFelAYPH(nT^6fu(!Rc}DHIB;ry@}<$nNayT!nJ0 zb2#@%bw#L&iOHR^vYpyKRH}!&ySoFKp^&0dZ*LhM#5xgT z?!XUtbyHK*-SCX1*Y?^1RBF`l!wE)hRek+FWaL4PixUkGpYY*C9zAMLL#z8x6`4v5 zj2LaTaO297I&N}m${%4f37<0esHJ7UHq%mh6fbG253#^OdYxvEr>8BJx_E<{2$o+C ztEz_eJMZ7WPmq>BX(46pc5>p)8qsrFoTa0qv09$+Gf!{)xn6fSw_UV3oo4Q)1kkCu z*RNkzsZUpItCZfp*HOF^&~ z4CB?@h^f{0-fY)d-Es`IURurCDt}J7Ok1#1wbSg`*#HuGntnJ0s)eN2roB(zIN?)jd3H7cY%Rz zox7r;!2DsNR;$G%&@3O3G8Ajic4oJ3=9mwO*mS?&=z37=(#Im>7hKL74mk)MOAQ24V73-g*qe7hKVaMcWk;t2i4Z_4AObo*0fA1)VzHb8B t5FCIqasod-5=RcZk%RB|{*4{zC}i;C1M=X2jhhfF3jSc=-rNou{R_$?*dqV{ diff --git a/tests/test_graphical_units/control_data/indication/Circumscribe.npz b/tests/test_graphical_units/control_data/indication/Circumscribe.npz index 502092c6afacd7076d4da8f54fa6cc7ca2c578fb..9f4e9c51213df4bd9f8310c76644981e855a2535 100644 GIT binary patch literal 6341 zcmeHMZA@EL7(NB-$k5>rCTbYXe)xyXHb@p>1FAoiADE43+HNbb5uGH1wrdL=F!~XH zEHN`QG1)L?&>0djG^|X*F166xMNQ4R(Jah0cqzB+S~}L1OM!mS`%zDe#;@#;B&3Ai zoBNS-&YSz*bDr~@=Y3CoUG8&*0DwGr9Rv>3+lKO205I%*6YK+p;1gA|?Cj}}o7CKy?Uz`yi`tj%Y zWDg|Gha>G>%C3B(`eaGo#O>O=*j?Ig$~7H`iUSwbqeI4!y1F!6ZP2g zDS_kDUp1a?&dU#O*&gPPUcZ$!*+P$X;>#4nPI%>Oy~mKfzVQZr-wf$|wRd?8toBP|)JmOTbrir2zQU)&{?5hog zi@h!Si=bwa5sR`I-sUMxVp;aYr|&>5BB1rJY?7(IQWDs8EhzlY=uOIh{IG zYv%X4pvruqHa4p-0JI#IOzVn3yoQ8L_0+oJ^FX`xTCyKhxRraR?eEI>XDkXc!?Bgh zMvKDeBy9K?&INX(l)Lg8>|;V>^A~$l{4&vGF%njsge2o$cw99wh{2I~5q5XHnrf`M zU`ZLwl|rdGYZbxvV`}qUsi7qxwu*pzdPHRg1N~CJm{WBWxdRO~@+;8b=`J(yOCy84 zscIb)L~we5X@bD@OFN=Auu}FvLZhtW+1k|632%51ClU6Nvt$myohdx`x%_ZRRrSgt zkPrVy?S!DPycCmmz_H_-Y@U?Cvv4f2i-hsp7$HHsseAAPTn8z(i(1fp!22*8>~1~Q z_i1fpjDqxZ@8}V4sllVNHXK8FEfwj&Y-_mKE!K{;i3YwA3td&Wo0t$M{$((ds2HFa zU4n@h_f8Xk2D#M8a9cKGv%Lwcd4&4A;&}t|(mJKQln%po3qH5_pH)T}yut)nCDe#` ziNR?7w}9CUX(#dFJK413_GVpo7r5t=%q&Lhv@VNVwG`r#eOOFP7enjp+S9nrL@ShHd1>iE zG}C=*Ke>J>uw*Z~lG0_Jfx}#$HvdzC;N!TF?Xwzq!Z`P~EOi!s;*BhW z^7$keEkYSMTrJ|GET1ro4KXFj@g9Vq9vxWwr}$a*9x89Ak|?pu)r+5gS=zA`(vdxk>x1@bwEPv_0z%?K$B(-VX|o1?tB04papq2g|&te%1I} z1TX(`$#tjjyDu&UFV>s#F6NeGuwz$ojjW^tVq?{6uE+sBTHZcDy_K8j-BzST+fD$lrm^jOsCEBH|h+i%rM| zM*#pKV?}$Iru*gpphKD?*9Ay-gZ+IpJw5<8`X*s$)tK^Wkd z{ga59%NX`YZ@|^GHa86KShIZ3j=a0KL~jYdE?Cia@YD~3$dKUH`qoD$KRZ`ZEp%I? z#G6zEou>tH-}r0`Nnf$!G_G`3&|0l5$p8bTww30}r%PNtCNzkDR!XQxg0R5ELFP+P znWZre$g@MgC;3mjq)LRd5~9n+KE(1v6}|rPHf;P#2`0wwN8DsEIYTasnu(lMU-Cmu z8fdHYLuB;Y^DtkFK?@X5>aL{$d6I;9hVE^|RU$ejQAZ-@`4SWDuJ2`%_VE@D<<7Wb zsFoQt7J0SOT&%g|p?181X|99FP(d@y-tw?c8fL;Tqyfo7`f;mdReJ@(ZQ#)cw}sZV hg*LX;{}R~*8&bey?QT_j^HwZ;D}YZ49LaRc+aJfe)@lF% diff --git a/tests/test_graphical_units/control_data/transform/ReplacementTransform.npz b/tests/test_graphical_units/control_data/transform/ReplacementTransform.npz index 5b42aadb61bd09f85956193e16a791d9aa638fb2..966ccb87d71ef3f9664011b74d11eabb7c0d1573 100644 GIT binary patch literal 14749 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 EFUwR+qW}N^ diff --git a/tests/test_graphical_units/control_data/transform_matching_parts/TransformMatchingDisplaysCorrect.npz b/tests/test_graphical_units/control_data/transform_matching_parts/TransformMatchingDisplaysCorrect.npz index f6bbbc4a3e2c06f897f59d6c137c03c92fc1156d..c8c5e4568e35de974b3b374ab1ec795138d53d83 100644 GIT binary patch literal 28723 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 literal 32842 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 Z^$-2h^7jkTt8c?^6ZqR1KKIsJ{{=Q@6;uEK literal 235273 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

yO^&>$D4zVgp>JwQs+r2;^397)tkdkLlKNXE|K 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 diff --git a/tests/test_scene_rendering/test_file_writer.py b/tests/test_scene_rendering/test_file_writer.py index 8067dcee4c..6ccc8b25d0 100644 --- a/tests/test_scene_rendering/test_file_writer.py +++ b/tests/test_scene_rendering/test_file_writer.py @@ -1,8 +1,148 @@ import sys +from pathlib import Path +import av +import numpy as np import pytest -from manim.utils.commands import capture +from manim import DR, Circle, Create, Scene, Star, tempconfig +from manim.utils.commands import capture, get_video_metadata + + +class StarScene(Scene): + def construct(self): + circle = Circle(fill_opacity=1, color="#ff0000") + circle.to_corner(DR).shift(DR) + self.add(circle) + star = Star() + self.play(Create(star)) + click_path = ( + Path(__file__).parent.parent.parent + / "docs" + / "source" + / "_static" + / "click.wav" + ) + self.add_sound(click_path) + self.wait() + + +@pytest.mark.slow +@pytest.mark.parametrize( + "transparent", + [False, True], +) +def test_gif_writing(tmp_path, transparent): + output_filename = f"gif_{'transparent' if transparent else 'opaque'}" + with tempconfig( + { + "media_dir": tmp_path, + "quality": "low_quality", + "format": "gif", + "transparent": transparent, + "output_file": output_filename, + } + ): + StarScene().render() + + video_path = tmp_path / "videos" / "480p15" / f"{output_filename}.gif" + assert video_path.exists() + metadata = get_video_metadata(video_path) + # reported duration + avg_frame_rate is slightly off for gifs + del metadata["duration"], metadata["avg_frame_rate"] + target_metadata = { + "width": 854, + "height": 480, + "nb_frames": "30", + "codec_name": "gif", + "pix_fmt": "bgra", + } + assert metadata == target_metadata + + with av.open(video_path) as container: + first_frame = next(container.decode(video=0)) + frame_format = "argb" if transparent else "rgb24" + first_frame = first_frame.to_ndarray(format=frame_format) + + target_rgba_corner = ( + np.array([0, 255, 255, 255], dtype=np.uint8) + if transparent + else np.array([0, 0, 0], dtype=np.uint8) + ) + np.testing.assert_array_equal(first_frame[0, 0], target_rgba_corner) + + target_rgba_center = ( + np.array([255, 255, 0, 0]) # components (A, R, G, B) + if transparent + else np.array([255, 0, 0], dtype=np.uint8) + ) + np.testing.assert_allclose(first_frame[-1, -1], target_rgba_center, atol=5) + + +@pytest.mark.slow +@pytest.mark.parametrize( + "format, transparent, codec, pixel_format", + [ + ("mp4", False, "h264", "yuv420p"), + ("mov", False, "h264", "yuv420p"), + ("mov", True, "qtrle", "argb"), + ("webm", False, "vp9", "yuv420p"), + ("webm", True, "vp9", "yuv420p"), + ], +) +def test_codecs(tmp_path, format, transparent, codec, pixel_format): + output_filename = f"codec_{format}_{'transparent' if transparent else 'opaque'}" + with tempconfig( + { + "media_dir": tmp_path, + "quality": "low_quality", + "format": format, + "transparent": transparent, + "output_file": output_filename, + } + ): + StarScene().render() + + video_path = tmp_path / "videos" / "480p15" / f"{output_filename}.{format}" + assert video_path.exists() + metadata = get_video_metadata(video_path) + target_metadata = { + "width": 854, + "height": 480, + "nb_frames": "30", + "duration": "2.000000", + "avg_frame_rate": "15/1", + "codec_name": codec, + "pix_fmt": pixel_format, + } + assert metadata == target_metadata + + with av.open(video_path) as container: + if transparent and format == "webm": + from av.codec.context import CodecContext + + context = CodecContext.create("libvpx-vp9", "r") + packet = next(container.demux(video=0)) + first_frame = context.decode(packet)[0].to_ndarray(format="argb") + else: + first_frame = next(container.decode(video=0)).to_ndarray() + + has_samples = [ + np.any(frame.to_ndarray()) for frame in container.decode(audio=0) + ] + assert any(has_samples), "All audio samples are zero, this is not intended" + + target_rgba_corner = ( + np.array([0, 0, 0, 0]) if transparent else np.array(16, dtype=np.uint8) + ) + np.testing.assert_array_equal(first_frame[0, 0], target_rgba_corner) + + target_rgba_center = ( + np.array([255, 255, 0, 0]) # components (A, R, G, B) + if transparent + else np.array(240, dtype=np.uint8) + ) + np.testing.assert_allclose(first_frame[-1, -1], target_rgba_center, atol=5) @pytest.mark.slow From 203a5366c25acece8fda322673994d07ff3742e7 Mon Sep 17 00:00:00 2001 From: adeshpande <110117391+JasonGrace2282@users.noreply.github.com> Date: Wed, 15 May 2024 17:24:16 -0400 Subject: [PATCH 6/6] Use --py39-plus in pre-commit (#3761) * Use --py39-plus in pre-commit * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix indication.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- manim/_config/__init__.py | 3 +- manim/_config/utils.py | 4 +- manim/animation/animation.py | 3 +- manim/animation/composition.py | 3 +- manim/animation/creation.py | 3 +- manim/animation/indication.py | 39 ++++++++++--------- manim/animation/rotation.py | 3 +- manim/animation/specialized.py | 3 +- manim/animation/transform.py | 3 +- manim/camera/camera.py | 3 +- manim/mobject/graph.py | 3 +- manim/mobject/graphing/coordinate_systems.py | 3 +- manim/mobject/graphing/functions.py | 3 +- manim/mobject/graphing/number_line.py | 3 +- manim/mobject/graphing/probability.py | 2 +- manim/mobject/graphing/scale.py | 3 +- manim/mobject/matrix.py | 2 +- manim/mobject/mobject.py | 3 +- manim/mobject/opengl/opengl_mobject.py | 2 +- manim/mobject/opengl/opengl_surface.py | 2 +- .../opengl/opengl_vectorized_mobject.py | 3 +- manim/mobject/svg/brace.py | 2 +- manim/mobject/table.py | 3 +- manim/mobject/text/numbers.py | 2 +- manim/mobject/text/tex_mobject.py | 2 +- manim/mobject/text/text_mobject.py | 6 +-- manim/mobject/three_d/three_dimensions.py | 3 +- manim/mobject/types/vectorized_mobject.py | 12 +----- manim/mobject/vector_field.py | 3 +- manim/renderer/cairo_renderer.py | 3 +- manim/renderer/opengl_renderer.py | 6 +-- manim/scene/scene.py | 3 +- manim/scene/three_d_scene.py | 2 +- manim/utils/bezier.py | 3 +- manim/utils/color/__init__.py | 2 +- manim/utils/color/core.py | 3 +- manim/utils/color/manim_colors.py | 2 +- manim/utils/commands.py | 2 +- manim/utils/deprecation.py | 3 +- manim/utils/family.py | 2 +- manim/utils/iterables.py | 7 +--- manim/utils/parameter_parsing.py | 3 +- manim/utils/space_ops.py | 3 +- manim/utils/tex_file_writing.py | 2 +- 45 files changed, 95 insertions(+), 82 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 65df2b8dda..cdf84ef892 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -28,7 +28,7 @@ repos: hooks: - id: pyupgrade name: Update code to new python versions - args: [--py37-plus] + args: [--py39-plus] - repo: https://github.com/pre-commit/pygrep-hooks rev: v1.10.0 hooks: diff --git a/manim/_config/__init__.py b/manim/_config/__init__.py index 4f0bef5179..18a57307b4 100644 --- a/manim/_config/__init__.py +++ b/manim/_config/__init__.py @@ -3,8 +3,9 @@ from __future__ import annotations import logging +from collections.abc import Generator from contextlib import contextmanager -from typing import Any, Generator +from typing import Any from .cli_colors import parse_cli_ctx from .logger_utils import make_logger diff --git a/manim/_config/utils.py b/manim/_config/utils.py index 7fb8843eae..0316311778 100644 --- a/manim/_config/utils.py +++ b/manim/_config/utils.py @@ -20,9 +20,9 @@ import os import re import sys -from collections.abc import Mapping, MutableMapping +from collections.abc import Iterable, Iterator, Mapping, MutableMapping from pathlib import Path -from typing import TYPE_CHECKING, Any, ClassVar, Iterable, Iterator, NoReturn +from typing import TYPE_CHECKING, Any, ClassVar, NoReturn import numpy as np diff --git a/manim/animation/animation.py b/manim/animation/animation.py index d0fca1ec3e..042054b7ba 100644 --- a/manim/animation/animation.py +++ b/manim/animation/animation.py @@ -14,8 +14,9 @@ __all__ = ["Animation", "Wait", "override_animation"] +from collections.abc import Iterable, Sequence from copy import deepcopy -from typing import TYPE_CHECKING, Callable, Iterable, Sequence +from typing import TYPE_CHECKING, Callable from typing_extensions import Self diff --git a/manim/animation/composition.py b/manim/animation/composition.py index 65ab62832a..c5a756502f 100644 --- a/manim/animation/composition.py +++ b/manim/animation/composition.py @@ -3,7 +3,8 @@ from __future__ import annotations import types -from typing import TYPE_CHECKING, Callable, Iterable, Sequence +from collections.abc import Iterable, Sequence +from typing import TYPE_CHECKING, Callable import numpy as np diff --git a/manim/animation/creation.py b/manim/animation/creation.py index 4e3fe5b98e..e6f7199bf2 100644 --- a/manim/animation/creation.py +++ b/manim/animation/creation.py @@ -76,7 +76,8 @@ def construct(self): import itertools as it -from typing import TYPE_CHECKING, Callable, Iterable, Sequence +from collections.abc import Iterable, Sequence +from typing import TYPE_CHECKING, Callable import numpy as np diff --git a/manim/animation/indication.py b/manim/animation/indication.py index ffc310718b..8e2c3996c3 100644 --- a/manim/animation/indication.py +++ b/manim/animation/indication.py @@ -25,6 +25,8 @@ def construct(self): """ +from __future__ import annotations + __all__ = [ "FocusOn", "Indicate", @@ -37,7 +39,8 @@ def construct(self): "Blink", ] -from typing import Callable, Iterable, Optional, Tuple, Type, Union +from collections.abc import Iterable +from typing import Callable import numpy as np @@ -93,11 +96,11 @@ def construct(self): def __init__( self, - focus_point: Union[np.ndarray, Mobject], + focus_point: np.ndarray | Mobject, opacity: float = 0.2, color: str = GREY, run_time: float = 2, - **kwargs + **kwargs, ) -> None: self.focus_point = focus_point self.color = color @@ -150,8 +153,8 @@ def __init__( mobject: Mobject, scale_factor: float = 1.2, color: str = YELLOW, - rate_func: Callable[[float, Optional[float]], np.ndarray] = there_and_back, - **kwargs + rate_func: Callable[[float, float | None], np.ndarray] = there_and_back, + **kwargs, ) -> None: self.color = color self.scale_factor = scale_factor @@ -217,7 +220,7 @@ def construct(self): def __init__( self, - point: Union[np.ndarray, Mobject], + point: np.ndarray | Mobject, line_length: float = 0.2, num_lines: int = 12, flash_radius: float = 0.1, @@ -225,7 +228,7 @@ def __init__( color: str = YELLOW, time_width: float = 1, run_time: float = 1.0, - **kwargs + **kwargs, ) -> None: if isinstance(point, Mobject): self.point = point.get_center() @@ -255,7 +258,7 @@ def create_lines(self) -> VGroup: lines.set_stroke(width=self.line_stroke_width) return lines - def create_line_anims(self) -> Iterable["ShowPassingFlash"]: + def create_line_anims(self) -> Iterable[ShowPassingFlash]: return [ ShowPassingFlash( line, @@ -301,11 +304,11 @@ def construct(self): """ - def __init__(self, mobject: "VMobject", time_width: float = 0.1, **kwargs) -> None: + def __init__(self, mobject: VMobject, time_width: float = 0.1, **kwargs) -> None: self.time_width = time_width super().__init__(mobject, remover=True, introducer=True, **kwargs) - def _get_bounds(self, alpha: float) -> Tuple[float]: + def _get_bounds(self, alpha: float) -> tuple[float]: tw = self.time_width upper = interpolate(0, 1 + tw, alpha) lower = upper - tw @@ -393,7 +396,7 @@ def __init__( time_width: float = 1, ripples: int = 1, run_time: float = 2, - **kwargs + **kwargs, ) -> None: x_min = mobject.get_left()[0] x_max = mobject.get_right()[0] @@ -459,7 +462,7 @@ def homotopy( y: float, z: float, t: float, - ) -> Tuple[float, float, float]: + ) -> tuple[float, float, float]: upper = interpolate(0, 1 + time_width, t) lower = upper - time_width relative_x = inverse_interpolate(x_min, x_max, x) @@ -509,10 +512,10 @@ def __init__( scale_value: float = 1.1, rotation_angle: float = 0.01 * TAU, n_wiggles: int = 6, - scale_about_point: Optional[np.ndarray] = None, - rotate_about_point: Optional[np.ndarray] = None, + scale_about_point: np.ndarray | None = None, + rotate_about_point: np.ndarray | None = None, run_time: float = 2, - **kwargs + **kwargs, ) -> None: self.scale_value = scale_value self.rotation_angle = rotation_angle @@ -593,7 +596,7 @@ def construct(self): def __init__( self, mobject: Mobject, - shape: Type = Rectangle, + shape: type = Rectangle, fade_in=False, fade_out=False, time_width=0.3, @@ -601,7 +604,7 @@ def __init__( color: ParsableManimColor = YELLOW, run_time=1, stroke_width=DEFAULT_STROKE_WIDTH, - **kwargs + **kwargs, ): if shape is Rectangle: frame = SurroundingRectangle( @@ -683,7 +686,7 @@ def __init__( time_off: float = 0.5, blinks: int = 1, hide_at_end: bool = False, - **kwargs + **kwargs, ): animations = [ UpdateFromFunc( diff --git a/manim/animation/rotation.py b/manim/animation/rotation.py index af21fdcbf5..7bdd42238a 100644 --- a/manim/animation/rotation.py +++ b/manim/animation/rotation.py @@ -4,7 +4,8 @@ __all__ = ["Rotating", "Rotate"] -from typing import TYPE_CHECKING, Callable, Sequence +from collections.abc import Sequence +from typing import TYPE_CHECKING, Callable import numpy as np diff --git a/manim/animation/specialized.py b/manim/animation/specialized.py index adc44ea1f1..99320f36d9 100644 --- a/manim/animation/specialized.py +++ b/manim/animation/specialized.py @@ -2,7 +2,8 @@ __all__ = ["Broadcast"] -from typing import Any, Sequence +from collections.abc import Sequence +from typing import Any from manim.animation.transform import Restore diff --git a/manim/animation/transform.py b/manim/animation/transform.py index 7607199d99..d4b9941399 100644 --- a/manim/animation/transform.py +++ b/manim/animation/transform.py @@ -28,7 +28,8 @@ import inspect import types -from typing import TYPE_CHECKING, Any, Callable, Iterable, Sequence +from collections.abc import Iterable, Sequence +from typing import TYPE_CHECKING, Any, Callable import numpy as np diff --git a/manim/camera/camera.py b/manim/camera/camera.py index fa36440a17..bf917b7e9e 100644 --- a/manim/camera/camera.py +++ b/manim/camera/camera.py @@ -8,8 +8,9 @@ import itertools as it import operator as op import pathlib +from collections.abc import Iterable from functools import reduce -from typing import Any, Callable, Iterable +from typing import Any, Callable import cairo import numpy as np diff --git a/manim/mobject/graph.py b/manim/mobject/graph.py index 9723e704cb..bc11ec69e6 100644 --- a/manim/mobject/graph.py +++ b/manim/mobject/graph.py @@ -8,8 +8,9 @@ ] import itertools as it +from collections.abc import Hashable, Iterable from copy import copy -from typing import TYPE_CHECKING, Any, Hashable, Iterable, Literal, Protocol, cast +from typing import TYPE_CHECKING, Any, Literal, Protocol, cast import networkx as nx import numpy as np diff --git a/manim/mobject/graphing/coordinate_systems.py b/manim/mobject/graphing/coordinate_systems.py index 89e072d4b3..6315093f2c 100644 --- a/manim/mobject/graphing/coordinate_systems.py +++ b/manim/mobject/graphing/coordinate_systems.py @@ -13,7 +13,8 @@ import fractions as fr import numbers -from typing import TYPE_CHECKING, Any, Callable, Iterable, Sequence, TypeVar, overload +from collections.abc import Iterable, Sequence +from typing import TYPE_CHECKING, Any, Callable, TypeVar, overload import numpy as np from typing_extensions import Self diff --git a/manim/mobject/graphing/functions.py b/manim/mobject/graphing/functions.py index aae20c2e59..8ed4b43c2e 100644 --- a/manim/mobject/graphing/functions.py +++ b/manim/mobject/graphing/functions.py @@ -5,7 +5,8 @@ __all__ = ["ParametricFunction", "FunctionGraph", "ImplicitFunction"] -from typing import TYPE_CHECKING, Callable, Iterable, Sequence +from collections.abc import Iterable, Sequence +from typing import TYPE_CHECKING, Callable import numpy as np from isosurfaces import plot_isoline diff --git a/manim/mobject/graphing/number_line.py b/manim/mobject/graphing/number_line.py index 3d70ca530b..63c8954b14 100644 --- a/manim/mobject/graphing/number_line.py +++ b/manim/mobject/graphing/number_line.py @@ -7,7 +7,8 @@ __all__ = ["NumberLine", "UnitInterval"] -from typing import TYPE_CHECKING, Callable, Iterable, Sequence +from collections.abc import Iterable, Sequence +from typing import TYPE_CHECKING, Callable if TYPE_CHECKING: from manim.mobject.geometry.tips import ArrowTip diff --git a/manim/mobject/graphing/probability.py b/manim/mobject/graphing/probability.py index 92fb7355e1..0f98620dc3 100644 --- a/manim/mobject/graphing/probability.py +++ b/manim/mobject/graphing/probability.py @@ -5,7 +5,7 @@ __all__ = ["SampleSpace", "BarChart"] -from typing import Iterable, MutableSequence, Sequence +from collections.abc import Iterable, MutableSequence, Sequence import numpy as np diff --git a/manim/mobject/graphing/scale.py b/manim/mobject/graphing/scale.py index e1f88398a1..b301d1ff15 100644 --- a/manim/mobject/graphing/scale.py +++ b/manim/mobject/graphing/scale.py @@ -1,7 +1,8 @@ from __future__ import annotations import math -from typing import TYPE_CHECKING, Any, Iterable +from collections.abc import Iterable +from typing import TYPE_CHECKING, Any import numpy as np diff --git a/manim/mobject/matrix.py b/manim/mobject/matrix.py index 25eb9e580b..0921416383 100644 --- a/manim/mobject/matrix.py +++ b/manim/mobject/matrix.py @@ -40,7 +40,7 @@ def construct(self): import itertools as it -from typing import Iterable, Sequence +from collections.abc import Iterable, Sequence import numpy as np diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index 9127c2a1d6..3369f3a241 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -14,9 +14,10 @@ import sys import types import warnings +from collections.abc import Iterable from functools import partialmethod, reduce from pathlib import Path -from typing import TYPE_CHECKING, Callable, Iterable, Literal +from typing import TYPE_CHECKING, Callable, Literal import numpy as np diff --git a/manim/mobject/opengl/opengl_mobject.py b/manim/mobject/opengl/opengl_mobject.py index d64f9c0211..38c65cdc89 100644 --- a/manim/mobject/opengl/opengl_mobject.py +++ b/manim/mobject/opengl/opengl_mobject.py @@ -5,9 +5,9 @@ import itertools as it import random import sys +from collections.abc import Iterable, Sequence from functools import partialmethod, wraps from math import ceil -from typing import Iterable, Sequence import moderngl import numpy as np diff --git a/manim/mobject/opengl/opengl_surface.py b/manim/mobject/opengl/opengl_surface.py index a7132f0bbe..bcf608909f 100644 --- a/manim/mobject/opengl/opengl_surface.py +++ b/manim/mobject/opengl/opengl_surface.py @@ -1,7 +1,7 @@ from __future__ import annotations +from collections.abc import Iterable from pathlib import Path -from typing import Iterable import moderngl import numpy as np diff --git a/manim/mobject/opengl/opengl_vectorized_mobject.py b/manim/mobject/opengl/opengl_vectorized_mobject.py index 30d47b8882..d668e3a2b1 100644 --- a/manim/mobject/opengl/opengl_vectorized_mobject.py +++ b/manim/mobject/opengl/opengl_vectorized_mobject.py @@ -2,8 +2,9 @@ import itertools as it import operator as op +from collections.abc import Iterable, Sequence from functools import reduce, wraps -from typing import Callable, Iterable, Sequence +from typing import Callable import moderngl import numpy as np diff --git a/manim/mobject/svg/brace.py b/manim/mobject/svg/brace.py index 788225bb84..17429bb729 100644 --- a/manim/mobject/svg/brace.py +++ b/manim/mobject/svg/brace.py @@ -4,7 +4,7 @@ __all__ = ["Brace", "BraceLabel", "ArcBrace", "BraceText", "BraceBetweenPoints"] -from typing import Sequence +from collections.abc import Sequence import numpy as np import svgelements as se diff --git a/manim/mobject/table.py b/manim/mobject/table.py index 1a1beffad1..4edc163972 100644 --- a/manim/mobject/table.py +++ b/manim/mobject/table.py @@ -65,7 +65,8 @@ def construct(self): import itertools as it -from typing import Callable, Iterable, Sequence +from collections.abc import Iterable, Sequence +from typing import Callable from manim.mobject.geometry.line import Line from manim.mobject.geometry.polygram import Polygon diff --git a/manim/mobject/text/numbers.py b/manim/mobject/text/numbers.py index ae244e1942..6a0eb45a82 100644 --- a/manim/mobject/text/numbers.py +++ b/manim/mobject/text/numbers.py @@ -4,7 +4,7 @@ __all__ = ["DecimalNumber", "Integer", "Variable"] -from typing import Sequence +from collections.abc import Sequence import numpy as np diff --git a/manim/mobject/text/tex_mobject.py b/manim/mobject/text/tex_mobject.py index 029b5ce009..449b21d385 100644 --- a/manim/mobject/text/tex_mobject.py +++ b/manim/mobject/text/tex_mobject.py @@ -26,9 +26,9 @@ import itertools as it import operator as op import re +from collections.abc import Iterable from functools import reduce from textwrap import dedent -from typing import Iterable from manim import config, logger from manim.constants import * diff --git a/manim/mobject/text/text_mobject.py b/manim/mobject/text/text_mobject.py index f70af7a61a..971200a117 100644 --- a/manim/mobject/text/text_mobject.py +++ b/manim/mobject/text/text_mobject.py @@ -58,10 +58,10 @@ def construct(self): import hashlib import os import re +from collections.abc import Iterable, Sequence from contextlib import contextmanager from itertools import chain from pathlib import Path -from typing import Iterable, Sequence import manimpango import numpy as np @@ -412,7 +412,7 @@ def construct(self): """ @staticmethod - @functools.lru_cache(maxsize=None) + @functools.cache def font_list() -> list[str]: return manimpango.list_fonts() @@ -1155,7 +1155,7 @@ def construct(self): """ @staticmethod - @functools.lru_cache(maxsize=None) + @functools.cache def font_list() -> list[str]: return manimpango.list_fonts() diff --git a/manim/mobject/three_d/three_dimensions.py b/manim/mobject/three_d/three_dimensions.py index 07877e26ff..540a99bfe9 100644 --- a/manim/mobject/three_d/three_dimensions.py +++ b/manim/mobject/three_d/three_dimensions.py @@ -19,7 +19,8 @@ "Torus", ] -from typing import Any, Callable, Iterable, Sequence +from collections.abc import Iterable, Sequence +from typing import Any, Callable import numpy as np from typing_extensions import Self diff --git a/manim/mobject/types/vectorized_mobject.py b/manim/mobject/types/vectorized_mobject.py index 6a2fffd2cb..cf7ce9a6b4 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -14,16 +14,8 @@ import itertools as it import sys -from typing import ( - TYPE_CHECKING, - Callable, - Generator, - Hashable, - Iterable, - Literal, - Mapping, - Sequence, -) +from collections.abc import Generator, Hashable, Iterable, Mapping, Sequence +from typing import TYPE_CHECKING, Callable, Literal import numpy as np from PIL.Image import Image diff --git a/manim/mobject/vector_field.py b/manim/mobject/vector_field.py index 44432bbd23..eab0117fdd 100644 --- a/manim/mobject/vector_field.py +++ b/manim/mobject/vector_field.py @@ -10,8 +10,9 @@ import itertools as it import random +from collections.abc import Iterable, Sequence from math import ceil, floor -from typing import Callable, Iterable, Sequence +from typing import Callable import numpy as np from PIL import Image diff --git a/manim/renderer/cairo_renderer.py b/manim/renderer/cairo_renderer.py index 86324fda29..b97fa50299 100644 --- a/manim/renderer/cairo_renderer.py +++ b/manim/renderer/cairo_renderer.py @@ -15,7 +15,8 @@ if typing.TYPE_CHECKING: import types - from typing import Any, Iterable + from collections.abc import Iterable + from typing import Any from manim.animation.animation import Animation from manim.scene.scene import Scene diff --git a/manim/renderer/opengl_renderer.py b/manim/renderer/opengl_renderer.py index 1e4da96b8b..5a4d692657 100644 --- a/manim/renderer/opengl_renderer.py +++ b/manim/renderer/opengl_renderer.py @@ -3,13 +3,9 @@ import itertools as it import sys import time +from functools import cached_property from typing import Any -if sys.version_info < (3, 8): - from backports.cached_property import cached_property -else: - from functools import cached_property - import moderngl import numpy as np from PIL import Image diff --git a/manim/scene/scene.py b/manim/scene/scene.py index 07a2411733..06dd15fc90 100644 --- a/manim/scene/scene.py +++ b/manim/scene/scene.py @@ -52,7 +52,8 @@ from ..utils.iterables import list_difference_update, list_update if TYPE_CHECKING: - from typing import Callable, Iterable + from collections.abc import Iterable + from typing import Callable class RerunSceneHandler(FileSystemEventHandler): diff --git a/manim/scene/three_d_scene.py b/manim/scene/three_d_scene.py index 8f49393d03..919f3cb2c6 100644 --- a/manim/scene/three_d_scene.py +++ b/manim/scene/three_d_scene.py @@ -6,7 +6,7 @@ import warnings -from typing import Iterable, Sequence +from collections.abc import Iterable, Sequence import numpy as np diff --git a/manim/utils/bezier.py b/manim/utils/bezier.py index d97a2545e1..3f2bac86bc 100644 --- a/manim/utils/bezier.py +++ b/manim/utils/bezier.py @@ -31,8 +31,9 @@ ] +from collections.abc import Sequence from functools import reduce -from typing import Any, Callable, Sequence, overload +from typing import Any, Callable, overload import numpy as np import numpy.typing as npt diff --git a/manim/utils/color/__init__.py b/manim/utils/color/__init__.py index 6e0f36ff44..cfffc4edc9 100644 --- a/manim/utils/color/__init__.py +++ b/manim/utils/color/__init__.py @@ -53,6 +53,6 @@ from .core import * from .manim_colors import * -_all_color_dict: Dict[str, ManimColor] = { +_all_color_dict: dict[str, ManimColor] = { k: v for k, v in globals().items() if isinstance(v, ManimColor) } diff --git a/manim/utils/color/core.py b/manim/utils/color/core.py index 767fdcf576..d2312c6f53 100644 --- a/manim/utils/color/core.py +++ b/manim/utils/color/core.py @@ -27,7 +27,8 @@ # logger = _config.logger import random import re -from typing import Any, Sequence, TypeVar, Union, overload +from collections.abc import Sequence +from typing import Any, TypeVar, Union, overload import numpy as np import numpy.typing as npt diff --git a/manim/utils/color/manim_colors.py b/manim/utils/color/manim_colors.py index 42c93985e6..863cb5a99f 100644 --- a/manim/utils/color/manim_colors.py +++ b/manim/utils/color/manim_colors.py @@ -215,6 +215,6 @@ def named_lines_group(length, colors, names, text_colors, align_to_block): LOGO_RED = ManimColor("#E07A5F") LOGO_BLACK = ManimColor("#343434") -_all_manim_colors: List[ManimColor] = [ +_all_manim_colors: list[ManimColor] = [ x for x in globals().values() if isinstance(x, ManimColor) ] diff --git a/manim/utils/commands.py b/manim/utils/commands.py index 65a64db8cd..8a15889510 100644 --- a/manim/utils/commands.py +++ b/manim/utils/commands.py @@ -1,9 +1,9 @@ from __future__ import annotations import os +from collections.abc import Generator from pathlib import Path from subprocess import run -from typing import Generator import av diff --git a/manim/utils/deprecation.py b/manim/utils/deprecation.py index 68788a75e7..ece4d40340 100644 --- a/manim/utils/deprecation.py +++ b/manim/utils/deprecation.py @@ -7,7 +7,8 @@ import inspect import re -from typing import Any, Callable, Iterable +from collections.abc import Iterable +from typing import Any, Callable from decorator import decorate, decorator diff --git a/manim/utils/family.py b/manim/utils/family.py index 21e100a4b2..17b39f347f 100644 --- a/manim/utils/family.py +++ b/manim/utils/family.py @@ -1,7 +1,7 @@ from __future__ import annotations import itertools as it -from typing import Iterable +from collections.abc import Iterable from ..mobject.mobject import Mobject from ..utils.iterables import remove_list_redundancies diff --git a/manim/utils/iterables.py b/manim/utils/iterables.py index 9a688561ac..cf6f664f98 100644 --- a/manim/utils/iterables.py +++ b/manim/utils/iterables.py @@ -19,18 +19,15 @@ ] import itertools as it -from typing import ( - TYPE_CHECKING, - Callable, +from collections.abc import ( Collection, Generator, Hashable, Iterable, Reversible, Sequence, - TypeVar, - overload, ) +from typing import TYPE_CHECKING, Callable, TypeVar, overload import numpy as np diff --git a/manim/utils/parameter_parsing.py b/manim/utils/parameter_parsing.py index 458885a5b3..7966906bb1 100644 --- a/manim/utils/parameter_parsing.py +++ b/manim/utils/parameter_parsing.py @@ -1,7 +1,8 @@ from __future__ import annotations +from collections.abc import Iterable from types import GeneratorType -from typing import Iterable, TypeVar +from typing import TypeVar T = TypeVar("T") diff --git a/manim/utils/space_ops.py b/manim/utils/space_ops.py index 3e90deef21..3df699beca 100644 --- a/manim/utils/space_ops.py +++ b/manim/utils/space_ops.py @@ -3,7 +3,8 @@ from __future__ import annotations import itertools as it -from typing import TYPE_CHECKING, Sequence +from collections.abc import Sequence +from typing import TYPE_CHECKING import numpy as np from mapbox_earcut import triangulate_float32 as earcut diff --git a/manim/utils/tex_file_writing.py b/manim/utils/tex_file_writing.py index 6d9a186cbe..b18f81e637 100644 --- a/manim/utils/tex_file_writing.py +++ b/manim/utils/tex_file_writing.py @@ -12,8 +12,8 @@ import os import re import unicodedata +from collections.abc import Iterable from pathlib import Path -from typing import Iterable from manim.utils.tex import TexTemplate