From bd4d123e5bd3d198a2d5b39d053d874d8c21796c Mon Sep 17 00:00:00 2001 From: MrDiver Date: Sun, 13 Nov 2022 05:59:56 +0100 Subject: [PATCH 01/91] first draft of color class + starting library conversion --- manim/mobject/geometry/shape_matchers.py | 2 +- manim/mobject/mobject.py | 41 +- manim/mobject/opengl/opengl_mobject.py | 5 +- manim/mobject/types/vectorized_mobject.py | 47 +- manim/utils/color.py | 794 ++++++++++++---------- 5 files changed, 496 insertions(+), 393 deletions(-) diff --git a/manim/mobject/geometry/shape_matchers.py b/manim/mobject/geometry/shape_matchers.py index 4376213ef9..d5b82825fc 100644 --- a/manim/mobject/geometry/shape_matchers.py +++ b/manim/mobject/geometry/shape_matchers.py @@ -10,7 +10,7 @@ from manim.mobject.geometry.polygram import RoundedRectangle from manim.mobject.mobject import Mobject from manim.mobject.types.vectorized_mobject import VGroup -from manim.utils.color import BLACK, RED, YELLOW, Color, Colors +from manim.utils.color import BLACK, RED, YELLOW class SurroundingRectangle(RoundedRectangle): diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index c7e9bfb213..4806e5907d 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -1,4 +1,5 @@ """Base classes for objects that can be displayed.""" + from __future__ import annotations __all__ = ["Mobject", "Group", "override_animate"] @@ -29,7 +30,6 @@ ) import numpy as np -from colour import Color from manim.mobject.opengl.opengl_compatibility import ConvertToOpenGL @@ -39,7 +39,8 @@ BLACK, WHITE, YELLOW_C, - Colors, + ManimColor, + ParsableManimColor, color_gradient, interpolate_color, ) @@ -91,7 +92,9 @@ def __init_subclass__(cls, **kwargs): cls._add_intrinsic_animation_overrides() cls._original__init__ = cls.__init__ - def __init__(self, color=WHITE, name=None, dim=3, target=None, z_index=0): + def __init__( + self, color: ManimColor = WHITE, name=None, dim=3, target=None, z_index=0 + ): self.name = self.__class__.__name__ if name is None else name self.dim = dim self.target = target @@ -100,7 +103,7 @@ def __init__(self, color=WHITE, name=None, dim=3, target=None, z_index=0): self.submobjects = [] self.updaters = [] self.updating_suspended = False - self.color = Color(color) if color else None + self.color: ManimColor = color self.reset_points() self.generate_points() @@ -226,7 +229,7 @@ def construct(self): cls.__init__ = cls._original__init__ @property - def animate(self): + def animate(self) -> _AnimationBuilder: """Used to animate the application of any method of :code:`self`. Any method called on :code:`animate` is converted to an animation of applying @@ -1684,7 +1687,7 @@ def put_start_and_end_on(self, start, end): # Background rectangle def add_background_rectangle( - self, color: Colors | None = None, opacity: float = 0.75, **kwargs + self, color: ParsableManimColor | None = None, opacity: float = 0.75, **kwargs ): """Add a BackgroundRectangle as submobject. @@ -1736,7 +1739,7 @@ def add_background_rectangle_to_family_members_with_points(self, **kwargs): # Color functions - def set_color(self, color: Color = YELLOW_C, family: bool = True): + def set_color(self, color: ParsableManimColor = YELLOW_C, family: bool = True): """Condition is function which takes in one arguments, (x, y, z). Here it just recurses to submobjects, but in subclasses this should be further implemented based on the the inner workings @@ -1745,19 +1748,19 @@ def set_color(self, color: Color = YELLOW_C, family: bool = True): if family: for submob in self.submobjects: submob.set_color(color, family=family) - self.color = Color(color) + self.color = ManimColor.parse(color) return self - def set_color_by_gradient(self, *colors): + def set_color_by_gradient(self, *colors: Iterable[ParsableManimColor]): self.set_submobject_colors_by_gradient(*colors) return self def set_colors_by_radial_gradient( self, center=None, - radius=1, - inner_color=WHITE, - outer_color=BLACK, + radius: float = 1, + inner_color: ParsableManimColor = WHITE, + outer_color: ParsableManimColor = BLACK, ): self.set_submobject_colors_by_radial_gradient( center, @@ -1767,7 +1770,7 @@ def set_colors_by_radial_gradient( ) return self - def set_submobject_colors_by_gradient(self, *colors): + def set_submobject_colors_by_gradient(self, *colors: Iterable[ParsableManimColor]): if len(colors) == 0: raise ValueError("Need at least one color") elif len(colors) == 1: @@ -1783,9 +1786,9 @@ def set_submobject_colors_by_gradient(self, *colors): def set_submobject_colors_by_radial_gradient( self, center=None, - radius=1, - inner_color=WHITE, - outer_color=BLACK, + radius: float = 1, + inner_color: ParsableManimColor = WHITE, + outer_color: ParsableManimColor = BLACK, ): if center is None: center = self.get_center() @@ -1802,7 +1805,7 @@ def to_original_color(self): self.set_color(self.color) return self - def fade_to(self, color, alpha, family=True): + def fade_to(self, color: ParsableManimColor, alpha: float, family: bool = True): if self.get_num_points() > 0: new_color = interpolate_color(self.get_color(), color, alpha) self.set_color(new_color, family=False) @@ -1811,13 +1814,13 @@ def fade_to(self, color, alpha, family=True): submob.fade_to(color, alpha) return self - def fade(self, darkness=0.5, family=True): + def fade(self, darkness: float = 0.5, family: bool = True): if family: for submob in self.submobjects: submob.fade(darkness, family) return self - def get_color(self): + def get_color(self) -> ManimColor: """Returns the color of the :class:`~.Mobject`""" return self.color diff --git a/manim/mobject/opengl/opengl_mobject.py b/manim/mobject/opengl/opengl_mobject.py index 7b2d79d235..b2b67f87f3 100644 --- a/manim/mobject/opengl/opengl_mobject.py +++ b/manim/mobject/opengl/opengl_mobject.py @@ -16,7 +16,6 @@ from manim.constants import * from manim.utils.bezier import integer_interpolate, interpolate from manim.utils.color import * -from manim.utils.color import Colors from manim.utils.config_ops import _Data, _Uniforms # from ..utils.iterables import batch_by_property @@ -2035,7 +2034,7 @@ def set_shadow(self, shadow, recurse=True): # Background rectangle def add_background_rectangle( - self, color: Colors | None = None, opacity: float = 0.75, **kwargs + self, color: ParsableManimColor | None = None, opacity: float = 0.75, **kwargs ): # TODO, this does not behave well when the mobject has points, # since it gets displayed on top @@ -2069,7 +2068,7 @@ def add_background_rectangle( from manim.mobject.geometry.shape_matchers import BackgroundRectangle self.background_rectangle = BackgroundRectangle( - self, color=color, fill_opacity=opacity, **kwargs + self, color=ManimColor.parse(color), fill_opacity=opacity, **kwargs ) self.add_to_back(self.background_rectangle) return self diff --git a/manim/mobject/types/vectorized_mobject.py b/manim/mobject/types/vectorized_mobject.py index 3a59d35287..4abed52fa2 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -16,7 +16,6 @@ import typing from typing import Optional, Sequence, Union -import colour import numpy as np from PIL.Image import Image @@ -37,7 +36,7 @@ partial_bezier_points, proportions_along_bezier_curve_for_point, ) -from ...utils.color import BLACK, WHITE, color_to_rgba +from ...utils.color import BLACK, WHITE, ManimColor, ParsableManimColor, color_to_rgba from ...utils.deprecation import deprecated from ...utils.iterables import make_even, stretch_array_to_length, tuplify from ...utils.space_ops import rotate_vector, shoelace_direction @@ -76,12 +75,12 @@ class VMobject(Mobject): def __init__( self, - fill_color=None, + fill_color: ParsableManimColor | None = None, fill_opacity=0.0, - stroke_color=None, + stroke_color: ParsableManimColor | None = None, stroke_opacity=1.0, stroke_width=DEFAULT_STROKE_WIDTH, - background_stroke_color=BLACK, + background_stroke_color: ParsableManimColor | None = BLACK, background_stroke_opacity=1.0, background_stroke_width=0, sheen_factor=0.0, @@ -99,7 +98,10 @@ def __init__( self.fill_opacity = fill_opacity self.stroke_opacity = stroke_opacity self.stroke_width = stroke_width - self.background_stroke_color = background_stroke_color + if background_stroke_color is not None: + self.background_stroke_color: ManimColor = ManimColor.parse( + background_stroke_color + ) self.background_stroke_opacity = background_stroke_opacity self.background_stroke_width = background_stroke_width self.sheen_factor = sheen_factor @@ -114,11 +116,12 @@ def __init__( self.tolerance_for_point_equality = tolerance_for_point_equality self.n_points_per_cubic_curve = n_points_per_cubic_curve super().__init__(**kwargs) + self.submobjects: list[VMobject] if fill_color: - self.fill_color = fill_color + self.fill_color: ManimColor = ManimColor.parse(fill_color) if stroke_color: - self.stroke_color = stroke_color + self.stroke_color: ManimColor = ManimColor.parse(stroke_color) def get_group_class(self): return VGroup @@ -158,7 +161,7 @@ def init_colors(self, propagate_colors=True): return self - def generate_rgbas_array(self, color, opacity): + def generate_rgbas_array(self, color: ManimColor | list[ManimColor], opacity): """ First arg can be either a color, or a tuple/list of colors. Likewise, opacity can either be a float, or a tuple of floats. @@ -169,7 +172,7 @@ def generate_rgbas_array(self, color, opacity): colors = [c if (c is not None) else BLACK for c in tuplify(color)] opacities = [o if (o is not None) else 0 for o in tuplify(opacity)] rgbas = np.array( - [color_to_rgba(c, o) for c, o in zip(*make_even(colors, opacities))], + [c.to_rgb_with_alpha(o) for c, o in zip(*make_even(colors, opacities))], ) sheen_factor = self.get_sheen_factor() @@ -180,7 +183,9 @@ def generate_rgbas_array(self, color, opacity): rgbas = np.append(rgbas, light_rgbas, axis=0) return rgbas - def update_rgbas_array(self, array_name, color=None, opacity=None): + def update_rgbas_array( + self, array_name, color: ManimColor | None = None, opacity=None + ): rgbas = self.generate_rgbas_array(color, opacity) if not hasattr(self, array_name): setattr(self, array_name, rgbas) @@ -203,7 +208,7 @@ def update_rgbas_array(self, array_name, color=None, opacity=None): def set_fill( self, - color: Optional[str] = None, + color: ParsableManimColor = None, opacity: Optional[float] = None, family: bool = True, ): @@ -252,7 +257,7 @@ def construct(self): def set_stroke( self, - color=None, + color: ParsableManimColor = None, width=None, opacity=None, background=False, @@ -275,7 +280,7 @@ def set_stroke( if opacity is not None: setattr(self, opacity_name, opacity) if color is not None and background: - self.background_stroke_color = color + self.background_stroke_color = ManimColor.parse(color) return self def set_background_stroke(self, **kwargs): @@ -285,12 +290,12 @@ def set_background_stroke(self, **kwargs): def set_style( self, - fill_color=None, + fill_color: ParsableManimColor = None, fill_opacity=None, - stroke_color=None, + stroke_color: ParsableManimColor = None, stroke_width=None, stroke_opacity=None, - background_stroke_color=None, + background_stroke_color: ParsableManimColor = None, background_stroke_width=None, background_stroke_opacity=None, sheen_factor=None, @@ -327,10 +332,11 @@ def get_style(self, simple=False): "stroke_width": self.get_stroke_width(), } + # TODO: FIX COLORS HERE if simple: - ret["fill_color"] = colour.rgb2hex(self.get_fill_color().get_rgb()) + ret["fill_color"] = self.get_fill_color().to_hex() ret["fill_opacity"] = self.get_fill_opacity() - ret["stroke_color"] = colour.rgb2hex(self.get_stroke_color().get_rgb()) + ret["stroke_color"] = self.get_stroke_color().to_hex() else: ret["fill_color"] = self.get_fill_colors() ret["fill_opacity"] = self.get_fill_opacities() @@ -359,7 +365,8 @@ def match_style(self, vmobject, family=True): sm1.match_style(sm2) return self - def set_color(self, color, family=True): + def set_color(self, color: ParsableManimColor, family=True): + color = ManimColor.parse(color) self.set_fill(color, family=family) self.set_stroke(color, family=family) return self diff --git a/manim/utils/color.py b/manim/utils/color.py index 6356fb3f04..7b7f896eea 100644 --- a/manim/utils/color.py +++ b/manim/utils/color.py @@ -1,6 +1,10 @@ """Colors and utility functions for conversion between different color models.""" from __future__ import annotations +from enum import Enum +from typing import Iterable, TypeAlias, TypedDict + +from manim._config import logger __all__ = [ "color_to_rgb", @@ -21,350 +25,437 @@ ] import random -from enum import Enum -from typing import Iterable import numpy as np -from colour import Color from ..utils.bezier import interpolate from ..utils.space_ops import normalize -class Colors(Enum): - """A list of pre-defined colors. - - Examples - -------- - - .. manim:: ColorsOverview - :save_last_frame: - :hide_source: +"""A list of pre-defined colors. - from manim.utils.color import Colors - class ColorsOverview(Scene): - def construct(self): - def color_group(color): - group = VGroup( - *[ - Line(ORIGIN, RIGHT * 1.5, stroke_width=35, color=Colors[name].value) - for name in subnames(color) - ] - ).arrange_submobjects(buff=0.4, direction=DOWN) +Examples +-------- - name = Text(color).scale(0.6).next_to(group, UP, buff=0.3) - if any(decender in color for decender in "gjpqy"): - name.shift(DOWN * 0.08) - group.add(name) - return group +.. manim:: ColorsOverview + :save_last_frame: + :hide_source: - def subnames(name): - return [name + "_" + char for char in "abcde"] - - color_groups = VGroup( + from manim.utils.color import Colors + class ColorsOverview(Scene): + def construct(self): + def color_group(color): + group = VGroup( *[ - color_group(color) - for color in [ - "blue", - "teal", - "green", - "yellow", - "gold", - "red", - "maroon", - "purple", - ] + Line(ORIGIN, RIGHT * 1.5, stroke_width=35, color=Colors[name].value) + for name in subnames(color) ] - ).arrange_submobjects(buff=0.2, aligned_edge=DOWN) - - for line, char in zip(color_groups[0], "abcde"): - color_groups.add(Text(char).scale(0.6).next_to(line, LEFT, buff=0.2)) - - def named_lines_group(length, colors, names, text_colors, align_to_block): - lines = VGroup( - *[ - Line( - ORIGIN, - RIGHT * length, - stroke_width=55, - color=Colors[color].value, - ) - for color in colors - ] - ).arrange_submobjects(buff=0.6, direction=DOWN) - - for line, name, color in zip(lines, names, text_colors): - line.add(Text(name, color=color).scale(0.6).move_to(line)) - lines.next_to(color_groups, DOWN, buff=0.5).align_to( - color_groups[align_to_block], LEFT - ) - return lines - - other_colors = ( - "pink", - "light_pink", - "orange", - "light_brown", - "dark_brown", - "gray_brown", - ) - - other_lines = named_lines_group( - 3.2, - other_colors, - other_colors, - [BLACK] * 4 + [WHITE] * 2, - 0, - ) + ).arrange_submobjects(buff=0.4, direction=DOWN) + + name = Text(color).scale(0.6).next_to(group, UP, buff=0.3) + if any(decender in color for decender in "gjpqy"): + name.shift(DOWN * 0.08) + group.add(name) + return group + + def subnames(name): + return [name + "_" + char for char in "abcde"] + + color_groups = VGroup( + *[ + color_group(color) + for color in [ + "blue", + "teal", + "green", + "yellow", + "gold", + "red", + "maroon", + "purple", + ] + ] + ).arrange_submobjects(buff=0.2, aligned_edge=DOWN) - gray_lines = named_lines_group( - 6.6, - ["white"] + subnames("gray") + ["black"], - [ - "white", - "lighter_gray / gray_a", - "light_gray / gray_b", - "gray / gray_c", - "dark_gray / gray_d", - "darker_gray / gray_e", - "black", - ], - [BLACK] * 3 + [WHITE] * 4, - 2, - ) + for line, char in zip(color_groups[0], "abcde"): + color_groups.add(Text(char).scale(0.6).next_to(line, LEFT, buff=0.2)) - pure_colors = ( - "pure_red", - "pure_green", - "pure_blue", - ) + def named_lines_group(length, colors, names, text_colors, align_to_block): + lines = VGroup( + *[ + Line( + ORIGIN, + RIGHT * length, + stroke_width=55, + color=Colors[color].value, + ) + for color in colors + ] + ).arrange_submobjects(buff=0.6, direction=DOWN) - pure_lines = named_lines_group( - 3.2, - pure_colors, - pure_colors, - [BLACK, BLACK, WHITE], - 6, + for line, name, color in zip(lines, names, text_colors): + line.add(Text(name, color=color).scale(0.6).move_to(line)) + lines.next_to(color_groups, DOWN, buff=0.5).align_to( + color_groups[align_to_block], LEFT ) - - self.add(color_groups, other_lines, gray_lines, pure_lines) - - VGroup(*self.mobjects).move_to(ORIGIN) - - - The preferred way of using these colors is by importing their constants from manim: - - .. code-block:: pycon - - >>> from manim import RED, GREEN, BLUE - >>> RED - '#FC6255' - - Note this way uses the name of the colors in UPPERCASE. - - Alternatively, you can also import this Enum directly and use its members - directly, through the use of :code:`color.value`. Note this way uses the - name of the colors in lowercase. - - .. code-block:: pycon - - >>> from manim.utils.color import Colors - >>> Colors.red.value - '#FC6255' - - .. note:: - - The colors of type "C" have an alias equal to the colorname without a letter, - e.g. GREEN = GREEN_C - - """ - - white: str = "#FFFFFF" - gray_a: str = "#DDDDDD" - gray_b: str = "#BBBBBB" - gray_c: str = "#888888" - gray_d: str = "#444444" - gray_e: str = "#222222" - black: str = "#000000" - lighter_gray: str = gray_a - light_gray: str = gray_b - gray: str = gray_c - dark_gray: str = gray_d - darker_gray: str = gray_e - - blue_a: str = "#C7E9F1" - blue_b: str = "#9CDCEB" - blue_c: str = "#58C4DD" - blue_d: str = "#29ABCA" - blue_e: str = "#236B8E" - pure_blue: str = "#0000FF" - blue: str = blue_c - dark_blue: str = blue_e - - teal_a: str = "#ACEAD7" - teal_b: str = "#76DDC0" - teal_c: str = "#5CD0B3" - teal_d: str = "#55C1A7" - teal_e: str = "#49A88F" - teal: str = teal_c - - green_a: str = "#C9E2AE" - green_b: str = "#A6CF8C" - green_c: str = "#83C167" - green_d: str = "#77B05D" - green_e: str = "#699C52" - pure_green: str = "#00FF00" - green: str = green_c - - yellow_a: str = "#FFF1B6" - yellow_b: str = "#FFEA94" - yellow_c: str = "#FFFF00" - yellow_d: str = "#F4D345" - yellow_e: str = "#E8C11C" - yellow: str = yellow_c - - gold_a: str = "#F7C797" - gold_b: str = "#F9B775" - gold_c: str = "#F0AC5F" - gold_d: str = "#E1A158" - gold_e: str = "#C78D46" - gold: str = gold_c - - red_a: str = "#F7A1A3" - red_b: str = "#FF8080" - red_c: str = "#FC6255" - red_d: str = "#E65A4C" - red_e: str = "#CF5044" - pure_red: str = "#FF0000" - red: str = red_c - - maroon_a: str = "#ECABC1" - maroon_b: str = "#EC92AB" - maroon_c: str = "#C55F73" - maroon_d: str = "#A24D61" - maroon_e: str = "#94424F" - maroon: str = maroon_c - - purple_a: str = "#CAA3E8" - purple_b: str = "#B189C6" - purple_c: str = "#9A72AC" - purple_d: str = "#715582" - purple_e: str = "#644172" - purple: str = purple_c - - pink: str = "#D147BD" - light_pink: str = "#DC75CD" - - orange: str = "#FF862F" - light_brown: str = "#CD853F" - dark_brown: str = "#8B4513" - gray_brown: str = "#736357" - - -def print_constant_definitions(): - """ - A simple function used to generate the constant values below. To run it - paste this function and the Colors class into a file and run them. - """ - constants_names: list[str] = [] - for name in Colors.__members__.keys(): - name_upper = name.upper() - - constants_names.append(name_upper) - print(f"{name_upper} = Colors.{name}") - - if "GRAY" in name_upper: - name_upper = name_upper.replace("GRAY", "GREY") - - constants_names.append(name_upper) - print(f"{name_upper} = Colors.{name}") - - constants_names_repr = '[\n "' + '",\n "'.join(constants_names) + '",\n]' - - print(f"\n__all__ += {constants_names_repr}") - - -WHITE: str = "#FFFFFF" -GRAY_A: str = "#DDDDDD" -GREY_A: str = "#DDDDDD" -GRAY_B: str = "#BBBBBB" -GREY_B: str = "#BBBBBB" -GRAY_C: str = "#888888" -GREY_C: str = "#888888" -GRAY_D: str = "#444444" -GREY_D: str = "#444444" -GRAY_E: str = "#222222" -GREY_E: str = "#222222" -BLACK: str = "#000000" -LIGHTER_GRAY: str = "#DDDDDD" -LIGHTER_GREY: str = "#DDDDDD" -LIGHT_GRAY: str = "#BBBBBB" -LIGHT_GREY: str = "#BBBBBB" -GRAY: str = "#888888" -GREY: str = "#888888" -DARK_GRAY: str = "#444444" -DARK_GREY: str = "#444444" -DARKER_GRAY: str = "#222222" -DARKER_GREY: str = "#222222" -BLUE_A: str = "#C7E9F1" -BLUE_B: str = "#9CDCEB" -BLUE_C: str = "#58C4DD" -BLUE_D: str = "#29ABCA" -BLUE_E: str = "#236B8E" -PURE_BLUE: str = "#0000FF" -BLUE: str = "#58C4DD" -DARK_BLUE: str = "#236B8E" -TEAL_A: str = "#ACEAD7" -TEAL_B: str = "#76DDC0" -TEAL_C: str = "#5CD0B3" -TEAL_D: str = "#55C1A7" -TEAL_E: str = "#49A88F" -TEAL: str = "#5CD0B3" -GREEN_A: str = "#C9E2AE" -GREEN_B: str = "#A6CF8C" -GREEN_C: str = "#83C167" -GREEN_D: str = "#77B05D" -GREEN_E: str = "#699C52" -PURE_GREEN: str = "#00FF00" -GREEN: str = "#83C167" -YELLOW_A: str = "#FFF1B6" -YELLOW_B: str = "#FFEA94" -YELLOW_C: str = "#FFFF00" -YELLOW_D: str = "#F4D345" -YELLOW_E: str = "#E8C11C" -YELLOW: str = "#FFFF00" -GOLD_A: str = "#F7C797" -GOLD_B: str = "#F9B775" -GOLD_C: str = "#F0AC5F" -GOLD_D: str = "#E1A158" -GOLD_E: str = "#C78D46" -GOLD: str = "#F0AC5F" -RED_A: str = "#F7A1A3" -RED_B: str = "#FF8080" -RED_C: str = "#FC6255" -RED_D: str = "#E65A4C" -RED_E: str = "#CF5044" -PURE_RED: str = "#FF0000" -RED: str = "#FC6255" -MAROON_A: str = "#ECABC1" -MAROON_B: str = "#EC92AB" -MAROON_C: str = "#C55F73" -MAROON_D: str = "#A24D61" -MAROON_E: str = "#94424F" -MAROON: str = "#C55F73" -PURPLE_A: str = "#CAA3E8" -PURPLE_B: str = "#B189C6" -PURPLE_C: str = "#9A72AC" -PURPLE_D: str = "#715582" -PURPLE_E: str = "#644172" -PURPLE: str = "#9A72AC" -PINK: str = "#D147BD" -LIGHT_PINK: str = "#DC75CD" -ORANGE: str = "#FF862F" -LIGHT_BROWN: str = "#CD853F" -DARK_BROWN: str = "#8B4513" -GRAY_BROWN: str = "#736357" -GREY_BROWN: str = "#736357" + return lines + + other_colors = ( + "pink", + "light_pink", + "orange", + "light_brown", + "dark_brown", + "gray_brown", + ) + + other_lines = named_lines_group( + 3.2, + other_colors, + other_colors, + [BLACK] * 4 + [WHITE] * 2, + 0, + ) + + gray_lines = named_lines_group( + 6.6, + ["white"] + subnames("gray") + ["black"], + [ + "white", + "lighter_gray / gray_a", + "light_gray / gray_b", + "gray / gray_c", + "dark_gray / gray_d", + "darker_gray / gray_e", + "black", + ], + [BLACK] * 3 + [WHITE] * 4, + 2, + ) + + pure_colors = ( + "pure_red", + "pure_green", + "pure_blue", + ) + + pure_lines = named_lines_group( + 3.2, + pure_colors, + pure_colors, + [BLACK, BLACK, WHITE], + 6, + ) + + self.add(color_groups, other_lines, gray_lines, pure_lines) + + VGroup(*self.mobjects).move_to(ORIGIN) + + +The preferred way of using these colors is by importing their constants from manim: + +.. code-block:: pycon + + >>> from manim import RED, GREEN, BLUE + >>> RED + '#FC6255' + +Note this way uses the name of the colors in UPPERCASE. + +Alternatively, you can also import this Enum directly and use its members +directly, through the use of :code:`color.value`. Note this way uses the +name of the colors in lowercase. + +.. code-block:: pycon + + >>> from manim.utils.color import Colors + >>> Colors.red.value + '#FC6255' + +.. note:: + + The colors of type "C" have an alias equal to the colorname without a letter, + e.g. GREEN = GREEN_C + +""" + + +class ManimColor: + def __init__( + self, + value: str + | int + | list[int, int, int] + | list[int, int, int, int] + | list[float, float, float] + | list[float, float, float, float], + alpha: float = 1.0, + use_floats: bool = True, + ) -> None: + if isinstance(value, ManimColor): + logger.warning( + "ManimColor was passed another ManimColor. This is probably not what you want. Created a copy of the passed ManimColor instead." + ) + self.value = value.value + elif isinstance(value, int): + self.value: int = value << 8 | int(alpha * 255) + elif isinstance(value, str): + self.value: int = ManimColor.int_from_hex(value, alpha) + elif ( + isinstance(value, list) + or isinstance(value, tuple) + or isinstance(value, np.ndarray) + ): + length = len(value) + + if use_floats: + if length == 3: + self.value: int = ManimColor.int_from_rgb(value, alpha) + elif length == 4: + self.value: int = ManimColor.int_from_rgba(value) + else: + if length == 3: + self.value: int = ManimColor.int_from_int_rgb(value, alpha) + elif length == 4: + self.value: int = ManimColor.int_from_int_rgba(value) + else: + logger.error(f"Invalid color value: {value}") + raise TypeError( + f"ManimColor only accepts int, str, list[int, int, int], list[int, int, int, int], list[float, float, float], list[float, float, float, float], not {type(value)}" + ) + + def __repr__(self) -> str: + return f"{self.__class__.__name__}({self.to_hex()})" + + def __str__(self) -> str: + return f"{self.__class__.__name__}({self.to_hex()})" + + def __eq__(self, other: ManimColor) -> bool: + return self.value == other.value + + def __add__(self, other: ManimColor) -> ManimColor: + return ManimColor(self.value + other.value) + + def __sub__(self, other: ManimColor) -> ManimColor: + return ManimColor(self.value - other.value) + + def __mul__(self, other: ManimColor) -> ManimColor: + return ManimColor(self.value * other.value) + + def __truediv__(self, other: ManimColor) -> ManimColor: + return ManimColor(self.value / other.value) + + def __floordiv__(self, other: ManimColor) -> ManimColor: + return ManimColor(self.value // other.value) + + def __mod__(self, other: ManimColor) -> ManimColor: + return ManimColor(self.value % other.value) + + def __pow__(self, other: ManimColor) -> ManimColor: + return ManimColor(self.value**other.value) + + def __and__(self, other: ManimColor) -> ManimColor: + return ManimColor(self.value & other.value) + + def __or__(self, other: ManimColor) -> ManimColor: + return ManimColor(self.value | other.value) + + def __xor__(self, other: ManimColor) -> ManimColor: + return ManimColor(self.value ^ other.value) + + def to_rgb(self) -> np.ndarray: + return self.to_int_rgb() / 255 + + def to_int_rgb(self) -> list[int, int, int]: + return np.array( + [ + (self.value >> 24) & 0xFF, + (self.value >> 16) & 0xFF, + (self.value >> 8) & 0xFF, + ] + ) + + def to_rgba(self) -> np.ndarray: + return self.to_int_rgba() / 255 + + def to_int_rgba(self) -> list[int, int, int, int]: + return np.array( + [ + (self.value >> 24) & 0xFF, + (self.value >> 16) & 0xFF, + (self.value >> 8) & 0xFF, + self.value & 0xFF, + ] + ) + + def to_rgb_with_alpha(self, *, alpha: float) -> list[float, float, float, float]: + return self.to_int_rgb_with_alpha(alpha) / 255 + + def to_int_rgb_with_alpha(self, *, alpha: float) -> list[int, int, int, int]: + return np.array( + [ + (self.value >> 24) & 0xFF, + (self.value >> 16) & 0xFF, + (self.value >> 8) & 0xFF, + int(alpha * 255), + ] + ) + + def to_hex(self) -> str: + return f"#{self.value:08X}" + + @staticmethod + def int_from_int_rgb(rgb: list[int, int, int], alpha: float = 1.0) -> ManimColor: + return rgb[0] << 24 | rgb[1] << 16 | rgb[2] << 8 | int(alpha * 255) + + @staticmethod + def int_from_rgb(rgb: list[float, float, float], alpha: float = 1.0) -> ManimColor: + return ManimColor.int_from_int_rgb((np.asarray(rgb) * 255).astype(int), alpha) + + @staticmethod + def int_from_int_rgba(rgba: list[int, int, int, int]) -> ManimColor: + return rgba[0] << 24 | rgba[1] << 16 | rgba[2] << 8 | rgba[3] + + @staticmethod + def int_from_rgba(rgba: list[float, float, float, float]) -> ManimColor: + return ManimColor.from_int_rgba((np.asarray(rgba) * 255).astype(int)) + + @staticmethod + def int_from_hex(hex: str, alpha: float) -> ManimColor: + if hex.startswith("#"): + hex = hex[1:] + if hex.startswith("0x"): + hex = hex[2:] + if len(hex) == 6: + hex += "00" + return int(hex, 16) | int(alpha * 255) + + def invert(self, with_alpha=False) -> ManimColor: + return ManimColor(0xFFFFFFFF - (self.value & 0xFFFFFFFF)) + + @classmethod + def from_rgb(cls, rgb: list[float, float, float], alpha: float = 1.0) -> ManimColor: + return cls(rgb, alpha, use_floats=True) + + @classmethod + def from_int_rgb(cls, rgb: list[int, int, int], alpha: float = 1.0) -> ManimColor: + return cls(rgb, alpha) + + @classmethod + def from_rgba(cls, rgba: list[float, float, float, float]) -> ManimColor: + return cls(rgba, use_floats=True) + + @classmethod + def from_int_rgba(cls, rgba: list[int, int, int, int]) -> ManimColor: + return cls(rgba) + + @classmethod + def from_hex(cls, hex: str, alpha: float = 1.0) -> ManimColor: + return cls(hex, alpha) + + @staticmethod + def gradient(colors: list[ManimColor], length: int): + ... + + @classmethod + def parse(cls, value, alpha=1.0, use_floats=True) -> ManimColor: + if isinstance(value, ManimColor): + return value + return cls(value, alpha, use_floats) + + +ParsableManimColor: TypeAlias = ( + ManimColor + | int + | str + | list[float, float, float] + | list[float, float, float, float] + | list[int, int, int] + | list[int, int, int, int] +) +__all__ += ["ManimColor", "ParsableManimColor"] + +WHITE: ManimColor = ManimColor("#FFFFFF") +GRAY_A: ManimColor = ManimColor("#DDDDDD") +GREY_A: ManimColor = ManimColor("#DDDDDD") +GRAY_B: ManimColor = ManimColor("#BBBBBB") +GREY_B: ManimColor = ManimColor("#BBBBBB") +GRAY_C: ManimColor = ManimColor("#888888") +GREY_C: ManimColor = ManimColor("#888888") +GRAY_D: ManimColor = ManimColor("#444444") +GREY_D: ManimColor = ManimColor("#444444") +GRAY_E: ManimColor = ManimColor("#222222") +GREY_E: ManimColor = ManimColor("#222222") +BLACK: ManimColor = ManimColor("#000000") +LIGHTER_GRAY: ManimColor = ManimColor("#DDDDDD") +LIGHTER_GREY: ManimColor = ManimColor("#DDDDDD") +LIGHT_GRAY: ManimColor = ManimColor("#BBBBBB") +LIGHT_GREY: ManimColor = ManimColor("#BBBBBB") +GRAY: ManimColor = ManimColor("#888888") +GREY: ManimColor = ManimColor("#888888") +DARK_GRAY: ManimColor = ManimColor("#444444") +DARK_GREY: ManimColor = ManimColor("#444444") +DARKER_GRAY: ManimColor = ManimColor("#222222") +DARKER_GREY: ManimColor = ManimColor("#222222") +BLUE_A: ManimColor = ManimColor("#C7E9F1") +BLUE_B: ManimColor = ManimColor("#9CDCEB") +BLUE_C: ManimColor = ManimColor("#58C4DD") +BLUE_D: ManimColor = ManimColor("#29ABCA") +BLUE_E: ManimColor = ManimColor("#236B8E") +PURE_BLUE: ManimColor = ManimColor("#0000FF") +BLUE: ManimColor = ManimColor("#58C4DD") +DARK_BLUE: ManimColor = ManimColor("#236B8E") +TEAL_A: ManimColor = ManimColor("#ACEAD7") +TEAL_B: ManimColor = ManimColor("#76DDC0") +TEAL_C: ManimColor = ManimColor("#5CD0B3") +TEAL_D: ManimColor = ManimColor("#55C1A7") +TEAL_E: ManimColor = ManimColor("#49A88F") +TEAL: ManimColor = ManimColor("#5CD0B3") +GREEN_A: ManimColor = ManimColor("#C9E2AE") +GREEN_B: ManimColor = ManimColor("#A6CF8C") +GREEN_C: ManimColor = ManimColor("#83C167") +GREEN_D: ManimColor = ManimColor("#77B05D") +GREEN_E: ManimColor = ManimColor("#699C52") +PURE_GREEN: ManimColor = ManimColor("#00FF00") +GREEN: ManimColor = ManimColor("#83C167") +YELLOW_A: ManimColor = ManimColor("#FFF1B6") +YELLOW_B: ManimColor = ManimColor("#FFEA94") +YELLOW_C: ManimColor = ManimColor("#FFFF00") +YELLOW_D: ManimColor = ManimColor("#F4D345") +YELLOW_E: ManimColor = ManimColor("#E8C11C") +YELLOW: ManimColor = ManimColor("#FFFF00") +GOLD_A: ManimColor = ManimColor("#F7C797") +GOLD_B: ManimColor = ManimColor("#F9B775") +GOLD_C: ManimColor = ManimColor("#F0AC5F") +GOLD_D: ManimColor = ManimColor("#E1A158") +GOLD_E: ManimColor = ManimColor("#C78D46") +GOLD: ManimColor = ManimColor("#F0AC5F") +RED_A: ManimColor = ManimColor("#F7A1A3") +RED_B: ManimColor = ManimColor("#FF8080") +RED_C: ManimColor = ManimColor("#FC6255") +RED_D: ManimColor = ManimColor("#E65A4C") +RED_E: ManimColor = ManimColor("#CF5044") +PURE_RED: ManimColor = ManimColor("#FF0000") +RED: ManimColor = ManimColor("#FC6255") +MAROON_A: ManimColor = ManimColor("#ECABC1") +MAROON_B: ManimColor = ManimColor("#EC92AB") +MAROON_C: ManimColor = ManimColor("#C55F73") +MAROON_D: ManimColor = ManimColor("#A24D61") +MAROON_E: ManimColor = ManimColor("#94424F") +MAROON: ManimColor = ManimColor("#C55F73") +PURPLE_A: ManimColor = ManimColor("#CAA3E8") +PURPLE_B: ManimColor = ManimColor("#B189C6") +PURPLE_C: ManimColor = ManimColor("#9A72AC") +PURPLE_D: ManimColor = ManimColor("#715582") +PURPLE_E: ManimColor = ManimColor("#644172") +PURPLE: ManimColor = ManimColor("#9A72AC") +PINK: ManimColor = ManimColor("#D147BD") +LIGHT_PINK: ManimColor = ManimColor("#DC75CD") +ORANGE: ManimColor = ManimColor("#FF862F") +LIGHT_BROWN: ManimColor = ManimColor("#CD853F") +DARK_BROWN: ManimColor = ManimColor("#8B4513") +GRAY_BROWN: ManimColor = ManimColor("#736357") +GREY_BROWN: ManimColor = ManimColor("#736357") __all__ += [ "WHITE", @@ -451,25 +542,23 @@ def print_constant_definitions(): ] -def color_to_rgb(color: Color | str) -> np.ndarray: - if isinstance(color, str): - return hex_to_rgb(color) - elif isinstance(color, Color): - return np.array(color.get_rgb()) +def color_to_rgb(color: ParsableManimColor) -> np.ndarray: + if isinstance(color, ManimColor): + return color.to_rgb() else: - raise ValueError("Invalid color type: " + str(color)) + return ManimColor(color).to_rgb() -def color_to_rgba(color: Color | str, alpha: float = 1) -> np.ndarray: +def color_to_rgba(color: ParsableManimColor, alpha: float = 1) -> np.ndarray: return np.array([*color_to_rgb(color), alpha]) -def rgb_to_color(rgb: Iterable[float]) -> Color: - return Color(rgb=rgb) +def rgb_to_color(rgb: Iterable[float]) -> ManimColor: + return ManimColor(rgb=rgb) -def rgba_to_color(rgba: Iterable[float]) -> Color: - return rgb_to_color(rgba[:3]) +def rgba_to_color(rgba: Iterable[float]) -> ManimColor: + return rgb_to_color(rgba[:3], alpha=rgba[3]) def rgb_to_hex(rgb: Iterable[float]) -> str: @@ -483,24 +572,24 @@ def hex_to_rgb(hex_code: str) -> np.ndarray: return np.array([int(hex_part[i : i + 2], 16) / 255 for i in range(0, 6, 2)]) -def invert_color(color: Color) -> Color: +def invert_color(color: ManimColor) -> ManimColor: return rgb_to_color(1.0 - color_to_rgb(color)) -def color_to_int_rgb(color: Color) -> np.ndarray: +def color_to_int_rgb(color: ManimColor) -> np.ndarray: return (255 * color_to_rgb(color)).astype("uint8") -def color_to_int_rgba(color: Color, opacity: float = 1.0) -> np.ndarray: +def color_to_int_rgba(color: ManimColor, opacity: float = 1.0) -> np.ndarray: alpha_multiplier = np.vectorize(lambda x: int(x * opacity)) return alpha_multiplier(np.append(color_to_int_rgb(color), 255)) def color_gradient( - reference_colors: Iterable[Color], + reference_colors: Iterable[ManimColor], length_of_output: int, -) -> list[Color]: +) -> list[ManimColor]: if length_of_output == 0: return reference_colors[0] rgbs = list(map(color_to_rgb, reference_colors)) @@ -516,26 +605,31 @@ def color_gradient( ] -def interpolate_color(color1: Color, color2: Color, alpha: float) -> Color: +def interpolate_color( + color1: ManimColor, color2: ManimColor, alpha: float +) -> ManimColor: rgb = interpolate(color_to_rgb(color1), color_to_rgb(color2), alpha) return rgb_to_color(rgb) -def average_color(*colors: Color) -> Color: +def average_color(*colors: ManimColor) -> ManimColor: rgbs = np.array(list(map(color_to_rgb, colors))) mean_rgb = np.apply_along_axis(np.mean, 0, rgbs) return rgb_to_color(mean_rgb) -def random_bright_color() -> Color: +def random_bright_color() -> ManimColor: color = random_color() curr_rgb = color_to_rgb(color) new_rgb = interpolate(curr_rgb, np.ones(len(curr_rgb)), 0.5) - return Color(rgb=new_rgb) + return ManimColor(new_rgb) + + +_colors = [x for x in globals().values() if isinstance(x, ManimColor)] -def random_color() -> Color: - return random.choice([c.value for c in list(Colors)]) +def random_color() -> ManimColor: + return random.choice([c.value for c in list(_colors)]) def get_shaded_rgb( From a0e85af3bccdd3fc8570ac35002cc0e57cce87e5 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 13 Nov 2022 05:06:06 +0000 Subject: [PATCH 02/91] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- manim/utils/color.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/utils/color.py b/manim/utils/color.py index 7b7f896eea..49d196df51 100644 --- a/manim/utils/color.py +++ b/manim/utils/color.py @@ -1,6 +1,7 @@ """Colors and utility functions for conversion between different color models.""" from __future__ import annotations + from enum import Enum from typing import Iterable, TypeAlias, TypedDict @@ -31,7 +32,6 @@ from ..utils.bezier import interpolate from ..utils.space_ops import normalize - """A list of pre-defined colors. Examples From 332d32709d5dfbddfbf69238483660d9f4d27ba5 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 19 Nov 2022 02:19:14 +0000 Subject: [PATCH 03/91] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- manim/mobject/types/vectorized_mobject.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/mobject/types/vectorized_mobject.py b/manim/mobject/types/vectorized_mobject.py index 7083d646fa..129e20fad0 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -223,7 +223,7 @@ def update_rgbas_array( def set_fill( self, color: ParsableManimColor = None, - opacity: Optional[float] = None, + opacity: float | None = None, family: bool = True, ): """Set the fill color and fill opacity of a :class:`VMobject`. From da0806ac97b56fefcbf5650f179615ee8d762731 Mon Sep 17 00:00:00 2001 From: MrDiver Date: Sat, 19 Nov 2022 03:20:55 +0100 Subject: [PATCH 04/91] changed everything to Manim color todo: figure out circular dependency in utils --- manim/_config/utils.py | 6 +- manim/animation/changing.py | 5 +- manim/animation/creation.py | 4 +- manim/animation/indication.py | 6 +- manim/mobject/geometry/arc.py | 9 +- manim/mobject/geometry/line.py | 6 +- manim/mobject/geometry/polygram.py | 4 +- manim/mobject/graphing/coordinate_systems.py | 57 +++++---- manim/mobject/graphing/probability.py | 4 +- manim/mobject/mobject.py | 9 +- manim/mobject/opengl/opengl_mobject.py | 7 +- .../opengl/opengl_vectorized_mobject.py | 20 +-- manim/mobject/table.py | 34 ++--- manim/mobject/text/tex_mobject.py | 6 +- manim/mobject/text/text_mobject.py | 47 ++++--- manim/mobject/three_d/three_dimensions.py | 20 +-- manim/mobject/types/image_mobject.py | 3 +- manim/mobject/types/point_cloud_mobject.py | 4 +- manim/mobject/types/vectorized_mobject.py | 6 +- manim/mobject/vector_field.py | 28 ++-- manim/scene/vector_space_scene.py | 21 ++- manim/utils/color.py | 14 +- tests/module/mobject/svg/test_svg_mobject.py | 16 +-- tests/module/mobject/text/test_numbers.py | 6 +- .../module/mobject/text/test_text_mobject.py | 13 +- .../types/vectorized_mobject/test_stroke.py | 7 +- tests/opengl/test_color_opengl.py | 121 +++++++++--------- tests/opengl/test_stroke_opengl.py | 5 +- tests/opengl/test_svg_mobject_opengl.py | 16 +-- tests/test_graphical_units/test_text.py | 13 +- 30 files changed, 276 insertions(+), 241 deletions(-) diff --git a/manim/_config/utils.py b/manim/_config/utils.py index cdbd62fce4..0f5ea04a35 100644 --- a/manim/_config/utils.py +++ b/manim/_config/utils.py @@ -23,11 +23,11 @@ from pathlib import Path from typing import Any, Iterable, Iterator -import colour import numpy as np from .. import constants from ..constants import RendererType +from ..utils.color import ManimColor from ..utils.tex import TexTemplate, TexTemplateFromFile from ..utils.tex_templates import TexTemplateLibrary @@ -1096,7 +1096,9 @@ def format(self, val: str) -> None: background_color = property( lambda self: self._d["background_color"], - lambda self, val: self._d.__setitem__("background_color", colour.Color(val)), + lambda self, val: self._d.__setitem__( + "background_color", ManimColor.parse(val) + ), doc="Background color of the scene (-c).", ) diff --git a/manim/animation/changing.py b/manim/animation/changing.py index fbe3a4c0d2..995ed24f63 100644 --- a/manim/animation/changing.py +++ b/manim/animation/changing.py @@ -6,13 +6,12 @@ from typing import Callable -from colour import Color - from manim._config import config from manim.mobject.opengl.opengl_compatibility import ConvertToOpenGL from manim.mobject.types.vectorized_mobject import VGroup, VMobject from manim.utils.color import BLUE_B, BLUE_D, BLUE_E, GREY_BROWN, WHITE from manim.utils.rate_functions import smooth +from manim.utils.color import * class AnimatedBoundary(VGroup): @@ -140,7 +139,7 @@ def __init__( self, traced_point_func: Callable, stroke_width: float = 2, - stroke_color: Color = WHITE, + stroke_color: ParsableManimColor | None = WHITE, dissipating_time: float | None = None, **kwargs, ): diff --git a/manim/animation/creation.py b/manim/animation/creation.py index 541a2afafa..ff35819e7f 100644 --- a/manim/animation/creation.py +++ b/manim/animation/creation.py @@ -77,13 +77,13 @@ def construct(self): from typing import TYPE_CHECKING, Callable, Iterable, Sequence import numpy as np -from colour import Color if TYPE_CHECKING: from manim.mobject.text.text_mobject import Text from manim.mobject.opengl.opengl_surface import OpenGLSurface from manim.mobject.opengl.opengl_vectorized_mobject import OpenGLVMobject +from manim.utils.color import * from .. import config from ..animation.animation import Animation @@ -259,7 +259,7 @@ def get_outline(self) -> Mobject: sm.set_stroke(color=self.get_stroke_color(sm), width=self.stroke_width) return outline - def get_stroke_color(self, vmobject: VMobject | OpenGLVMobject) -> Color: + def get_stroke_color(self, vmobject: VMobject | OpenGLVMobject) -> ManimColor: if self.stroke_color: return self.stroke_color elif vmobject.get_stroke_width() > 0: diff --git a/manim/animation/indication.py b/manim/animation/indication.py index 405581025d..35708e5609 100644 --- a/manim/animation/indication.py +++ b/manim/animation/indication.py @@ -40,7 +40,6 @@ def construct(self): from typing import Callable, Iterable, Optional, Tuple, Type, Union import numpy as np -from colour import Color from manim.mobject.geometry.arc import Circle, Dot from manim.mobject.geometry.line import Line @@ -58,7 +57,7 @@ def construct(self): from ..mobject.mobject import Mobject from ..mobject.types.vectorized_mobject import VGroup, VMobject from ..utils.bezier import interpolate, inverse_interpolate -from ..utils.color import GREY, YELLOW +from ..utils.color import GREY, YELLOW, ManimColor, ParsableManimColor from ..utils.deprecation import deprecated from ..utils.rate_functions import smooth, there_and_back, wiggle from ..utils.space_ops import normalize @@ -609,11 +608,12 @@ def __init__( fade_out=False, time_width=0.3, buff: float = SMALL_BUFF, - color: Color = YELLOW, + color: ParsableManimColor = YELLOW, run_time=1, stroke_width=DEFAULT_STROKE_WIDTH, **kwargs ): + color = ManimColor.parse(color) if shape is Rectangle: frame = SurroundingRectangle( mobject, diff --git a/manim/mobject/geometry/arc.py b/manim/mobject/geometry/arc.py index 894ca3d02b..b5da5f22a7 100644 --- a/manim/mobject/geometry/arc.py +++ b/manim/mobject/geometry/arc.py @@ -48,7 +48,6 @@ def construct(self): from typing import TYPE_CHECKING, Sequence import numpy as np -from colour import Color from manim.constants import * from manim.mobject.opengl.opengl_compatibility import ConvertToOpenGL @@ -492,14 +491,14 @@ def construct(self): def __init__( self, radius: float | None = None, - color: Color | str = RED, + color: ParsableManimColor = RED, **kwargs, ): super().__init__( radius=radius, start_angle=0, angle=TAU, - color=color, + color=ManimColor.parse(color), **kwargs, ) @@ -658,7 +657,7 @@ def __init__( radius: float = DEFAULT_DOT_RADIUS, stroke_width: float = 0, fill_opacity: float = 1.0, - color: Color | str = WHITE, + color: ParsableManimColor = WHITE, **kwargs, ): super().__init__( @@ -666,7 +665,7 @@ def __init__( radius=radius, stroke_width=stroke_width, fill_opacity=fill_opacity, - color=color, + color=ManimColor.parse(color), **kwargs, ) diff --git a/manim/mobject/geometry/line.py b/manim/mobject/geometry/line.py index 695881ae9b..df06bb78a9 100644 --- a/manim/mobject/geometry/line.py +++ b/manim/mobject/geometry/line.py @@ -17,7 +17,6 @@ from typing import Any, Sequence import numpy as np -from colour import Color from manim import config from manim.constants import * @@ -28,7 +27,6 @@ from manim.mobject.opengl.opengl_mobject import OpenGLMobject from manim.mobject.types.vectorized_mobject import DashedVMobject, VGroup, VMobject from manim.utils.color import * -from manim.utils.color import Colors from manim.utils.space_ops import angle_of_vector, line_intersection, normalize @@ -647,7 +645,7 @@ def coordinate_label( self, integer_labels: bool = True, n_dim: int = 2, - color: Color | None = None, + color: ParsableManimColor | None = None, **kwargs, ): """Creates a label based on the coordinates of the vector. @@ -879,7 +877,7 @@ def __init__( dot: bool = False, dot_radius: float | None = None, dot_distance: float = 0.55, - dot_color: Colors = WHITE, + dot_color: ManimColor = WHITE, elbow: bool = False, **kwargs, ): diff --git a/manim/mobject/geometry/polygram.py b/manim/mobject/geometry/polygram.py index f96557525e..a9701d67c1 100644 --- a/manim/mobject/geometry/polygram.py +++ b/manim/mobject/geometry/polygram.py @@ -18,7 +18,6 @@ from typing import Iterable, Sequence import numpy as np -from colour import Color from manim.constants import * from manim.mobject.geometry.arc import ArcBetweenPoints @@ -536,7 +535,7 @@ def construct(self): def __init__( self, - color: Color = WHITE, + color: ParsableManimColor = WHITE, height: float = 2.0, width: float = 4.0, grid_xstep: float | None = None, @@ -545,6 +544,7 @@ def __init__( close_new_points: bool = True, **kwargs, ): + color = ManimColor.parse(color) super().__init__(UR, UL, DL, DR, color=color, **kwargs) self.stretch_to_fit_width(width) self.stretch_to_fit_height(height) diff --git a/manim/mobject/graphing/coordinate_systems.py b/manim/mobject/graphing/coordinate_systems.py index 703d879d7c..43f213106d 100644 --- a/manim/mobject/graphing/coordinate_systems.py +++ b/manim/mobject/graphing/coordinate_systems.py @@ -17,7 +17,6 @@ from typing import TYPE_CHECKING, Any, Callable, Iterable, Sequence import numpy as np -from colour import Color from manim import config from manim.constants import * @@ -44,6 +43,8 @@ GREEN, WHITE, YELLOW, + ManimColor, + ParsableManimColor, color_gradient, invert_color, ) @@ -475,7 +476,7 @@ def get_line_from_axis_to_point( point: Sequence[float], line_func: Line = DashedLine, line_config: dict | None = None, - color: Color | None = None, + color: ParsableManimColor | None = None, stroke_width: float = 2, ) -> Line: """Returns a straight line from a given axis to a point in the scene. @@ -511,7 +512,7 @@ def get_line_from_axis_to_point( if color is None: color = VMobject().color - line_config["color"] = color + line_config["color"] = ManimColor.parse(color) line_config["stroke_width"] = stroke_width axis = self.get_axis(index) @@ -865,7 +866,9 @@ def plot_surface( function: Callable[[float], float], u_range: Sequence[float] | None = None, v_range: Sequence[float] | None = None, - colorscale: Sequence[[color], float] | None = None, + colorscale: Sequence[ParsableManimColor] + | Sequence[tuple[ParsableManimColor, float]] + | None = None, colorscale_axis: int = 2, **kwargs, ): @@ -1034,7 +1037,7 @@ def get_graph_label( x_val: float | None = None, direction: Sequence[float] = RIGHT, buff: float = MED_SMALL_BUFF, - color: Color | None = None, + color: ParsableManimColor | None = None, dot: bool = False, dot_config: dict | None = None, ) -> Mobject: @@ -1086,7 +1089,10 @@ def construct(self): if dot_config is None: dot_config = {} - color = color or graph.get_color() + if color: + color = ManimColor.parse(color) + else: + color = graph.get_color() label = self.x_axis._create_label_tex(label).set_color(color) if x_val is None: @@ -1116,9 +1122,9 @@ def get_riemann_rectangles( dx: float | None = 0.1, input_sample_type: str = "left", stroke_width: float = 1, - stroke_color: Color = BLACK, + stroke_color: ParsableManimColor = BLACK, fill_opacity: float = 1, - color: Iterable[Color] | Color = np.array((BLUE, GREEN)), + color: Iterable[ParsableManimColor] | ParsableManimColor = (BLUE, GREEN), show_signed_area: bool = True, bounded_graph: ParametricFunction = None, blend: bool = False, @@ -1217,11 +1223,12 @@ def construct(self): rectangles = VGroup() x_range = np.arange(*x_range) - # allows passing a string to color the graph - if type(color) is str: - colors = [color] * len(x_range) + if isinstance(color, list): + color = [ManimColor.parse(c) for c in color] else: - colors = color_gradient(color, len(x_range)) + color = [ManimColor.parse(color)] + + colors = color_gradient(color, len(x_range)) for x, color in zip(x_range, colors): if input_sample_type == "left": @@ -1276,7 +1283,7 @@ def get_area( self, graph: ParametricFunction, x_range: tuple[float, float] | None = None, - color: Color | Iterable[Color] = [BLUE, GREEN], + color: ParsableManimColor | Iterable[ParsableManimColor] = (BLUE, GREEN), opacity: float = 0.3, bounded_graph: ParametricFunction = None, **kwargs, @@ -1425,7 +1432,7 @@ def slope_of_tangent(self, x: float, graph: ParametricFunction, **kwargs) -> flo return np.tan(self.angle_of_tangent(x, graph, **kwargs)) def plot_derivative_graph( - self, graph: ParametricFunction, color: Color = GREEN, **kwargs + self, graph: ParametricFunction, color: ParsableManimColor = GREEN, **kwargs ) -> ParametricFunction: """Returns the curve of the derivative of the passed graph. @@ -1466,7 +1473,7 @@ def construct(self): def deriv(x): return self.slope_of_tangent(x, graph) - return self.plot(deriv, color=color, **kwargs) + return self.plot(deriv, color=ManimColor.parse(color), **kwargs) def plot_antiderivative_graph( self, @@ -1533,12 +1540,12 @@ def get_secant_slope_group( x: float, graph: ParametricFunction, dx: float | None = None, - dx_line_color: Color = YELLOW, - dy_line_color: Color | None = None, + dx_line_color: ParsableManimColor = YELLOW, + dy_line_color: ParsableManimColor | None = None, dx_label: float | str | None = None, dy_label: float | str | None = None, include_secant_line: bool = True, - secant_line_color: Color = GREEN, + secant_line_color: ParsableManimColor = GREEN, secant_line_length: float = 10, ) -> VGroup: """Creates two lines representing `dx` and `df`, the labels for `dx` and `df`, and @@ -1712,11 +1719,11 @@ def get_T_label( x_val: float, graph: ParametricFunction, label: float | str | Mobject | None = None, - label_color: Color | None = None, + label_color: ParsableManimColor | None = None, triangle_size: float = MED_SMALL_BUFF, - triangle_color: Color | None = WHITE, + triangle_color: ParsableManimColor | None = WHITE, line_func: Line = Line, - line_color: Color = YELLOW, + line_color: ParsableManimColor = YELLOW, ) -> VGroup: """Creates a labelled triangle marker with a vertical line from the x-axis to a curve at a given x-value. @@ -1768,7 +1775,9 @@ def construct(self): triangle.height = triangle_size triangle.move_to(self.coords_to_point(x_val, 0), UP) if label is not None: - t_label = self.x_axis._create_label_tex(label, color=label_color) + t_label = self.x_axis._create_label_tex( + label, color=ManimColor.parse(label_color) + ) t_label.next_to(triangle, DOWN) T_label_group.add(t_label) @@ -2129,7 +2138,7 @@ def plot_line_graph( x_values: Iterable[float], y_values: Iterable[float], z_values: Iterable[float] | None = None, - line_color: Color = YELLOW, + line_color: ParsableManimColor = YELLOW, add_vertex_dots: bool = True, vertex_dot_radius: float = DEFAULT_DOT_RADIUS, vertex_dot_style: dict | None = None, @@ -2194,7 +2203,7 @@ def construct(self): z_values = np.zeros(x_values.shape) line_graph = VDict() - graph = VGroup(color=line_color, **kwargs) + graph = VGroup(color=ManimColor.parse(line_color), **kwargs) vertices = [ self.coords_to_point(x, y, z) diff --git a/manim/mobject/graphing/probability.py b/manim/mobject/graphing/probability.py index b0f85cdd14..38c1ab78d1 100644 --- a/manim/mobject/graphing/probability.py +++ b/manim/mobject/graphing/probability.py @@ -8,7 +8,6 @@ from typing import Iterable, MutableSequence, Sequence import numpy as np -from colour import Color from manim import config, logger from manim.constants import * @@ -26,6 +25,7 @@ LIGHT_GREY, MAROON_B, YELLOW, + ParsableManimColor, color_gradient, ) from manim.utils.iterables import tuplify @@ -401,7 +401,7 @@ def _add_bars(self) -> None: def get_bar_labels( self, - color: Color | None = None, + color: ParsableManimColor | None = None, font_size: float = 24, buff: float = MED_SMALL_BUFF, label_constructor: type[VMobject] = Tex, diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index 3542de9c61..0c2e9ddd35 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -93,7 +93,12 @@ def __init_subclass__(cls, **kwargs): cls._original__init__ = cls.__init__ def __init__( - self, color: ManimColor = WHITE, name=None, dim=3, target=None, z_index=0 + self, + color: ParsableManimColor = WHITE, + name=None, + dim=3, + target=None, + z_index=0, ): self.name = self.__class__.__name__ if name is None else name self.dim = dim @@ -103,7 +108,7 @@ def __init__( self.submobjects = [] self.updaters = [] self.updating_suspended = False - self.color: ManimColor = color + self.color: ManimColor = ManimColor.parse(color) self.reset_points() self.generate_points() diff --git a/manim/mobject/opengl/opengl_mobject.py b/manim/mobject/opengl/opengl_mobject.py index 5f5200795e..22cbcc7b68 100644 --- a/manim/mobject/opengl/opengl_mobject.py +++ b/manim/mobject/opengl/opengl_mobject.py @@ -10,7 +10,6 @@ import moderngl import numpy as np -from colour import Color from manim import config, logger from manim.constants import * @@ -145,7 +144,7 @@ def __init__( self.init_updaters() # self.init_event_listners() self.init_points() - self.color = Color(color) if color else None + self.color: ManimColor = ManimColor.parse(color) if color else None self.init_colors() self.shader_indices = None @@ -1970,12 +1969,12 @@ def set_rgba_array_direct(self, rgbas: np.ndarray, name="rgbas", recurse=True): for mob in self.get_family(recurse): mob.data[name] = rgbas.copy() - def set_color(self, color, opacity=None, recurse=True): + def set_color(self, color: ParsableManimColor | None, opacity=None, recurse=True): self.set_rgba_array(color, opacity, recurse=False) # Recurse to submobjects differently from how set_rgba_array # in case they implement set_color differently if color is not None: - self.color = Color(color) + self.color: ManimColor = ManimColor.parse(color) if opacity is not None: self.opacity = opacity if recurse: diff --git a/manim/mobject/opengl/opengl_vectorized_mobject.py b/manim/mobject/opengl/opengl_vectorized_mobject.py index 2c12462b0a..5c9970b167 100644 --- a/manim/mobject/opengl/opengl_vectorized_mobject.py +++ b/manim/mobject/opengl/opengl_vectorized_mobject.py @@ -7,7 +7,6 @@ import moderngl import numpy as np -from colour import Color from manim import config from manim.constants import * @@ -81,9 +80,9 @@ class OpenGLVMobject(OpenGLMobject): def __init__( self, - fill_color: Color | None = None, + fill_color: ParsableManimColor | None = None, fill_opacity: float = 0.0, - stroke_color: Color | None = None, + stroke_color: ParsableManimColor | None = None, stroke_opacity: float = 1.0, stroke_width: float = DEFAULT_STROKE_WIDTH, draw_stroke_behind_fill: bool = False, @@ -141,9 +140,9 @@ def __init__( self.refresh_unit_normal() if fill_color: - self.fill_color = Color(fill_color) + self.fill_color = ManimColor.parse(fill_color) if stroke_color: - self.stroke_color = Color(stroke_color) + self.stroke_color = ManimColor.parse(stroke_color) self.fill_data = None self.stroke_data = None @@ -184,7 +183,7 @@ def init_colors(self): def set_fill( self, - color: Color | None = None, + color: ParsableManimColor | None = None, opacity: float | None = None, recurse: bool = True, ) -> OpenGLVMobject: @@ -223,6 +222,8 @@ def construct(self): -------- :meth:`~.OpenGLVMobject.set_style` """ + if color: + color = ManimColor.parse(color) if opacity is not None: self.fill_opacity = opacity if recurse: @@ -350,14 +351,15 @@ def fade(self, darkness=0.5, recurse=True): super().fade(darkness, recurse) return self + # Todo im not quite sure why we are doing this def get_fill_colors(self): - return [Color(rgb_to_hex(rgba[:3])) for rgba in self.fill_rgba] + return [ManimColor.parse(rgb_to_hex(rgba[:3])) for rgba in self.fill_rgba] def get_fill_opacities(self): return self.fill_rgba[:, 3] def get_stroke_colors(self): - return [Color(rgb_to_hex(rgba[:3])) for rgba in self.stroke_rgba] + return [ManimColor.parse(rgb_to_hex(rgba[:3])) for rgba in self.stroke_rgba] def get_stroke_opacities(self): return self.stroke_rgba[:, 3] @@ -1879,7 +1881,7 @@ def __init__( vmobject: OpenGLVMobject, num_dashes: int = 15, dashed_ratio: float = 0.5, - color: Color = WHITE, + color: ParsableManimColor = WHITE, **kwargs, ): self.dashed_ratio = dashed_ratio diff --git a/manim/mobject/table.py b/manim/mobject/table.py index 7e8e45fca3..d2d12652b5 100644 --- a/manim/mobject/table.py +++ b/manim/mobject/table.py @@ -67,8 +67,6 @@ def construct(self): import itertools as it from typing import Callable, Iterable, Sequence -from colour import Color - from manim.mobject.geometry.line import Line from manim.mobject.geometry.polygram import Polygon from manim.mobject.geometry.shape_matchers import BackgroundRectangle @@ -82,8 +80,8 @@ def construct(self): from ..animation.creation import Create, Write from ..animation.fading import FadeIn from ..mobject.types.vectorized_mobject import VGroup, VMobject -from ..utils.color import BLACK, YELLOW from .utils import get_vectorized_mobject_class +from ..utils.color import BLACK, YELLOW, ManimColor, ParsableManimColor class Table(VGroup): @@ -160,9 +158,9 @@ def __init__( h_buff: float = 1.3, include_outer_lines: bool = False, add_background_rectangles_to_entries: bool = False, - entries_background_color: Color = BLACK, + entries_background_color: ParsableManimColor = BLACK, include_background_rectangle: bool = False, - background_rectangle_color: Color = BLACK, + background_rectangle_color: ParsableManimColor = BLACK, element_to_mobject: Callable[ [float | str | VMobject], VMobject, @@ -220,9 +218,9 @@ def __init__( self.h_buff = h_buff self.include_outer_lines = include_outer_lines self.add_background_rectangles_to_entries = add_background_rectangles_to_entries - self.entries_background_color = entries_background_color + self.entries_background_color = ManimColor.parse(entries_background_color) self.include_background_rectangle = include_background_rectangle - self.background_rectangle_color = background_rectangle_color + self.background_rectangle_color = ManimColor.parse(background_rectangle_color) self.element_to_mobject = element_to_mobject self.element_to_mobject_config = element_to_mobject_config self.arrange_in_grid_config = arrange_in_grid_config @@ -506,7 +504,7 @@ def construct(self): """ return VGroup(*(VGroup(*row) for row in self.mob_table)) - def set_column_colors(self, *colors: Iterable[Color]) -> Table: + def set_column_colors(self, *colors: Iterable[ParsableManimColor]) -> Table: """Set individual colors for each column of the table. Parameters @@ -532,10 +530,10 @@ def construct(self): """ columns = self.get_columns() for color, column in zip(colors, columns): - column.set_color(color) + column.set_color(ManimColor.parse(color)) return self - def set_row_colors(self, *colors: Iterable[Color]) -> Table: + def set_row_colors(self, *colors: Iterable[ParsableManimColor]) -> Table: """Set individual colors for each row of the table. Parameters @@ -561,7 +559,7 @@ def construct(self): """ rows = self.get_rows() for color, row in zip(colors, rows): - row.set_color(color) + row.set_color(ManimColor.parse(color)) return self def get_entries( @@ -754,10 +752,10 @@ def construct(self): label_group.add(*label) return label_group - def add_background_to_entries(self, color: Color = BLACK) -> Table: + def add_background_to_entries(self, color: ParsableManimColor = BLACK) -> Table: """Adds a black :class:`~.BackgroundRectangle` to each entry of the table.""" for mob in self.get_entries(): - mob.add_background_rectangle(color=color) + mob.add_background_rectangle(color=ManimColor.parse(color)) return self def get_cell(self, pos: Sequence[int] = (1, 1), **kwargs) -> Polygon: @@ -818,7 +816,7 @@ def construct(self): return rec def get_highlighted_cell( - self, pos: Sequence[int] = (1, 1), color: Color = YELLOW, **kwargs + self, pos: Sequence[int] = (1, 1), color: ParsableManimColor = YELLOW, **kwargs ) -> BackgroundRectangle: """Returns a :class:`~.BackgroundRectangle` of the cell at the given position. @@ -850,11 +848,11 @@ def construct(self): self.add(table) """ cell = self.get_cell(pos) - bg_cell = BackgroundRectangle(cell, color=color, **kwargs) + bg_cell = BackgroundRectangle(cell, color=ManimColor.parse(color), **kwargs) return bg_cell def add_highlighted_cell( - self, pos: Sequence[int] = (1, 1), color: Color = YELLOW, **kwargs + self, pos: Sequence[int] = (1, 1), color: ParsableManimColor = YELLOW, **kwargs ) -> Table: """Highlights one cell at a specific position on the table by adding a :class:`~.BackgroundRectangle`. @@ -884,7 +882,9 @@ def construct(self): table.add_highlighted_cell((2,2), color=GREEN) self.add(table) """ - bg_cell = self.get_highlighted_cell(pos, color=color, **kwargs) + bg_cell = self.get_highlighted_cell( + pos, color=ManimColor.parse(color), **kwargs + ) self.add_to_back(bg_cell) entry = self.get_entries(pos) entry.background_rectangle = bg_cell diff --git a/manim/mobject/text/tex_mobject.py b/manim/mobject/text/tex_mobject.py index 92a4bd2cc2..cf3a215550 100644 --- a/manim/mobject/text/tex_mobject.py +++ b/manim/mobject/text/tex_mobject.py @@ -12,6 +12,8 @@ from __future__ import annotations +from manim.utils.color import ManimColor + __all__ = [ "SingleStringMathTex", "MathTex", @@ -28,8 +30,6 @@ from textwrap import dedent from typing import Dict, Iterable, Optional -from colour import Color - from manim import config, logger from manim.constants import * from manim.mobject.geometry.line import Line @@ -256,7 +256,7 @@ def __init__( *tex_strings, arg_separator: str = " ", substrings_to_isolate: Iterable[str] | None = None, - tex_to_color_map: dict[str, Color] = None, + tex_to_color_map: dict[str, ManimColor] = None, tex_environment: str = "align*", **kwargs, ): diff --git a/manim/mobject/text/text_mobject.py b/manim/mobject/text/text_mobject.py index 803d7b4350..164269aaa1 100644 --- a/manim/mobject/text/text_mobject.py +++ b/manim/mobject/text/text_mobject.py @@ -63,7 +63,6 @@ def construct(self): import manimpango import numpy as np -from colour import Color from manimpango import MarkupUtils, PangoUtils, TextSetting from manim import config, logger @@ -71,8 +70,8 @@ def construct(self): from manim.mobject.geometry.arc import Dot from manim.mobject.svg.svg_mobject import SVGMobject from manim.mobject.types.vectorized_mobject import VGroup, VMobject -from manim.utils.color import Colors, color_gradient from manim.utils.deprecation import deprecated +from manim.utils.color import * TEXT_MOB_SCALE_FACTOR = 0.05 DEFAULT_LINE_SPACING_SCALE = 0.3 @@ -148,7 +147,7 @@ def __init__( self, *text: Sequence[str], line_spacing: float = -1, - alignment: Optional[str] = None, + alignment: str | None = None, **kwargs, ) -> None: self.line_spacing = line_spacing @@ -406,7 +405,7 @@ def __init__( text: str, fill_opacity: float = 1.0, stroke_width: float = 0, - color: Color | str | None = None, + color: ParsableManimColor | None = None, font_size: float = DEFAULT_FONT_SIZE, line_spacing: float = -1, font: str = "", @@ -471,7 +470,7 @@ def __init__( else: self.line_spacing = self._font_size + self._font_size * self.line_spacing - color = Color(color) if color else VMobject().color + color: ManimColor = ManimColor.parse(color) if color else VMobject().color file_name = self._text2svg(color) PangoUtils.remove_last_M(file_name) super().__init__( @@ -591,10 +590,14 @@ def _set_color_by_t2g(self, t2g=None): for start, end in self._find_indexes(word, self.text): self.chars[start:end].set_color_by_gradient(*gradient) - def _text2hash(self, color: Color): + def _text2hash(self, color: ParsableManimColor): """Generates ``sha256`` hash for file name.""" settings = ( - "PANGO" + self.font + self.slant + self.weight + color.hex_l + "PANGO" + + self.font + + self.slant + + self.weight + + ManimColor.parse(color).to_hex().lower() ) # to differentiate Text and CairoText settings += str(self.t2f) + str(self.t2s) + str(self.t2w) + str(self.t2c) settings += str(self.line_spacing) + str(self._font_size) @@ -661,7 +664,7 @@ def _get_settings_from_gradient( for word, gradient in self.t2g.items(): if isinstance(gradient, str) or len(gradient) == 1: color = gradient if isinstance(gradient, str) else gradient[0] - gradient = [Color(color)] + gradient = [ManimColor.parse(color)] colors = ( color_gradient(gradient, len(word)) if len(gradient) != 1 @@ -673,7 +676,7 @@ def _get_settings_from_gradient( settings.append(TextSetting(i, i + 1, **args)) return settings - def _text2settings(self, color: Color): + def _text2settings(self, color: ParsableManimColor): """Converts the texts and styles to a setting for parsing.""" t2xs = [ (self.t2f, "font"), @@ -682,8 +685,11 @@ def _text2settings(self, color: Color): (self.t2c, "color"), ] # setting_args requires values to be strings + + color = ManimColor.parse() default_args = { - arg: getattr(self, arg) if arg != "color" else str(color) for _, arg in t2xs + arg: getattr(self, arg) if arg != "color" else color.to_hex() + for _, arg in t2xs } settings = self._get_settings_from_t2xs(t2xs, default_args) @@ -739,7 +745,7 @@ def _text2settings(self, color: Color): return settings - def _text2svg(self, color: Color): + def _text2svg(self, color: ParsableManimColor): """Convert the text to SVG using Pango.""" size = self._font_size line_spacing = self.line_spacing @@ -1082,7 +1088,7 @@ def __init__( text: str, fill_opacity: float = 1, stroke_width: float = 0, - color: Color | None = None, + color: ParsableManimColor | None = None, font_size: float = DEFAULT_FONT_SIZE, line_spacing: int = -1, font: str = "", @@ -1131,7 +1137,7 @@ def __init__( else: self.line_spacing = self._font_size + self._font_size * self.line_spacing - color = Color(color) if color else VMobject().color + color = ManimColor.parse(color) if color else VMobject().color file_name = self._text2svg(color) PangoUtils.remove_last_M(file_name) @@ -1209,10 +1215,14 @@ def font_size(self, font_val): else: self.scale(font_val / self.font_size) - def _text2hash(self, color: Color): + def _text2hash(self, color: ParsableManimColor): """Generates ``sha256`` hash for file name.""" settings = ( - "MARKUPPANGO" + self.font + self.slant + self.weight + color.hex_l + "MARKUPPANGO" + + self.font + + self.slant + + self.weight + + ManimColor.parse(color).to_hex().lower ) # to differentiate from classical Pango Text settings += str(self.line_spacing) + str(self._font_size) settings += str(self.disable_ligatures) @@ -1222,8 +1232,9 @@ def _text2hash(self, color: Color): hasher.update(id_str.encode()) return hasher.hexdigest()[:16] - def _text2svg(self, color: Color | None): + def _text2svg(self, color: ParsableManimColor | None): """Convert the text to SVG using Pango.""" + color = ManimColor.parse(color) size = self._font_size line_spacing = self.line_spacing size /= TEXT2SVG_ADJUSTMENT_FACTOR @@ -1238,7 +1249,7 @@ def _text2svg(self, color: Color | None): svg_file = str(file_name.resolve()) else: final_text = ( - f'{self.text}' + f'{self.text}' if color is not None else self.text ) @@ -1316,7 +1327,7 @@ def _parse_color(self, col): if re.match("#[0-9a-f]{6}", col): return col else: - return Colors[col.lower()].value + return ManimColor.parse(col.lower()).value def _extract_color_tags(self): """Used to determine which parts (if any) of the string should be formatted diff --git a/manim/mobject/three_d/three_dimensions.py b/manim/mobject/three_d/three_dimensions.py index 6f53ca91d5..c9fe457adf 100644 --- a/manim/mobject/three_d/three_dimensions.py +++ b/manim/mobject/three_d/three_dimensions.py @@ -20,7 +20,6 @@ from typing import * import numpy as np -from colour import Color from manim import config, logger from manim.constants import * @@ -31,7 +30,6 @@ from manim.mobject.opengl.opengl_mobject import OpenGLMobject from manim.mobject.types.vectorized_mobject import VGroup, VMobject from manim.utils.color import * -from manim.utils.color import Colors from manim.utils.deprecation import deprecated_params from manim.utils.iterables import tuplify from manim.utils.space_ops import normalize, perpendicular_bisector, z_to_vector @@ -101,10 +99,10 @@ def __init__( v_range: Sequence[float] = [0, 1], resolution: Sequence[int] = 32, surface_piece_config: dict = {}, - fill_color: Color = BLUE_D, + fill_color: ParsableManimColor = BLUE_D, fill_opacity: float = 1.0, - checkerboard_colors: Sequence[Color] = [BLUE_D, BLUE_E], - stroke_color: Color = LIGHT_GREY, + checkerboard_colors: Sequence[ParsableManimColor] = [BLUE_D, BLUE_E], + stroke_color: ParsableManimColor = LIGHT_GREY, stroke_width: float = 0.5, should_make_jagged: bool = False, pre_function_handle_to_anchor_scale_factor: float = 0.00001, @@ -115,10 +113,12 @@ def __init__( super().__init__(**kwargs) self.resolution = resolution self.surface_piece_config = surface_piece_config - self.fill_color = fill_color + self.fill_color: ManimColor = ManimColor.parse(fill_color) self.fill_opacity = fill_opacity - self.checkerboard_colors = checkerboard_colors - self.stroke_color = stroke_color + self.checkerboard_colors: list[ManimColor] = [ + ManimColor.parse(x) for x in checkerboard_colors + ] + self.stroke_color: ManimColor = ManimColor.parse(stroke_color) self.stroke_width = stroke_width self.should_make_jagged = should_make_jagged self.pre_function_handle_to_anchor_scale_factor = ( @@ -203,7 +203,7 @@ def set_fill_by_checkerboard(self, *colors, opacity=None): def set_fill_by_value( self, axes: Mobject, - colorscale: Union[Iterable[Color], Color] | None = None, + colorscale: list[ParsableManimColor] | ParsableManimColor | None = None, axis: int = 2, **kwargs, ): @@ -428,7 +428,7 @@ def __init__( self, point: list | np.ndarray = ORIGIN, radius: float = DEFAULT_DOT_RADIUS, - color: Colors = WHITE, + color: ParsableManimColor = WHITE, resolution=(8, 8), **kwargs, ): diff --git a/manim/mobject/types/image_mobject.py b/manim/mobject/types/image_mobject.py index 091c60a195..19650faf25 100644 --- a/manim/mobject/types/image_mobject.py +++ b/manim/mobject/types/image_mobject.py @@ -6,7 +6,6 @@ import pathlib -import colour import numpy as np from PIL import Image from PIL.Image import Resampling @@ -276,7 +275,7 @@ def interpolate_color( def get_style(self): return { - "fill_color": colour.rgb2hex(self.color.get_rgb()), + "fill_color": ManimColor(self.color.get_rgb()).to_hex(), "fill_opacity": self.fill_opacity, } diff --git a/manim/mobject/types/point_cloud_mobject.py b/manim/mobject/types/point_cloud_mobject.py index 4a6b5302ac..e04b889225 100644 --- a/manim/mobject/types/point_cloud_mobject.py +++ b/manim/mobject/types/point_cloud_mobject.py @@ -5,7 +5,6 @@ __all__ = ["PMobject", "Mobject1D", "Mobject2D", "PGroup", "PointCloudDot", "Point"] import numpy as np -from colour import Color from manim.mobject.opengl.opengl_compatibility import ConvertToOpenGL from manim.mobject.opengl.opengl_point_cloud_mobject import OpenGLPMobject @@ -17,6 +16,7 @@ BLACK, WHITE, YELLOW, + ManimColor, color_gradient, color_to_rgba, rgba_to_color, @@ -76,7 +76,7 @@ def add_points(self, points, rgbas=None, color=None, alpha=1): num_new_points = len(points) self.points = np.append(self.points, points, axis=0) if rgbas is None: - color = Color(color) if color else self.color + color = ManimColor.parse(color) if color else self.color rgbas = np.repeat([color_to_rgba(color, alpha)], num_new_points, axis=0) elif len(rgbas) != len(points): raise ValueError("points and rgbas must have same length") diff --git a/manim/mobject/types/vectorized_mobject.py b/manim/mobject/types/vectorized_mobject.py index 129e20fad0..bc2cc6ee9a 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -127,6 +127,7 @@ def __init__( super().__init__(**kwargs) self.submobjects: list[VMobject] + # TODO: Maybe that's a little weird to do after all ? Having a default color may help if fill_color: self.fill_color: ManimColor = ManimColor.parse(fill_color) if stroke_color: @@ -424,9 +425,10 @@ def get_fill_opacity(self): """ return self.get_fill_opacities()[0] + # TODO: Does this just do a copy? def get_fill_colors(self): return [ - colour.Color(rgb=rgba[:3]) if rgba.any() else None + ManimColor.parse(rgba[:3]) if rgba.any() else None for rgba in self.get_fill_rgbas() ] @@ -462,7 +464,7 @@ def get_stroke_opacity(self, background=False): def get_stroke_colors(self, background=False): return [ - colour.Color(rgb=rgba[:3]) if rgba.any() else None + ManimColor(rgba[:3]) if rgba.any() else None for rgba in self.get_stroke_rgbas(background) ] diff --git a/manim/mobject/vector_field.py b/manim/mobject/vector_field.py index 14f2f64f32..0bb5f3a39a 100644 --- a/manim/mobject/vector_field.py +++ b/manim/mobject/vector_field.py @@ -14,7 +14,6 @@ from typing import Callable, Iterable, Sequence import numpy as np -from colour import Color from PIL import Image from manim.animation.updaters.update import UpdateFromAlphaFunc @@ -30,7 +29,16 @@ from ..mobject.types.vectorized_mobject import VGroup from ..mobject.utils import get_vectorized_mobject_class from ..utils.bezier import interpolate, inverse_interpolate -from ..utils.color import BLUE_E, GREEN, RED, YELLOW, color_to_rgb, rgb_to_color +from ..utils.color import ( + BLUE_E, + GREEN, + RED, + YELLOW, + ManimColor, + ParsableManimColor, + color_to_rgb, + rgb_to_color, +) from ..utils.rate_functions import ease_out_sine, linear from ..utils.simple_functions import sigmoid @@ -66,11 +74,11 @@ class VectorField(VGroup): def __init__( self, func: Callable[[np.ndarray], np.ndarray], - color: Color | None = None, + color: ParsableManimColor | None = None, color_scheme: Callable[[np.ndarray], float] | None = None, min_color_scheme_value: float = 0, max_color_scheme_value: float = 2, - colors: Sequence[Color] = DEFAULT_SCALAR_FIELD_COLORS, + colors: Sequence[ParsableManimColor] = DEFAULT_SCALAR_FIELD_COLORS, **kwargs, ): super().__init__(**kwargs) @@ -107,7 +115,7 @@ def pos_to_rgb(pos: np.ndarray) -> tuple[float, float, float, float]: self.pos_to_color = lambda pos: rgb_to_color(self.pos_to_rgb(pos)) else: self.single_color = True - self.color = color + self.color = ManimColor.parse(color) self.submob_movement_updater = None @staticmethod @@ -409,7 +417,7 @@ def get_vectorized_rgba_gradient_function( self, start: float, end: float, - colors: Iterable, + colors: Iterable[ParsableManimColor], ): """ Generates a gradient of rgbas as a numpy array @@ -533,11 +541,11 @@ def construct(self): def __init__( self, func: Callable[[np.ndarray], np.ndarray], - color: Color | None = None, + color: ParsableManimColor | None = None, color_scheme: Callable[[np.ndarray], float] | None = None, min_color_scheme_value: float = 0, max_color_scheme_value: float = 2, - colors: Sequence[Color] = DEFAULT_SCALAR_FIELD_COLORS, + colors: Sequence[ParsableManimColor] = DEFAULT_SCALAR_FIELD_COLORS, # Determining Vector positions: x_range: Sequence[float] = None, y_range: Sequence[float] = None, @@ -707,11 +715,11 @@ def construct(self): def __init__( self, func: Callable[[np.ndarray], np.ndarray], - color: Color | None = None, + color: ParsableManimColor | None = None, color_scheme: Callable[[np.ndarray], float] | None = None, min_color_scheme_value: float = 0, max_color_scheme_value: float = 2, - colors: Sequence[Color] = DEFAULT_SCALAR_FIELD_COLORS, + colors: Sequence[ParsableManimColor] = DEFAULT_SCALAR_FIELD_COLORS, # Determining stream line starting positions: x_range: Sequence[float] = None, y_range: Sequence[float] = None, diff --git a/manim/scene/vector_space_scene.py b/manim/scene/vector_space_scene.py index f0bdd351b5..7a4052a7cd 100644 --- a/manim/scene/vector_space_scene.py +++ b/manim/scene/vector_space_scene.py @@ -7,7 +7,6 @@ from typing import Callable import numpy as np -from colour import Color from manim.mobject.geometry.arc import Dot from manim.mobject.geometry.line import Arrow, Line, Vector @@ -28,7 +27,17 @@ from ..mobject.mobject import Mobject from ..mobject.types.vectorized_mobject import VGroup, VMobject from ..scene.scene import Scene -from ..utils.color import BLUE_D, GREEN_C, GREY, RED_C, WHITE, YELLOW +from ..utils.color import ( + BLACK, + BLUE_D, + GREEN_C, + GREY, + RED_C, + WHITE, + YELLOW, + ManimColor, + ParsableManimColor, +) from ..utils.rate_functions import rush_from, rush_into from ..utils.space_ops import angle_of_vector @@ -580,8 +589,8 @@ def __init__( show_coordinates: bool = False, show_basis_vectors: bool = True, basis_vector_stroke_width: float = 6, - i_hat_color: Color = X_COLOR, - j_hat_color: Color = Y_COLOR, + i_hat_color: ParsableManimColor = X_COLOR, + j_hat_color: ParsableManimColor = Y_COLOR, leave_ghost_vectors: bool = False, **kwargs, ): @@ -593,8 +602,8 @@ def __init__( self.show_coordinates = show_coordinates self.show_basis_vectors = show_basis_vectors self.basis_vector_stroke_width = basis_vector_stroke_width - self.i_hat_color = i_hat_color - self.j_hat_color = j_hat_color + self.i_hat_color = ManimColor.parse(i_hat_color) + self.j_hat_color = ManimColor.parse(j_hat_color) self.leave_ghost_vectors = leave_ghost_vectors self.background_plane_kwargs = { "color": GREY, diff --git a/manim/utils/color.py b/manim/utils/color.py index 49d196df51..4757d91744 100644 --- a/manim/utils/color.py +++ b/manim/utils/color.py @@ -5,7 +5,7 @@ from enum import Enum from typing import Iterable, TypeAlias, TypedDict -from manim._config import logger +# from manim._config import logger __all__ = [ "color_to_rgb", @@ -193,9 +193,9 @@ def __init__( use_floats: bool = True, ) -> None: if isinstance(value, ManimColor): - logger.warning( - "ManimColor was passed another ManimColor. This is probably not what you want. Created a copy of the passed ManimColor instead." - ) + # logger.warning( + # "ManimColor was passed another ManimColor. This is probably not what you want. Created a copy of the passed ManimColor instead." + # ) self.value = value.value elif isinstance(value, int): self.value: int = value << 8 | int(alpha * 255) @@ -219,7 +219,7 @@ def __init__( elif length == 4: self.value: int = ManimColor.int_from_int_rgba(value) else: - logger.error(f"Invalid color value: {value}") + # logger.error(f"Invalid color value: {value}") raise TypeError( f"ManimColor only accepts int, str, list[int, int, int], list[int, int, int, int], list[float, float, float], list[float, float, float, float], not {type(value)}" ) @@ -288,10 +288,10 @@ def to_int_rgba(self) -> list[int, int, int, int]: ] ) - def to_rgb_with_alpha(self, *, alpha: float) -> list[float, float, float, float]: + def to_rgb_with_alpha(self, alpha: float) -> list[float, float, float, float]: return self.to_int_rgb_with_alpha(alpha) / 255 - def to_int_rgb_with_alpha(self, *, alpha: float) -> list[int, int, int, int]: + def to_int_rgb_with_alpha(self, alpha: float) -> list[int, int, int, int]: return np.array( [ (self.value >> 24) & 0xFF, diff --git a/tests/module/mobject/svg/test_svg_mobject.py b/tests/module/mobject/svg/test_svg_mobject.py index 116feb9e32..4993537ccf 100644 --- a/tests/module/mobject/svg/test_svg_mobject.py +++ b/tests/module/mobject/svg/test_svg_mobject.py @@ -1,7 +1,5 @@ from __future__ import annotations -from colour import Color - from manim import * from tests.helpers.path_utils import get_svg_resource @@ -9,21 +7,21 @@ def test_set_fill_color(): expected_color = "#FF862F" svg = SVGMobject(get_svg_resource("heart.svg"), fill_color=expected_color) - assert svg.fill_color == Color(expected_color) + assert svg.fill_color.to_hex() == expected_color def test_set_stroke_color(): expected_color = "#FFFDDD" svg = SVGMobject(get_svg_resource("heart.svg"), stroke_color=expected_color) - assert svg.stroke_color == Color(expected_color) + assert svg.stroke_color.to_hex() == expected_color def test_set_color_sets_fill_and_stroke(): expected_color = "#EEE777" svg = SVGMobject(get_svg_resource("heart.svg"), color=expected_color) - assert svg.color == Color(expected_color) - assert svg.fill_color == Color(expected_color) - assert svg.stroke_color == Color(expected_color) + assert svg.color.to_hex() == expected_color + assert svg.fill_color.to_hex() == expected_color + assert svg.stroke_color.to_hex() == expected_color def test_set_fill_opacity(): @@ -45,7 +43,7 @@ def test_fill_overrides_color(): color="#123123", fill_color=expected_color, ) - assert svg.fill_color == Color(expected_color) + assert svg.fill_color.to_hex() == expected_color def test_stroke_overrides_color(): @@ -55,4 +53,4 @@ def test_stroke_overrides_color(): color="#334433", stroke_color=expected_color, ) - assert svg.stroke_color == Color(expected_color) + assert svg.stroke_color.to_hex() == expected_color diff --git a/tests/module/mobject/text/test_numbers.py b/tests/module/mobject/text/test_numbers.py index 350a527b3b..620350b1dc 100644 --- a/tests/module/mobject/text/test_numbers.py +++ b/tests/module/mobject/text/test_numbers.py @@ -1,7 +1,5 @@ from __future__ import annotations -from colour import Color - from manim import RED, DecimalNumber, Integer @@ -44,4 +42,6 @@ def test_color_when_number_of_digits_changes(): the number of digits changes.""" mob = Integer(color=RED) mob.set_value(42) - assert all([submob.stroke_color == Color(RED) for submob in mob.submobjects]) + assert all( + [submob.stroke_color.to_hex() == RED.to_hex() for submob in mob.submobjects] + ) diff --git a/tests/module/mobject/text/test_text_mobject.py b/tests/module/mobject/text/test_text_mobject.py index 79542163d1..999039767c 100644 --- a/tests/module/mobject/text/test_text_mobject.py +++ b/tests/module/mobject/text/test_text_mobject.py @@ -1,7 +1,5 @@ from __future__ import annotations -from colour import Color - from manim.mobject.text.text_mobject import MarkupText, Text @@ -15,9 +13,10 @@ def test_font_size(): assert round(markuptext_string.font_size, 5) == 14.4 -def test_non_str_color(): - """Test that the Text and MarkupText can accept non_str color values - i.e. colour.Color(red).""" +# TODO: Figure out if this is still needed +# def test_non_str_color(): +# """Test that the Text and MarkupText can accept non_str color values +# i.e. colour.Color(red).""" - text = Text("test_color_inheritance", color=Color("blue")) - markup_text = MarkupText("test_color_inheritance", color=Color("blue")) +# text = Text("test_color_inheritance", color=Color("blue")) +# markup_text = MarkupText("test_color_inheritance", color=Color("blue")) diff --git a/tests/module/mobject/types/vectorized_mobject/test_stroke.py b/tests/module/mobject/types/vectorized_mobject/test_stroke.py index 5a25f34661..090fb19b77 100644 --- a/tests/module/mobject/types/vectorized_mobject/test_stroke.py +++ b/tests/module/mobject/types/vectorized_mobject/test_stroke.py @@ -1,6 +1,5 @@ from __future__ import annotations -from colour import Color import manim.utils.color as C from manim import VMobject @@ -8,7 +7,7 @@ def test_stroke_props_in_ctor(): m = VMobject(stroke_color=C.ORANGE, stroke_width=10) - assert m.stroke_color == Color(C.ORANGE) + assert m.stroke_color.to_hex() == C.ORANGE.to_hex() assert m.stroke_width == 10 @@ -17,7 +16,7 @@ def test_set_stroke(): m.set_stroke(color=C.ORANGE, width=2, opacity=0.8) assert m.stroke_width == 2 assert m.stroke_opacity == 0.8 - assert m.stroke_color == Color(C.ORANGE) + assert m.stroke_color.to_hex() == C.ORANGE.to_hex() def test_set_background_stroke(): @@ -25,4 +24,4 @@ def test_set_background_stroke(): m.set_stroke(color=C.ORANGE, width=2, opacity=0.8, background=True) assert m.background_stroke_width == 2 assert m.background_stroke_opacity == 0.8 - assert m.background_stroke_color == C.ORANGE + assert m.background_stroke_color.to_hex() == C.ORANGE.to_hex() diff --git a/tests/opengl/test_color_opengl.py b/tests/opengl/test_color_opengl.py index 32f9dfbdda..0a53f60c53 100644 --- a/tests/opengl/test_color_opengl.py +++ b/tests/opengl/test_color_opengl.py @@ -1,7 +1,6 @@ from __future__ import annotations import numpy as np -from colour import Color from manim import BLACK, BLUE, GREEN, PURE_BLUE, PURE_GREEN, PURE_RED, Scene from manim.mobject.opengl.opengl_mobject import OpenGLMobject @@ -16,19 +15,19 @@ def test_import_color(using_opengl_renderer): def test_background_color(using_opengl_renderer): S = Scene() - S.renderer.background_color = "#ff0000" + S.renderer.background_color = "#FF0000" S.renderer.update_frame(S) np.testing.assert_array_equal( S.renderer.get_frame()[0, 0], np.array([255, 0, 0, 255]) ) - S.renderer.background_color = "#436f80" + S.renderer.background_color = "#436F80" S.renderer.update_frame(S) np.testing.assert_array_equal( S.renderer.get_frame()[0, 0], np.array([67, 111, 128, 255]) ) - S.renderer.background_color = "#fff" + S.renderer.background_color = "#FFFFFF" S.renderer.update_frame(S) np.testing.assert_array_equal( S.renderer.get_frame()[0, 0], np.array([255, 255, 255, 255]) @@ -37,138 +36,138 @@ def test_background_color(using_opengl_renderer): def test_set_color(using_opengl_renderer): m = OpenGLMobject() - assert m.color.hex == "#fff" + assert m.color.to_hex() == "#FFFFFF" np.alltrue(m.rgbas == np.array((0.0, 0.0, 0.0, 1.0))) m.set_color(BLACK) - assert m.color.hex == "#000" + assert m.color.to_hex() == "#000000" np.alltrue(m.rgbas == np.array((1.0, 1.0, 1.0, 1.0))) m.set_color(PURE_GREEN, opacity=0.5) - assert m.color.hex == "#0f0" + assert m.color.to_hex() == "#00FF00" np.alltrue(m.rgbas == np.array((0.0, 1.0, 0.0, 0.5))) m = OpenGLVMobject() - assert m.color.hex == "#fff" + assert m.color.to_hex() == "#FFFFFF" np.alltrue(m.fill_rgba == np.array((0.0, 0.0, 0.0, 1.0))) np.alltrue(m.stroke_rgba == np.array((0.0, 0.0, 0.0, 1.0))) m.set_color(BLACK) - assert m.color.hex == "#000" + assert m.color.to_hex() == "#000000" np.alltrue(m.fill_rgba == np.array((1.0, 1.0, 1.0, 1.0))) np.alltrue(m.stroke_rgba == np.array((1.0, 1.0, 1.0, 1.0))) m.set_color(PURE_GREEN, opacity=0.5) - assert m.color.hex == "#0f0" + assert m.color.to_hex() == "#00FF00" np.alltrue(m.fill_rgba == np.array((0.0, 1.0, 0.0, 0.5))) np.alltrue(m.stroke_rgba == np.array((0.0, 1.0, 0.0, 0.5))) def test_set_fill_color(using_opengl_renderer): m = OpenGLVMobject() - assert m.fill_color.hex == "#fff" + assert m.fill_color.to_hex() == "#FFFFFF" np.alltrue(m.fill_rgba == np.array((0.0, 1.0, 0.0, 0.5))) m.set_fill(BLACK) - assert m.fill_color.hex == "#000" + assert m.fill_color.to_hex() == "#000000" np.alltrue(m.fill_rgba == np.array((1.0, 1.0, 1.0, 1.0))) m.set_fill(PURE_GREEN, opacity=0.5) - assert m.fill_color.hex == "#0f0" + assert m.fill_color.to_hex() == "#00FF00" np.alltrue(m.fill_rgba == np.array((0.0, 1.0, 0.0, 0.5))) def test_set_stroke_color(using_opengl_renderer): m = OpenGLVMobject() - assert m.stroke_color.hex == "#fff" + assert m.stroke_color.to_hex() == "#FFFFFF" np.alltrue(m.stroke_rgba == np.array((0.0, 1.0, 0.0, 0.5))) m.set_stroke(BLACK) - assert m.stroke_color.hex == "#000" + assert m.stroke_color.to_hex() == "#000000" np.alltrue(m.stroke_rgba == np.array((1.0, 1.0, 1.0, 1.0))) m.set_stroke(PURE_GREEN, opacity=0.5) - assert m.stroke_color.hex == "#0f0" + assert m.stroke_color.to_hex() == "#00FF00" np.alltrue(m.stroke_rgba == np.array((0.0, 1.0, 0.0, 0.5))) def test_set_fill(using_opengl_renderer): m = OpenGLMobject() - assert m.color.hex == "#fff" + assert m.color.to_hex() == "#FFFFFF" m.set_color(BLACK) - assert m.color.hex == "#000" + assert m.color.to_hex() == "#000000" m = OpenGLVMobject() - assert m.color.hex == "#fff" + assert m.color.to_hex() == "#FFFFFF" m.set_color(BLACK) - assert m.color.hex == "#000" + assert m.color.to_hex() == "#000000" def test_set_color_handles_lists_of_strs(using_opengl_renderer): m = OpenGLVMobject() - assert m.color.hex == "#fff" + assert m.color.to_hex() == "#FFFFFF" m.set_color([BLACK, BLUE, GREEN]) - assert m.get_colors()[0] == Color(BLACK) - assert m.get_colors()[1] == Color(BLUE) - assert m.get_colors()[2] == Color(GREEN) + assert m.get_colors()[0] == BLACK + assert m.get_colors()[1] == BLUE + assert m.get_colors()[2] == GREEN - assert m.get_fill_colors()[0] == Color(BLACK) - assert m.get_fill_colors()[1] == Color(BLUE) - assert m.get_fill_colors()[2] == Color(GREEN) + assert m.get_fill_colors()[0] == BLACK + assert m.get_fill_colors()[1] == BLUE + assert m.get_fill_colors()[2] == GREEN - assert m.get_stroke_colors()[0] == Color(BLACK) - assert m.get_stroke_colors()[1] == Color(BLUE) - assert m.get_stroke_colors()[2] == Color(GREEN) + assert m.get_stroke_colors()[0] == BLACK + assert m.get_stroke_colors()[1] == BLUE + assert m.get_stroke_colors()[2] == GREEN def test_set_color_handles_lists_of_color_objects(using_opengl_renderer): m = OpenGLVMobject() - assert m.color.hex == "#fff" - m.set_color([Color(PURE_BLUE), Color(PURE_GREEN), Color(PURE_RED)]) - assert m.get_colors()[0].hex == "#00f" - assert m.get_colors()[1].hex == "#0f0" - assert m.get_colors()[2].hex == "#f00" + assert m.color.to_hex() == "#FFFFFF" + m.set_color([PURE_BLUE, PURE_GREEN, PURE_RED]) + assert m.get_colors()[0].to_hex() == "#0000FF" + assert m.get_colors()[1].to_hex() == "#00FF00" + assert m.get_colors()[2].to_hex() == "#FF0000" - assert m.get_fill_colors()[0].hex == "#00f" - assert m.get_fill_colors()[1].hex == "#0f0" - assert m.get_fill_colors()[2].hex == "#f00" + assert m.get_fill_colors()[0].to_hex() == "#0000FF" + assert m.get_fill_colors()[1].to_hex() == "#00FF00" + assert m.get_fill_colors()[2].to_hex() == "#FF0000" - assert m.get_stroke_colors()[0].hex == "#00f" - assert m.get_stroke_colors()[1].hex == "#0f0" - assert m.get_stroke_colors()[2].hex == "#f00" + assert m.get_stroke_colors()[0].to_hex() == "#0000FF" + assert m.get_stroke_colors()[1].to_hex() == "#00FF00" + assert m.get_stroke_colors()[2].to_hex() == "#FF0000" def test_set_fill_handles_lists_of_strs(using_opengl_renderer): m = OpenGLVMobject() - assert m.fill_color.hex == "#fff" - m.set_fill([BLACK, BLUE, GREEN]) - assert m.get_fill_colors()[0] == Color(BLACK) - assert m.get_fill_colors()[1] == Color(BLUE) - assert m.get_fill_colors()[2] == Color(GREEN) + assert m.fill_color.to_hex() == "#FFFFFF" + m.set_fill([BLACK.to_hex(), BLUE.to_hex(), GREEN.to_hex()]) + assert m.get_fill_colors()[0].to_hex() == BLACK.to_hex() + assert m.get_fill_colors()[1].to_hex() == BLUE.to_hex() + assert m.get_fill_colors()[2].to_hex() == GREEN.to_hex() def test_set_fill_handles_lists_of_color_objects(using_opengl_renderer): m = OpenGLVMobject() - assert m.fill_color.hex == "#fff" - m.set_fill([Color(PURE_BLUE), Color(PURE_GREEN), Color(PURE_RED)]) - assert m.get_fill_colors()[0].hex == "#00f" - assert m.get_fill_colors()[1].hex == "#0f0" - assert m.get_fill_colors()[2].hex == "#f00" + assert m.fill_color.to_hex() == "#FFFFFF" + m.set_fill([PURE_BLUE, PURE_GREEN, PURE_RED]) + assert m.get_fill_colors()[0].to_hex() == "#0000FF" + assert m.get_fill_colors()[1].to_hex() == "#00FF00" + assert m.get_fill_colors()[2].to_hex() == "#FF0000" def test_set_stroke_handles_lists_of_strs(using_opengl_renderer): m = OpenGLVMobject() - assert m.stroke_color.hex == "#fff" - m.set_stroke([BLACK, BLUE, GREEN]) - assert m.get_stroke_colors()[0] == Color(BLACK) - assert m.get_stroke_colors()[1] == Color(BLUE) - assert m.get_stroke_colors()[2] == Color(GREEN) + assert m.stroke_color.to_hex() == "#FFFFFF" + m.set_stroke([BLACK.to_hex(), BLUE.to_hex(), GREEN.to_hex()]) + assert m.get_stroke_colors()[0].to_hex() == BLACK.to_hex() + assert m.get_stroke_colors()[1].to_hex() == BLUE.to_hex() + assert m.get_stroke_colors()[2].to_hex() == GREEN.to_hex() def test_set_stroke_handles_lists_of_color_objects(using_opengl_renderer): m = OpenGLVMobject() - assert m.stroke_color.hex == "#fff" - m.set_stroke([Color(PURE_BLUE), Color(PURE_GREEN), Color(PURE_RED)]) - assert m.get_stroke_colors()[0].hex == "#00f" - assert m.get_stroke_colors()[1].hex == "#0f0" - assert m.get_stroke_colors()[2].hex == "#f00" + assert m.stroke_color.to_hex() == "#FFFFFF" + m.set_stroke([PURE_BLUE, PURE_GREEN, PURE_RED]) + assert m.get_stroke_colors()[0].to_hex() == "#0000FF" + assert m.get_stroke_colors()[1].to_hex() == "#00FF00" + assert m.get_stroke_colors()[2].to_hex() == "#FF0000" diff --git a/tests/opengl/test_stroke_opengl.py b/tests/opengl/test_stroke_opengl.py index 7a18d5de27..71da18aac6 100644 --- a/tests/opengl/test_stroke_opengl.py +++ b/tests/opengl/test_stroke_opengl.py @@ -1,6 +1,5 @@ from __future__ import annotations -from colour import Color import manim.utils.color as C from manim.mobject.opengl.opengl_vectorized_mobject import OpenGLVMobject @@ -8,7 +7,7 @@ def test_stroke_props_in_ctor(using_opengl_renderer): m = OpenGLVMobject(stroke_color=C.ORANGE, stroke_width=10) - assert m.stroke_color == Color(C.ORANGE) + assert m.stroke_color.to_hex() == C.ORANGE.to_hex() assert m.stroke_width == 10 @@ -17,4 +16,4 @@ def test_set_stroke(using_opengl_renderer): m.set_stroke(color=C.ORANGE, width=2, opacity=0.8) assert m.stroke_width == 2 assert m.stroke_opacity == 0.8 - assert m.stroke_color == Color(C.ORANGE) + assert m.stroke_color.to_hex() == C.ORANGE diff --git a/tests/opengl/test_svg_mobject_opengl.py b/tests/opengl/test_svg_mobject_opengl.py index c672055778..c1d11f42e5 100644 --- a/tests/opengl/test_svg_mobject_opengl.py +++ b/tests/opengl/test_svg_mobject_opengl.py @@ -1,7 +1,5 @@ from __future__ import annotations -from colour import Color - from manim import * from tests.helpers.path_utils import get_svg_resource @@ -9,21 +7,21 @@ def test_set_fill_color(using_opengl_renderer): expected_color = "#FF862F" svg = SVGMobject(get_svg_resource("heart.svg"), fill_color=expected_color) - assert svg.fill_color == Color(expected_color) + assert svg.fill_color.to_hex() == expected_color def test_set_stroke_color(using_opengl_renderer): expected_color = "#FFFDDD" svg = SVGMobject(get_svg_resource("heart.svg"), stroke_color=expected_color) - assert svg.stroke_color == Color(expected_color) + assert svg.stroke_color.to_hex() == expected_color def test_set_color_sets_fill_and_stroke(using_opengl_renderer): expected_color = "#EEE777" svg = SVGMobject(get_svg_resource("heart.svg"), color=expected_color) - assert svg.color == Color(expected_color) - assert svg.fill_color == Color(expected_color) - assert svg.stroke_color == Color(expected_color) + assert svg.color.to_hex() == expected_color + assert svg.fill_color.to_hex() == expected_color + assert svg.stroke_color.to_hex() == expected_color def test_set_fill_opacity(using_opengl_renderer): @@ -45,7 +43,7 @@ def test_fill_overrides_color(using_opengl_renderer): color="#123123", fill_color=expected_color, ) - assert svg.fill_color == Color(expected_color) + assert svg.fill_color.to_hex() == expected_color def test_stroke_overrides_color(using_opengl_renderer): @@ -55,4 +53,4 @@ def test_stroke_overrides_color(using_opengl_renderer): color="#334433", stroke_color=expected_color, ) - assert svg.stroke_color == Color(expected_color) + assert svg.stroke_color.to_hex() == expected_color diff --git a/tests/test_graphical_units/test_text.py b/tests/test_graphical_units/test_text.py index 606ff4251f..a73fd3d80f 100644 --- a/tests/test_graphical_units/test_text.py +++ b/tests/test_graphical_units/test_text.py @@ -1,5 +1,4 @@ import pytest -from colour import Color from manim import RED, MarkupText, Text, VGroup, VMobject @@ -14,9 +13,11 @@ def test_Text2Color(): disable_ligatures=True, ) assert len(txt.submobjects) == 29 - assert all(char.fill_color == Color("#ffffff") for char in txt[:4]) # "this" - assert all(char.fill_color == Color(RED) for char in txt[-7:-1]) # "spaces" - assert txt[-1].fill_color == Color("#ffffff") # "!" + assert all(char.fill_color.to_hex() == "#FFFFFF" for char in txt[:4]) # "this" + assert all( + char.fill_color.to_hex() == RED.to_hex() for char in txt[-7:-1] + ) # "spaces" + assert txt[-1].fill_color.to_hex() == "#FFFFFF" # "!" def test_text_color_inheritance(): @@ -27,8 +28,8 @@ def test_text_color_inheritance(): text = Text("test_color_inheritance", font="Dejavu Sans") markup_text = MarkupText("test_color_inheritance", font="Dejavu Sans") - assert all(char.fill_color == Color(RED) for char in text) - assert all(char.fill_color == Color(RED) for char in markup_text) + assert all(char.fill_color.to_hex() == RED.to_hex() for char in text) + assert all(char.fill_color.to_hex() == RED.to_hex() for char in markup_text) # reset the default color so that future tests aren't affected by this change. VMobject.set_default() From 73ffb5136e14d6b5dd02ed917c0073d44b78d571 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 19 Nov 2022 02:22:46 +0000 Subject: [PATCH 05/91] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- manim/animation/changing.py | 2 +- manim/mobject/table.py | 2 +- manim/mobject/text/text_mobject.py | 2 +- tests/module/mobject/types/vectorized_mobject/test_stroke.py | 1 - tests/opengl/test_stroke_opengl.py | 1 - 5 files changed, 3 insertions(+), 5 deletions(-) diff --git a/manim/animation/changing.py b/manim/animation/changing.py index 995ed24f63..eff3587101 100644 --- a/manim/animation/changing.py +++ b/manim/animation/changing.py @@ -9,9 +9,9 @@ from manim._config import config from manim.mobject.opengl.opengl_compatibility import ConvertToOpenGL from manim.mobject.types.vectorized_mobject import VGroup, VMobject +from manim.utils.color import * from manim.utils.color import BLUE_B, BLUE_D, BLUE_E, GREY_BROWN, WHITE from manim.utils.rate_functions import smooth -from manim.utils.color import * class AnimatedBoundary(VGroup): diff --git a/manim/mobject/table.py b/manim/mobject/table.py index d2d12652b5..1afb60dbe7 100644 --- a/manim/mobject/table.py +++ b/manim/mobject/table.py @@ -80,8 +80,8 @@ def construct(self): from ..animation.creation import Create, Write from ..animation.fading import FadeIn from ..mobject.types.vectorized_mobject import VGroup, VMobject -from .utils import get_vectorized_mobject_class from ..utils.color import BLACK, YELLOW, ManimColor, ParsableManimColor +from .utils import get_vectorized_mobject_class class Table(VGroup): diff --git a/manim/mobject/text/text_mobject.py b/manim/mobject/text/text_mobject.py index 164269aaa1..301e17fa5f 100644 --- a/manim/mobject/text/text_mobject.py +++ b/manim/mobject/text/text_mobject.py @@ -70,8 +70,8 @@ def construct(self): from manim.mobject.geometry.arc import Dot from manim.mobject.svg.svg_mobject import SVGMobject from manim.mobject.types.vectorized_mobject import VGroup, VMobject -from manim.utils.deprecation import deprecated from manim.utils.color import * +from manim.utils.deprecation import deprecated TEXT_MOB_SCALE_FACTOR = 0.05 DEFAULT_LINE_SPACING_SCALE = 0.3 diff --git a/tests/module/mobject/types/vectorized_mobject/test_stroke.py b/tests/module/mobject/types/vectorized_mobject/test_stroke.py index 090fb19b77..7935caa6da 100644 --- a/tests/module/mobject/types/vectorized_mobject/test_stroke.py +++ b/tests/module/mobject/types/vectorized_mobject/test_stroke.py @@ -1,6 +1,5 @@ from __future__ import annotations - import manim.utils.color as C from manim import VMobject diff --git a/tests/opengl/test_stroke_opengl.py b/tests/opengl/test_stroke_opengl.py index 71da18aac6..fc820529ec 100644 --- a/tests/opengl/test_stroke_opengl.py +++ b/tests/opengl/test_stroke_opengl.py @@ -1,6 +1,5 @@ from __future__ import annotations - import manim.utils.color as C from manim.mobject.opengl.opengl_vectorized_mobject import OpenGLVMobject From 157c504a76df377e9b74c9557f3cb785ede9d822 Mon Sep 17 00:00:00 2001 From: MrDiver Date: Sat, 10 Dec 2022 22:42:12 +0100 Subject: [PATCH 06/91] first working draft of new color version --- manim/_config/utils.py | 5 +---- manim/mobject/mobject.py | 8 ++++++++ manim/mobject/types/image_mobject.py | 2 +- manim/utils/color.py | 20 ++++++++++++++++---- 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/manim/_config/utils.py b/manim/_config/utils.py index 0f5ea04a35..1448c252de 100644 --- a/manim/_config/utils.py +++ b/manim/_config/utils.py @@ -27,7 +27,6 @@ from .. import constants from ..constants import RendererType -from ..utils.color import ManimColor from ..utils.tex import TexTemplate, TexTemplateFromFile from ..utils.tex_templates import TexTemplateLibrary @@ -1096,9 +1095,7 @@ def format(self, val: str) -> None: background_color = property( lambda self: self._d["background_color"], - lambda self, val: self._d.__setitem__( - "background_color", ManimColor.parse(val) - ), + lambda self, val: self._d.__setitem__("background_color", val), doc="Background color of the scene (-c).", ) diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index 0c2e9ddd35..3e4a386ced 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -1750,10 +1750,18 @@ def set_color(self, color: ParsableManimColor = YELLOW_C, family: bool = True): if family: for submob in self.submobjects: submob.set_color(color, family=family) + print("Setting color of", self, "to", color) self.color = ManimColor.parse(color) return self def set_color_by_gradient(self, *colors: Iterable[ParsableManimColor]): + """ + Parameters + ---------- + colors + The colors to use for the gradient. Use like `set_color_by_gradient(RED, BLUE, GREEN)`. + + """ self.set_submobject_colors_by_gradient(*colors) return self diff --git a/manim/mobject/types/image_mobject.py b/manim/mobject/types/image_mobject.py index 19650faf25..285b55b400 100644 --- a/manim/mobject/types/image_mobject.py +++ b/manim/mobject/types/image_mobject.py @@ -16,7 +16,7 @@ from ...constants import * from ...mobject.mobject import Mobject from ...utils.bezier import interpolate -from ...utils.color import WHITE, color_to_int_rgb +from ...utils.color import WHITE, ManimColor, color_to_int_rgb from ...utils.images import change_to_rgba_array, get_full_raster_image_path diff --git a/manim/utils/color.py b/manim/utils/color.py index 4757d91744..235fee66cf 100644 --- a/manim/utils/color.py +++ b/manim/utils/color.py @@ -200,7 +200,10 @@ def __init__( elif isinstance(value, int): self.value: int = value << 8 | int(alpha * 255) elif isinstance(value, str): - self.value: int = ManimColor.int_from_hex(value, alpha) + try: + self.value: int = ManimColor.int_from_hex(value, alpha) + except ValueError: + self.value: int = ManimColor.int_from_str(value) elif ( isinstance(value, list) or isinstance(value, tuple) @@ -324,12 +327,22 @@ def int_from_rgba(rgba: list[float, float, float, float]) -> ManimColor: def int_from_hex(hex: str, alpha: float) -> ManimColor: if hex.startswith("#"): hex = hex[1:] - if hex.startswith("0x"): + elif hex.startswith("0x"): hex = hex[2:] + else: + raise ValueError(f"Invalid hex value: {hex}") if len(hex) == 6: hex += "00" return int(hex, 16) | int(alpha * 255) + # TODO: This may be a bad idea but i don't know what else will be better without writing an endless list of colors + @staticmethod + def int_from_str(name: str): + if name.upper() in globals(): + return globals()[name].value + else: + raise ValueError(f"Color {name} not found") + def invert(self, with_alpha=False) -> ManimColor: return ManimColor(0xFFFFFFFF - (self.value & 0xFFFFFFFF)) @@ -554,7 +567,7 @@ def color_to_rgba(color: ParsableManimColor, alpha: float = 1) -> np.ndarray: def rgb_to_color(rgb: Iterable[float]) -> ManimColor: - return ManimColor(rgb=rgb) + return ManimColor.from_rgb(rgb) def rgba_to_color(rgba: Iterable[float]) -> ManimColor: @@ -582,7 +595,6 @@ def color_to_int_rgb(color: ManimColor) -> np.ndarray: def color_to_int_rgba(color: ManimColor, opacity: float = 1.0) -> np.ndarray: alpha_multiplier = np.vectorize(lambda x: int(x * opacity)) - return alpha_multiplier(np.append(color_to_int_rgb(color), 255)) From d21583decd4da693aba35a8d01f4166cb7f1e476 Mon Sep 17 00:00:00 2001 From: MrDiver Date: Sun, 11 Dec 2022 15:17:33 +0100 Subject: [PATCH 07/91] resolving conflicts --- manim/mobject/mobject.py | 1 - manim/mobject/types/vectorized_mobject.py | 2 +- manim/utils/color.py | 6 +----- 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index 3e4a386ced..eb2c8d7367 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -1750,7 +1750,6 @@ def set_color(self, color: ParsableManimColor = YELLOW_C, family: bool = True): if family: for submob in self.submobjects: submob.set_color(color, family=family) - print("Setting color of", self, "to", color) self.color = ManimColor.parse(color) return self diff --git a/manim/mobject/types/vectorized_mobject.py b/manim/mobject/types/vectorized_mobject.py index bc2cc6ee9a..8293ac482f 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -223,8 +223,8 @@ def update_rgbas_array( def set_fill( self, - color: ParsableManimColor = None, opacity: float | None = None, + color: ParsableManimColor | None = None, family: bool = True, ): """Set the fill color and fill opacity of a :class:`VMobject`. diff --git a/manim/utils/color.py b/manim/utils/color.py index 235fee66cf..ce5e7a2711 100644 --- a/manim/utils/color.py +++ b/manim/utils/color.py @@ -204,11 +204,7 @@ def __init__( self.value: int = ManimColor.int_from_hex(value, alpha) except ValueError: self.value: int = ManimColor.int_from_str(value) - elif ( - isinstance(value, list) - or isinstance(value, tuple) - or isinstance(value, np.ndarray) - ): + elif isinstance(value, (list, tuple, np.ndarray)): length = len(value) if use_floats: From 074345e300ef326cd898dab885ddfb529c9fe608 Mon Sep 17 00:00:00 2001 From: MrDiver Date: Sun, 11 Dec 2022 15:21:51 +0100 Subject: [PATCH 08/91] resolving conflicts --- manim/_config/utils.py | 8 ++++++++ manim/mobject/geometry/line.py | 2 +- manim/mobject/mobject.py | 6 ++++-- manim/mobject/text/text_mobject.py | 6 +++--- manim/mobject/types/vectorized_mobject.py | 10 ++++++---- manim/utils/color.py | 4 ++-- 6 files changed, 24 insertions(+), 12 deletions(-) diff --git a/manim/_config/utils.py b/manim/_config/utils.py index 1448c252de..fa234fe7b3 100644 --- a/manim/_config/utils.py +++ b/manim/_config/utils.py @@ -25,6 +25,13 @@ import numpy as np + +def import_color(): + from manim.utils.color import ManimColor + + +import_color() + from .. import constants from ..constants import RendererType from ..utils.tex import TexTemplate, TexTemplateFromFile @@ -1093,6 +1100,7 @@ def format(self, val: str) -> None: doc="Frame rate in frames per second.", ) + # TODO: This was parsed before maybe add ManimColor.parse(val), but results in circular import background_color = property( lambda self: self._d["background_color"], lambda self, val: self._d.__setitem__("background_color", val), diff --git a/manim/mobject/geometry/line.py b/manim/mobject/geometry/line.py index df06bb78a9..ce556081f4 100644 --- a/manim/mobject/geometry/line.py +++ b/manim/mobject/geometry/line.py @@ -877,7 +877,7 @@ def __init__( dot: bool = False, dot_radius: float | None = None, dot_distance: float = 0.55, - dot_color: ManimColor = WHITE, + dot_color: ParsableManimColor = WHITE, elbow: bool = False, **kwargs, ): diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index eb2c8d7367..fe6f391b84 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -1741,7 +1741,9 @@ def add_background_rectangle_to_family_members_with_points(self, **kwargs): # Color functions - def set_color(self, color: ParsableManimColor = YELLOW_C, family: bool = True): + def set_color( + self, color: ParsableManimColor = YELLOW_C, family: bool = True + ) -> Mobject: """Condition is function which takes in one arguments, (x, y, z). Here it just recurses to submobjects, but in subclasses this should be further implemented based on the the inner workings @@ -2161,7 +2163,7 @@ def get_family(self, recurse=True): all_mobjects = [self] + list(it.chain(*sub_families)) return remove_list_redundancies(all_mobjects) - def family_members_with_points(self): + def family_members_with_points(self) -> Mobject: return [m for m in self.get_family() if m.get_num_points() > 0] def arrange( diff --git a/manim/mobject/text/text_mobject.py b/manim/mobject/text/text_mobject.py index 301e17fa5f..e55f12f58a 100644 --- a/manim/mobject/text/text_mobject.py +++ b/manim/mobject/text/text_mobject.py @@ -70,7 +70,7 @@ def construct(self): from manim.mobject.geometry.arc import Dot from manim.mobject.svg.svg_mobject import SVGMobject from manim.mobject.types.vectorized_mobject import VGroup, VMobject -from manim.utils.color import * +from manim.utils.color import ManimColor, ParsableManimColor, color_gradient from manim.utils.deprecation import deprecated TEXT_MOB_SCALE_FACTOR = 0.05 @@ -1222,7 +1222,7 @@ def _text2hash(self, color: ParsableManimColor): + self.font + self.slant + self.weight - + ManimColor.parse(color).to_hex().lower + + ManimColor.parse(color).to_hex().lower() ) # to differentiate from classical Pango Text settings += str(self.line_spacing) + str(self._font_size) settings += str(self.disable_ligatures) @@ -1327,7 +1327,7 @@ def _parse_color(self, col): if re.match("#[0-9a-f]{6}", col): return col else: - return ManimColor.parse(col.lower()).value + return ManimColor.parse(col).to_hex() def _extract_color_tags(self): """Used to determine which parts (if any) of the string should be formatted diff --git a/manim/mobject/types/vectorized_mobject.py b/manim/mobject/types/vectorized_mobject.py index 8293ac482f..73d55301aa 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -184,8 +184,10 @@ def generate_rgbas_array(self, color: ManimColor | list[ManimColor], opacity): one color was passed in, a second slightly light color will automatically be added for the gradient """ - colors = [c if (c is not None) else BLACK for c in tuplify(color)] - opacities = [o if (o is not None) else 0 for o in tuplify(opacity)] + colors: list[ManimColor] = [ + c if (c is not None) else BLACK for c in tuplify(color) + ] + opacities: list[float] = [o if (o is not None) else 0 for o in tuplify(opacity)] rgbas = np.array( [c.to_rgb_with_alpha(o) for c, o in zip(*make_even(colors, opacities))], ) @@ -223,8 +225,8 @@ def update_rgbas_array( def set_fill( self, + color: ParsableManimColor = None, opacity: float | None = None, - color: ParsableManimColor | None = None, family: bool = True, ): """Set the fill color and fill opacity of a :class:`VMobject`. @@ -464,7 +466,7 @@ def get_stroke_opacity(self, background=False): def get_stroke_colors(self, background=False): return [ - ManimColor(rgba[:3]) if rgba.any() else None + ManimColor.parse(rgba[:3]) if rgba.any() else None for rgba in self.get_stroke_rgbas(background) ] diff --git a/manim/utils/color.py b/manim/utils/color.py index ce5e7a2711..48a8aee224 100644 --- a/manim/utils/color.py +++ b/manim/utils/color.py @@ -3,7 +3,7 @@ from __future__ import annotations from enum import Enum -from typing import Iterable, TypeAlias, TypedDict +from typing import Iterable, TypedDict # from manim._config import logger @@ -373,7 +373,7 @@ def parse(cls, value, alpha=1.0, use_floats=True) -> ManimColor: return cls(value, alpha, use_floats) -ParsableManimColor: TypeAlias = ( +ParsableManimColor = ( ManimColor | int | str From 128b8aba218a06bd4b06ec91fc4dfd311863422e Mon Sep 17 00:00:00 2001 From: MrDiver Date: Sun, 11 Dec 2022 14:27:28 +0100 Subject: [PATCH 09/91] resolving conflicts --- manim/_config/utils.py | 1 + manim/mobject/types/vectorized_mobject.py | 2 +- manim/plugins/import_plugins.py | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/manim/_config/utils.py b/manim/_config/utils.py index fa234fe7b3..16145b6961 100644 --- a/manim/_config/utils.py +++ b/manim/_config/utils.py @@ -34,6 +34,7 @@ def import_color(): from .. import constants from ..constants import RendererType +from ..utils.color import ManimColor from ..utils.tex import TexTemplate, TexTemplateFromFile from ..utils.tex_templates import TexTemplateLibrary diff --git a/manim/mobject/types/vectorized_mobject.py b/manim/mobject/types/vectorized_mobject.py index 73d55301aa..315b368950 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -466,7 +466,7 @@ def get_stroke_opacity(self, background=False): def get_stroke_colors(self, background=False): return [ - ManimColor.parse(rgba[:3]) if rgba.any() else None + ManimColor(rgba[:3]) if rgba.any() else None for rgba in self.get_stroke_rgbas(background) ] diff --git a/manim/plugins/import_plugins.py b/manim/plugins/import_plugins.py index 8cbb7f5644..1f11accbf9 100644 --- a/manim/plugins/import_plugins.py +++ b/manim/plugins/import_plugins.py @@ -9,7 +9,7 @@ __all__ = [] -plugins_requested: list = config["plugins"] +plugins_requested: list[str] = config["plugins"] if "" in plugins_requested: plugins_requested.remove("") for plugin in pkg_resources.iter_entry_points("manim.plugins"): From 31bcdacde82585ecaf1d49d494e5d00a4d140fec Mon Sep 17 00:00:00 2001 From: MrDiver Date: Sun, 11 Dec 2022 14:33:00 +0100 Subject: [PATCH 10/91] resolving conflicts --- manim/_config/utils.py | 1 - manim/mobject/mobject.py | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/_config/utils.py b/manim/_config/utils.py index 16145b6961..fa234fe7b3 100644 --- a/manim/_config/utils.py +++ b/manim/_config/utils.py @@ -34,7 +34,6 @@ def import_color(): from .. import constants from ..constants import RendererType -from ..utils.color import ManimColor from ..utils.tex import TexTemplate, TexTemplateFromFile from ..utils.tex_templates import TexTemplateLibrary diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index fe6f391b84..ee28751e33 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -1752,6 +1752,7 @@ def set_color( if family: for submob in self.submobjects: submob.set_color(color, family=family) + print("Setting color of", self, "to", color) self.color = ManimColor.parse(color) return self From 27c0ddbb43fe945472e4154ba7798640d4844756 Mon Sep 17 00:00:00 2001 From: MrDiver Date: Sun, 11 Dec 2022 19:36:10 +0100 Subject: [PATCH 11/91] resolving conflicts --- manim/_config/utils.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/manim/_config/utils.py b/manim/_config/utils.py index fa234fe7b3..e5bdf0ebe9 100644 --- a/manim/_config/utils.py +++ b/manim/_config/utils.py @@ -25,13 +25,6 @@ import numpy as np - -def import_color(): - from manim.utils.color import ManimColor - - -import_color() - from .. import constants from ..constants import RendererType from ..utils.tex import TexTemplate, TexTemplateFromFile From 195512a2178648486464d087514e46ac545e2e1a Mon Sep 17 00:00:00 2001 From: MrDiver Date: Fri, 16 Dec 2022 21:53:05 +0100 Subject: [PATCH 12/91] changed default internal value of ManimColor to np.ndarray[float] --- .mypy.ini | 3 + manim/_config/utils.py | 2 +- manim/animation/indication.py | 2 +- manim/mobject/geometry/arc.py | 4 +- manim/mobject/geometry/polygram.py | 2 +- manim/mobject/graphing/coordinate_systems.py | 14 +- manim/mobject/mobject.py | 4 +- manim/mobject/opengl/opengl_mobject.py | 6 +- .../opengl/opengl_vectorized_mobject.py | 10 +- manim/mobject/table.py | 16 +- manim/mobject/text/text_mobject.py | 16 +- manim/mobject/three_d/three_dimensions.py | 6 +- manim/mobject/types/point_cloud_mobject.py | 2 +- manim/mobject/types/vectorized_mobject.py | 22 +- manim/mobject/vector_field.py | 2 +- manim/scene/vector_space_scene.py | 4 +- manim/utils/color.py | 365 ++++++++++-------- 17 files changed, 268 insertions(+), 212 deletions(-) diff --git a/.mypy.ini b/.mypy.ini index 591ec89451..48cad442f4 100644 --- a/.mypy.ini +++ b/.mypy.ini @@ -23,6 +23,9 @@ ignore_errors = True [mypy-manim.utils.*] ignore_errors = True +[mypy-manim.utils.color] +ignore_errors = False + [mypy-manim.animation.*] ignore_errors = True diff --git a/manim/_config/utils.py b/manim/_config/utils.py index e5bdf0ebe9..2e7ce40539 100644 --- a/manim/_config/utils.py +++ b/manim/_config/utils.py @@ -1093,7 +1093,7 @@ def format(self, val: str) -> None: doc="Frame rate in frames per second.", ) - # TODO: This was parsed before maybe add ManimColor.parse(val), but results in circular import + # TODO: This was parsed before maybe add ManimColor(val), but results in circular import background_color = property( lambda self: self._d["background_color"], lambda self, val: self._d.__setitem__("background_color", val), diff --git a/manim/animation/indication.py b/manim/animation/indication.py index 35708e5609..ca170311bb 100644 --- a/manim/animation/indication.py +++ b/manim/animation/indication.py @@ -613,7 +613,7 @@ def __init__( stroke_width=DEFAULT_STROKE_WIDTH, **kwargs ): - color = ManimColor.parse(color) + color = ManimColor(color) if shape is Rectangle: frame = SurroundingRectangle( mobject, diff --git a/manim/mobject/geometry/arc.py b/manim/mobject/geometry/arc.py index b5da5f22a7..5008fc9b3d 100644 --- a/manim/mobject/geometry/arc.py +++ b/manim/mobject/geometry/arc.py @@ -498,7 +498,7 @@ def __init__( radius=radius, start_angle=0, angle=TAU, - color=ManimColor.parse(color), + color=ManimColor(color), **kwargs, ) @@ -665,7 +665,7 @@ def __init__( radius=radius, stroke_width=stroke_width, fill_opacity=fill_opacity, - color=ManimColor.parse(color), + color=ManimColor(color), **kwargs, ) diff --git a/manim/mobject/geometry/polygram.py b/manim/mobject/geometry/polygram.py index a9701d67c1..54b0de6a83 100644 --- a/manim/mobject/geometry/polygram.py +++ b/manim/mobject/geometry/polygram.py @@ -544,7 +544,7 @@ def __init__( close_new_points: bool = True, **kwargs, ): - color = ManimColor.parse(color) + color = ManimColor(color) super().__init__(UR, UL, DL, DR, color=color, **kwargs) self.stretch_to_fit_width(width) self.stretch_to_fit_height(height) diff --git a/manim/mobject/graphing/coordinate_systems.py b/manim/mobject/graphing/coordinate_systems.py index 43f213106d..4c582ddd2c 100644 --- a/manim/mobject/graphing/coordinate_systems.py +++ b/manim/mobject/graphing/coordinate_systems.py @@ -512,7 +512,7 @@ def get_line_from_axis_to_point( if color is None: color = VMobject().color - line_config["color"] = ManimColor.parse(color) + line_config["color"] = ManimColor(color) line_config["stroke_width"] = stroke_width axis = self.get_axis(index) @@ -1090,7 +1090,7 @@ def construct(self): if dot_config is None: dot_config = {} if color: - color = ManimColor.parse(color) + color = ManimColor(color) else: color = graph.get_color() label = self.x_axis._create_label_tex(label).set_color(color) @@ -1224,9 +1224,9 @@ def construct(self): x_range = np.arange(*x_range) if isinstance(color, list): - color = [ManimColor.parse(c) for c in color] + color = [ManimColor(c) for c in color] else: - color = [ManimColor.parse(color)] + color = [ManimColor(color)] colors = color_gradient(color, len(x_range)) @@ -1473,7 +1473,7 @@ def construct(self): def deriv(x): return self.slope_of_tangent(x, graph) - return self.plot(deriv, color=ManimColor.parse(color), **kwargs) + return self.plot(deriv, color=ManimColor(color), **kwargs) def plot_antiderivative_graph( self, @@ -1776,7 +1776,7 @@ def construct(self): triangle.move_to(self.coords_to_point(x_val, 0), UP) if label is not None: t_label = self.x_axis._create_label_tex( - label, color=ManimColor.parse(label_color) + label, color=ManimColor(label_color) ) t_label.next_to(triangle, DOWN) T_label_group.add(t_label) @@ -2203,7 +2203,7 @@ def construct(self): z_values = np.zeros(x_values.shape) line_graph = VDict() - graph = VGroup(color=ManimColor.parse(line_color), **kwargs) + graph = VGroup(color=ManimColor(line_color), **kwargs) vertices = [ self.coords_to_point(x, y, z) diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index ee28751e33..15c5acf1cb 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -108,7 +108,7 @@ def __init__( self.submobjects = [] self.updaters = [] self.updating_suspended = False - self.color: ManimColor = ManimColor.parse(color) + self.color: ManimColor = ManimColor(color) self.reset_points() self.generate_points() @@ -1753,7 +1753,7 @@ def set_color( for submob in self.submobjects: submob.set_color(color, family=family) print("Setting color of", self, "to", color) - self.color = ManimColor.parse(color) + self.color = ManimColor(color) return self def set_color_by_gradient(self, *colors: Iterable[ParsableManimColor]): diff --git a/manim/mobject/opengl/opengl_mobject.py b/manim/mobject/opengl/opengl_mobject.py index 22cbcc7b68..5e39c897d5 100644 --- a/manim/mobject/opengl/opengl_mobject.py +++ b/manim/mobject/opengl/opengl_mobject.py @@ -144,7 +144,7 @@ def __init__( self.init_updaters() # self.init_event_listners() self.init_points() - self.color: ManimColor = ManimColor.parse(color) if color else None + self.color: ManimColor = ManimColor(color) if color else None self.init_colors() self.shader_indices = None @@ -1974,7 +1974,7 @@ def set_color(self, color: ParsableManimColor | None, opacity=None, recurse=True # Recurse to submobjects differently from how set_rgba_array # in case they implement set_color differently if color is not None: - self.color: ManimColor = ManimColor.parse(color) + self.color: ManimColor = ManimColor(color) if opacity is not None: self.opacity = opacity if recurse: @@ -2069,7 +2069,7 @@ def add_background_rectangle( from manim.mobject.geometry.shape_matchers import BackgroundRectangle self.background_rectangle = BackgroundRectangle( - self, color=ManimColor.parse(color), fill_opacity=opacity, **kwargs + self, color=ManimColor(color), fill_opacity=opacity, **kwargs ) self.add_to_back(self.background_rectangle) return self diff --git a/manim/mobject/opengl/opengl_vectorized_mobject.py b/manim/mobject/opengl/opengl_vectorized_mobject.py index 5c9970b167..aa90d6263d 100644 --- a/manim/mobject/opengl/opengl_vectorized_mobject.py +++ b/manim/mobject/opengl/opengl_vectorized_mobject.py @@ -140,9 +140,9 @@ def __init__( self.refresh_unit_normal() if fill_color: - self.fill_color = ManimColor.parse(fill_color) + self.fill_color = ManimColor(fill_color) if stroke_color: - self.stroke_color = ManimColor.parse(stroke_color) + self.stroke_color = ManimColor(stroke_color) self.fill_data = None self.stroke_data = None @@ -223,7 +223,7 @@ def construct(self): :meth:`~.OpenGLVMobject.set_style` """ if color: - color = ManimColor.parse(color) + color = ManimColor(color) if opacity is not None: self.fill_opacity = opacity if recurse: @@ -353,13 +353,13 @@ def fade(self, darkness=0.5, recurse=True): # Todo im not quite sure why we are doing this def get_fill_colors(self): - return [ManimColor.parse(rgb_to_hex(rgba[:3])) for rgba in self.fill_rgba] + return [ManimColor(rgb_to_hex(rgba[:3])) for rgba in self.fill_rgba] def get_fill_opacities(self): return self.fill_rgba[:, 3] def get_stroke_colors(self): - return [ManimColor.parse(rgb_to_hex(rgba[:3])) for rgba in self.stroke_rgba] + return [ManimColor(rgb_to_hex(rgba[:3])) for rgba in self.stroke_rgba] def get_stroke_opacities(self): return self.stroke_rgba[:, 3] diff --git a/manim/mobject/table.py b/manim/mobject/table.py index 1afb60dbe7..fd8fcdbf91 100644 --- a/manim/mobject/table.py +++ b/manim/mobject/table.py @@ -218,9 +218,9 @@ def __init__( self.h_buff = h_buff self.include_outer_lines = include_outer_lines self.add_background_rectangles_to_entries = add_background_rectangles_to_entries - self.entries_background_color = ManimColor.parse(entries_background_color) + self.entries_background_color = ManimColor(entries_background_color) self.include_background_rectangle = include_background_rectangle - self.background_rectangle_color = ManimColor.parse(background_rectangle_color) + self.background_rectangle_color = ManimColor(background_rectangle_color) self.element_to_mobject = element_to_mobject self.element_to_mobject_config = element_to_mobject_config self.arrange_in_grid_config = arrange_in_grid_config @@ -530,7 +530,7 @@ def construct(self): """ columns = self.get_columns() for color, column in zip(colors, columns): - column.set_color(ManimColor.parse(color)) + column.set_color(ManimColor(color)) return self def set_row_colors(self, *colors: Iterable[ParsableManimColor]) -> Table: @@ -559,7 +559,7 @@ def construct(self): """ rows = self.get_rows() for color, row in zip(colors, rows): - row.set_color(ManimColor.parse(color)) + row.set_color(ManimColor(color)) return self def get_entries( @@ -755,7 +755,7 @@ def construct(self): def add_background_to_entries(self, color: ParsableManimColor = BLACK) -> Table: """Adds a black :class:`~.BackgroundRectangle` to each entry of the table.""" for mob in self.get_entries(): - mob.add_background_rectangle(color=ManimColor.parse(color)) + mob.add_background_rectangle(color=ManimColor(color)) return self def get_cell(self, pos: Sequence[int] = (1, 1), **kwargs) -> Polygon: @@ -848,7 +848,7 @@ def construct(self): self.add(table) """ cell = self.get_cell(pos) - bg_cell = BackgroundRectangle(cell, color=ManimColor.parse(color), **kwargs) + bg_cell = BackgroundRectangle(cell, color=ManimColor(color), **kwargs) return bg_cell def add_highlighted_cell( @@ -882,9 +882,7 @@ def construct(self): table.add_highlighted_cell((2,2), color=GREEN) self.add(table) """ - bg_cell = self.get_highlighted_cell( - pos, color=ManimColor.parse(color), **kwargs - ) + bg_cell = self.get_highlighted_cell(pos, color=ManimColor(color), **kwargs) self.add_to_back(bg_cell) entry = self.get_entries(pos) entry.background_rectangle = bg_cell diff --git a/manim/mobject/text/text_mobject.py b/manim/mobject/text/text_mobject.py index e55f12f58a..45a7cbaae7 100644 --- a/manim/mobject/text/text_mobject.py +++ b/manim/mobject/text/text_mobject.py @@ -470,7 +470,7 @@ def __init__( else: self.line_spacing = self._font_size + self._font_size * self.line_spacing - color: ManimColor = ManimColor.parse(color) if color else VMobject().color + color: ManimColor = ManimColor(color) if color else VMobject().color file_name = self._text2svg(color) PangoUtils.remove_last_M(file_name) super().__init__( @@ -597,7 +597,7 @@ def _text2hash(self, color: ParsableManimColor): + self.font + self.slant + self.weight - + ManimColor.parse(color).to_hex().lower() + + ManimColor(color).to_hex().lower() ) # to differentiate Text and CairoText settings += str(self.t2f) + str(self.t2s) + str(self.t2w) + str(self.t2c) settings += str(self.line_spacing) + str(self._font_size) @@ -664,7 +664,7 @@ def _get_settings_from_gradient( for word, gradient in self.t2g.items(): if isinstance(gradient, str) or len(gradient) == 1: color = gradient if isinstance(gradient, str) else gradient[0] - gradient = [ManimColor.parse(color)] + gradient = [ManimColor(color)] colors = ( color_gradient(gradient, len(word)) if len(gradient) != 1 @@ -686,7 +686,7 @@ def _text2settings(self, color: ParsableManimColor): ] # setting_args requires values to be strings - color = ManimColor.parse() + color = ManimColor(color) default_args = { arg: getattr(self, arg) if arg != "color" else color.to_hex() for _, arg in t2xs @@ -1137,7 +1137,7 @@ def __init__( else: self.line_spacing = self._font_size + self._font_size * self.line_spacing - color = ManimColor.parse(color) if color else VMobject().color + color = ManimColor(color) if color else VMobject().color file_name = self._text2svg(color) PangoUtils.remove_last_M(file_name) @@ -1222,7 +1222,7 @@ def _text2hash(self, color: ParsableManimColor): + self.font + self.slant + self.weight - + ManimColor.parse(color).to_hex().lower() + + ManimColor(color).to_hex().lower() ) # to differentiate from classical Pango Text settings += str(self.line_spacing) + str(self._font_size) settings += str(self.disable_ligatures) @@ -1234,7 +1234,7 @@ def _text2hash(self, color: ParsableManimColor): def _text2svg(self, color: ParsableManimColor | None): """Convert the text to SVG using Pango.""" - color = ManimColor.parse(color) + color = ManimColor(color) size = self._font_size line_spacing = self.line_spacing size /= TEXT2SVG_ADJUSTMENT_FACTOR @@ -1327,7 +1327,7 @@ def _parse_color(self, col): if re.match("#[0-9a-f]{6}", col): return col else: - return ManimColor.parse(col).to_hex() + return ManimColor(col).to_hex() def _extract_color_tags(self): """Used to determine which parts (if any) of the string should be formatted diff --git a/manim/mobject/three_d/three_dimensions.py b/manim/mobject/three_d/three_dimensions.py index c9fe457adf..677c1ab19b 100644 --- a/manim/mobject/three_d/three_dimensions.py +++ b/manim/mobject/three_d/three_dimensions.py @@ -113,12 +113,12 @@ def __init__( super().__init__(**kwargs) self.resolution = resolution self.surface_piece_config = surface_piece_config - self.fill_color: ManimColor = ManimColor.parse(fill_color) + self.fill_color: ManimColor = ManimColor(fill_color) self.fill_opacity = fill_opacity self.checkerboard_colors: list[ManimColor] = [ - ManimColor.parse(x) for x in checkerboard_colors + ManimColor(x) for x in checkerboard_colors ] - self.stroke_color: ManimColor = ManimColor.parse(stroke_color) + self.stroke_color: ManimColor = ManimColor(stroke_color) self.stroke_width = stroke_width self.should_make_jagged = should_make_jagged self.pre_function_handle_to_anchor_scale_factor = ( diff --git a/manim/mobject/types/point_cloud_mobject.py b/manim/mobject/types/point_cloud_mobject.py index e04b889225..50cc363795 100644 --- a/manim/mobject/types/point_cloud_mobject.py +++ b/manim/mobject/types/point_cloud_mobject.py @@ -76,7 +76,7 @@ def add_points(self, points, rgbas=None, color=None, alpha=1): num_new_points = len(points) self.points = np.append(self.points, points, axis=0) if rgbas is None: - color = ManimColor.parse(color) if color else self.color + color = ManimColor(color) if color else self.color rgbas = np.repeat([color_to_rgba(color, alpha)], num_new_points, axis=0) elif len(rgbas) != len(points): raise ValueError("points and rgbas must have same length") diff --git a/manim/mobject/types/vectorized_mobject.py b/manim/mobject/types/vectorized_mobject.py index 315b368950..94eb5b89dd 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -105,7 +105,7 @@ def __init__( self.stroke_opacity = stroke_opacity self.stroke_width = stroke_width if background_stroke_color is not None: - self.background_stroke_color: ManimColor = ManimColor.parse( + self.background_stroke_color: ManimColor = ManimColor( background_stroke_color ) self.background_stroke_opacity = background_stroke_opacity @@ -129,9 +129,9 @@ def __init__( # TODO: Maybe that's a little weird to do after all ? Having a default color may help if fill_color: - self.fill_color: ManimColor = ManimColor.parse(fill_color) + self.fill_color: ManimColor = ManimColor(fill_color) if stroke_color: - self.stroke_color: ManimColor = ManimColor.parse(stroke_color) + self.stroke_color: ManimColor = ManimColor(stroke_color) # OpenGL compatibility @property @@ -189,7 +189,7 @@ def generate_rgbas_array(self, color: ManimColor | list[ManimColor], opacity): ] opacities: list[float] = [o if (o is not None) else 0 for o in tuplify(opacity)] rgbas = np.array( - [c.to_rgb_with_alpha(o) for c, o in zip(*make_even(colors, opacities))], + [c.to_rgba_with_alpha(0) for c, o in zip(*make_even(colors, opacities))], ) sheen_factor = self.get_sheen_factor() @@ -225,7 +225,7 @@ def update_rgbas_array( def set_fill( self, - color: ParsableManimColor = None, + color: ParsableManimColor | None = None, opacity: float | None = None, family: bool = True, ): @@ -297,7 +297,7 @@ def set_stroke( if opacity is not None: setattr(self, opacity_name, opacity) if color is not None and background: - self.background_stroke_color = ManimColor.parse(color) + self.background_stroke_color = ManimColor(color) return self def set_background_stroke(self, **kwargs): @@ -307,9 +307,9 @@ def set_background_stroke(self, **kwargs): def set_style( self, - fill_color: ParsableManimColor = None, - fill_opacity=None, - stroke_color: ParsableManimColor = None, + fill_color: ParsableManimColor | None = None, + fill_opacity: float | None = None, + stroke_color: ParsableManimColor | None = None, stroke_width=None, stroke_opacity=None, background_stroke_color: ParsableManimColor = None, @@ -383,7 +383,7 @@ def match_style(self, vmobject, family=True): return self def set_color(self, color: ParsableManimColor, family=True): - color = ManimColor.parse(color) + color = ManimColor(color) self.set_fill(color, family=family) self.set_stroke(color, family=family) return self @@ -430,7 +430,7 @@ def get_fill_opacity(self): # TODO: Does this just do a copy? def get_fill_colors(self): return [ - ManimColor.parse(rgba[:3]) if rgba.any() else None + ManimColor(rgba[:3]) if rgba.any() else None for rgba in self.get_fill_rgbas() ] diff --git a/manim/mobject/vector_field.py b/manim/mobject/vector_field.py index 0bb5f3a39a..bcb2aa71c9 100644 --- a/manim/mobject/vector_field.py +++ b/manim/mobject/vector_field.py @@ -115,7 +115,7 @@ def pos_to_rgb(pos: np.ndarray) -> tuple[float, float, float, float]: self.pos_to_color = lambda pos: rgb_to_color(self.pos_to_rgb(pos)) else: self.single_color = True - self.color = ManimColor.parse(color) + self.color = ManimColor(color) self.submob_movement_updater = None @staticmethod diff --git a/manim/scene/vector_space_scene.py b/manim/scene/vector_space_scene.py index 7a4052a7cd..6f84f29256 100644 --- a/manim/scene/vector_space_scene.py +++ b/manim/scene/vector_space_scene.py @@ -602,8 +602,8 @@ def __init__( self.show_coordinates = show_coordinates self.show_basis_vectors = show_basis_vectors self.basis_vector_stroke_width = basis_vector_stroke_width - self.i_hat_color = ManimColor.parse(i_hat_color) - self.j_hat_color = ManimColor.parse(j_hat_color) + self.i_hat_color = ManimColor(i_hat_color) + self.j_hat_color = ManimColor(j_hat_color) self.leave_ghost_vectors = leave_ghost_vectors self.background_plane_kwargs = { "color": GREY, diff --git a/manim/utils/color.py b/manim/utils/color.py index 48a8aee224..def2c0abbc 100644 --- a/manim/utils/color.py +++ b/manim/utils/color.py @@ -2,8 +2,9 @@ from __future__ import annotations -from enum import Enum -from typing import Iterable, TypedDict +from typing import Any, Sequence + +from typing_extensions import Annotated, Literal, TypeAlias # from manim._config import logger @@ -179,16 +180,27 @@ def named_lines_group(length, colors, names, text_colors, align_to_block): """ +ManimColorDType: TypeAlias = np.float32 + +RGB_Array_Float: TypeAlias = np.ndarray[Literal[3], np.dtype[np.float32]] +RGB_Tuple_Float: TypeAlias = tuple[float, float, float] + +RGB_Array_Int: TypeAlias = np.ndarray[Literal[3], np.dtype[np.int32]] +RGB_Tuple_Int: TypeAlias = tuple[int, int, int] + +RGBA_Array_Float: TypeAlias = np.ndarray[Literal[4], np.dtype[np.float32]] +RGBA_Tuple_Float: TypeAlias = tuple[float, float, float, float] + +RGBA_Array_Int: TypeAlias = np.ndarray[Literal[4], np.dtype[np.int32]] +RGBA_Tuple_Int: TypeAlias = tuple[int, int, int, int] + +ManimColorInternal: TypeAlias = np.ndarray[Literal[4], np.dtype[ManimColorDType]] + class ManimColor: def __init__( self, - value: str - | int - | list[int, int, int] - | list[int, int, int, int] - | list[float, float, float] - | list[float, float, float, float], + value: ParsableManimColor, alpha: float = 1.0, use_floats: bool = True, ) -> None: @@ -196,131 +208,58 @@ def __init__( # logger.warning( # "ManimColor was passed another ManimColor. This is probably not what you want. Created a copy of the passed ManimColor instead." # ) - self.value = value.value + self._internal_value = value._internal_value elif isinstance(value, int): - self.value: int = value << 8 | int(alpha * 255) + self._internal_value = ManimColor.internal_from_integer(value, alpha) elif isinstance(value, str): try: - self.value: int = ManimColor.int_from_hex(value, alpha) + self._internal_value = ManimColor.internal_from_hex_string(value, alpha) except ValueError: - self.value: int = ManimColor.int_from_str(value) + self._internal_value = ManimColor.internal_from_string(value) elif isinstance(value, (list, tuple, np.ndarray)): length = len(value) - if use_floats: if length == 3: - self.value: int = ManimColor.int_from_rgb(value, alpha) + self._internal_value = ManimColor.internal_from_rgb(value, alpha) # type: ignore elif length == 4: - self.value: int = ManimColor.int_from_rgba(value) + self._internal_value = ManimColor.internal_from_rgba(value) # type: ignore else: if length == 3: - self.value: int = ManimColor.int_from_int_rgb(value, alpha) + self._internal_value = ManimColor.internal_from_int_rgb( + value, alpha # type: ignore + ) elif length == 4: - self.value: int = ManimColor.int_from_int_rgba(value) + self._internal_value = ManimColor.internal_from_int_rgba(value) # type: ignore else: # logger.error(f"Invalid color value: {value}") raise TypeError( f"ManimColor only accepts int, str, list[int, int, int], list[int, int, int, int], list[float, float, float], list[float, float, float, float], not {type(value)}" ) - def __repr__(self) -> str: - return f"{self.__class__.__name__}({self.to_hex()})" - - def __str__(self) -> str: - return f"{self.__class__.__name__}({self.to_hex()})" - - def __eq__(self, other: ManimColor) -> bool: - return self.value == other.value - - def __add__(self, other: ManimColor) -> ManimColor: - return ManimColor(self.value + other.value) - - def __sub__(self, other: ManimColor) -> ManimColor: - return ManimColor(self.value - other.value) - - def __mul__(self, other: ManimColor) -> ManimColor: - return ManimColor(self.value * other.value) - - def __truediv__(self, other: ManimColor) -> ManimColor: - return ManimColor(self.value / other.value) - - def __floordiv__(self, other: ManimColor) -> ManimColor: - return ManimColor(self.value // other.value) - - def __mod__(self, other: ManimColor) -> ManimColor: - return ManimColor(self.value % other.value) - - def __pow__(self, other: ManimColor) -> ManimColor: - return ManimColor(self.value**other.value) - - def __and__(self, other: ManimColor) -> ManimColor: - return ManimColor(self.value & other.value) - - def __or__(self, other: ManimColor) -> ManimColor: - return ManimColor(self.value | other.value) - - def __xor__(self, other: ManimColor) -> ManimColor: - return ManimColor(self.value ^ other.value) - - def to_rgb(self) -> np.ndarray: - return self.to_int_rgb() / 255 - - def to_int_rgb(self) -> list[int, int, int]: - return np.array( - [ - (self.value >> 24) & 0xFF, - (self.value >> 16) & 0xFF, - (self.value >> 8) & 0xFF, - ] - ) - - def to_rgba(self) -> np.ndarray: - return self.to_int_rgba() / 255 - - def to_int_rgba(self) -> list[int, int, int, int]: - return np.array( - [ - (self.value >> 24) & 0xFF, - (self.value >> 16) & 0xFF, - (self.value >> 8) & 0xFF, - self.value & 0xFF, - ] - ) - - def to_rgb_with_alpha(self, alpha: float) -> list[float, float, float, float]: - return self.to_int_rgb_with_alpha(alpha) / 255 - - def to_int_rgb_with_alpha(self, alpha: float) -> list[int, int, int, int]: - return np.array( - [ - (self.value >> 24) & 0xFF, - (self.value >> 16) & 0xFF, - (self.value >> 8) & 0xFF, - int(alpha * 255), - ] - ) - - def to_hex(self) -> str: - return f"#{self.value:08X}" - - @staticmethod - def int_from_int_rgb(rgb: list[int, int, int], alpha: float = 1.0) -> ManimColor: - return rgb[0] << 24 | rgb[1] << 16 | rgb[2] << 8 | int(alpha * 255) + @property + def _internal_value(self) -> ManimColorInternal: + return self.__value - @staticmethod - def int_from_rgb(rgb: list[float, float, float], alpha: float = 1.0) -> ManimColor: - return ManimColor.int_from_int_rgb((np.asarray(rgb) * 255).astype(int), alpha) - - @staticmethod - def int_from_int_rgba(rgba: list[int, int, int, int]) -> ManimColor: - return rgba[0] << 24 | rgba[1] << 16 | rgba[2] << 8 | rgba[3] + @_internal_value.setter + def _internal_value(self, value: ManimColorInternal) -> None: + if not isinstance(value, np.ndarray): + raise TypeError("value must be a numpy array") + self.__value: ManimColorInternal = value @staticmethod - def int_from_rgba(rgba: list[float, float, float, float]) -> ManimColor: - return ManimColor.from_int_rgba((np.asarray(rgba) * 255).astype(int)) + def internal_from_integer(value: int, alpha: float) -> ManimColorInternal: + return np.asarray( + ( + ((value >> 24) & 0xFF) / 255, + ((value >> 16) & 0xFF) / 255, + ((value >> 8) & 0xFF) / 255, + alpha, + ), + dtype=ManimColorDType, + ) @staticmethod - def int_from_hex(hex: str, alpha: float) -> ManimColor: + def internal_from_hex_string(hex: str, alpha: float) -> ManimColorInternal: if hex.startswith("#"): hex = hex[1:] elif hex.startswith("0x"): @@ -329,33 +268,106 @@ def int_from_hex(hex: str, alpha: float) -> ManimColor: raise ValueError(f"Invalid hex value: {hex}") if len(hex) == 6: hex += "00" - return int(hex, 16) | int(alpha * 255) + tmp = int(hex, 16) + return np.asarray( + ( + ((tmp >> 24) & 0xFF) / 255, + ((tmp >> 16) & 0xFF) / 255, + ((tmp >> 8) & 0xFF) / 255, + alpha, + ), + dtype=ManimColorDType, + ) + + @staticmethod + def internal_from_int_rgb( + rgb: RGB_Tuple_Int, alpha: float = 1.0 + ) -> ManimColorInternal: + value: np.ndarray = np.asarray(rgb, dtype=ManimColorDType).copy() / 255 + value.resize(4, refcheck=False) + value[3] = alpha + return value + + @staticmethod + def internal_from_rgb( + rgb: RGB_Tuple_Float, alpha: float = 1.0 + ) -> ManimColorInternal: + value: np.ndarray = np.asarray(rgb, dtype=ManimColorDType).copy() + value.resize(4, refcheck=False) + value[3] = alpha + return value + + @staticmethod + def internal_from_int_rgba(rgba: RGBA_Tuple_Int) -> ManimColorInternal: + return np.asarray(rgba, dtype=ManimColorDType) / 255 + + @staticmethod + def internal_from_rgba(rgba: RGBA_Tuple_Float) -> ManimColorInternal: + return np.asarray(rgba, dtype=ManimColorDType) # TODO: This may be a bad idea but i don't know what else will be better without writing an endless list of colors @staticmethod - def int_from_str(name: str): + def internal_from_string(name: str) -> ManimColorInternal: if name.upper() in globals(): return globals()[name].value else: raise ValueError(f"Color {name} not found") + def to_integer(self) -> int: + return int.from_bytes( + (self._internal_value[:3] * 255).astype(int).tobytes(), "big" + ) + + def to_rgb(self) -> RGB_Array_Float: + return self._internal_value[:3] + + def to_int_rgb(self) -> RGB_Array_Int: + return (self._internal_value[:3] * 255).astype(int) + + def to_rgba(self) -> RGBA_Array_Float: + return self._internal_value + + def to_int_rgba(self) -> RGBA_Array_Int: + return (self._internal_value * 255).astype(int) + + def to_rgba_with_alpha(self, alpha: float) -> RGBA_Array_Float: + return np.fromiter((*self._internal_value[:3], alpha), dtype=ManimColorDType) + + # @deprecated("Use to_rgb_with_alpha instead.") + def to_int_rgba_with_alpha(self, alpha: float) -> RGBA_Array_Int: + tmp = self._internal_value[:3] * 255 + tmp[3] = alpha * 255 + return tmp.astype(int) + + def to_hex(self) -> str: + return f"#{self._internal_value:08X}" + def invert(self, with_alpha=False) -> ManimColor: - return ManimColor(0xFFFFFFFF - (self.value & 0xFFFFFFFF)) + return ManimColor(1.0 - self._internal_value, with_alpha, use_floats=True) + + def interpolate(self, other: ManimColor, alpha: float) -> ManimColor: + return ManimColor( + self._internal_value * (1 - alpha) + other._internal_value * alpha + ) @classmethod - def from_rgb(cls, rgb: list[float, float, float], alpha: float = 1.0) -> ManimColor: + def from_rgb( + cls, rgb: RGB_Array_Float | RGB_Tuple_Float, alpha: float = 1.0 + ) -> ManimColor: return cls(rgb, alpha, use_floats=True) @classmethod - def from_int_rgb(cls, rgb: list[int, int, int], alpha: float = 1.0) -> ManimColor: + def from_int_rgb( + cls, rgb: RGB_Array_Int | RGB_Tuple_Int, alpha: float = 1.0 + ) -> ManimColor: return cls(rgb, alpha) @classmethod - def from_rgba(cls, rgba: list[float, float, float, float]) -> ManimColor: + def from_rgba(cls, rgba: RGBA_Array_Float | RGBA_Tuple_Float) -> ManimColor: return cls(rgba, use_floats=True) @classmethod - def from_int_rgba(cls, rgba: list[int, int, int, int]) -> ManimColor: + def from_int_rgba(cls, rgba: RGBA_Array_Int | RGBA_Tuple_Int) -> ManimColor: return cls(rgba) @classmethod @@ -366,22 +378,64 @@ def from_hex(cls, hex: str, alpha: float = 1.0) -> ManimColor: def gradient(colors: list[ManimColor], length: int): ... - @classmethod - def parse(cls, value, alpha=1.0, use_floats=True) -> ManimColor: - if isinstance(value, ManimColor): - return value - return cls(value, alpha, use_floats) + def __repr__(self) -> str: + return f"{self.__class__.__name__}({self.to_hex()})" + def __str__(self) -> str: + return f"{self.__class__.__name__}({self.to_hex()})" + + def __eq__(self, other: object) -> bool: + if not isinstance(other, ManimColor): + raise TypeError( + f"Cannot compare {self.__class__.__name__} with {other.__class__.__name__}" + ) + return self._internal_value == other._internal_value -ParsableManimColor = ( + def __add__(self, other: ManimColor) -> ManimColor: + return ManimColor(self._internal_value + other._internal_value) + + def __sub__(self, other: ManimColor) -> ManimColor: + return ManimColor(self._internal_value - other._internal_value) + + def __mul__(self, other: ManimColor) -> ManimColor: + return ManimColor(self._internal_value * other._internal_value) + + def __truediv__(self, other: ManimColor) -> ManimColor: + return ManimColor(self._internal_value / other._internal_value) + + def __floordiv__(self, other: ManimColor) -> ManimColor: + return ManimColor(self._internal_value // other._internal_value) + + def __mod__(self, other: ManimColor) -> ManimColor: + return ManimColor(self._internal_value % other._internal_value) + + def __pow__(self, other: ManimColor) -> ManimColor: + return ManimColor(self._internal_value**other._internal_value) + + def __and__(self, other: ManimColor) -> ManimColor: + return ManimColor(self.to_integer() & other.to_integer()) + + def __or__(self, other: ManimColor) -> ManimColor: + return ManimColor(self.to_integer() | other.to_integer()) + + def __xor__(self, other: ManimColor) -> ManimColor: + return ManimColor(self.to_integer() ^ other.to_integer()) + + +ParsableManimColor: TypeAlias = ( ManimColor | int | str - | list[float, float, float] - | list[float, float, float, float] - | list[int, int, int] - | list[int, int, int, int] + | RGB_Tuple_Int + | RGB_Tuple_Float + | RGBA_Tuple_Int + | RGBA_Tuple_Float + | RGB_Array_Int + | RGB_Array_Float + | RGBA_Array_Int + | RGBA_Array_Float ) + __all__ += ["ManimColor", "ParsableManimColor"] WHITE: ManimColor = ManimColor("#FFFFFF") @@ -551,55 +605,57 @@ def parse(cls, value, alpha=1.0, use_floats=True) -> ManimColor: ] -def color_to_rgb(color: ParsableManimColor) -> np.ndarray: +def color_to_rgb(color: ParsableManimColor) -> RGB_Array_Float: if isinstance(color, ManimColor): return color.to_rgb() else: return ManimColor(color).to_rgb() -def color_to_rgba(color: ParsableManimColor, alpha: float = 1) -> np.ndarray: +def color_to_rgba(color: ParsableManimColor, alpha: float = 1) -> RGBA_Array_Float: return np.array([*color_to_rgb(color), alpha]) -def rgb_to_color(rgb: Iterable[float]) -> ManimColor: +def rgb_to_color(rgb: RGB_Array_Float | RGB_Tuple_Float) -> ManimColor: return ManimColor.from_rgb(rgb) -def rgba_to_color(rgba: Iterable[float]) -> ManimColor: - return rgb_to_color(rgba[:3], alpha=rgba[3]) +def rgba_to_color(rgba: RGBA_Array_Float | RGBA_Tuple_Float) -> ManimColor: + return ManimColor.from_rgba(rgba) -def rgb_to_hex(rgb: Iterable[float]) -> str: - return "#" + "".join("%02x" % round(255 * x) for x in rgb) +def rgb_to_hex(rgb: RGB_Array_Float | RGB_Tuple_Float) -> str: + return ManimColor.from_rgb(rgb).to_hex() -def hex_to_rgb(hex_code: str) -> np.ndarray: - hex_part = hex_code[1:] - if len(hex_part) == 3: - hex_part = "".join([2 * c for c in hex_part]) - return np.array([int(hex_part[i : i + 2], 16) / 255 for i in range(0, 6, 2)]) +def hex_to_rgb(hex_code: str) -> RGB_Array_Float: + return ManimColor(hex_code).to_rgb() def invert_color(color: ManimColor) -> ManimColor: - return rgb_to_color(1.0 - color_to_rgb(color)) + return color.invert() + +def color_to_int_rgb(color: ManimColor) -> RGB_Array_Int: + return color.to_int_rgb() -def color_to_int_rgb(color: ManimColor) -> np.ndarray: - return (255 * color_to_rgb(color)).astype("uint8") +def color_to_int_rgba(color: ManimColor, alpha: float = 1.0) -> RGBA_Array_Int: + return color.to_int_rgba_with_alpha(alpha) -def color_to_int_rgba(color: ManimColor, opacity: float = 1.0) -> np.ndarray: - alpha_multiplier = np.vectorize(lambda x: int(x * opacity)) - return alpha_multiplier(np.append(color_to_int_rgb(color), 255)) + +def interpolate_arrays( + arr1: np.ndarray[Any, Any], arr2: np.ndarray[Any, Any], alpha: float +) -> np.ndarray: + return (1 - alpha) * arr1 + alpha * arr2 def color_gradient( - reference_colors: Iterable[ManimColor], + reference_colors: Sequence[ParsableManimColor], length_of_output: int, -) -> list[ManimColor]: +) -> list[ManimColor] | ManimColor: if length_of_output == 0: - return reference_colors[0] + return ManimColor(reference_colors[0]) rgbs = list(map(color_to_rgb, reference_colors)) alphas = np.linspace(0, (len(rgbs) - 1), length_of_output) floors = alphas.astype("int") @@ -608,7 +664,7 @@ def color_gradient( alphas_mod1[-1] = 1 floors[-1] = len(rgbs) - 2 return [ - rgb_to_color(interpolate(rgbs[i], rgbs[i + 1], alpha)) + rgb_to_color((rgbs[i] * (1 - alpha)) + (rgbs[i + 1] * alpha)) for i, alpha in zip(floors, alphas_mod1) ] @@ -616,8 +672,7 @@ def color_gradient( def interpolate_color( color1: ManimColor, color2: ManimColor, alpha: float ) -> ManimColor: - rgb = interpolate(color_to_rgb(color1), color_to_rgb(color2), alpha) - return rgb_to_color(rgb) + return color1.interpolate(color2, alpha) def average_color(*colors: ManimColor) -> ManimColor: @@ -629,15 +684,15 @@ def average_color(*colors: ManimColor) -> ManimColor: def random_bright_color() -> ManimColor: color = random_color() curr_rgb = color_to_rgb(color) - new_rgb = interpolate(curr_rgb, np.ones(len(curr_rgb)), 0.5) + new_rgb = interpolate_arrays(curr_rgb, np.ones(len(curr_rgb)), 0.5) return ManimColor(new_rgb) -_colors = [x for x in globals().values() if isinstance(x, ManimColor)] +_colors: list[ManimColor] = [x for x in globals().values() if isinstance(x, ManimColor)] def random_color() -> ManimColor: - return random.choice([c.value for c in list(_colors)]) + return random.choice(_colors) def get_shaded_rgb( @@ -645,7 +700,7 @@ def get_shaded_rgb( point: np.ndarray, unit_normal_vect: np.ndarray, light_source: np.ndarray, -) -> np.ndarray: +) -> RGBA_Array_Float: to_sun = normalize(light_source - point) factor = 0.5 * np.dot(unit_normal_vect, to_sun) ** 3 if factor < 0: From 9823616f4d0a5bd70e1701e9df3374fb7b39668b Mon Sep 17 00:00:00 2001 From: MrDiver Date: Sat, 17 Dec 2022 00:05:33 +0100 Subject: [PATCH 13/91] starting to fix tests --- manim/mobject/geometry/shape_matchers.py | 6 ++-- manim/mobject/types/vectorized_mobject.py | 2 +- manim/utils/color.py | 38 +++++++++++------------ tests/module/utils/test_manim_color.py | 22 +++++++++++++ 4 files changed, 45 insertions(+), 23 deletions(-) create mode 100644 tests/module/utils/test_manim_color.py diff --git a/manim/mobject/geometry/shape_matchers.py b/manim/mobject/geometry/shape_matchers.py index 929e059305..a3981d52c7 100644 --- a/manim/mobject/geometry/shape_matchers.py +++ b/manim/mobject/geometry/shape_matchers.py @@ -10,7 +10,7 @@ from manim.mobject.geometry.polygram import RoundedRectangle from manim.mobject.mobject import Mobject from manim.mobject.types.vectorized_mobject import VGroup -from manim.utils.color import BLACK, RED, YELLOW +from manim.utils.color import BLACK, RED, YELLOW, ManimColor, ParsableManimColor class SurroundingRectangle(RoundedRectangle): @@ -79,7 +79,7 @@ def construct(self): def __init__( self, mobject, - color: Colors | None = None, + color: ParsableManimColor | None = None, stroke_width: float = 0, stroke_opacity: float = 0, fill_opacity: float = 0.75, @@ -121,7 +121,7 @@ def set_style(self, fill_opacity, **kwargs): return self def get_fill_color(self): - return Color(self.color) + return self.color class Cross(VGroup): diff --git a/manim/mobject/types/vectorized_mobject.py b/manim/mobject/types/vectorized_mobject.py index 94eb5b89dd..d703d21eff 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -189,7 +189,7 @@ def generate_rgbas_array(self, color: ManimColor | list[ManimColor], opacity): ] opacities: list[float] = [o if (o is not None) else 0 for o in tuplify(opacity)] rgbas = np.array( - [c.to_rgba_with_alpha(0) for c, o in zip(*make_even(colors, opacities))], + [c.to_rgba_with_alpha(o) for c, o in zip(*make_even(colors, opacities))], ) sheen_factor = self.get_sheen_factor() diff --git a/manim/utils/color.py b/manim/utils/color.py index def2c0abbc..a263cb6b7b 100644 --- a/manim/utils/color.py +++ b/manim/utils/color.py @@ -250,9 +250,9 @@ def _internal_value(self, value: ManimColorInternal) -> None: def internal_from_integer(value: int, alpha: float) -> ManimColorInternal: return np.asarray( ( - ((value >> 24) & 0xFF) / 255, ((value >> 16) & 0xFF) / 255, ((value >> 8) & 0xFF) / 255, + ((value >> 0) & 0xFF) / 255, alpha, ), dtype=ManimColorDType, @@ -309,7 +309,7 @@ def internal_from_rgba(rgba: RGBA_Tuple_Float) -> ManimColorInternal: @staticmethod def internal_from_string(name: str) -> ManimColorInternal: if name.upper() in globals(): - return globals()[name].value + return globals()[name]._internal_value else: raise ValueError(f"Color {name} not found") @@ -335,12 +335,15 @@ def to_rgba_with_alpha(self, alpha: float) -> RGBA_Array_Float: # @deprecated("Use to_rgb_with_alpha instead.") def to_int_rgba_with_alpha(self, alpha: float) -> RGBA_Array_Int: - tmp = self._internal_value[:3] * 255 + tmp = self._internal_value * 255 tmp[3] = alpha * 255 return tmp.astype(int) - def to_hex(self) -> str: - return f"#{self._internal_value:08X}" + def to_hex(self, with_alpha: bool = False) -> str: + tmp = f"#{int(self._internal_value[0]*255):02X}{int(self._internal_value[1]*255):02X}{int(self._internal_value[2]*255):02X}" + if with_alpha: + tmp += f"{int(self._internal_value[3]*255):02X}" + return tmp def invert(self, with_alpha=False) -> ManimColor: return ManimColor(1.0 - self._internal_value, with_alpha, use_floats=True) @@ -436,7 +439,7 @@ def __xor__(self, other: ManimColor) -> ManimColor: | RGBA_Array_Float ) -__all__ += ["ManimColor", "ParsableManimColor"] +__all__ += ["ManimColor", "ParsableManimColor", "ManimColorDType"] WHITE: ManimColor = ManimColor("#FFFFFF") GRAY_A: ManimColor = ManimColor("#DDDDDD") @@ -606,14 +609,19 @@ def __xor__(self, other: ManimColor) -> ManimColor: def color_to_rgb(color: ParsableManimColor) -> RGB_Array_Float: - if isinstance(color, ManimColor): - return color.to_rgb() - else: - return ManimColor(color).to_rgb() + return ManimColor(color).to_rgb() def color_to_rgba(color: ParsableManimColor, alpha: float = 1) -> RGBA_Array_Float: - return np.array([*color_to_rgb(color), alpha]) + return ManimColor(color).to_rgba_with_alpha(alpha) + + +def color_to_int_rgb(color: ManimColor) -> RGB_Array_Int: + return ManimColor(color).to_int_rgb() + + +def color_to_int_rgba(color: ManimColor, alpha: float = 1.0) -> RGBA_Array_Int: + return ManimColor(color).to_int_rgba_with_alpha(alpha) def rgb_to_color(rgb: RGB_Array_Float | RGB_Tuple_Float) -> ManimColor: @@ -636,14 +644,6 @@ def invert_color(color: ManimColor) -> ManimColor: return color.invert() -def color_to_int_rgb(color: ManimColor) -> RGB_Array_Int: - return color.to_int_rgb() - - -def color_to_int_rgba(color: ManimColor, alpha: float = 1.0) -> RGBA_Array_Int: - return color.to_int_rgba_with_alpha(alpha) - - def interpolate_arrays( arr1: np.ndarray[Any, Any], arr2: np.ndarray[Any, Any], alpha: float ) -> np.ndarray: diff --git a/tests/module/utils/test_manim_color.py b/tests/module/utils/test_manim_color.py new file mode 100644 index 0000000000..1ae07c3b8b --- /dev/null +++ b/tests/module/utils/test_manim_color.py @@ -0,0 +1,22 @@ +from __future__ import annotations + +import numpy as np +import numpy.testing as nt + +from manim.utils.color import BLACK, WHITE, ManimColor, ManimColorDType + + +def test_init_with_int() -> None: + color = ManimColor(0x123456, 0.5) + nt.assert_array_equal( + color._internal_value, + np.array([0x12, 0x34, 0x56, 0.5 * 255], dtype=ManimColorDType) / 255, + ) + color = BLACK + nt.assert_array_equal( + color._internal_value, np.array([0, 0, 0, 1.0], dtype=ManimColorDType) + ) + color = WHITE + nt.assert_array_equal( + color._internal_value, np.array([1.0, 1.0, 1.0, 1.0], dtype=ManimColorDType) + ) From e6386435749b7ce5be878a59ea9a2701cdf0dfc4 Mon Sep 17 00:00:00 2001 From: MrDiver Date: Sat, 17 Dec 2022 02:39:43 +0100 Subject: [PATCH 14/91] fixed more tests and changed precision of manim color --- manim/camera/camera.py | 15 ++++++++++---- manim/mobject/types/vectorized_mobject.py | 11 +++++++---- manim/utils/color.py | 24 +++++++++++++++++------ 3 files changed, 36 insertions(+), 14 deletions(-) diff --git a/manim/camera/camera.py b/manim/camera/camera.py index 84e7060e38..2f09a5fd67 100644 --- a/manim/camera/camera.py +++ b/manim/camera/camera.py @@ -24,7 +24,7 @@ from ..mobject.types.image_mobject import AbstractImageMobject from ..mobject.types.point_cloud_mobject import PMobject from ..mobject.types.vectorized_mobject import VMobject -from ..utils.color import color_to_int_rgba +from ..utils.color import BLACK, ManimColor, ParsableManimColor, color_to_int_rgba from ..utils.family import extract_mobject_family_members from ..utils.images import get_full_raster_image_path from ..utils.iterables import list_difference_update @@ -75,6 +75,8 @@ def __init__( frame_height: float | None = None, frame_width: float | None = None, frame_rate: float | None = None, + background_color: ParsableManimColor | None = None, + background_opacity: float | None = None, **kwargs, ): self.background_image = background_image @@ -106,9 +108,14 @@ def __init__( frame_rate = config["frame_rate"] self.frame_rate = frame_rate - # TODO: change this to not use kwargs.get - for attr in ["background_color", "background_opacity"]: - setattr(self, f"_{attr}", kwargs.get(attr, config[attr])) + if background_color is None: + self._background_color = ManimColor(config["background_color"]) + else: + self._background_color = ManimColor(background_color) + if background_opacity is None: + self._background_opacity = config["background_opacity"] + else: + self._background_opacity = background_opacity # This one is in the same boat as the above, but it doesn't have the # same name as the corresponding key so it has to be handled on its own diff --git a/manim/mobject/types/vectorized_mobject.py b/manim/mobject/types/vectorized_mobject.py index d703d21eff..2cc17bb50f 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -185,7 +185,7 @@ def generate_rgbas_array(self, color: ManimColor | list[ManimColor], opacity): will automatically be added for the gradient """ colors: list[ManimColor] = [ - c if (c is not None) else BLACK for c in tuplify(color) + ManimColor(c) if (c is not None) else BLACK for c in tuplify(color) ] opacities: list[float] = [o if (o is not None) else 0 for o in tuplify(opacity)] rgbas = np.array( @@ -297,7 +297,10 @@ def set_stroke( if opacity is not None: setattr(self, opacity_name, opacity) if color is not None and background: - self.background_stroke_color = ManimColor(color) + if isinstance(color, (list, tuple)): + self.background_stroke_color = color = color + else: + self.background_stroke_color = ManimColor(color) return self def set_background_stroke(self, **kwargs): @@ -351,9 +354,9 @@ def get_style(self, simple=False): # TODO: FIX COLORS HERE if simple: - ret["fill_color"] = self.get_fill_color().to_hex() + ret["fill_color"] = self.get_fill_color() ret["fill_opacity"] = self.get_fill_opacity() - ret["stroke_color"] = self.get_stroke_color().to_hex() + ret["stroke_color"] = self.get_stroke_color() else: ret["fill_color"] = self.get_fill_colors() ret["fill_opacity"] = self.get_fill_opacities() diff --git a/manim/utils/color.py b/manim/utils/color.py index a263cb6b7b..b157833b59 100644 --- a/manim/utils/color.py +++ b/manim/utils/color.py @@ -180,18 +180,20 @@ def named_lines_group(length, colors, names, text_colors, align_to_block): """ -ManimColorDType: TypeAlias = np.float32 +ManimColorDType: TypeAlias = np.float64 +ManimFloat: TypeAlias = np.float64 +ManimInt: TypeAlias = np.int64 -RGB_Array_Float: TypeAlias = np.ndarray[Literal[3], np.dtype[np.float32]] +RGB_Array_Float: TypeAlias = np.ndarray[Literal[3], np.dtype[ManimFloat]] RGB_Tuple_Float: TypeAlias = tuple[float, float, float] -RGB_Array_Int: TypeAlias = np.ndarray[Literal[3], np.dtype[np.int32]] +RGB_Array_Int: TypeAlias = np.ndarray[Literal[3], np.dtype[ManimInt]] RGB_Tuple_Int: TypeAlias = tuple[int, int, int] -RGBA_Array_Float: TypeAlias = np.ndarray[Literal[4], np.dtype[np.float32]] +RGBA_Array_Float: TypeAlias = np.ndarray[Literal[4], np.dtype[ManimFloat]] RGBA_Tuple_Float: TypeAlias = tuple[float, float, float, float] -RGBA_Array_Int: TypeAlias = np.ndarray[Literal[4], np.dtype[np.int32]] +RGBA_Array_Int: TypeAlias = np.ndarray[Literal[4], np.dtype[ManimInt]] RGBA_Tuple_Int: TypeAlias = tuple[int, int, int, int] ManimColorInternal: TypeAlias = np.ndarray[Literal[4], np.dtype[ManimColorDType]] @@ -204,7 +206,9 @@ def __init__( alpha: float = 1.0, use_floats: bool = True, ) -> None: - if isinstance(value, ManimColor): + if value is None: + self._internal_value = np.array([0, 0, 0, alpha], dtype=ManimColorDType) + elif isinstance(value, ManimColor): # logger.warning( # "ManimColor was passed another ManimColor. This is probably not what you want. Created a copy of the passed ManimColor instead." # ) @@ -223,6 +227,10 @@ def __init__( self._internal_value = ManimColor.internal_from_rgb(value, alpha) # type: ignore elif length == 4: self._internal_value = ManimColor.internal_from_rgba(value) # type: ignore + else: + raise ValueError( + f"ManimColor only accepts lists/tuples/arrays of length 3 or 4, not {length}" + ) else: if length == 3: self._internal_value = ManimColor.internal_from_int_rgb( @@ -230,6 +238,10 @@ def __init__( ) elif length == 4: self._internal_value = ManimColor.internal_from_int_rgba(value) # type: ignore + else: + raise ValueError( + f"ManimColor only accepts lists/tuples/arrays of length 3 or 4, not {length}" + ) else: # logger.error(f"Invalid color value: {value}") raise TypeError( From 7867aa3949831fae54ff8697299f9bfe25f2cb32 Mon Sep 17 00:00:00 2001 From: MrDiver Date: Sat, 17 Dec 2022 02:52:34 +0100 Subject: [PATCH 15/91] removed premature color conversion --- manim/mobject/types/vectorized_mobject.py | 1 - 1 file changed, 1 deletion(-) diff --git a/manim/mobject/types/vectorized_mobject.py b/manim/mobject/types/vectorized_mobject.py index 2cc17bb50f..155d9cf64b 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -386,7 +386,6 @@ def match_style(self, vmobject, family=True): return self def set_color(self, color: ParsableManimColor, family=True): - color = ManimColor(color) self.set_fill(color, family=family) self.set_stroke(color, family=family) return self From a12507a7f852a3304eaff1b748edde055c20d414 Mon Sep 17 00:00:00 2001 From: MrDiver Date: Sat, 17 Dec 2022 15:05:55 +0100 Subject: [PATCH 16/91] fixed some more tests --- manim/mobject/opengl/opengl_vectorized_mobject.py | 2 -- manim/utils/color.py | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/manim/mobject/opengl/opengl_vectorized_mobject.py b/manim/mobject/opengl/opengl_vectorized_mobject.py index aa90d6263d..c323b409bc 100644 --- a/manim/mobject/opengl/opengl_vectorized_mobject.py +++ b/manim/mobject/opengl/opengl_vectorized_mobject.py @@ -222,8 +222,6 @@ def construct(self): -------- :meth:`~.OpenGLVMobject.set_style` """ - if color: - color = ManimColor(color) if opacity is not None: self.fill_opacity = opacity if recurse: diff --git a/manim/utils/color.py b/manim/utils/color.py index b157833b59..d903020710 100644 --- a/manim/utils/color.py +++ b/manim/utils/color.py @@ -404,7 +404,7 @@ def __eq__(self, other: object) -> bool: raise TypeError( f"Cannot compare {self.__class__.__name__} with {other.__class__.__name__}" ) - return self._internal_value == other._internal_value + return np.allclose(self._internal_value, other._internal_value) def __add__(self, other: ManimColor) -> ManimColor: return ManimColor(self._internal_value + other._internal_value) From 15c49986266ac616234453df6cf9b421e3df5d62 Mon Sep 17 00:00:00 2001 From: MrDiver Date: Sat, 17 Dec 2022 18:31:38 +0100 Subject: [PATCH 17/91] final test changes --- manim/mobject/graphing/coordinate_systems.py | 2 +- manim/mobject/mobject.py | 6 +-- manim/mobject/opengl/opengl_mobject.py | 2 +- .../opengl/opengl_vectorized_mobject.py | 8 ++-- manim/mobject/text/text_mobject.py | 20 +++----- manim/mobject/three_d/three_dimensions.py | 11 +++-- manim/mobject/types/vectorized_mobject.py | 13 +++-- manim/utils/color.py | 47 ++++++++++++------- tests/module/utils/test_color.py | 12 ++--- tests/opengl/test_stroke_opengl.py | 2 +- 10 files changed, 69 insertions(+), 54 deletions(-) diff --git a/manim/mobject/graphing/coordinate_systems.py b/manim/mobject/graphing/coordinate_systems.py index 4c582ddd2c..2c9c76a663 100644 --- a/manim/mobject/graphing/coordinate_systems.py +++ b/manim/mobject/graphing/coordinate_systems.py @@ -1223,7 +1223,7 @@ def construct(self): rectangles = VGroup() x_range = np.arange(*x_range) - if isinstance(color, list): + if isinstance(color, Iterable): color = [ManimColor(c) for c in color] else: color = [ManimColor(color)] diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index 15c5acf1cb..17afcf4677 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -94,7 +94,7 @@ def __init_subclass__(cls, **kwargs): def __init__( self, - color: ParsableManimColor = WHITE, + color: ParsableManimColor | list[ParsableManimColor] = WHITE, name=None, dim=3, target=None, @@ -108,7 +108,7 @@ def __init__( self.submobjects = [] self.updaters = [] self.updating_suspended = False - self.color: ManimColor = ManimColor(color) + self.color: ManimColor = ManimColor.parse(color) self.reset_points() self.generate_points() @@ -1753,7 +1753,7 @@ def set_color( for submob in self.submobjects: submob.set_color(color, family=family) print("Setting color of", self, "to", color) - self.color = ManimColor(color) + self.color = ManimColor.parse(color) return self def set_color_by_gradient(self, *colors: Iterable[ParsableManimColor]): diff --git a/manim/mobject/opengl/opengl_mobject.py b/manim/mobject/opengl/opengl_mobject.py index 5e39c897d5..b1e9310e1b 100644 --- a/manim/mobject/opengl/opengl_mobject.py +++ b/manim/mobject/opengl/opengl_mobject.py @@ -144,7 +144,7 @@ def __init__( self.init_updaters() # self.init_event_listners() self.init_points() - self.color: ManimColor = ManimColor(color) if color else None + self.color = ManimColor.parse(color) self.init_colors() self.shader_indices = None diff --git a/manim/mobject/opengl/opengl_vectorized_mobject.py b/manim/mobject/opengl/opengl_vectorized_mobject.py index c323b409bc..5ea727ffdc 100644 --- a/manim/mobject/opengl/opengl_vectorized_mobject.py +++ b/manim/mobject/opengl/opengl_vectorized_mobject.py @@ -139,10 +139,10 @@ def __init__( super().__init__(**kwargs) self.refresh_unit_normal() - if fill_color: - self.fill_color = ManimColor(fill_color) - if stroke_color: - self.stroke_color = ManimColor(stroke_color) + if fill_color is not None: + self.fill_color = ManimColor.parse(fill_color) + if stroke_color is not None: + self.stroke_color = ManimColor.parse(stroke_color) self.fill_data = None self.stroke_data = None diff --git a/manim/mobject/text/text_mobject.py b/manim/mobject/text/text_mobject.py index 45a7cbaae7..2474dec85d 100644 --- a/manim/mobject/text/text_mobject.py +++ b/manim/mobject/text/text_mobject.py @@ -451,7 +451,7 @@ def __init__( t2g = kwargs.pop("text2gradient", t2g) t2s = kwargs.pop("text2slant", t2s) t2w = kwargs.pop("text2weight", t2w) - self.t2c = t2c + self.t2c = {k: ManimColor(v).to_hex() for k, v in t2c.items()} self.t2f = t2f self.t2g = t2g self.t2s = t2s @@ -471,7 +471,7 @@ def __init__( self.line_spacing = self._font_size + self._font_size * self.line_spacing color: ManimColor = ManimColor(color) if color else VMobject().color - file_name = self._text2svg(color) + file_name = self._text2svg(color.to_hex()) PangoUtils.remove_last_M(file_name) super().__init__( file_name, @@ -590,14 +590,10 @@ def _set_color_by_t2g(self, t2g=None): for start, end in self._find_indexes(word, self.text): self.chars[start:end].set_color_by_gradient(*gradient) - def _text2hash(self, color: ParsableManimColor): + def _text2hash(self, color: str): """Generates ``sha256`` hash for file name.""" settings = ( - "PANGO" - + self.font - + self.slant - + self.weight - + ManimColor(color).to_hex().lower() + "PANGO" + self.font + self.slant + self.weight + color ) # to differentiate Text and CairoText settings += str(self.t2f) + str(self.t2s) + str(self.t2w) + str(self.t2c) settings += str(self.line_spacing) + str(self._font_size) @@ -676,7 +672,7 @@ def _get_settings_from_gradient( settings.append(TextSetting(i, i + 1, **args)) return settings - def _text2settings(self, color: ParsableManimColor): + def _text2settings(self, color: str): """Converts the texts and styles to a setting for parsing.""" t2xs = [ (self.t2f, "font"), @@ -686,10 +682,8 @@ def _text2settings(self, color: ParsableManimColor): ] # setting_args requires values to be strings - color = ManimColor(color) default_args = { - arg: getattr(self, arg) if arg != "color" else color.to_hex() - for _, arg in t2xs + arg: getattr(self, arg) if arg != "color" else color for _, arg in t2xs } settings = self._get_settings_from_t2xs(t2xs, default_args) @@ -745,7 +739,7 @@ def _text2settings(self, color: ParsableManimColor): return settings - def _text2svg(self, color: ParsableManimColor): + def _text2svg(self, color: str): """Convert the text to SVG using Pango.""" size = self._font_size line_spacing = self.line_spacing diff --git a/manim/mobject/three_d/three_dimensions.py b/manim/mobject/three_d/three_dimensions.py index 677c1ab19b..29711568e9 100644 --- a/manim/mobject/three_d/three_dimensions.py +++ b/manim/mobject/three_d/three_dimensions.py @@ -101,7 +101,7 @@ def __init__( surface_piece_config: dict = {}, fill_color: ParsableManimColor = BLUE_D, fill_opacity: float = 1.0, - checkerboard_colors: Sequence[ParsableManimColor] = [BLUE_D, BLUE_E], + checkerboard_colors: Sequence[ParsableManimColor] | bool = [BLUE_D, BLUE_E], stroke_color: ParsableManimColor = LIGHT_GREY, stroke_width: float = 0.5, should_make_jagged: bool = False, @@ -115,9 +115,12 @@ def __init__( self.surface_piece_config = surface_piece_config self.fill_color: ManimColor = ManimColor(fill_color) self.fill_opacity = fill_opacity - self.checkerboard_colors: list[ManimColor] = [ - ManimColor(x) for x in checkerboard_colors - ] + if checkerboard_colors: + self.checkerboard_colors: list[ManimColor] = [ + ManimColor(x) for x in checkerboard_colors + ] + else: + self.checkerboard_colors = checkerboard_colors self.stroke_color: ManimColor = ManimColor(stroke_color) self.stroke_width = stroke_width self.should_make_jagged = should_make_jagged diff --git a/manim/mobject/types/vectorized_mobject.py b/manim/mobject/types/vectorized_mobject.py index 155d9cf64b..2e2adfe506 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -127,11 +127,14 @@ def __init__( super().__init__(**kwargs) self.submobjects: list[VMobject] - # TODO: Maybe that's a little weird to do after all ? Having a default color may help - if fill_color: - self.fill_color: ManimColor = ManimColor(fill_color) - if stroke_color: - self.stroke_color: ManimColor = ManimColor(stroke_color) + # TODO: Find where color overwrites are happening and remove the color doubling + # if "color" in kwargs: + # fill_color = kwargs["color"] + # stroke_color = kwargs["color"] + if fill_color is not None: + self.fill_color = ManimColor.parse(fill_color) + if stroke_color is not None: + self.stroke_color = ManimColor.parse(stroke_color) # OpenGL compatibility @property diff --git a/manim/utils/color.py b/manim/utils/color.py index d903020710..8e1915ebb6 100644 --- a/manim/utils/color.py +++ b/manim/utils/color.py @@ -2,7 +2,7 @@ from __future__ import annotations -from typing import Any, Sequence +from typing import Any, Iterable, Sequence from typing_extensions import Annotated, Literal, TypeAlias @@ -204,7 +204,6 @@ def __init__( self, value: ParsableManimColor, alpha: float = 1.0, - use_floats: bool = True, ) -> None: if value is None: self._internal_value = np.array([0, 0, 0, alpha], dtype=ManimColorDType) @@ -222,7 +221,7 @@ def __init__( self._internal_value = ManimColor.internal_from_string(value) elif isinstance(value, (list, tuple, np.ndarray)): length = len(value) - if use_floats: + if all(isinstance(x, float) for x in value): if length == 3: self._internal_value = ManimColor.internal_from_rgb(value, alpha) # type: ignore elif length == 4: @@ -358,7 +357,7 @@ def to_hex(self, with_alpha: bool = False) -> str: return tmp def invert(self, with_alpha=False) -> ManimColor: - return ManimColor(1.0 - self._internal_value, with_alpha, use_floats=True) + return ManimColor(1.0 - self._internal_value, with_alpha) def interpolate(self, other: ManimColor, alpha: float) -> ManimColor: return ManimColor( @@ -367,28 +366,42 @@ def interpolate(self, other: ManimColor, alpha: float) -> ManimColor: @classmethod def from_rgb( - cls, rgb: RGB_Array_Float | RGB_Tuple_Float, alpha: float = 1.0 - ) -> ManimColor: - return cls(rgb, alpha, use_floats=True) - - @classmethod - def from_int_rgb( - cls, rgb: RGB_Array_Int | RGB_Tuple_Int, alpha: float = 1.0 + cls, + rgb: RGB_Array_Float | RGB_Tuple_Float | RGB_Array_Int | RGB_Tuple_Int, + alpha: float = 1.0, ) -> ManimColor: return cls(rgb, alpha) @classmethod - def from_rgba(cls, rgba: RGBA_Array_Float | RGBA_Tuple_Float) -> ManimColor: - return cls(rgba, use_floats=True) - - @classmethod - def from_int_rgba(cls, rgba: RGBA_Array_Int | RGBA_Tuple_Int) -> ManimColor: + def from_rgba( + cls, rgba: RGBA_Array_Float | RGBA_Tuple_Float | RGBA_Array_Int | RGBA_Tuple_Int + ) -> ManimColor: return cls(rgba) @classmethod def from_hex(cls, hex: str, alpha: float = 1.0) -> ManimColor: return cls(hex, alpha) + @classmethod + def parse( + cls, + color: ParsableManimColor | list[ParsableManimColor] | None, + alpha: float = 1.0, + ) -> ManimColor | list[ManimColor]: + """ + Handles the parsing of a list of colors or a single color. + + Parameters + ---------- + color + The color or list of colors to parse. Note that this function can not accept rgba tuples. It will assume that you mean list[ManimColor] and will return a list of ManimColors. + alpha + The alpha value to use if a single color is passed. or if a list of colors is passed to set the value of all colors. + """ + if isinstance(color, (list, tuple)): + return [cls(c, alpha) for c in color] + return cls(color, alpha) + @staticmethod def gradient(colors: list[ManimColor], length: int): ... @@ -668,6 +681,8 @@ def color_gradient( ) -> list[ManimColor] | ManimColor: if length_of_output == 0: return ManimColor(reference_colors[0]) + if len(reference_colors) == 1: + return [ManimColor(reference_colors[0])] * length_of_output rgbs = list(map(color_to_rgb, reference_colors)) alphas = np.linspace(0, (len(rgbs) - 1), length_of_output) floors = alphas.astype("int") diff --git a/tests/module/utils/test_color.py b/tests/module/utils/test_color.py index fa9e22a774..c3d468328b 100644 --- a/tests/module/utils/test_color.py +++ b/tests/module/utils/test_color.py @@ -25,7 +25,7 @@ def test_background_color(): S.renderer.get_frame()[0, 0], np.array([67, 111, 128, 255]) ) - S.camera.background_color = "#fff" + S.camera.background_color = "#ffffff" S.renderer.update_frame(S) np.testing.assert_array_equal( S.renderer.get_frame()[0, 0], np.array([255, 255, 255, 255]) @@ -35,17 +35,17 @@ def test_background_color(): S.camera.background_opacity = 0.5 S.renderer.update_frame(S) np.testing.assert_array_equal( - S.renderer.get_frame()[0, 0], np.array([93, 127, 93, 127]) + S.renderer.get_frame()[0, 0], np.array([187, 255, 187, 127]) ) def test_set_color(): m = Mobject() - assert m.color.hex == "#fff" + assert m.color.to_hex() == "#FFFFFF" m.set_color(BLACK) - assert m.color.hex == "#000" + assert m.color.to_hex() == "#000000" m = VMobject() - assert m.color.hex == "#fff" + assert m.color.to_hex() == "#FFFFFF" m.set_color(BLACK) - assert m.color.hex == "#000" + assert m.color.to_hex() == "#000000" diff --git a/tests/opengl/test_stroke_opengl.py b/tests/opengl/test_stroke_opengl.py index fc820529ec..d5eff1ac71 100644 --- a/tests/opengl/test_stroke_opengl.py +++ b/tests/opengl/test_stroke_opengl.py @@ -15,4 +15,4 @@ def test_set_stroke(using_opengl_renderer): m.set_stroke(color=C.ORANGE, width=2, opacity=0.8) assert m.stroke_width == 2 assert m.stroke_opacity == 0.8 - assert m.stroke_color.to_hex() == C.ORANGE + assert m.stroke_color.to_hex() == C.ORANGE.to_hex() From 76d7cdace942d5f487395885f669686bf160c91f Mon Sep 17 00:00:00 2001 From: MrDiver Date: Sat, 17 Dec 2022 18:45:02 +0100 Subject: [PATCH 18/91] fix doctests --- manim/mobject/mobject.py | 4 ++-- manim/mobject/opengl/opengl_mobject.py | 4 ++-- manim/utils/color.py | 4 ++-- manim/utils/docbuild/manim_directive.py | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index 17afcf4677..b6e38def9e 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -209,10 +209,10 @@ def set_default(cls, **kwargs): >>> from manim import Square, GREEN >>> Square.set_default(color=GREEN, fill_opacity=0.25) >>> s = Square(); s.color, s.fill_opacity - (, 0.25) + (ManimColor('#83C167'), 0.25) >>> Square.set_default() >>> s = Square(); s.color, s.fill_opacity - (, 0.0) + (ManimColor('#FFFFFF'), 0.0) .. manim:: ChangedDefaultTextcolor :save_last_frame: diff --git a/manim/mobject/opengl/opengl_mobject.py b/manim/mobject/opengl/opengl_mobject.py index b1e9310e1b..b605fdd7bb 100644 --- a/manim/mobject/opengl/opengl_mobject.py +++ b/manim/mobject/opengl/opengl_mobject.py @@ -201,10 +201,10 @@ def set_default(cls, **kwargs): >>> from manim import Square, GREEN >>> Square.set_default(color=GREEN, fill_opacity=0.25) >>> s = Square(); s.color, s.fill_opacity - (, 0.25) + (ManimColor('#83C167'), 0.25) >>> Square.set_default() >>> s = Square(); s.color, s.fill_opacity - (, 0.0) + (ManimColor('#FFFFFF'), 0.0) .. manim:: ChangedDefaultTextcolor :save_last_frame: diff --git a/manim/utils/color.py b/manim/utils/color.py index 8e1915ebb6..8b78df2279 100644 --- a/manim/utils/color.py +++ b/manim/utils/color.py @@ -407,10 +407,10 @@ def gradient(colors: list[ManimColor], length: int): ... def __repr__(self) -> str: - return f"{self.__class__.__name__}({self.to_hex()})" + return f"{self.__class__.__name__}('{self.to_hex()}')" def __str__(self) -> str: - return f"{self.__class__.__name__}({self.to_hex()})" + return f"{self.__class__.__name__}('{self.to_hex()})'" def __eq__(self, other: object) -> bool: if not isinstance(other, ManimColor): diff --git a/manim/utils/docbuild/manim_directive.py b/manim/utils/docbuild/manim_directive.py index fe43764ed3..87b4a0d9e8 100644 --- a/manim/utils/docbuild/manim_directive.py +++ b/manim/utils/docbuild/manim_directive.py @@ -26,7 +26,7 @@ def construct(self): >>> from manim import Create, Dot, RED, Scene >>> dot = Dot(color=RED) >>> dot.color - + ManimColor('#FC6255') >>> class DirectiveDoctestExample(Scene): ... def construct(self): ... self.play(Create(dot)) From a27aff4212602818b10eb5fee29651a4b51b09b6 Mon Sep 17 00:00:00 2001 From: MrDiver Date: Sat, 17 Dec 2022 19:20:54 +0100 Subject: [PATCH 19/91] fix for 3.8 --- manim/utils/color.py | 50 ++++++++++++++++++++++---------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/manim/utils/color.py b/manim/utils/color.py index 8b78df2279..983ea18b26 100644 --- a/manim/utils/color.py +++ b/manim/utils/color.py @@ -2,7 +2,7 @@ from __future__ import annotations -from typing import Any, Iterable, Sequence +from typing import Any, Iterable, Sequence, Union from typing_extensions import Annotated, Literal, TypeAlias @@ -184,19 +184,19 @@ def named_lines_group(length, colors, names, text_colors, align_to_block): ManimFloat: TypeAlias = np.float64 ManimInt: TypeAlias = np.int64 -RGB_Array_Float: TypeAlias = np.ndarray[Literal[3], np.dtype[ManimFloat]] -RGB_Tuple_Float: TypeAlias = tuple[float, float, float] +RGB_Array_Float: TypeAlias = "np.ndarray[Literal[3], np.dtype[ManimFloat]]" +RGB_Tuple_Float: TypeAlias = "tuple[float, float, float]" -RGB_Array_Int: TypeAlias = np.ndarray[Literal[3], np.dtype[ManimInt]] -RGB_Tuple_Int: TypeAlias = tuple[int, int, int] +RGB_Array_Int: TypeAlias = "np.ndarray[Literal[3], np.dtype[ManimInt]]" +RGB_Tuple_Int: TypeAlias = "tuple[int, int, int]" -RGBA_Array_Float: TypeAlias = np.ndarray[Literal[4], np.dtype[ManimFloat]] -RGBA_Tuple_Float: TypeAlias = tuple[float, float, float, float] +RGBA_Array_Float: TypeAlias = "np.ndarray[Literal[4], np.dtype[ManimFloat]]" +RGBA_Tuple_Float: TypeAlias = "tuple[float, float, float, float]" -RGBA_Array_Int: TypeAlias = np.ndarray[Literal[4], np.dtype[ManimInt]] -RGBA_Tuple_Int: TypeAlias = tuple[int, int, int, int] +RGBA_Array_Int: TypeAlias = "np.ndarray[Literal[4], np.dtype[ManimInt]]" +RGBA_Tuple_Int: TypeAlias = "tuple[int, int, int, int]" -ManimColorInternal: TypeAlias = np.ndarray[Literal[4], np.dtype[ManimColorDType]] +ManimColorInternal: TypeAlias = "np.ndarray[Literal[4], np.dtype[ManimColorDType]]" class ManimColor: @@ -399,8 +399,8 @@ def parse( The alpha value to use if a single color is passed. or if a list of colors is passed to set the value of all colors. """ if isinstance(color, (list, tuple)): - return [cls(c, alpha) for c in color] - return cls(color, alpha) + return [cls(c, alpha) for c in color] # type: ignore + return cls(color, alpha) # type: ignore @staticmethod def gradient(colors: list[ManimColor], length: int): @@ -450,19 +450,19 @@ def __xor__(self, other: ManimColor) -> ManimColor: return ManimColor(self.to_integer() ^ other.to_integer()) -ParsableManimColor: TypeAlias = ( - ManimColor - | int - | str - | RGB_Tuple_Int - | RGB_Tuple_Float - | RGBA_Tuple_Int - | RGBA_Tuple_Float - | RGB_Array_Int - | RGB_Array_Float - | RGBA_Array_Int - | RGBA_Array_Float -) +ParsableManimColor: TypeAlias = Union[ + ManimColor, + int, + str, + RGB_Tuple_Int, + RGB_Tuple_Float, + RGBA_Tuple_Int, + RGBA_Tuple_Float, + RGB_Array_Int, + RGB_Array_Float, + RGBA_Array_Int, + RGBA_Array_Float, +] __all__ += ["ManimColor", "ParsableManimColor", "ManimColorDType"] From 1580c82521f6229d41f23d7d9fe7239ccbfdf251 Mon Sep 17 00:00:00 2001 From: MrDiver Date: Sat, 17 Dec 2022 19:53:19 +0100 Subject: [PATCH 20/91] fixing ManimColor string representation --- manim/mobject/text/text_mobject.py | 4 ++-- manim/utils/color.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/manim/mobject/text/text_mobject.py b/manim/mobject/text/text_mobject.py index 2474dec85d..1cb7b0ebd6 100644 --- a/manim/mobject/text/text_mobject.py +++ b/manim/mobject/text/text_mobject.py @@ -654,7 +654,7 @@ def _get_settings_from_gradient( if self.gradient: colors = color_gradient(self.gradient, len(self.text)) for i in range(len(self.text)): - args["color"] = colors[i].hex + args["color"] = colors[i].to_hex() settings.append(TextSetting(i, i + 1, **args)) for word, gradient in self.t2g.items(): @@ -668,7 +668,7 @@ def _get_settings_from_gradient( ) for start, end in self._find_indexes(word, self.text): for i in range(start, end): - args["color"] = colors[i - start].hex + args["color"] = colors[i - start].to_hex() settings.append(TextSetting(i, i + 1, **args)) return settings diff --git a/manim/utils/color.py b/manim/utils/color.py index 983ea18b26..9faabb5aaa 100644 --- a/manim/utils/color.py +++ b/manim/utils/color.py @@ -410,7 +410,7 @@ def __repr__(self) -> str: return f"{self.__class__.__name__}('{self.to_hex()}')" def __str__(self) -> str: - return f"{self.__class__.__name__}('{self.to_hex()})'" + return f"{self.to_hex()}" def __eq__(self, other: object) -> bool: if not isinstance(other, ManimColor): From b2cc282ea4789daf19e6cc78433f93e3eeed4a17 Mon Sep 17 00:00:00 2001 From: MrDiver Date: Sat, 17 Dec 2022 20:22:39 +0100 Subject: [PATCH 21/91] removing some unneccesary conversions --- manim/animation/indication.py | 1 - manim/camera/camera.py | 4 ++-- manim/mobject/geometry/arc.py | 4 ++-- manim/mobject/geometry/polygram.py | 1 - manim/mobject/graphing/coordinate_systems.py | 14 +++++--------- manim/mobject/opengl/opengl_mobject.py | 4 ++-- manim/mobject/opengl/opengl_vectorized_mobject.py | 4 ++-- manim/mobject/table.py | 4 ++-- manim/mobject/vector_field.py | 2 +- 9 files changed, 16 insertions(+), 22 deletions(-) diff --git a/manim/animation/indication.py b/manim/animation/indication.py index ca170311bb..5a38196e43 100644 --- a/manim/animation/indication.py +++ b/manim/animation/indication.py @@ -613,7 +613,6 @@ def __init__( stroke_width=DEFAULT_STROKE_WIDTH, **kwargs ): - color = ManimColor(color) if shape is Rectangle: frame = SurroundingRectangle( mobject, diff --git a/manim/camera/camera.py b/manim/camera/camera.py index 2f09a5fd67..c9559a66f1 100644 --- a/manim/camera/camera.py +++ b/manim/camera/camera.py @@ -109,9 +109,9 @@ def __init__( self.frame_rate = frame_rate if background_color is None: - self._background_color = ManimColor(config["background_color"]) + self._background_color = ManimColor.parse(config["background_color"]) else: - self._background_color = ManimColor(background_color) + self._background_color = ManimColor.parse(background_color) if background_opacity is None: self._background_opacity = config["background_opacity"] else: diff --git a/manim/mobject/geometry/arc.py b/manim/mobject/geometry/arc.py index 5008fc9b3d..318dd528b1 100644 --- a/manim/mobject/geometry/arc.py +++ b/manim/mobject/geometry/arc.py @@ -498,7 +498,7 @@ def __init__( radius=radius, start_angle=0, angle=TAU, - color=ManimColor(color), + color=color, **kwargs, ) @@ -665,7 +665,7 @@ def __init__( radius=radius, stroke_width=stroke_width, fill_opacity=fill_opacity, - color=ManimColor(color), + color=color, **kwargs, ) diff --git a/manim/mobject/geometry/polygram.py b/manim/mobject/geometry/polygram.py index 54b0de6a83..2c83883116 100644 --- a/manim/mobject/geometry/polygram.py +++ b/manim/mobject/geometry/polygram.py @@ -544,7 +544,6 @@ def __init__( close_new_points: bool = True, **kwargs, ): - color = ManimColor(color) super().__init__(UR, UL, DL, DR, color=color, **kwargs) self.stretch_to_fit_width(width) self.stretch_to_fit_height(height) diff --git a/manim/mobject/graphing/coordinate_systems.py b/manim/mobject/graphing/coordinate_systems.py index 2c9c76a663..1e34291ef6 100644 --- a/manim/mobject/graphing/coordinate_systems.py +++ b/manim/mobject/graphing/coordinate_systems.py @@ -512,7 +512,7 @@ def get_line_from_axis_to_point( if color is None: color = VMobject().color - line_config["color"] = ManimColor(color) + line_config["color"] = ManimColor.parse(color) line_config["stroke_width"] = stroke_width axis = self.get_axis(index) @@ -1089,8 +1089,6 @@ def construct(self): if dot_config is None: dot_config = {} - if color: - color = ManimColor(color) else: color = graph.get_color() label = self.x_axis._create_label_tex(label).set_color(color) @@ -1223,7 +1221,7 @@ def construct(self): rectangles = VGroup() x_range = np.arange(*x_range) - if isinstance(color, Iterable): + if isinstance(color, (list, tuple)): color = [ManimColor(c) for c in color] else: color = [ManimColor(color)] @@ -1473,7 +1471,7 @@ def construct(self): def deriv(x): return self.slope_of_tangent(x, graph) - return self.plot(deriv, color=ManimColor(color), **kwargs) + return self.plot(deriv, color=color, **kwargs) def plot_antiderivative_graph( self, @@ -1775,9 +1773,7 @@ def construct(self): triangle.height = triangle_size triangle.move_to(self.coords_to_point(x_val, 0), UP) if label is not None: - t_label = self.x_axis._create_label_tex( - label, color=ManimColor(label_color) - ) + t_label = self.x_axis._create_label_tex(label, color=label_color) t_label.next_to(triangle, DOWN) T_label_group.add(t_label) @@ -2203,7 +2199,7 @@ def construct(self): z_values = np.zeros(x_values.shape) line_graph = VDict() - graph = VGroup(color=ManimColor(line_color), **kwargs) + graph = VGroup(color=line_color, **kwargs) vertices = [ self.coords_to_point(x, y, z) diff --git a/manim/mobject/opengl/opengl_mobject.py b/manim/mobject/opengl/opengl_mobject.py index b605fdd7bb..2b78e3fe35 100644 --- a/manim/mobject/opengl/opengl_mobject.py +++ b/manim/mobject/opengl/opengl_mobject.py @@ -1974,7 +1974,7 @@ def set_color(self, color: ParsableManimColor | None, opacity=None, recurse=True # Recurse to submobjects differently from how set_rgba_array # in case they implement set_color differently if color is not None: - self.color: ManimColor = ManimColor(color) + self.color: ManimColor = ManimColor.parse(color) if opacity is not None: self.opacity = opacity if recurse: @@ -2069,7 +2069,7 @@ def add_background_rectangle( from manim.mobject.geometry.shape_matchers import BackgroundRectangle self.background_rectangle = BackgroundRectangle( - self, color=ManimColor(color), fill_opacity=opacity, **kwargs + self, color=color, fill_opacity=opacity, **kwargs ) self.add_to_back(self.background_rectangle) return self diff --git a/manim/mobject/opengl/opengl_vectorized_mobject.py b/manim/mobject/opengl/opengl_vectorized_mobject.py index 5ea727ffdc..b740380940 100644 --- a/manim/mobject/opengl/opengl_vectorized_mobject.py +++ b/manim/mobject/opengl/opengl_vectorized_mobject.py @@ -351,13 +351,13 @@ def fade(self, darkness=0.5, recurse=True): # Todo im not quite sure why we are doing this def get_fill_colors(self): - return [ManimColor(rgb_to_hex(rgba[:3])) for rgba in self.fill_rgba] + return [ManimColor.from_rgb(rgba[:3]) for rgba in self.fill_rgba] def get_fill_opacities(self): return self.fill_rgba[:, 3] def get_stroke_colors(self): - return [ManimColor(rgb_to_hex(rgba[:3])) for rgba in self.stroke_rgba] + return [ManimColor.from_rgb(rgba[:3]) for rgba in self.stroke_rgba] def get_stroke_opacities(self): return self.stroke_rgba[:, 3] diff --git a/manim/mobject/table.py b/manim/mobject/table.py index fd8fcdbf91..862e2de4e9 100644 --- a/manim/mobject/table.py +++ b/manim/mobject/table.py @@ -530,7 +530,7 @@ def construct(self): """ columns = self.get_columns() for color, column in zip(colors, columns): - column.set_color(ManimColor(color)) + column.set_color(color) return self def set_row_colors(self, *colors: Iterable[ParsableManimColor]) -> Table: @@ -559,7 +559,7 @@ def construct(self): """ rows = self.get_rows() for color, row in zip(colors, rows): - row.set_color(ManimColor(color)) + row.set_color(color) return self def get_entries( diff --git a/manim/mobject/vector_field.py b/manim/mobject/vector_field.py index bcb2aa71c9..0bb5f3a39a 100644 --- a/manim/mobject/vector_field.py +++ b/manim/mobject/vector_field.py @@ -115,7 +115,7 @@ def pos_to_rgb(pos: np.ndarray) -> tuple[float, float, float, float]: self.pos_to_color = lambda pos: rgb_to_color(self.pos_to_rgb(pos)) else: self.single_color = True - self.color = ManimColor(color) + self.color = ManimColor.parse(color) self.submob_movement_updater = None @staticmethod From 2baeff5b8ff85905325cd281d89c98370dee5532 Mon Sep 17 00:00:00 2001 From: MrDiver Date: Thu, 22 Dec 2022 03:32:14 +0100 Subject: [PATCH 22/91] moved community constants to manim_colors.py and added more color standards --- manim/communitycolors.py | 9 - manim/utils/color/AS2700.py | 230 ++++++ manim/utils/color/BS381.py | 303 ++++++++ manim/utils/color/X11.py | 513 +++++++++++++ manim/utils/color/XKCD.py | 932 ++++++++++++++++++++++++ manim/utils/color/__init__.py | 12 + manim/utils/{color.py => color/core.py} | 284 ++------ manim/utils/color/manim_colors.py | 91 +++ 8 files changed, 2143 insertions(+), 231 deletions(-) delete mode 100644 manim/communitycolors.py create mode 100644 manim/utils/color/AS2700.py create mode 100644 manim/utils/color/BS381.py create mode 100644 manim/utils/color/X11.py create mode 100644 manim/utils/color/XKCD.py create mode 100644 manim/utils/color/__init__.py rename manim/utils/{color.py => color/core.py} (71%) create mode 100644 manim/utils/color/manim_colors.py diff --git a/manim/communitycolors.py b/manim/communitycolors.py deleted file mode 100644 index c68d16e5ee..0000000000 --- a/manim/communitycolors.py +++ /dev/null @@ -1,9 +0,0 @@ -"""The colormap of manim community""" - -from __future__ import annotations - -LOGO_WHITE = "#ece6e2" -LOGO_GREEN = "#87c2a5" -LOGO_BLUE = "#525893" -LOGO_RED = "#e07a5f" -LOGO_BLACK = "#343434" diff --git a/manim/utils/color/AS2700.py b/manim/utils/color/AS2700.py new file mode 100644 index 0000000000..d5c6e68a14 --- /dev/null +++ b/manim/utils/color/AS2700.py @@ -0,0 +1,230 @@ +# from https://www.w3schools.com/colors/colors_australia.asp +""" +Australian Color Standard + +Before 1985, Australians used the British color standard BS 381C. + +In 1985 the Australian Independent Colour Standard AS 2700 was created: +Code Color +B Blue +G Green +N Neutrals (grey) +P Purple +R Red +T Blue/Green +X Yellow/Red +Y Yellow + +The codes (or names) cannot be used in HTML. + +These hex values are non official approximate values intended to simulate AS 2700 colors +""" + +from .core import ManimColor + +B11_RICH_BLUE = ManimColor("#2B3770") +B12_ROYAL_BLUE = ManimColor("#2C3563") +B13_NAVY_BLUE = ManimColor("#28304D") +B14_SAPHHIRE = ManimColor("#28426B") +B15_MID_BLUE = ManimColor("#144B6F") +B21_ULTRAMARINE = ManimColor("#2C5098") +B22_HOMEBUSH_BLUE = ManimColor("#215097") +B23_BRIGHT_BLUE = ManimColor("#174F90") +B24_HARBOUR_BLUE = ManimColor("#1C6293") +B25_AQUA = ManimColor("#5097AC") +B32_POWDER_BLUE = ManimColor("#B7C8DB") +B33_MIST_BLUE = ManimColor("#E0E6E2") +B34_PARADISE_BLUE = ManimColor("#3499BA") +B35_PALE_BLUE = ManimColor("#CDE4E2") +B41_BLUEBELL = ManimColor("#5B94D1") +B42_PURPLE_BLUE = ManimColor("#5E7899") +B43_GREY_BLUE = ManimColor("#627C8D") +B44_LIGHT_GREY_BLUE = ManimColor("#C0C0C1") +B45_SKY_BLUE = ManimColor("#7DB7C7") +B51_PERIWINKLE = ManimColor("#3871AC") +B53_DARK_GREY_BLUE = ManimColor("#4F6572") +B55_STORM_BLUE = ManimColor("#3F7C94") +B61_CORAL_SEA = ManimColor("#2B3873") +B62_MIDNIGHT_BLUE = ManimColor("#292A34") +B64_CHARCOAL = ManimColor("#363E45") +G11_BOTTLE_GREEN = ManimColor("#253A32") +G12_HOLLY = ManimColor("#21432D") +G13_EMERALD = ManimColor("#195F35") +G14_MOSS_GREEN = ManimColor("#33572D") +G15_RAINFOREST_GREEN = ManimColor("#3D492D") +G16_TRAFFIC_GREEN = ManimColor("#305442") +G17_MINT_GREEN = ManimColor("#006B45") +G21_JADE = ManimColor("#127453") +G22_SERPENTINE = ManimColor("#78A681") +G23_SHAMROCK = ManimColor("#336634") +G24_FERN_TREE = ManimColor("#477036") +G25_OLIVE = ManimColor("#595B2A") +G26_APPLE_GREEN = ManimColor("#4E9843") +G27_HOMEBUSH_GREEN = ManimColor("#017F4D") +G31_VERTIGRIS = ManimColor("#468A65") +G32_OPALINE = ManimColor("#AFCBB8") +G33_LETTUCE = ManimColor("#7B9954") +G34_AVOCADO = ManimColor("#757C4C") +G35_LIME_GREEN = ManimColor("#89922E") +G36_KIKUYU = ManimColor("#95B43B") +G37_BEANSTALK = ManimColor("#45A56A") +G41_LAWN_GREEN = ManimColor("#0D875D") +G42_GLACIER = ManimColor("#D5E1D2") +G43_SURF_GREEN = ManimColor("#C8C8A7") +G44_PALM_GREEN = ManimColor("#99B179") +G45_CHARTREUSE = ManimColor("#C7C98D") +G46_CITRONELLA = ManimColor("#BFC83E") +G47_CRYSTAL_GREEN = ManimColor("#ADCCA8") +G51_SPRUCE = ManimColor("#05674F") +G52_EUCALYPTUS = ManimColor("#66755B") +G53_BANKSIA = ManimColor("#929479") +G54_MIST_GREEN = ManimColor("#7A836D") +G55_LICHEN = ManimColor("#A7A98C") +G56_SAGE_GREEN = ManimColor("#677249") +G61_DARK_GREEN = ManimColor("#283533") +G62_RIVERGUM = ManimColor("#617061") +G63_DEEP_BRONZE_GREEN = ManimColor("#333334") +G64_SLATE = ManimColor("#5E6153") +G65_TI_TREE = ManimColor("#5D5F4E") +G66_ENVIRONMENT_GREEN = ManimColor("#484C3F") +G67_ZUCCHINI = ManimColor("#2E443A") +N11_PEARL_GREY = ManimColor("#D8D3C7") +N12_PASTEL_GREY = ManimColor("#CCCCCC") +N14_WHITE = ManimColor("#FFFFFF") +N15_HOMEBUSH_GREY = ManimColor("#A29B93") +N22_CLOUD_GREY = ManimColor("#C4C1B9") +N23_NEUTRAL_GREY = ManimColor("#CCCCCC") +N24_SILVER_GREY = ManimColor("#BDC7C5") +N25_BIRCH_GREY = ManimColor("#ABA498") +N32_GREEN_GREY = ManimColor("#8E9282") +N33_LIGHTBOX_GREY = ManimColor("#ACADAD") +N35_LIGHT_GREY = ManimColor("#A6A7A1") +N41_OYSTER = ManimColor("#998F78") +N42_STORM_GREY = ManimColor("#858F88") +N43_PIPELINE_GREY = ManimColor("#999999") +N44_BRIDGE_GREY = ManimColor("#767779") +N45_KOALA_GREY = ManimColor("#928F88") +N52_MID_GREY = ManimColor("#727A77") +N53_BLUE_GREY = ManimColor("#7C8588") +N54_BASALT = ManimColor("#585C63") +N55_LEAD_GREY = ManimColor("#5E5C58") +N61_BLACK = ManimColor("#2A2A2C") +N63_PEWTER = ManimColor("#596064") +N64_DARK_GREY = ManimColor("#4B5259") +N65_GRAPHITE_GREY = ManimColor("#45474A") +P11_MAGENTA = ManimColor("#7B2B48") +P12_PURPLE = ManimColor("#85467B") +P13_VIOLET = ManimColor("#5D3A61") +P14_BLUEBERRY = ManimColor("#4C4176") +P21_SUNSET_PINK = ManimColor("#E3BBBD") +P22_CYCLAMEN = ManimColor("#83597D") +P23_LILAC = ManimColor("#A69FB1") +P24_JACKARANDA = ManimColor("#795F91") +P31_DUSTY_PINK = ManimColor("#DBBEBC") +P33_RIBBON_PINK = ManimColor("#D1BCC9") +P41_ERICA_PINK = ManimColor("#C55A83") +P42_MULBERRY = ManimColor("#A06574") +P43_WISTERIA = ManimColor("#756D91") +P52_PLUM = ManimColor("#6E3D4B") +R11_INTERNATIONAL_ORANGE = ManimColor("#CE482A") +R12_SCARLET = ManimColor("#CD392A") +R13_SIGNAL_RED = ManimColor("#BA312B") +R14_WARATAH = ManimColor("#AA2429") +R15_CRIMSON = ManimColor("#9E2429") +R21_TANGERINE = ManimColor("#E96957") +R22_HOMEBUSH_RED = ManimColor("#D83A2D") +R23_LOLLIPOP = ManimColor("#CC5058") +R24_STRAWBERRY = ManimColor("#B4292A") +R25_ROSE_PINK = ManimColor("#E8919C") +R32_APPLE_BLOSSOM = ManimColor("#F2E1D8") +R33_GHOST_GUM = ManimColor("#E8DAD4") +R34_MUSHROOM = ManimColor("#D7C0B6") +R35_DEEP_ROSE = ManimColor("#CD6D71") +R41_SHELL_PINK = ManimColor("#F9D9BB") +R42_SALMON_PINK = ManimColor("#D99679") +R43_RED_DUST = ManimColor("#D0674F") +R44_POSSUM = ManimColor("#A18881") +R45_RUBY = ManimColor("#8F3E5C") +R51_BURNT_PINK = ManimColor("#E19B8E") +R52_TERRACOTTA = ManimColor("#A04C36") +R53_RED_GUM = ManimColor("#8D4338") +R54_RASPBERRY = ManimColor("#852F31") +R55_CLARET = ManimColor("#67292D") +R62_VENETIAN_RED = ManimColor("#77372B") +R63_RED_OXIDE = ManimColor("#663334") +R64_DEEP_INDIAN_RED = ManimColor("#542E2B") +R65_MAROON = ManimColor("#3F2B3C") +T11_TROPICAL_BLUE = ManimColor("#006698") +T12_DIAMANTIA = ManimColor("#006C74") +T14_MALACHITE = ManimColor("#105154") +T15_TURQUOISE = ManimColor("#098587") +T22_ORIENTAL_BLUE = ManimColor("#358792") +T24_BLUE_JADE = ManimColor("#427F7E") +T32_HUON_GREEN = ManimColor("#72B3B1") +T33_SMOKE_BLUE = ManimColor("#9EB6B2") +T35_GREEN_ICE = ManimColor("#78AEA2") +T44_BLUE_GUM = ManimColor("#6A8A88") +T45_COOTAMUNDRA = ManimColor("#759E91") +T51_MOUNTAIN_BLUE = ManimColor("#295668") +T53_PEACOCK_BLUE = ManimColor("#245764") +T63_TEAL = ManimColor("#183F4E") +X11_BUTTERSCOTCH = ManimColor("#D38F43") +X12_PUMPKIN = ManimColor("#DD7E1A") +X13_MARIGOLD = ManimColor("#ED7F15") +X14_MANDARIN = ManimColor("#E45427") +X15_ORANGE = ManimColor("#E36C2B") +X21_PALE_OCHRE = ManimColor("#DAA45F") +X22_SAFFRON = ManimColor("#F6AA51") +X23_APRICOT = ManimColor("#FEB56D") +X24_ROCKMELON = ManimColor("#F6894B") +X31_RAFFIA = ManimColor("#EBC695") +X32_MAGNOLIA = ManimColor("#F1DEBE") +X33_WARM_WHITE = ManimColor("#F3E7D4") +X34_DRIFTWOOD = ManimColor("#D5C4AE") +X41_BUFF = ManimColor("#C28A44") +X42_BISCUIT = ManimColor("#DEBA92") +X43_BEIGE = ManimColor("#C9AA8C") +X45_CINNAMON = ManimColor("#AC826D") +X51_TAN = ManimColor("#8F5F32") +X52_COFFEE = ManimColor("#AD7948") +X53_GOLDEN_TAN = ManimColor("#925629") +X54_BROWN = ManimColor("#68452C") +X55_NUT_BROWN = ManimColor("#764832") +X61_WOMBAT = ManimColor("#6E5D52") +X62_DARK_EARTH = ManimColor("#6E5D52") +X63_IRONBARK = ManimColor("#443B36") +X64_CHOCOLATE = ManimColor("#4A3B31") +X65_DARK_BROWN = ManimColor("#4F372D") +Y11_CANARY = ManimColor("#E7BD11") +Y12_WATTLE = ManimColor("#E8AF01") +Y13_VIVID_YELLOW = ManimColor("#FCAE01") +Y14_GOLDEN_YELLOW = ManimColor("#F5A601") +Y15_SUNFLOWER = ManimColor("#FFA709") +Y16_INCA_GOLD = ManimColor("#DF8C19") +Y21_PRIMROSE = ManimColor("#F5CF5B") +Y22_CUSTARD = ManimColor("#EFD25C") +Y23_BUTTERCUP = ManimColor("#E0CD41") +Y24_STRAW = ManimColor("#E3C882") +Y25_DEEP_CREAM = ManimColor("#F3C968") +Y26_HOMEBUSH_GOLD = ManimColor("#FCC51A") +Y31_LILY_GREEN = ManimColor("#E3E3CD") +Y32_FLUMMERY = ManimColor("#E6DF9E") +Y33_PALE_PRIMROSE = ManimColor("#F5F3CE") +Y34_CREAM = ManimColor("#EFE3BE") +Y35_OFF_WHITE = ManimColor("#F1E9D5") +Y41_OLIVE_YELLOW = ManimColor("#8E7426") +Y42_MUSTARD = ManimColor("#C4A32E") +Y43_PARCHMENT = ManimColor("#D4C9A3") +Y44_SAND = ManimColor("#DCC18B") +Y45_MANILLA = ManimColor("#E5D0A7") +Y51_BRONZE_OLIVE = ManimColor("#695D3E") +Y52_CHAMOIS = ManimColor("#BEA873") +Y53_SANDSTONE = ManimColor("#D5BF8E") +Y54_OATMEAL = ManimColor("#CAAE82") +Y55_DEEP_STONE = ManimColor("#BC9969") +Y56_MERINO = ManimColor("#C9B79E") +Y61_BLACK_OLIVE = ManimColor("#47473B") +Y62_SUGAR_CANE = ManimColor("#BCA55C") +Y63_KHAKI = ManimColor("#826843") +Y65_MUSHROOM = ManimColor("#A39281") +Y66_MUDSTONE = ManimColor("#574E45") diff --git a/manim/utils/color/BS381.py b/manim/utils/color/BS381.py new file mode 100644 index 0000000000..7070e978ff --- /dev/null +++ b/manim/utils/color/BS381.py @@ -0,0 +1,303 @@ +# from https://www.w3schools.com/colors/colors_british.asp +""" +The British Standards for colors is called BS 381. + +These hex values are non official approximate values intended to simulate the BS 381 +""" +from .core import ManimColor + +BS381_101 = ManimColor("#94BFAC") +SKY_BLUE = ManimColor("#94BFAC") +BS381_102 = ManimColor("#5B9291") +TURQUOISE_BLUE = ManimColor("#5B9291") +BS381_103 = ManimColor("#3B6879") +PEACOCK_BLUE = ManimColor("#3B6879") +BS381_104 = ManimColor("#264D7E") +AZURE_BLUE = ManimColor("#264D7E") +BS381_105 = ManimColor("#1F3057") +OXFORD_BLUE = ManimColor("#1F3057") +BS381_106 = ManimColor("#2A283D") +ROYAL_BLUE = ManimColor("#2A283D") +BS381_107 = ManimColor("#3A73A9") +STRONG_BLUE = ManimColor("#3A73A9") +BS381_108 = ManimColor("#173679") +AIRCRAFT_BLUE = ManimColor("#173679") +BS381_109 = ManimColor("#1C5680") +MIDDLE_BLUE = ManimColor("#1C5680") +BS381_110 = ManimColor("#2C3E75") +ROUNDEL_BLUE = ManimColor("#2C3E75") +BS381_111 = ManimColor("#8CC5BB") +PALE_BLUE = ManimColor("#8CC5BB") +BS381_112 = ManimColor("#78ADC2") +ARCTIC_BLUE = ManimColor("#78ADC2") +FIESTA_BLUE = ManimColor("#78ADC2") +BS381_113 = ManimColor("#3F687D") +DEEP_SAXE_BLUE = ManimColor("#3F687D") +BS381_114 = ManimColor("#1F4B61") +RAIL_BLUE = ManimColor("#1F4B61") +BS381_115 = ManimColor("#5F88C1") +COBALT_BLUE = ManimColor("#5F88C1") +BS381_166 = ManimColor("#2458AF") +FRENCH_BLUE = ManimColor("#2458AF") +BS381_169 = ManimColor("#135B75") +TRAFFIC_BLUE = ManimColor("#135B75") +BS381_172 = ManimColor("#A7C6EB") +PALE_ROUNDEL_BLUE = ManimColor("#A7C6EB") +BS381_174 = ManimColor("#64A0AA") +ORIENT_BLUE = ManimColor("#64A0AA") +BS381_175 = ManimColor("#4F81C5") +LIGHT_FRENCH_BLUE = ManimColor("#4F81C5") +BS381_210 = ManimColor("#BBC9A5") +SKY = ManimColor("#BBC9A5") +BS381_216 = ManimColor("#BCD890") +EAU_DE_NIL = ManimColor("#BCD890") +BS381_217 = ManimColor("#96BF65") +SEA_GREEN = ManimColor("#96BF65") +BS381_218 = ManimColor("#698B47") +GRASS_GREEN = ManimColor("#698B47") +BS381_219 = ManimColor("#757639") +SAGE_GREEN = ManimColor("#757639") +BS381_220 = ManimColor("#4B5729") +OLIVE_GREEN = ManimColor("#4B5729") +BS381_221 = ManimColor("#507D3A") +BRILLIANT_GREEN = ManimColor("#507D3A") +BS381_222 = ManimColor("#6A7031") +LIGHT_BRONZE_GREEN = ManimColor("#6A7031") +BS381_223 = ManimColor("#49523A") +MIDDLE_BRONZE_GREEN = ManimColor("#49523A") +BS381_224 = ManimColor("#3E4630") +DEEP_BRONZE_GREEN = ManimColor("#3E4630") +BS381_225 = ManimColor("#406A28") +LIGHT_BRUNSWICK_GREEN = ManimColor("#406A28") +BS381_226 = ManimColor("#33533B") +MID_BRUNSWICK_GREEN = ManimColor("#33533B") +BS381_227 = ManimColor("#254432") +DEEP_BRUNSWICK_GREEN = ManimColor("#254432") +BS381_228 = ManimColor("#428B64") +EMERALD_GREEN = ManimColor("#428B64") +BS381_241 = ManimColor("#4F5241") +DARK_GREEN = ManimColor("#4F5241") +BS381_262 = ManimColor("#44945E") +BOLD_GREEN = ManimColor("#44945E") +BS381_267 = ManimColor("#476A4C") +DEEP_CHROME_GREEN = ManimColor("#476A4C") +TRAFFIC_GREEN = ManimColor("#476A4C") +BS381_275 = ManimColor("#8FC693") +OPALINE_GREEN = ManimColor("#8FC693") +BS381_276 = ManimColor("#2E4C1E") +LINCON_GREEN = ManimColor("#2E4C1E") +BS381_277 = ManimColor("#364A20") +CYPRESS_GREEN = ManimColor("#364A20") +BS381_278 = ManimColor("#87965A") +LIGHT_OLIVE_GREEN = ManimColor("#87965A") +BS381_279 = ManimColor("#3B3629") +STEEL_FURNITURE_GREEN = ManimColor("#3B3629") +BS381_280 = ManimColor("#68AB77") +VERDIGRIS_GREEN = ManimColor("#68AB77") +BS381_282 = ManimColor("#506B52") +FOREST_GREEN = ManimColor("#506B52") +BS381_283 = ManimColor("#7E8F6E") +AIRCRAFT_GREY_GREEN = ManimColor("#7E8F6E") +BS381_284 = ManimColor("#6B6F5A") +SPRUCE_GREEN = ManimColor("#6B6F5A") +BS381_285 = ManimColor("#5F5C4B") +NATO_GREEN = ManimColor("#5F5C4B") +BS381_298 = ManimColor("#4F5138") +OLIVE_DRAB = ManimColor("#4F5138") +BS381_309 = ManimColor("#FEEC04") +CANARY_YELLOW = ManimColor("#FEEC04") +BS381_310 = ManimColor("#FEF963") +PRIMROSE = ManimColor("#FEF963") +BS381_315 = ManimColor("#FEF96A") +GRAPEFRUIT = ManimColor("#FEF96A") +BS381_320 = ManimColor("#9E7339") +LIGHT_BROWN = ManimColor("#9E7339") +BS381_337 = ManimColor("#4C4A3C") +VERY_DARK_DRAB = ManimColor("#4C4A3C") +BS381_350 = ManimColor("#7B6B4F") +DARK_EARTH = ManimColor("#7B6B4F") +BS381_352 = ManimColor("#FCED96") +PALE_CREAM = ManimColor("#FCED96") +BS381_353 = ManimColor("#FDF07A") +DEEP_CREAM = ManimColor("#FDF07A") +BS381_354 = ManimColor("#E9BB43") +PRIMROSE_2 = ManimColor("#E9BB43") +BS381_355 = ManimColor("#FDD906") +LEMON = ManimColor("#FDD906") +BS381_356 = ManimColor("#FCC808") +GOLDEN_YELLOW = ManimColor("#FCC808") +BS381_358 = ManimColor("#F6C870") +LIGHT_BUFF = ManimColor("#F6C870") +BS381_359 = ManimColor("#DBAC50") +MIDDLE_BUFF = ManimColor("#DBAC50") +BS381_361 = ManimColor("#D4B97D") +LIGHT_STONE = ManimColor("#D4B97D") +BS381_362 = ManimColor("#AC7C42") +MIDDLE_STONE = ManimColor("#AC7C42") +BS381_363 = ManimColor("#FDE706") +BOLD_YELLOW = ManimColor("#FDE706") +BS381_364 = ManimColor("#CEC093") +PORTLAND_STONE = ManimColor("#CEC093") +BS381_365 = ManimColor("#F4F0BD") +VELLUM = ManimColor("#F4F0BD") +BS381_366 = ManimColor("#F5E7A1") +LIGHT_BEIGE = ManimColor("#F5E7A1") +BS381_367 = ManimColor("#FEF6BF") +MANILLA = ManimColor("#fef6bf") +BS381_368 = ManimColor("#DD7B00") +TRAFFIC_YELLOW = ManimColor("#DD7B00") +BS381_369 = ManimColor("#FEEBA8") +BISCUIT = ManimColor("#feeba8") +BS381_380 = ManimColor("#BBA38A") +CAMOUFLAGE_DESERT_SAND = ManimColor("#BBA38A") +BS381_384 = ManimColor("#EEDFA5") +LIGHT_STRAW = ManimColor("#EEDFA5") +BS381_385 = ManimColor("#E8C88F") +LIGHT_BISCUIT = ManimColor("#E8C88F") +BS381_386 = ManimColor("#E6C18D") +CHAMPAGNE = ManimColor("#e6c18d") +BS381_387 = ManimColor("#CFB48A") +SUNRISE = ManimColor("#cfb48a") +SUNSHINE = ManimColor("#cfb48a") +BS381_388 = ManimColor("#E4CF93") +BEIGE = ManimColor("#e4cf93") +BS381_389 = ManimColor("#B2A788") +CAMOUFLAGE_BEIGE = ManimColor("#B2A788") +BS381_397 = ManimColor("#F3D163") +JASMINE_YELLOW = ManimColor("#F3D163") +BS381_410 = ManimColor("#93612B") +LIGHT_BROWN = ManimColor("#93612B") +BS381_411 = ManimColor("#74542F") +MIDDLE_BROWN = ManimColor("#74542F") +BS381_412 = ManimColor("#5C422E") +DARK_BROWN = ManimColor("#5C422E") +BS381_413 = ManimColor("#402D21") +NUT_BROWN = ManimColor("#402D21") +BS381_414 = ManimColor("#A86C29") +GOLDEN_BROWN = ManimColor("#A86C29") +BS381_415 = ManimColor("#61361E") +IMPERIAL_BROWN = ManimColor("#61361E") +BS381_420 = ManimColor("#A89177") +DARK_CAMOUFLAGE_DESERT_SAND = ManimColor("#A89177") +BS381_435 = ManimColor("#845B4D") +CAMOUFLAGE_RED = ManimColor("#845B4D") +BS381_436 = ManimColor("#564B47") +DARK_CAMOUFLAGE_BROWN = ManimColor("#564B47") +BS381_437 = ManimColor("#464334") +VERY_DARK_DRAB = ManimColor("#464334") +BS381_439 = ManimColor("#753B1E") +ORANGE_BROWN = ManimColor("#753B1E") +BS381_443 = ManimColor("#C98A71") +SALMON = ManimColor("#c98a71") +BS381_444 = ManimColor("#A65341") +TERRACOTTA = ManimColor("#a65341") +BS381_445 = ManimColor("#83422B") +VENETIAN_RED = ManimColor("#83422B") +BS381_446 = ManimColor("#774430") +RED_OXIDE = ManimColor("#774430") +BS381_447 = ManimColor("#F3B28B") +SALMON_PINK = ManimColor("#F3B28B") +BS381_448 = ManimColor("#67403A") +DEEP_INDIAN_RED = ManimColor("#67403A") +BS381_449 = ManimColor("#693B3F") +LIGHT_PURPLE_BROWN = ManimColor("#693B3F") +BS381_450 = ManimColor("#745F46") +DARK_EARTH = ManimColor("#745F46") +BS381_452 = ManimColor("#613339") +DARK_CRIMSON = ManimColor("#613339") +BS381_453 = ManimColor("#FBDED6") +SHELL_PINK = ManimColor("#FBDED6") +BS381_454 = ManimColor("#E8A1A2") +PALE_ROUNDEL_RED = ManimColor("#E8A1A2") +BS381_460 = ManimColor("#BD8F56") +DEEP_BUFF = ManimColor("#BD8F56") +BS381_473 = ManimColor("#793932") +GULF_RED = ManimColor("#793932") +BS381_489 = ManimColor("#8D5B41") +LEAF_BROWN = ManimColor("#8D5B41") +BS381_490 = ManimColor("#573320") +BEECH_BROWN = ManimColor("#573320") +BS381_499 = ManimColor("#59493E") +SERVICE_BROWN = ManimColor("#59493E") +BS381_536 = ManimColor("#BB3016") +POPPY = ManimColor("#bb3016") +BS381_537 = ManimColor("#DD3420") +SIGNAL_RED = ManimColor("#DD3420") +BS381_538 = ManimColor("#C41C22") +POST_OFFICE_RED = ManimColor("#C41C22") +CHERRY = ManimColor("#c41c22") +BS381_539 = ManimColor("#D21E2B") +CURRANT_RED = ManimColor("#D21E2B") +BS381_540 = ManimColor("#8B1A32") +CRIMSON = ManimColor("#8b1a32") +BS381_541 = ManimColor("#471B21") +MAROON = ManimColor("#471b21") +BS381_542 = ManimColor("#982D57") +RUBY = ManimColor("#982d57") +BS381_557 = ManimColor("#EF841E") +LIGHT_ORANGE = ManimColor("#EF841E") +BS381_564 = ManimColor("#DD3524") +BOLD_RED = ManimColor("#DD3524") +BS381_568 = ManimColor("#FB9C06") +APRICOT = ManimColor("#fb9c06") +BS381_570 = ManimColor("#A83C19") +TRAFFIC_RED = ManimColor("#A83C19") +BS381_591 = ManimColor("#D04E09") +DEEP_ORANGE = ManimColor("#D04E09") +BS381_592 = ManimColor("#E45523") +INTERNATIONAL_ORANGE = ManimColor("#E45523") +BS381_593 = ManimColor("#F24816") +RAIL_RED = ManimColor("#F24816") +AZO_ORANGE = ManimColor("#F24816") +BS381_626 = ManimColor("#A0A9AA") +CAMOUFLAGE_GREY = ManimColor("#A0A9AA") +BS381_627 = ManimColor("#BEC0B8") +LIGHT_AIRCRAFT_GREY = ManimColor("#BEC0B8") +BS381_628 = ManimColor("#9D9D7E") +SILVER_GREY = ManimColor("#9D9D7E") +BS381_629 = ManimColor("#7A838B") +DARK_CAMOUFLAGE_GREY = ManimColor("#7A838B") +BS381_630 = ManimColor("#A5AD98") +FRENCH_GREY = ManimColor("#A5AD98") +BS381_631 = ManimColor("#9AAA9F") +LIGHT_GREY = ManimColor("#9AAA9F") +BS381_632 = ManimColor("#6B7477") +DARK_ADMIRALTY_GREY = ManimColor("#6B7477") +BS381_633 = ManimColor("#424C53") +RAF_BLUE_GREY = ManimColor("#424C53") +BS381_634 = ManimColor("#6F7264") +SLATE = ManimColor("#6f7264") +BS381_635 = ManimColor("#525B55") +LEAD = ManimColor("#525b55") +BS381_636 = ManimColor("#5F7682") +PRU_BLUE = ManimColor("#5F7682") +BS381_637 = ManimColor("#8E9B9C") +MEDIUM_SEA_GREY = ManimColor("#8E9B9C") +BS381_638 = ManimColor("#6C7377") +DARK_SEA_GREY = ManimColor("#6C7377") +BS381_639 = ManimColor("#667563") +LIGHT_SLATE_GREY = ManimColor("#667563") +BS381_640 = ManimColor("#566164") +EXTRA_DARK_SEA_GREY = ManimColor("#566164") +BS381_641 = ManimColor("#484837") +DARK_GREEN = ManimColor("#484837") +BS381_642 = ManimColor("#282B2F") +NIGHT = ManimColor("#282b2f") +BS381_671 = ManimColor("#4E5355") +MIDDLE_GRAPHITE = ManimColor("#4E5355") +BS381_676 = ManimColor("#A9B7B9") +LIGHT_WEATHERWORK_GREY = ManimColor("#A9B7B9") +BS381_677 = ManimColor("#676F76") +DARK_WEATHERWORK_GREY = ManimColor("#676F76") +BS381_692 = ManimColor("#7B93A3") +SMOKE_GREY = ManimColor("#7B93A3") +BS381_693 = ManimColor("#88918D") +AIRCRAFT_GREY = ManimColor("#88918D") +BS381_694 = ManimColor("#909A92") +DOVE_GREY = ManimColor("#909A92") +BS381_697 = ManimColor("#B6D3CC") +LIGHT_ADMIRALTY_GREY = ManimColor("#B6D3CC") +BS381_796 = ManimColor("#6E4A75") +DARK_VIOLET = ManimColor("#6E4A75") +BS381_797 = ManimColor("#C9A8CE") +LIGHT_VIOLET = ManimColor("#C9A8CE") diff --git a/manim/utils/color/X11.py b/manim/utils/color/X11.py new file mode 100644 index 0000000000..9e08f17c5a --- /dev/null +++ b/manim/utils/color/X11.py @@ -0,0 +1,513 @@ +# from https://www.w3schools.com/colors/colors_x11.asp + +""" +This list of X11 color names was developed at the +Massachusetts Intitute of Technology (MIT) during +the development of color based computer display system: +""" +from .core import ManimColor + +ALICEBLUE = ManimColor("#F0F8FF") +ANTIQUEWHITE = ManimColor("#FAEBD7") +ANTIQUEWHITE1 = ManimColor("#FFEFDB") +ANTIQUEWHITE2 = ManimColor("#EEDFCC") +ANTIQUEWHITE3 = ManimColor("#CDC0B0") +ANTIQUEWHITE4 = ManimColor("#8B8378") +AQUAMARINE1 = ManimColor("#7FFFD4") +AQUAMARINE2 = ManimColor("#76EEC6") +AQUAMARINE4 = ManimColor("#458B74") +AZURE1 = ManimColor("#F0FFFF") +AZURE2 = ManimColor("#E0EEEE") +AZURE3 = ManimColor("#C1CDCD") +AZURE4 = ManimColor("#838B8B") +BEIGE = ManimColor("#F5F5DC") +BISQUE1 = ManimColor("#FFE4C4") +BISQUE2 = ManimColor("#EED5B7") +BISQUE3 = ManimColor("#CDB79E") +BISQUE4 = ManimColor("#8B7D6B") +BLACK = ManimColor("#000000") +BLANCHEDALMOND = ManimColor("#FFEBCD") +BLUE1 = ManimColor("#0000FF") +BLUE2 = ManimColor("#0000EE") +BLUE4 = ManimColor("#00008B") +BLUEVIOLET = ManimColor("#8A2BE2") +BROWN = ManimColor("#A52A2A") +BROWN1 = ManimColor("#FF4040") +BROWN2 = ManimColor("#EE3B3B") +BROWN3 = ManimColor("#CD3333") +BROWN4 = ManimColor("#8B2323") +BURLYWOOD = ManimColor("#DEB887") +BURLYWOOD1 = ManimColor("#FFD39B") +BURLYWOOD2 = ManimColor("#EEC591") +BURLYWOOD3 = ManimColor("#CDAA7D") +BURLYWOOD4 = ManimColor("#8B7355") +CADETBLUE = ManimColor("#5F9EA0") +CADETBLUE1 = ManimColor("#98F5FF") +CADETBLUE2 = ManimColor("#8EE5EE") +CADETBLUE3 = ManimColor("#7AC5CD") +CADETBLUE4 = ManimColor("#53868B") +CHARTREUSE1 = ManimColor("#7FFF00") +CHARTREUSE2 = ManimColor("#76EE00") +CHARTREUSE3 = ManimColor("#66CD00") +CHARTREUSE4 = ManimColor("#458B00") +CHOCOLATE = ManimColor("#D2691E") +CHOCOLATE1 = ManimColor("#FF7F24") +CHOCOLATE2 = ManimColor("#EE7621") +CHOCOLATE3 = ManimColor("#CD661D") +CORAL = ManimColor("#FF7F50") +CORAL1 = ManimColor("#FF7256") +CORAL2 = ManimColor("#EE6A50") +CORAL3 = ManimColor("#CD5B45") +CORAL4 = ManimColor("#8B3E2F") +CORNFLOWERBLUE = ManimColor("#6495ED") +CORNSILK1 = ManimColor("#FFF8DC") +CORNSILK2 = ManimColor("#EEE8CD") +CORNSILK3 = ManimColor("#CDC8B1") +CORNSILK4 = ManimColor("#8B8878") +CYAN1 = ManimColor("#00FFFF") +CYAN2 = ManimColor("#00EEEE") +CYAN3 = ManimColor("#00CDCD") +CYAN4 = ManimColor("#008B8B") +DARKGOLDENROD = ManimColor("#B8860B") +DARKGOLDENROD1 = ManimColor("#FFB90F") +DARKGOLDENROD2 = ManimColor("#EEAD0E") +DARKGOLDENROD3 = ManimColor("#CD950C") +DARKGOLDENROD4 = ManimColor("#8B6508") +DARKGREEN = ManimColor("#006400") +DARKKHAKI = ManimColor("#BDB76B") +DARKOLIVEGREEN = ManimColor("#556B2F") +DARKOLIVEGREEN1 = ManimColor("#CAFF70") +DARKOLIVEGREEN2 = ManimColor("#BCEE68") +DARKOLIVEGREEN3 = ManimColor("#A2CD5A") +DARKOLIVEGREEN4 = ManimColor("#6E8B3D") +DARKORANGE = ManimColor("#FF8C00") +DARKORANGE1 = ManimColor("#FF7F00") +DARKORANGE2 = ManimColor("#EE7600") +DARKORANGE3 = ManimColor("#CD6600") +DARKORANGE4 = ManimColor("#8B4500") +DARKORCHID = ManimColor("#9932CC") +DARKORCHID1 = ManimColor("#BF3EFF") +DARKORCHID2 = ManimColor("#B23AEE") +DARKORCHID3 = ManimColor("#9A32CD") +DARKORCHID4 = ManimColor("#68228B") +DARKSALMON = ManimColor("#E9967A") +DARKSEAGREEN = ManimColor("#8FBC8F") +DARKSEAGREEN1 = ManimColor("#C1FFC1") +DARKSEAGREEN2 = ManimColor("#B4EEB4") +DARKSEAGREEN3 = ManimColor("#9BCD9B") +DARKSEAGREEN4 = ManimColor("#698B69") +DARKSLATEBLUE = ManimColor("#483D8B") +DARKSLATEGRAY = ManimColor("#2F4F4F") +DARKSLATEGRAY1 = ManimColor("#97FFFF") +DARKSLATEGRAY2 = ManimColor("#8DEEEE") +DARKSLATEGRAY3 = ManimColor("#79CDCD") +DARKSLATEGRAY4 = ManimColor("#528B8B") +DARKTURQUOISE = ManimColor("#00CED1") +DARKVIOLET = ManimColor("#9400D3") +DEEPPINK1 = ManimColor("#FF1493") +DEEPPINK2 = ManimColor("#EE1289") +DEEPPINK3 = ManimColor("#CD1076") +DEEPPINK4 = ManimColor("#8B0A50") +DEEPSKYBLUE1 = ManimColor("#00BFFF") +DEEPSKYBLUE2 = ManimColor("#00B2EE") +DEEPSKYBLUE3 = ManimColor("#009ACD") +DEEPSKYBLUE4 = ManimColor("#00688B") +DIMGRAY = ManimColor("#696969") +DODGERBLUE1 = ManimColor("#1E90FF") +DODGERBLUE2 = ManimColor("#1C86EE") +DODGERBLUE3 = ManimColor("#1874CD") +DODGERBLUE4 = ManimColor("#104E8B") +FIREBRICK = ManimColor("#B22222") +FIREBRICK1 = ManimColor("#FF3030") +FIREBRICK2 = ManimColor("#EE2C2C") +FIREBRICK3 = ManimColor("#CD2626") +FIREBRICK4 = ManimColor("#8B1A1A") +FLORALWHITE = ManimColor("#FFFAF0") +FORESTGREEN = ManimColor("#228B22") +GAINSBORO = ManimColor("#DCDCDC") +GHOSTWHITE = ManimColor("#F8F8FF") +GOLD1 = ManimColor("#FFD700") +GOLD2 = ManimColor("#EEC900") +GOLD3 = ManimColor("#CDAD00") +GOLD4 = ManimColor("#8B7500") +GOLDENROD = ManimColor("#DAA520") +GOLDENROD1 = ManimColor("#FFC125") +GOLDENROD2 = ManimColor("#EEB422") +GOLDENROD3 = ManimColor("#CD9B1D") +GOLDENROD4 = ManimColor("#8B6914") +GRAY = ManimColor("#BEBEBE") +GRAY1 = ManimColor("#030303") +GRAY2 = ManimColor("#050505") +GRAY3 = ManimColor("#080808") +GRAY4 = ManimColor("#0A0A0A") +GRAY5 = ManimColor("#0D0D0D") +GRAY6 = ManimColor("#0F0F0F") +GRAY7 = ManimColor("#121212") +GRAY8 = ManimColor("#141414") +GRAY9 = ManimColor("#171717") +GRAY10 = ManimColor("#1A1A1A") +GRAY11 = ManimColor("#1C1C1C") +GRAY12 = ManimColor("#1F1F1F") +GRAY13 = ManimColor("#212121") +GRAY14 = ManimColor("#242424") +GRAY15 = ManimColor("#262626") +GRAY16 = ManimColor("#292929") +GRAY17 = ManimColor("#2B2B2B") +GRAY18 = ManimColor("#2E2E2E") +GRAY19 = ManimColor("#303030") +GRAY20 = ManimColor("#333333") +GRAY21 = ManimColor("#363636") +GRAY22 = ManimColor("#383838") +GRAY23 = ManimColor("#3B3B3B") +GRAY24 = ManimColor("#3D3D3D") +GRAY25 = ManimColor("#404040") +GRAY26 = ManimColor("#424242") +GRAY27 = ManimColor("#454545") +GRAY28 = ManimColor("#474747") +GRAY29 = ManimColor("#4A4A4A") +GRAY30 = ManimColor("#4D4D4D") +GRAY31 = ManimColor("#4F4F4F") +GRAY32 = ManimColor("#525252") +GRAY33 = ManimColor("#545454") +GRAY34 = ManimColor("#575757") +GRAY35 = ManimColor("#595959") +GRAY36 = ManimColor("#5C5C5C") +GRAY37 = ManimColor("#5E5E5E") +GRAY38 = ManimColor("#616161") +GRAY39 = ManimColor("#636363") +GRAY40 = ManimColor("#666666") +GRAY41 = ManimColor("#696969") +GRAY42 = ManimColor("#6B6B6B") +GRAY43 = ManimColor("#6E6E6E") +GRAY44 = ManimColor("#707070") +GRAY45 = ManimColor("#737373") +GRAY46 = ManimColor("#757575") +GRAY47 = ManimColor("#787878") +GRAY48 = ManimColor("#7A7A7A") +GRAY49 = ManimColor("#7D7D7D") +GRAY50 = ManimColor("#7F7F7F") +GRAY51 = ManimColor("#828282") +GRAY52 = ManimColor("#858585") +GRAY53 = ManimColor("#878787") +GRAY54 = ManimColor("#8A8A8A") +GRAY55 = ManimColor("#8C8C8C") +GRAY56 = ManimColor("#8F8F8F") +GRAY57 = ManimColor("#919191") +GRAY58 = ManimColor("#949494") +GRAY59 = ManimColor("#969696") +GRAY60 = ManimColor("#999999") +GRAY61 = ManimColor("#9C9C9C") +GRAY62 = ManimColor("#9E9E9E") +GRAY63 = ManimColor("#A1A1A1") +GRAY64 = ManimColor("#A3A3A3") +GRAY65 = ManimColor("#A6A6A6") +GRAY66 = ManimColor("#A8A8A8") +GRAY67 = ManimColor("#ABABAB") +GRAY68 = ManimColor("#ADADAD") +GRAY69 = ManimColor("#B0B0B0") +GRAY70 = ManimColor("#B3B3B3") +GRAY71 = ManimColor("#B5B5B5") +GRAY72 = ManimColor("#B8B8B8") +GRAY73 = ManimColor("#BABABA") +GRAY74 = ManimColor("#BDBDBD") +GRAY75 = ManimColor("#BFBFBF") +GRAY76 = ManimColor("#C2C2C2") +GRAY77 = ManimColor("#C4C4C4") +GRAY78 = ManimColor("#C7C7C7") +GRAY79 = ManimColor("#C9C9C9") +GRAY80 = ManimColor("#CCCCCC") +GRAY81 = ManimColor("#CFCFCF") +GRAY82 = ManimColor("#D1D1D1") +GRAY83 = ManimColor("#D4D4D4") +GRAY84 = ManimColor("#D6D6D6") +GRAY85 = ManimColor("#D9D9D9") +GRAY86 = ManimColor("#DBDBDB") +GRAY87 = ManimColor("#DEDEDE") +GRAY88 = ManimColor("#E0E0E0") +GRAY89 = ManimColor("#E3E3E3") +GRAY90 = ManimColor("#E5E5E5") +GRAY91 = ManimColor("#E8E8E8") +GRAY92 = ManimColor("#EBEBEB") +GRAY93 = ManimColor("#EDEDED") +GRAY94 = ManimColor("#F0F0F0") +GRAY95 = ManimColor("#F2F2F2") +GRAY97 = ManimColor("#F7F7F7") +GRAY98 = ManimColor("#FAFAFA") +GRAY99 = ManimColor("#FCFCFC") +GREEN1 = ManimColor("#00FF00") +GREEN2 = ManimColor("#00EE00") +GREEN3 = ManimColor("#00CD00") +GREEN4 = ManimColor("#008B00") +GREENYELLOW = ManimColor("#ADFF2F") +HONEYDEW1 = ManimColor("#F0FFF0") +HONEYDEW2 = ManimColor("#E0EEE0") +HONEYDEW3 = ManimColor("#C1CDC1") +HONEYDEW4 = ManimColor("#838B83") +HOTPINK = ManimColor("#FF69B4") +HOTPINK1 = ManimColor("#FF6EB4") +HOTPINK2 = ManimColor("#EE6AA7") +HOTPINK3 = ManimColor("#CD6090") +HOTPINK4 = ManimColor("#8B3A62") +INDIANRED = ManimColor("#CD5C5C") +INDIANRED1 = ManimColor("#FF6A6A") +INDIANRED2 = ManimColor("#EE6363") +INDIANRED3 = ManimColor("#CD5555") +INDIANRED4 = ManimColor("#8B3A3A") +IVORY1 = ManimColor("#FFFFF0") +IVORY2 = ManimColor("#EEEEE0") +IVORY3 = ManimColor("#CDCDC1") +IVORY4 = ManimColor("#8B8B83") +KHAKI = ManimColor("#F0E68C") +KHAKI1 = ManimColor("#FFF68F") +KHAKI2 = ManimColor("#EEE685") +KHAKI3 = ManimColor("#CDC673") +KHAKI4 = ManimColor("#8B864E") +LAVENDER = ManimColor("#E6E6FA") +LAVENDERBLUSH1 = ManimColor("#FFF0F5") +LAVENDERBLUSH2 = ManimColor("#EEE0E5") +LAVENDERBLUSH3 = ManimColor("#CDC1C5") +LAVENDERBLUSH4 = ManimColor("#8B8386") +LAWNGREEN = ManimColor("#7CFC00") +LEMONCHIFFON1 = ManimColor("#FFFACD") +LEMONCHIFFON2 = ManimColor("#EEE9BF") +LEMONCHIFFON3 = ManimColor("#CDC9A5") +LEMONCHIFFON4 = ManimColor("#8B8970") +LIGHT = ManimColor("#EEDD82") +LIGHTBLUE = ManimColor("#ADD8E6") +LIGHTBLUE1 = ManimColor("#BFEFFF") +LIGHTBLUE2 = ManimColor("#B2DFEE") +LIGHTBLUE3 = ManimColor("#9AC0CD") +LIGHTBLUE4 = ManimColor("#68838B") +LIGHTCORAL = ManimColor("#F08080") +LIGHTCYAN1 = ManimColor("#E0FFFF") +LIGHTCYAN2 = ManimColor("#D1EEEE") +LIGHTCYAN3 = ManimColor("#B4CDCD") +LIGHTCYAN4 = ManimColor("#7A8B8B") +LIGHTGOLDENROD1 = ManimColor("#FFEC8B") +LIGHTGOLDENROD2 = ManimColor("#EEDC82") +LIGHTGOLDENROD3 = ManimColor("#CDBE70") +LIGHTGOLDENROD4 = ManimColor("#8B814C") +LIGHTGOLDENRODYELLOW = ManimColor("#FAFAD2") +LIGHTGRAY = ManimColor("#D3D3D3") +LIGHTPINK = ManimColor("#FFB6C1") +LIGHTPINK1 = ManimColor("#FFAEB9") +LIGHTPINK2 = ManimColor("#EEA2AD") +LIGHTPINK3 = ManimColor("#CD8C95") +LIGHTPINK4 = ManimColor("#8B5F65") +LIGHTSALMON1 = ManimColor("#FFA07A") +LIGHTSALMON2 = ManimColor("#EE9572") +LIGHTSALMON3 = ManimColor("#CD8162") +LIGHTSALMON4 = ManimColor("#8B5742") +LIGHTSEAGREEN = ManimColor("#20B2AA") +LIGHTSKYBLUE = ManimColor("#87CEFA") +LIGHTSKYBLUE1 = ManimColor("#B0E2FF") +LIGHTSKYBLUE2 = ManimColor("#A4D3EE") +LIGHTSKYBLUE3 = ManimColor("#8DB6CD") +LIGHTSKYBLUE4 = ManimColor("#607B8B") +LIGHTSLATEBLUE = ManimColor("#8470FF") +LIGHTSLATEGRAY = ManimColor("#778899") +LIGHTSTEELBLUE = ManimColor("#B0C4DE") +LIGHTSTEELBLUE1 = ManimColor("#CAE1FF") +LIGHTSTEELBLUE2 = ManimColor("#BCD2EE") +LIGHTSTEELBLUE3 = ManimColor("#A2B5CD") +LIGHTSTEELBLUE4 = ManimColor("#6E7B8B") +LIGHTYELLOW1 = ManimColor("#FFFFE0") +LIGHTYELLOW2 = ManimColor("#EEEED1") +LIGHTYELLOW3 = ManimColor("#CDCDB4") +LIGHTYELLOW4 = ManimColor("#8B8B7A") +LIMEGREEN = ManimColor("#32CD32") +LINEN = ManimColor("#FAF0E6") +MAGENTA = ManimColor("#FF00FF") +MAGENTA2 = ManimColor("#EE00EE") +MAGENTA3 = ManimColor("#CD00CD") +MAGENTA4 = ManimColor("#8B008B") +MAROON = ManimColor("#B03060") +MAROON1 = ManimColor("#FF34B3") +MAROON2 = ManimColor("#EE30A7") +MAROON3 = ManimColor("#CD2990") +MAROON4 = ManimColor("#8B1C62") +MEDIUM = ManimColor("#66CDAA") +MEDIUMAQUAMARINE = ManimColor("#66CDAA") +MEDIUMBLUE = ManimColor("#0000CD") +MEDIUMORCHID = ManimColor("#BA55D3") +MEDIUMORCHID1 = ManimColor("#E066FF") +MEDIUMORCHID2 = ManimColor("#D15FEE") +MEDIUMORCHID3 = ManimColor("#B452CD") +MEDIUMORCHID4 = ManimColor("#7A378B") +MEDIUMPURPLE = ManimColor("#9370DB") +MEDIUMPURPLE1 = ManimColor("#AB82FF") +MEDIUMPURPLE2 = ManimColor("#9F79EE") +MEDIUMPURPLE3 = ManimColor("#8968CD") +MEDIUMPURPLE4 = ManimColor("#5D478B") +MEDIUMSEAGREEN = ManimColor("#3CB371") +MEDIUMSLATEBLUE = ManimColor("#7B68EE") +MEDIUMSPRINGGREEN = ManimColor("#00FA9A") +MEDIUMTURQUOISE = ManimColor("#48D1CC") +MEDIUMVIOLETRED = ManimColor("#C71585") +MIDNIGHTBLUE = ManimColor("#191970") +MINTCREAM = ManimColor("#F5FFFA") +MISTYROSE1 = ManimColor("#FFE4E1") +MISTYROSE2 = ManimColor("#EED5D2") +MISTYROSE3 = ManimColor("#CDB7B5") +MISTYROSE4 = ManimColor("#8B7D7B") +MOCCASIN = ManimColor("#FFE4B5") +NAVAJOWHITE1 = ManimColor("#FFDEAD") +NAVAJOWHITE2 = ManimColor("#EECFA1") +NAVAJOWHITE3 = ManimColor("#CDB38B") +NAVAJOWHITE4 = ManimColor("#8B795E") +NAVYBLUE = ManimColor("#000080") +OLDLACE = ManimColor("#FDF5E6") +OLIVEDRAB = ManimColor("#6B8E23") +OLIVEDRAB1 = ManimColor("#C0FF3E") +OLIVEDRAB2 = ManimColor("#B3EE3A") +OLIVEDRAB4 = ManimColor("#698B22") +ORANGE1 = ManimColor("#FFA500") +ORANGE2 = ManimColor("#EE9A00") +ORANGE3 = ManimColor("#CD8500") +ORANGE4 = ManimColor("#8B5A00") +ORANGERED1 = ManimColor("#FF4500") +ORANGERED2 = ManimColor("#EE4000") +ORANGERED3 = ManimColor("#CD3700") +ORANGERED4 = ManimColor("#8B2500") +ORCHID = ManimColor("#DA70D6") +ORCHID1 = ManimColor("#FF83FA") +ORCHID2 = ManimColor("#EE7AE9") +ORCHID3 = ManimColor("#CD69C9") +ORCHID4 = ManimColor("#8B4789") +PALE = ManimColor("#DB7093") +PALEGOLDENROD = ManimColor("#EEE8AA") +PALEGREEN = ManimColor("#98FB98") +PALEGREEN1 = ManimColor("#9AFF9A") +PALEGREEN2 = ManimColor("#90EE90") +PALEGREEN3 = ManimColor("#7CCD7C") +PALEGREEN4 = ManimColor("#548B54") +PALETURQUOISE = ManimColor("#AFEEEE") +PALETURQUOISE1 = ManimColor("#BBFFFF") +PALETURQUOISE2 = ManimColor("#AEEEEE") +PALETURQUOISE3 = ManimColor("#96CDCD") +PALETURQUOISE4 = ManimColor("#668B8B") +PALEVIOLETRED = ManimColor("#DB7093") +PALEVIOLETRED1 = ManimColor("#FF82AB") +PALEVIOLETRED2 = ManimColor("#EE799F") +PALEVIOLETRED3 = ManimColor("#CD6889") +PALEVIOLETRED4 = ManimColor("#8B475D") +PAPAYAWHIP = ManimColor("#FFEFD5") +PEACHPUFF1 = ManimColor("#FFDAB9") +PEACHPUFF2 = ManimColor("#EECBAD") +PEACHPUFF3 = ManimColor("#CDAF95") +PEACHPUFF4 = ManimColor("#8B7765") +PINK = ManimColor("#FFC0CB") +PINK1 = ManimColor("#FFB5C5") +PINK2 = ManimColor("#EEA9B8") +PINK3 = ManimColor("#CD919E") +PINK4 = ManimColor("#8B636C") +PLUM = ManimColor("#DDA0DD") +PLUM1 = ManimColor("#FFBBFF") +PLUM2 = ManimColor("#EEAEEE") +PLUM3 = ManimColor("#CD96CD") +PLUM4 = ManimColor("#8B668B") +POWDERBLUE = ManimColor("#B0E0E6") +PURPLE = ManimColor("#A020F0") +PURPLE1 = ManimColor("#9B30FF") +PURPLE2 = ManimColor("#912CEE") +PURPLE3 = ManimColor("#7D26CD") +PURPLE4 = ManimColor("#551A8B") +RED1 = ManimColor("#FF0000") +RED2 = ManimColor("#EE0000") +RED3 = ManimColor("#CD0000") +RED4 = ManimColor("#8B0000") +ROSYBROWN = ManimColor("#BC8F8F") +ROSYBROWN1 = ManimColor("#FFC1C1") +ROSYBROWN2 = ManimColor("#EEB4B4") +ROSYBROWN3 = ManimColor("#CD9B9B") +ROSYBROWN4 = ManimColor("#8B6969") +ROYALBLUE = ManimColor("#4169E1") +ROYALBLUE1 = ManimColor("#4876FF") +ROYALBLUE2 = ManimColor("#436EEE") +ROYALBLUE3 = ManimColor("#3A5FCD") +ROYALBLUE4 = ManimColor("#27408B") +SADDLEBROWN = ManimColor("#8B4513") +SALMON = ManimColor("#FA8072") +SALMON1 = ManimColor("#FF8C69") +SALMON2 = ManimColor("#EE8262") +SALMON3 = ManimColor("#CD7054") +SALMON4 = ManimColor("#8B4C39") +SANDYBROWN = ManimColor("#F4A460") +SEAGREEN1 = ManimColor("#54FF9F") +SEAGREEN2 = ManimColor("#4EEE94") +SEAGREEN3 = ManimColor("#43CD80") +SEAGREEN4 = ManimColor("#2E8B57") +SEASHELL1 = ManimColor("#FFF5EE") +SEASHELL2 = ManimColor("#EEE5DE") +SEASHELL3 = ManimColor("#CDC5BF") +SEASHELL4 = ManimColor("#8B8682") +SIENNA = ManimColor("#A0522D") +SIENNA1 = ManimColor("#FF8247") +SIENNA2 = ManimColor("#EE7942") +SIENNA3 = ManimColor("#CD6839") +SIENNA4 = ManimColor("#8B4726") +SKYBLUE = ManimColor("#87CEEB") +SKYBLUE1 = ManimColor("#87CEFF") +SKYBLUE2 = ManimColor("#7EC0EE") +SKYBLUE3 = ManimColor("#6CA6CD") +SKYBLUE4 = ManimColor("#4A708B") +SLATEBLUE = ManimColor("#6A5ACD") +SLATEBLUE1 = ManimColor("#836FFF") +SLATEBLUE2 = ManimColor("#7A67EE") +SLATEBLUE3 = ManimColor("#6959CD") +SLATEBLUE4 = ManimColor("#473C8B") +SLATEGRAY = ManimColor("#708090") +SLATEGRAY1 = ManimColor("#C6E2FF") +SLATEGRAY2 = ManimColor("#B9D3EE") +SLATEGRAY3 = ManimColor("#9FB6CD") +SLATEGRAY4 = ManimColor("#6C7B8B") +SNOW1 = ManimColor("#FFFAFA") +SNOW2 = ManimColor("#EEE9E9") +SNOW3 = ManimColor("#CDC9C9") +SNOW4 = ManimColor("#8B8989") +SPRINGGREEN1 = ManimColor("#00FF7F") +SPRINGGREEN2 = ManimColor("#00EE76") +SPRINGGREEN3 = ManimColor("#00CD66") +SPRINGGREEN4 = ManimColor("#008B45") +STEELBLUE = ManimColor("#4682B4") +STEELBLUE1 = ManimColor("#63B8FF") +STEELBLUE2 = ManimColor("#5CACEE") +STEELBLUE3 = ManimColor("#4F94CD") +STEELBLUE4 = ManimColor("#36648B") +TAN = ManimColor("#D2B48C") +TAN1 = ManimColor("#FFA54F") +TAN2 = ManimColor("#EE9A49") +TAN3 = ManimColor("#CD853F") +TAN4 = ManimColor("#8B5A2B") +THISTLE = ManimColor("#D8BFD8") +THISTLE1 = ManimColor("#FFE1FF") +THISTLE2 = ManimColor("#EED2EE") +THISTLE3 = ManimColor("#CDB5CD") +THISTLE4 = ManimColor("#8B7B8B") +TOMATO1 = ManimColor("#FF6347") +TOMATO2 = ManimColor("#EE5C42") +TOMATO3 = ManimColor("#CD4F39") +TOMATO4 = ManimColor("#8B3626") +TURQUOISE = ManimColor("#40E0D0") +TURQUOISE1 = ManimColor("#00F5FF") +TURQUOISE2 = ManimColor("#00E5EE") +TURQUOISE3 = ManimColor("#00C5CD") +TURQUOISE4 = ManimColor("#00868B") +VIOLET = ManimColor("#EE82EE") +VIOLETRED = ManimColor("#D02090") +VIOLETRED1 = ManimColor("#FF3E96") +VIOLETRED2 = ManimColor("#EE3A8C") +VIOLETRED3 = ManimColor("#CD3278") +VIOLETRED4 = ManimColor("#8B2252") +WHEAT = ManimColor("#F5DEB3") +WHEAT1 = ManimColor("#FFE7BA") +WHEAT2 = ManimColor("#EED8AE") +WHEAT3 = ManimColor("#CDBA96") +WHEAT4 = ManimColor("#8B7E66") +WHITE = ManimColor("#FFFFFF") +WHITESMOKE = ManimColor("#F5F5F5") +YELLOW1 = ManimColor("#FFFF00") +YELLOW2 = ManimColor("#EEEE00") +YELLOW3 = ManimColor("#CDCD00") +YELLOW4 = ManimColor("#8B8B00") +YELLOWGREEN = ManimColor("#9ACD32") diff --git a/manim/utils/color/XKCD.py b/manim/utils/color/XKCD.py new file mode 100644 index 0000000000..3c7a0aabac --- /dev/null +++ b/manim/utils/color/XKCD.py @@ -0,0 +1,932 @@ +# from https://www.w3schools.com/colors/colors_xkcd.asp +""" +XKCD Color Names + +XKCD is a popular web comic created by Randall Munroe. +His "Color Name Survey" (with 200 000 participants) resulted in a list of nearly 1000 color names. +These hex values are non official approximate values intended to simulate the colors in HTML: +""" +from .core import ManimColor + +ACIDGREEN = ManimColor("#8FFE09") +ADOBE = ManimColor("#BD6C48") +ALGAE = ManimColor("#54AC68") +ALGAEGREEN = ManimColor("#21C36F") +ALMOSTBLACK = ManimColor("#070D0D") +AMBER = ManimColor("#FEB308") +AMETHYST = ManimColor("#9B5FC0") +APPLE = ManimColor("#6ECB3C") +APPLEGREEN = ManimColor("#76CD26") +APRICOT = ManimColor("#FFB16D") +AQUA = ManimColor("#13EAC9") +AQUABLUE = ManimColor("#02D8E9") +AQUAGREEN = ManimColor("#12E193") +AQUAMARINE = ManimColor("#2EE8BB") +ARMYGREEN = ManimColor("#4B5D16") +ASPARAGUS = ManimColor("#77AB56") +AUBERGINE = ManimColor("#3D0734") +AUBURN = ManimColor("#9A3001") +AVOCADO = ManimColor("#90B134") +AVOCADOGREEN = ManimColor("#87A922") +AZUL = ManimColor("#1D5DEC") +AZURE = ManimColor("#069AF3") +BABYBLUE = ManimColor("#A2CFFE") +BABYGREEN = ManimColor("#8CFF9E") +BABYPINK = ManimColor("#FFB7CE") +BABYPOO = ManimColor("#AB9004") +BABYPOOP = ManimColor("#937C00") +BABYPOOPGREEN = ManimColor("#8F9805") +BABYPUKEGREEN = ManimColor("#B6C406") +BABYPURPLE = ManimColor("#CA9BF7") +BABYSHITBROWN = ManimColor("#AD900D") +BABYSHITGREEN = ManimColor("#889717") +BANANA = ManimColor("#FFFF7E") +BANANAYELLOW = ManimColor("#FAFE4B") +BARBIEPINK = ManimColor("#FE46A5") +BARFGREEN = ManimColor("#94AC02") +BARNEY = ManimColor("#AC1DB8") +BARNEYPURPLE = ManimColor("#A00498") +BATTLESHIPGREY = ManimColor("#6B7C85") +BEIGE = ManimColor("#E6DAA6") +BERRY = ManimColor("#990F4B") +BILE = ManimColor("#B5C306") +BLACK = ManimColor("#000000") +BLAND = ManimColor("#AFA88B") +BLOOD = ManimColor("#770001") +BLOODORANGE = ManimColor("#FE4B03") +BLOODRED = ManimColor("#980002") +BLUE = ManimColor("#0343DF") +BLUEBERRY = ManimColor("#464196") +BLUEBLUE = ManimColor("#2242C7") +BLUEGREEN = ManimColor("#0F9B8E") +BLUEGREY = ManimColor("#85A3B2") +BLUEPURPLE = ManimColor("#5A06EF") +BLUEVIOLET = ManimColor("#5D06E9") +BLUEWITHAHINTOFPURPLE = ManimColor("#533CC6") +BLUEYGREEN = ManimColor("#2BB179") +BLUEYGREY = ManimColor("#89A0B0") +BLUEYPURPLE = ManimColor("#6241C7") +BLUISH = ManimColor("#2976BB") +BLUISHGREEN = ManimColor("#10A674") +BLUISHGREY = ManimColor("#748B97") +BLUISHPURPLE = ManimColor("#703BE7") +BLURPLE = ManimColor("#5539CC") +BLUSH = ManimColor("#F29E8E") +BLUSHPINK = ManimColor("#FE828C") +BOOGER = ManimColor("#9BB53C") +BOOGERGREEN = ManimColor("#96B403") +BORDEAUX = ManimColor("#7B002C") +BORINGGREEN = ManimColor("#63B365") +BOTTLEGREEN = ManimColor("#044A05") +BRICK = ManimColor("#A03623") +BRICKORANGE = ManimColor("#C14A09") +BRICKRED = ManimColor("#8F1402") +BRIGHTAQUA = ManimColor("#0BF9EA") +BRIGHTBLUE = ManimColor("#0165FC") +BRIGHTCYAN = ManimColor("#41FDFE") +BRIGHTGREEN = ManimColor("#01FF07") +BRIGHTLAVENDER = ManimColor("#C760FF") +BRIGHTLIGHTBLUE = ManimColor("#26F7FD") +BRIGHTLIGHTGREEN = ManimColor("#2DFE54") +BRIGHTLILAC = ManimColor("#C95EFB") +BRIGHTLIME = ManimColor("#87FD05") +BRIGHTLIMEGREEN = ManimColor("#65FE08") +BRIGHTMAGENTA = ManimColor("#FF08E8") +BRIGHTOLIVE = ManimColor("#9CBB04") +BRIGHTORANGE = ManimColor("#FF5B00") +BRIGHTPINK = ManimColor("#FE01B1") +BRIGHTPURPLE = ManimColor("#BE03FD") +BRIGHTRED = ManimColor("#FF000D") +BRIGHTSEAGREEN = ManimColor("#05FFA6") +BRIGHTSKYBLUE = ManimColor("#02CCFE") +BRIGHTTEAL = ManimColor("#01F9C6") +BRIGHTTURQUOISE = ManimColor("#0FFEF9") +BRIGHTVIOLET = ManimColor("#AD0AFD") +BRIGHTYELLOW = ManimColor("#FFFD01") +BRIGHTYELLOWGREEN = ManimColor("#9DFF00") +BRITISHRACINGGREEN = ManimColor("#05480D") +BRONZE = ManimColor("#A87900") +BROWN = ManimColor("#653700") +BROWNGREEN = ManimColor("#706C11") +BROWNGREY = ManimColor("#8D8468") +BROWNISH = ManimColor("#9C6D57") +BROWNISHGREEN = ManimColor("#6A6E09") +BROWNISHGREY = ManimColor("#86775F") +BROWNISHORANGE = ManimColor("#CB7723") +BROWNISHPINK = ManimColor("#C27E79") +BROWNISHPURPLE = ManimColor("#76424E") +BROWNISHRED = ManimColor("#9E3623") +BROWNISHYELLOW = ManimColor("#C9B003") +BROWNORANGE = ManimColor("#B96902") +BROWNRED = ManimColor("#922B05") +BROWNYELLOW = ManimColor("#B29705") +BROWNYGREEN = ManimColor("#6F6C0A") +BROWNYORANGE = ManimColor("#CA6B02") +BRUISE = ManimColor("#7E4071") +BUBBLEGUM = ManimColor("#FF6CB5") +BUBBLEGUMPINK = ManimColor("#FF69AF") +BUFF = ManimColor("#FEF69E") +BURGUNDY = ManimColor("#610023") +BURNTORANGE = ManimColor("#C04E01") +BURNTRED = ManimColor("#9F2305") +BURNTSIENA = ManimColor("#B75203") +BURNTSIENNA = ManimColor("#B04E0F") +BURNTUMBER = ManimColor("#A0450E") +BURNTYELLOW = ManimColor("#D5AB09") +BURPLE = ManimColor("#6832E3") +BUTTER = ManimColor("#FFFF81") +BUTTERSCOTCH = ManimColor("#FDB147") +BUTTERYELLOW = ManimColor("#FFFD74") +CADETBLUE = ManimColor("#4E7496") +CAMEL = ManimColor("#C69F59") +CAMO = ManimColor("#7F8F4E") +CAMOGREEN = ManimColor("#526525") +CAMOUFLAGEGREEN = ManimColor("#4B6113") +CANARY = ManimColor("#FDFF63") +CANARYYELLOW = ManimColor("#FFFE40") +CANDYPINK = ManimColor("#FF63E9") +CARAMEL = ManimColor("#AF6F09") +CARMINE = ManimColor("#9D0216") +CARNATION = ManimColor("#FD798F") +CARNATIONPINK = ManimColor("#FF7FA7") +CAROLINABLUE = ManimColor("#8AB8FE") +CELADON = ManimColor("#BEFDB7") +CELERY = ManimColor("#C1FD95") +CEMENT = ManimColor("#A5A391") +CERISE = ManimColor("#DE0C62") +CERULEAN = ManimColor("#0485D1") +CERULEANBLUE = ManimColor("#056EEE") +CHARCOAL = ManimColor("#343837") +CHARCOALGREY = ManimColor("#3C4142") +CHARTREUSE = ManimColor("#C1F80A") +CHERRY = ManimColor("#CF0234") +CHERRYRED = ManimColor("#F7022A") +CHESTNUT = ManimColor("#742802") +CHOCOLATE = ManimColor("#3D1C02") +CHOCOLATEBROWN = ManimColor("#411900") +CINNAMON = ManimColor("#AC4F06") +CLARET = ManimColor("#680018") +CLAY = ManimColor("#B66A50") +CLAYBROWN = ManimColor("#B2713D") +CLEARBLUE = ManimColor("#247AFD") +COBALT = ManimColor("#1E488F") +COBALTBLUE = ManimColor("#030AA7") +COCOA = ManimColor("#875F42") +COFFEE = ManimColor("#A6814C") +COOLBLUE = ManimColor("#4984B8") +COOLGREEN = ManimColor("#33B864") +COOLGREY = ManimColor("#95A3A6") +COPPER = ManimColor("#B66325") +CORAL = ManimColor("#FC5A50") +CORALPINK = ManimColor("#FF6163") +CORNFLOWER = ManimColor("#6A79F7") +CORNFLOWERBLUE = ManimColor("#5170D7") +CRANBERRY = ManimColor("#9E003A") +CREAM = ManimColor("#FFFFC2") +CREME = ManimColor("#FFFFB6") +CRIMSON = ManimColor("#8C000F") +CUSTARD = ManimColor("#FFFD78") +CYAN = ManimColor("#00FFFF") +DANDELION = ManimColor("#FEDF08") +DARK = ManimColor("#1B2431") +DARKAQUA = ManimColor("#05696B") +DARKAQUAMARINE = ManimColor("#017371") +DARKBEIGE = ManimColor("#AC9362") +DARKBLUE = ManimColor("#030764") +DARKBLUEGREEN = ManimColor("#005249") +DARKBLUEGREY = ManimColor("#1F3B4D") +DARKBROWN = ManimColor("#341C02") +DARKCORAL = ManimColor("#CF524E") +DARKCREAM = ManimColor("#FFF39A") +DARKCYAN = ManimColor("#0A888A") +DARKFORESTGREEN = ManimColor("#002D04") +DARKFUCHSIA = ManimColor("#9D0759") +DARKGOLD = ManimColor("#B59410") +DARKGRASSGREEN = ManimColor("#388004") +DARKGREEN = ManimColor("#054907") +DARKGREENBLUE = ManimColor("#1F6357") +DARKGREY = ManimColor("#363737") +DARKGREYBLUE = ManimColor("#29465B") +DARKHOTPINK = ManimColor("#D90166") +DARKINDIGO = ManimColor("#1F0954") +DARKISHBLUE = ManimColor("#014182") +DARKISHGREEN = ManimColor("#287C37") +DARKISHPINK = ManimColor("#DA467D") +DARKISHPURPLE = ManimColor("#751973") +DARKISHRED = ManimColor("#A90308") +DARKKHAKI = ManimColor("#9B8F55") +DARKLAVENDER = ManimColor("#856798") +DARKLILAC = ManimColor("#9C6DA5") +DARKLIME = ManimColor("#84B701") +DARKLIMEGREEN = ManimColor("#7EBD01") +DARKMAGENTA = ManimColor("#960056") +DARKMAROON = ManimColor("#3C0008") +DARKMAUVE = ManimColor("#874C62") +DARKMINT = ManimColor("#48C072") +DARKMINTGREEN = ManimColor("#20C073") +DARKMUSTARD = ManimColor("#A88905") +DARKNAVY = ManimColor("#000435") +DARKNAVYBLUE = ManimColor("#00022E") +DARKOLIVE = ManimColor("#373E02") +DARKOLIVEGREEN = ManimColor("#3C4D03") +DARKORANGE = ManimColor("#C65102") +DARKPASTELGREEN = ManimColor("#56AE57") +DARKPEACH = ManimColor("#DE7E5D") +DARKPERIWINKLE = ManimColor("#665FD1") +DARKPINK = ManimColor("#CB416B") +DARKPLUM = ManimColor("#3F012C") +DARKPURPLE = ManimColor("#35063E") +DARKRED = ManimColor("#840000") +DARKROSE = ManimColor("#B5485D") +DARKROYALBLUE = ManimColor("#02066F") +DARKSAGE = ManimColor("#598556") +DARKSALMON = ManimColor("#C85A53") +DARKSAND = ManimColor("#A88F59") +DARKSEAFOAM = ManimColor("#1FB57A") +DARKSEAFOAMGREEN = ManimColor("#3EAF76") +DARKSEAGREEN = ManimColor("#11875D") +DARKSKYBLUE = ManimColor("#448EE4") +DARKSLATEBLUE = ManimColor("#214761") +DARKTAN = ManimColor("#AF884A") +DARKTAUPE = ManimColor("#7F684E") +DARKTEAL = ManimColor("#014D4E") +DARKTURQUOISE = ManimColor("#045C5A") +DARKVIOLET = ManimColor("#34013F") +DARKYELLOW = ManimColor("#D5B60A") +DARKYELLOWGREEN = ManimColor("#728F02") +DEEPAQUA = ManimColor("#08787F") +DEEPBLUE = ManimColor("#040273") +DEEPBROWN = ManimColor("#410200") +DEEPGREEN = ManimColor("#02590F") +DEEPLAVENDER = ManimColor("#8D5EB7") +DEEPLILAC = ManimColor("#966EBD") +DEEPMAGENTA = ManimColor("#A0025C") +DEEPORANGE = ManimColor("#DC4D01") +DEEPPINK = ManimColor("#CB0162") +DEEPPURPLE = ManimColor("#36013F") +DEEPRED = ManimColor("#9A0200") +DEEPROSE = ManimColor("#C74767") +DEEPSEABLUE = ManimColor("#015482") +DEEPSKYBLUE = ManimColor("#0D75F8") +DEEPTEAL = ManimColor("#00555A") +DEEPTURQUOISE = ManimColor("#017374") +DEEPVIOLET = ManimColor("#490648") +DENIM = ManimColor("#3B638C") +DENIMBLUE = ManimColor("#3B5B92") +DESERT = ManimColor("#CCAD60") +DIARRHEA = ManimColor("#9F8303") +DIRT = ManimColor("#8A6E45") +DIRTBROWN = ManimColor("#836539") +DIRTYBLUE = ManimColor("#3F829D") +DIRTYGREEN = ManimColor("#667E2C") +DIRTYORANGE = ManimColor("#C87606") +DIRTYPINK = ManimColor("#CA7B80") +DIRTYPURPLE = ManimColor("#734A65") +DIRTYYELLOW = ManimColor("#CDC50A") +DODGERBLUE = ManimColor("#3E82FC") +DRAB = ManimColor("#828344") +DRABGREEN = ManimColor("#749551") +DRIEDBLOOD = ManimColor("#4B0101") +DUCKEGGBLUE = ManimColor("#C3FBF4") +DULLBLUE = ManimColor("#49759C") +DULLBROWN = ManimColor("#876E4B") +DULLGREEN = ManimColor("#74A662") +DULLORANGE = ManimColor("#D8863B") +DULLPINK = ManimColor("#D5869D") +DULLPURPLE = ManimColor("#84597E") +DULLRED = ManimColor("#BB3F3F") +DULLTEAL = ManimColor("#5F9E8F") +DULLYELLOW = ManimColor("#EEDC5B") +DUSK = ManimColor("#4E5481") +DUSKBLUE = ManimColor("#26538D") +DUSKYBLUE = ManimColor("#475F94") +DUSKYPINK = ManimColor("#CC7A8B") +DUSKYPURPLE = ManimColor("#895B7B") +DUSKYROSE = ManimColor("#BA6873") +DUST = ManimColor("#B2996E") +DUSTYBLUE = ManimColor("#5A86AD") +DUSTYGREEN = ManimColor("#76A973") +DUSTYLAVENDER = ManimColor("#AC86A8") +DUSTYORANGE = ManimColor("#F0833A") +DUSTYPINK = ManimColor("#D58A94") +DUSTYPURPLE = ManimColor("#825F87") +DUSTYRED = ManimColor("#B9484E") +DUSTYROSE = ManimColor("#C0737A") +DUSTYTEAL = ManimColor("#4C9085") +EARTH = ManimColor("#A2653E") +EASTERGREEN = ManimColor("#8CFD7E") +EASTERPURPLE = ManimColor("#C071FE") +ECRU = ManimColor("#FEFFCA") +EGGPLANT = ManimColor("#380835") +EGGPLANTPURPLE = ManimColor("#430541") +EGGSHELL = ManimColor("#FFFCC4") +EGGSHELLBLUE = ManimColor("#C4FFF7") +ELECTRICBLUE = ManimColor("#0652FF") +ELECTRICGREEN = ManimColor("#21FC0D") +ELECTRICLIME = ManimColor("#A8FF04") +ELECTRICPINK = ManimColor("#FF0490") +ELECTRICPURPLE = ManimColor("#AA23FF") +EMERALD = ManimColor("#01A049") +EMERALDGREEN = ManimColor("#028F1E") +EVERGREEN = ManimColor("#05472A") +FADEDBLUE = ManimColor("#658CBB") +FADEDGREEN = ManimColor("#7BB274") +FADEDORANGE = ManimColor("#F0944D") +FADEDPINK = ManimColor("#DE9DAC") +FADEDPURPLE = ManimColor("#916E99") +FADEDRED = ManimColor("#D3494E") +FADEDYELLOW = ManimColor("#FEFF7F") +FAWN = ManimColor("#CFAF7B") +FERN = ManimColor("#63A950") +FERNGREEN = ManimColor("#548D44") +FIREENGINERED = ManimColor("#FE0002") +FLATBLUE = ManimColor("#3C73A8") +FLATGREEN = ManimColor("#699D4C") +FLUORESCENTGREEN = ManimColor("#08FF08") +FLUROGREEN = ManimColor("#0AFF02") +FOAMGREEN = ManimColor("#90FDA9") +FOREST = ManimColor("#0B5509") +FORESTGREEN = ManimColor("#06470C") +FORRESTGREEN = ManimColor("#154406") +FRENCHBLUE = ManimColor("#436BAD") +FRESHGREEN = ManimColor("#69D84F") +FROGGREEN = ManimColor("#58BC08") +FUCHSIA = ManimColor("#ED0DD9") +GOLD = ManimColor("#DBB40C") +GOLDEN = ManimColor("#F5BF03") +GOLDENBROWN = ManimColor("#B27A01") +GOLDENROD = ManimColor("#F9BC08") +GOLDENYELLOW = ManimColor("#FEC615") +GRAPE = ManimColor("#6C3461") +GRAPEFRUIT = ManimColor("#FD5956") +GRAPEPURPLE = ManimColor("#5D1451") +GRASS = ManimColor("#5CAC2D") +GRASSGREEN = ManimColor("#3F9B0B") +GRASSYGREEN = ManimColor("#419C03") +GREEN = ManimColor("#15B01A") +GREENAPPLE = ManimColor("#5EDC1F") +GREENBLUE = ManimColor("#01C08D") +GREENBROWN = ManimColor("#544E03") +GREENGREY = ManimColor("#77926F") +GREENISH = ManimColor("#40A368") +GREENISHBEIGE = ManimColor("#C9D179") +GREENISHBLUE = ManimColor("#0B8B87") +GREENISHBROWN = ManimColor("#696112") +GREENISHCYAN = ManimColor("#2AFEB7") +GREENISHGREY = ManimColor("#96AE8D") +GREENISHTAN = ManimColor("#BCCB7A") +GREENISHTEAL = ManimColor("#32BF84") +GREENISHTURQUOISE = ManimColor("#00FBB0") +GREENISHYELLOW = ManimColor("#CDFD02") +GREENTEAL = ManimColor("#0CB577") +GREENYBLUE = ManimColor("#42B395") +GREENYBROWN = ManimColor("#696006") +GREENYELLOW = ManimColor("#B5CE08") +GREENYGREY = ManimColor("#7EA07A") +GREENYYELLOW = ManimColor("#C6F808") +GREY = ManimColor("#929591") +GREYBLUE = ManimColor("#647D8E") +GREYBROWN = ManimColor("#7F7053") +GREYGREEN = ManimColor("#86A17D") +GREYISH = ManimColor("#A8A495") +GREYISHBLUE = ManimColor("#5E819D") +GREYISHBROWN = ManimColor("#7A6A4F") +GREYISHGREEN = ManimColor("#82A67D") +GREYISHPINK = ManimColor("#C88D94") +GREYISHPURPLE = ManimColor("#887191") +GREYISHTEAL = ManimColor("#719F91") +GREYPINK = ManimColor("#C3909B") +GREYPURPLE = ManimColor("#826D8C") +GREYTEAL = ManimColor("#5E9B8A") +GROSSGREEN = ManimColor("#A0BF16") +GUNMETAL = ManimColor("#536267") +HAZEL = ManimColor("#8E7618") +HEATHER = ManimColor("#A484AC") +HELIOTROPE = ManimColor("#D94FF5") +HIGHLIGHTERGREEN = ManimColor("#1BFC06") +HOSPITALGREEN = ManimColor("#9BE5AA") +HOTGREEN = ManimColor("#25FF29") +HOTMAGENTA = ManimColor("#F504C9") +HOTPINK = ManimColor("#FF028D") +HOTPURPLE = ManimColor("#CB00F5") +HUNTERGREEN = ManimColor("#0B4008") +ICE = ManimColor("#D6FFFA") +ICEBLUE = ManimColor("#D7FFFE") +ICKYGREEN = ManimColor("#8FAE22") +INDIANRED = ManimColor("#850E04") +INDIGO = ManimColor("#380282") +INDIGOBLUE = ManimColor("#3A18B1") +IRIS = ManimColor("#6258C4") +IRISHGREEN = ManimColor("#019529") +IVORY = ManimColor("#FFFFCB") +JADE = ManimColor("#1FA774") +JADEGREEN = ManimColor("#2BAF6A") +JUNGLEGREEN = ManimColor("#048243") +KELLEYGREEN = ManimColor("#009337") +KELLYGREEN = ManimColor("#02AB2E") +KERMITGREEN = ManimColor("#5CB200") +KEYLIME = ManimColor("#AEFF6E") +KHAKI = ManimColor("#AAA662") +KHAKIGREEN = ManimColor("#728639") +KIWI = ManimColor("#9CEF43") +KIWIGREEN = ManimColor("#8EE53F") +LAVENDER = ManimColor("#C79FEF") +LAVENDERBLUE = ManimColor("#8B88F8") +LAVENDERPINK = ManimColor("#DD85D7") +LAWNGREEN = ManimColor("#4DA409") +LEAF = ManimColor("#71AA34") +LEAFGREEN = ManimColor("#5CA904") +LEAFYGREEN = ManimColor("#51B73B") +LEATHER = ManimColor("#AC7434") +LEMON = ManimColor("#FDFF52") +LEMONGREEN = ManimColor("#ADF802") +LEMONLIME = ManimColor("#BFFE28") +LEMONYELLOW = ManimColor("#FDFF38") +LICHEN = ManimColor("#8FB67B") +LIGHTAQUA = ManimColor("#8CFFDB") +LIGHTAQUAMARINE = ManimColor("#7BFDC7") +LIGHTBEIGE = ManimColor("#FFFEB6") +LIGHTBLUE = ManimColor("#7BC8F6") +LIGHTBLUEGREEN = ManimColor("#7EFBB3") +LIGHTBLUEGREY = ManimColor("#B7C9E2") +LIGHTBLUISHGREEN = ManimColor("#76FDA8") +LIGHTBRIGHTGREEN = ManimColor("#53FE5C") +LIGHTBROWN = ManimColor("#AD8150") +LIGHTBURGUNDY = ManimColor("#A8415B") +LIGHTCYAN = ManimColor("#ACFFFC") +LIGHTEGGPLANT = ManimColor("#894585") +LIGHTERGREEN = ManimColor("#75FD63") +LIGHTERPURPLE = ManimColor("#A55AF4") +LIGHTFORESTGREEN = ManimColor("#4F9153") +LIGHTGOLD = ManimColor("#FDDC5C") +LIGHTGRASSGREEN = ManimColor("#9AF764") +LIGHTGREEN = ManimColor("#76FF7B") +LIGHTGREENBLUE = ManimColor("#56FCA2") +LIGHTGREENISHBLUE = ManimColor("#63F7B4") +LIGHTGREY = ManimColor("#D8DCD6") +LIGHTGREYBLUE = ManimColor("#9DBCD4") +LIGHTGREYGREEN = ManimColor("#B7E1A1") +LIGHTINDIGO = ManimColor("#6D5ACF") +LIGHTISHBLUE = ManimColor("#3D7AFD") +LIGHTISHGREEN = ManimColor("#61E160") +LIGHTISHPURPLE = ManimColor("#A552E6") +LIGHTISHRED = ManimColor("#FE2F4A") +LIGHTKHAKI = ManimColor("#E6F2A2") +LIGHTLAVENDAR = ManimColor("#EFC0FE") +LIGHTLAVENDER = ManimColor("#DFC5FE") +LIGHTLIGHTBLUE = ManimColor("#CAFFFB") +LIGHTLIGHTGREEN = ManimColor("#C8FFB0") +LIGHTLILAC = ManimColor("#EDC8FF") +LIGHTLIME = ManimColor("#AEFD6C") +LIGHTLIMEGREEN = ManimColor("#B9FF66") +LIGHTMAGENTA = ManimColor("#FA5FF7") +LIGHTMAROON = ManimColor("#A24857") +LIGHTMAUVE = ManimColor("#C292A1") +LIGHTMINT = ManimColor("#B6FFBB") +LIGHTMINTGREEN = ManimColor("#A6FBB2") +LIGHTMOSSGREEN = ManimColor("#A6C875") +LIGHTMUSTARD = ManimColor("#F7D560") +LIGHTNAVY = ManimColor("#155084") +LIGHTNAVYBLUE = ManimColor("#2E5A88") +LIGHTNEONGREEN = ManimColor("#4EFD54") +LIGHTOLIVE = ManimColor("#ACBF69") +LIGHTOLIVEGREEN = ManimColor("#A4BE5C") +LIGHTORANGE = ManimColor("#FDAA48") +LIGHTPASTELGREEN = ManimColor("#B2FBA5") +LIGHTPEACH = ManimColor("#FFD8B1") +LIGHTPEAGREEN = ManimColor("#C4FE82") +LIGHTPERIWINKLE = ManimColor("#C1C6FC") +LIGHTPINK = ManimColor("#FFD1DF") +LIGHTPLUM = ManimColor("#9D5783") +LIGHTPURPLE = ManimColor("#BF77F6") +LIGHTRED = ManimColor("#FF474C") +LIGHTROSE = ManimColor("#FFC5CB") +LIGHTROYALBLUE = ManimColor("#3A2EFE") +LIGHTSAGE = ManimColor("#BCECAC") +LIGHTSALMON = ManimColor("#FEA993") +LIGHTSEAFOAM = ManimColor("#A0FEBF") +LIGHTSEAFOAMGREEN = ManimColor("#a7ffb5") +LIGHTSEAGREEN = ManimColor("#98F6B0") +LIGHTSKYBLUE = ManimColor("#C6FCFF") +LIGHTTAN = ManimColor("#FBEEAC") +LIGHTTEAL = ManimColor("#90E4C1") +LIGHTTURQUOISE = ManimColor("#7EF4CC") +LIGHTURPLE = ManimColor("#B36FF6") +LIGHTVIOLET = ManimColor("#D6B4FC") +LIGHTYELLOW = ManimColor("#FFFE7A") +LIGHTYELLOWGREEN = ManimColor("#CCFD7F") +LIGHTYELLOWISHGREEN = ManimColor("#C2FF89") +LILAC = ManimColor("#CEA2FD") +LILIAC = ManimColor("#C48EFD") +LIME = ManimColor("#AAFF32") +LIMEGREEN = ManimColor("#89FE05") +LIMEYELLOW = ManimColor("#D0FE1D") +LIPSTICK = ManimColor("#D5174E") +LIPSTICKRED = ManimColor("#C0022F") +MACARONIANDCHEESE = ManimColor("#EFB435") +MAGENTA = ManimColor("#C20078") +MAHOGANY = ManimColor("#4A0100") +MAIZE = ManimColor("#F4D054") +MANGO = ManimColor("#FFA62B") +MANILLA = ManimColor("#FFFA86") +MARIGOLD = ManimColor("#FCC006") +MARINE = ManimColor("#042E60") +MARINEBLUE = ManimColor("#01386A") +MAROON = ManimColor("#650021") +MAUVE = ManimColor("#AE7181") +MEDIUMBLUE = ManimColor("#2C6FBB") +MEDIUMBROWN = ManimColor("#7F5112") +MEDIUMGREEN = ManimColor("#39AD48") +MEDIUMGREY = ManimColor("#7D7F7C") +MEDIUMPINK = ManimColor("#F36196") +MEDIUMPURPLE = ManimColor("#9E43A2") +MELON = ManimColor("#FF7855") +MERLOT = ManimColor("#730039") +METALLICBLUE = ManimColor("#4F738E") +MIDBLUE = ManimColor("#276AB3") +MIDGREEN = ManimColor("#50A747") +MIDNIGHT = ManimColor("#03012D") +MIDNIGHTBLUE = ManimColor("#020035") +MIDNIGHTPURPLE = ManimColor("#280137") +MILITARYGREEN = ManimColor("#667C3E") +MILKCHOCOLATE = ManimColor("#7F4E1E") +MINT = ManimColor("#9FFEB0") +MINTGREEN = ManimColor("#8FFF9F") +MINTYGREEN = ManimColor("#0BF77D") +MOCHA = ManimColor("#9D7651") +MOSS = ManimColor("#769958") +MOSSGREEN = ManimColor("#658B38") +MOSSYGREEN = ManimColor("#638B27") +MUD = ManimColor("#735C12") +MUDBROWN = ManimColor("#60460F") +MUDDYBROWN = ManimColor("#886806") +MUDDYGREEN = ManimColor("#657432") +MUDDYYELLOW = ManimColor("#BFAC05") +MUDGREEN = ManimColor("#606602") +MULBERRY = ManimColor("#920A4E") +MURKYGREEN = ManimColor("#6C7A0E") +MUSHROOM = ManimColor("#BA9E88") +MUSTARD = ManimColor("#CEB301") +MUSTARDBROWN = ManimColor("#AC7E04") +MUSTARDGREEN = ManimColor("#A8B504") +MUSTARDYELLOW = ManimColor("#D2BD0A") +MUTEDBLUE = ManimColor("#3B719F") +MUTEDGREEN = ManimColor("#5FA052") +MUTEDPINK = ManimColor("#D1768F") +MUTEDPURPLE = ManimColor("#805B87") +NASTYGREEN = ManimColor("#70B23F") +NAVY = ManimColor("#01153E") +NAVYBLUE = ManimColor("#001146") +NAVYGREEN = ManimColor("#35530A") +NEONBLUE = ManimColor("#04D9FF") +NEONGREEN = ManimColor("#0CFF0C") +NEONPINK = ManimColor("#FE019A") +NEONPURPLE = ManimColor("#BC13FE") +NEONRED = ManimColor("#FF073A") +NEONYELLOW = ManimColor("#CFFF04") +NICEBLUE = ManimColor("#107AB0") +NIGHTBLUE = ManimColor("#040348") +OCEAN = ManimColor("#017B92") +OCEANBLUE = ManimColor("#03719C") +OCEANGREEN = ManimColor("#3D9973") +OCHER = ManimColor("#BF9B0C") +OCHRE = ManimColor("#BF9005") +OCRE = ManimColor("#C69C04") +OFFBLUE = ManimColor("#5684AE") +OFFGREEN = ManimColor("#6BA353") +OFFWHITE = ManimColor("#FFFFE4") +OFFYELLOW = ManimColor("#F1F33F") +OLDPINK = ManimColor("#C77986") +OLDROSE = ManimColor("#C87F89") +OLIVE = ManimColor("#6E750E") +OLIVEBROWN = ManimColor("#645403") +OLIVEDRAB = ManimColor("#6F7632") +OLIVEGREEN = ManimColor("#677A04") +OLIVEYELLOW = ManimColor("#C2B709") +ORANGE = ManimColor("#F97306") +ORANGEBROWN = ManimColor("#BE6400") +ORANGEISH = ManimColor("#FD8D49") +ORANGEPINK = ManimColor("#FF6F52") +ORANGERED = ManimColor("#FE420F") +ORANGEYBROWN = ManimColor("#B16002") +ORANGEYELLOW = ManimColor("#FFAD01") +ORANGEYRED = ManimColor("#FA4224") +ORANGEYYELLOW = ManimColor("#FDB915") +ORANGISH = ManimColor("#FC824A") +ORANGISHBROWN = ManimColor("#B25F03") +ORANGISHRED = ManimColor("#F43605") +ORCHID = ManimColor("#C875C4") +PALE = ManimColor("#FFF9D0") +PALEAQUA = ManimColor("#B8FFEB") +PALEBLUE = ManimColor("#D0FEFE") +PALEBROWN = ManimColor("#B1916E") +PALECYAN = ManimColor("#B7FFFA") +PALEGOLD = ManimColor("#FDDE6C") +PALEGREEN = ManimColor("#C7FDB5") +PALEGREY = ManimColor("#FDFDFE") +PALELAVENDER = ManimColor("#EECFFE") +PALELIGHTGREEN = ManimColor("#B1FC99") +PALELILAC = ManimColor("#E4CBFF") +PALELIME = ManimColor("#BEFD73") +PALELIMEGREEN = ManimColor("#B1FF65") +PALEMAGENTA = ManimColor("#D767AD") +PALEMAUVE = ManimColor("#FED0FC") +PALEOLIVE = ManimColor("#B9CC81") +PALEOLIVEGREEN = ManimColor("#B1D27B") +PALEORANGE = ManimColor("#FFA756") +PALEPEACH = ManimColor("#FFE5AD") +PALEPINK = ManimColor("#FFCFDC") +PALEPURPLE = ManimColor("#B790D4") +PALERED = ManimColor("#D9544D") +PALEROSE = ManimColor("#FDC1C5") +PALESALMON = ManimColor("#FFB19A") +PALESKYBLUE = ManimColor("#BDF6FE") +PALETEAL = ManimColor("#82CBB2") +PALETURQUOISE = ManimColor("#A5FBD5") +PALEVIOLET = ManimColor("#CEAEFA") +PALEYELLOW = ManimColor("#FFFF84") +PARCHMENT = ManimColor("#FEFCAF") +PASTELBLUE = ManimColor("#A2BFFE") +PASTELGREEN = ManimColor("#B0FF9D") +PASTELORANGE = ManimColor("#FF964F") +PASTELPINK = ManimColor("#FFBACD") +PASTELPURPLE = ManimColor("#CAA0FF") +PASTELRED = ManimColor("#DB5856") +PASTELYELLOW = ManimColor("#FFFE71") +PEA = ManimColor("#A4BF20") +PEACH = ManimColor("#FFB07C") +PEACHYPINK = ManimColor("#FF9A8A") +PEACOCKBLUE = ManimColor("#016795") +PEAGREEN = ManimColor("#8EAB12") +PEAR = ManimColor("#CBF85F") +PEASOUP = ManimColor("#929901") +PEASOUPGREEN = ManimColor("#94A617") +PERIWINKLE = ManimColor("#8E82FE") +PERIWINKLEBLUE = ManimColor("#8F99FB") +PERRYWINKLE = ManimColor("#8F8CE7") +PETROL = ManimColor("#005F6A") +PIGPINK = ManimColor("#E78EA5") +PINE = ManimColor("#2B5D34") +PINEGREEN = ManimColor("#0A481E") +PINK = ManimColor("#FF81C0") +PINKISH = ManimColor("#D46A7E") +PINKISHBROWN = ManimColor("#B17261") +PINKISHGREY = ManimColor("#C8ACA9") +PINKISHORANGE = ManimColor("#FF724C") +PINKISHPURPLE = ManimColor("#D648D7") +PINKISHRED = ManimColor("#F10C45") +PINKISHTAN = ManimColor("#D99B82") +PINKPURPLE = ManimColor("#EF1DE7") +PINKRED = ManimColor("#F5054F") +PINKY = ManimColor("#FC86AA") +PINKYPURPLE = ManimColor("#C94CBE") +PINKYRED = ManimColor("#FC2647") +PISSYELLOW = ManimColor("#DDD618") +PISTACHIO = ManimColor("#C0FA8B") +PLUM = ManimColor("#580F41") +PLUMPURPLE = ManimColor("#4E0550") +POISONGREEN = ManimColor("#40FD14") +POO = ManimColor("#8F7303") +POOBROWN = ManimColor("#885F01") +POOP = ManimColor("#7F5E00") +POOPBROWN = ManimColor("#7A5901") +POOPGREEN = ManimColor("#6F7C00") +POWDERBLUE = ManimColor("#B1D1FC") +POWDERPINK = ManimColor("#FFB2D0") +PRIMARYBLUE = ManimColor("#0804F9") +PRUSSIANBLUE = ManimColor("#004577") +PUCE = ManimColor("#A57E52") +PUKE = ManimColor("#A5A502") +PUKEBROWN = ManimColor("#947706") +PUKEGREEN = ManimColor("#9AAE07") +PUKEYELLOW = ManimColor("#C2BE0E") +PUMPKIN = ManimColor("#E17701") +PUMPKINORANGE = ManimColor("#FB7D07") +PUREBLUE = ManimColor("#0203E2") +PURPLE = ManimColor("#7E1E9C") +PURPLEBLUE = ManimColor("#5D21D0") +PURPLEBROWN = ManimColor("#673A3F") +PURPLEGREY = ManimColor("#866F85") +PURPLEISH = ManimColor("#98568D") +PURPLEISHBLUE = ManimColor("#6140EF") +PURPLEISHPINK = ManimColor("#DF4EC8") +PURPLEPINK = ManimColor("#D725DE") +PURPLERED = ManimColor("#990147") +PURPLEY = ManimColor("#8756E4") +PURPLEYBLUE = ManimColor("#5F34E7") +PURPLEYGREY = ManimColor("#947E94") +PURPLEYPINK = ManimColor("#C83CB9") +PURPLISH = ManimColor("#94568C") +PURPLISHBLUE = ManimColor("#601EF9") +PURPLISHBROWN = ManimColor("#6B4247") +PURPLISHGREY = ManimColor("#7A687F") +PURPLISHPINK = ManimColor("#CE5DAE") +PURPLISHRED = ManimColor("#B0054B") +PURPLY = ManimColor("#983FB2") +PURPLYBLUE = ManimColor("#661AEE") +PURPLYPINK = ManimColor("#F075E6") +PUTTY = ManimColor("#BEAE8A") +RACINGGREEN = ManimColor("#014600") +RADIOACTIVEGREEN = ManimColor("#2CFA1F") +RASPBERRY = ManimColor("#B00149") +RAWSIENNA = ManimColor("#9A6200") +RAWUMBER = ManimColor("#A75E09") +REALLYLIGHTBLUE = ManimColor("#D4FFFF") +RED = ManimColor("#E50000") +REDBROWN = ManimColor("#8B2E16") +REDDISH = ManimColor("#C44240") +REDDISHBROWN = ManimColor("#7F2B0A") +REDDISHGREY = ManimColor("#997570") +REDDISHORANGE = ManimColor("#F8481C") +REDDISHPINK = ManimColor("#FE2C54") +REDDISHPURPLE = ManimColor("#910951") +REDDYBROWN = ManimColor("#6E1005") +REDORANGE = ManimColor("#FD3C06") +REDPINK = ManimColor("#FA2A55") +REDPURPLE = ManimColor("#820747") +REDVIOLET = ManimColor("#9E0168") +REDWINE = ManimColor("#8C0034") +RICHBLUE = ManimColor("#021BF9") +RICHPURPLE = ManimColor("#720058") +ROBINEGGBLUE = ManimColor("#8AF1FE") +ROBINSEGG = ManimColor("#6DEDFD") +ROBINSEGGBLUE = ManimColor("#98EFF9") +ROSA = ManimColor("#FE86A4") +ROSE = ManimColor("#CF6275") +ROSEPINK = ManimColor("#F7879A") +ROSERED = ManimColor("#BE013C") +ROSYPINK = ManimColor("#F6688E") +ROGUE = ManimColor("#AB1239") +ROYAL = ManimColor("#0C1793") +ROYALBLUE = ManimColor("#0504AA") +ROYALPURPLE = ManimColor("#4B006E") +RUBY = ManimColor("#CA0147") +RUSSET = ManimColor("#A13905") +RUST = ManimColor("#A83C09") +RUSTBROWN = ManimColor("#8B3103") +RUSTORANGE = ManimColor("#C45508") +RUSTRED = ManimColor("#AA2704") +RUSTYORANGE = ManimColor("#CD5909") +RUSTYRED = ManimColor("#AF2F0D") +SAFFRON = ManimColor("#FEB209") +SAGE = ManimColor("#87AE73") +SAGEGREEN = ManimColor("#88B378") +SALMON = ManimColor("#FF796C") +SALMONPINK = ManimColor("#FE7B7C") +SAND = ManimColor("#E2CA76") +SANDBROWN = ManimColor("#CBA560") +SANDSTONE = ManimColor("#C9AE74") +SANDY = ManimColor("#F1DA7A") +SANDYBROWN = ManimColor("#C4A661") +SANDYELLOW = ManimColor("#FCE166") +SANDYYELLOW = ManimColor("#FDEE73") +SAPGREEN = ManimColor("#5C8B15") +SAPPHIRE = ManimColor("#2138AB") +SCARLET = ManimColor("#BE0119") +SEA = ManimColor("#3C9992") +SEABLUE = ManimColor("#047495") +SEAFOAM = ManimColor("#80F9AD") +SEAFOAMBLUE = ManimColor("#78D1B6") +SEAFOAMGREEN = ManimColor("#7AF9AB") +SEAGREEN = ManimColor("#53FCA1") +SEAWEED = ManimColor("#18D17B") +SEAWEEDGREEN = ManimColor("#35AD6B") +SEPIA = ManimColor("#985E2B") +SHAMROCK = ManimColor("#01B44C") +SHAMROCKGREEN = ManimColor("#02C14D") +SHIT = ManimColor("#7F5F00") +SHITBROWN = ManimColor("#7B5804") +SHITGREEN = ManimColor("#758000") +SHOCKINGPINK = ManimColor("#FE02A2") +SICKGREEN = ManimColor("#9DB92C") +SICKLYGREEN = ManimColor("#94B21C") +SICKLYYELLOW = ManimColor("#D0E429") +SIENNA = ManimColor("#A9561E") +SILVER = ManimColor("#C5C9C7") +SKY = ManimColor("#82CAFC") +SKYBLUE = ManimColor("#75BBFD") +SLATE = ManimColor("#516572") +SLATEBLUE = ManimColor("#5B7C99") +SLATEGREEN = ManimColor("#658D6D") +SLATEGREY = ManimColor("#59656D") +SLIMEGREEN = ManimColor("#99CC04") +SNOT = ManimColor("#ACBB0D") +SNOTGREEN = ManimColor("#9DC100") +SOFTBLUE = ManimColor("#6488EA") +SOFTGREEN = ManimColor("#6FC276") +SOFTPINK = ManimColor("#FDB0C0") +SOFTPURPLE = ManimColor("#A66FB5") +SPEARMINT = ManimColor("#1EF876") +SPRINGGREEN = ManimColor("#A9F971") +SPRUCE = ManimColor("#0A5F38") +SQUASH = ManimColor("#F2AB15") +STEEL = ManimColor("#738595") +STEELBLUE = ManimColor("#5A7D9A") +STEELGREY = ManimColor("#6F828A") +STONE = ManimColor("#ADA587") +STORMYBLUE = ManimColor("#507B9C") +STRAW = ManimColor("#FCF679") +STRAWBERRY = ManimColor("#FB2943") +STRONGBLUE = ManimColor("#0C06F7") +STRONGPINK = ManimColor("#FF0789") +SUNFLOWER = ManimColor("#FFC512") +SUNFLOWERYELLOW = ManimColor("#FFDA03") +SUNNYYELLOW = ManimColor("#FFF917") +SUNSHINEYELLOW = ManimColor("#FFFD37") +SUNYELLOW = ManimColor("#FFDF22") +SWAMP = ManimColor("#698339") +SWAMPGREEN = ManimColor("#748500") +TAN = ManimColor("#D1B26F") +TANBROWN = ManimColor("#AB7E4C") +TANGERINE = ManimColor("#FF9408") +TANGREEN = ManimColor("#A9BE70") +TAUPE = ManimColor("#B9A281") +TEA = ManimColor("#65AB7C") +TEAGREEN = ManimColor("#BDF8A3") +TEAL = ManimColor("#029386") +TEALBLUE = ManimColor("#01889F") +TEALGREEN = ManimColor("#25A36F") +TEALISH = ManimColor("#24BCA8") +TEALISHGREEN = ManimColor("#0CDC73") +TERRACOTA = ManimColor("#CB6843") +TERRACOTTA = ManimColor("#C9643B") +TIFFANYBLUE = ManimColor("#7BF2DA") +TOMATO = ManimColor("#EF4026") +TOMATORED = ManimColor("#EC2D01") +TOPAZ = ManimColor("#13BBAF") +TOUPE = ManimColor("#C7AC7D") +TOXICGREEN = ManimColor("#61DE2A") +TREEGREEN = ManimColor("#2A7E19") +TRUEBLUE = ManimColor("#010FCC") +TRUEGREEN = ManimColor("#089404") +TURQUOISE = ManimColor("#06C2AC") +TURQUOISEBLUE = ManimColor("#06B1C4") +TURQUOISEGREEN = ManimColor("#04F489") +TURTLEGREEN = ManimColor("#75B84F") +TWILIGHT = ManimColor("#4E518B") +TWILIGHTBLUE = ManimColor("#0A437A") +UGLYBLUE = ManimColor("#31668A") +UGLYBROWN = ManimColor("#7D7103") +UGLYGREEN = ManimColor("#7A9703") +UGLYPINK = ManimColor("#CD7584") +UGLYPURPLE = ManimColor("#A442A0") +UGLYYELLOW = ManimColor("#D0C101") +ULTRAMARINE = ManimColor("#2000B1") +ULTRAMARINEBLUE = ManimColor("#1805DB") +UMBER = ManimColor("#B26400") +VELVET = ManimColor("#750851") +VERMILION = ManimColor("#F4320C") +VERYDARKBLUE = ManimColor("#000133") +VERYDARKBROWN = ManimColor("#1D0200") +VERYDARKGREEN = ManimColor("#062E03") +VERYDARKPURPLE = ManimColor("#2A0134") +VERYLIGHTBLUE = ManimColor("#D5FFFF") +VERYLIGHTBROWN = ManimColor("#D3B683") +VERYLIGHTGREEN = ManimColor("#D1FFBD") +VERYLIGHTPINK = ManimColor("#FFF4F2") +VERYLIGHTPURPLE = ManimColor("#F6CEFC") +VERYPALEBLUE = ManimColor("#D6FFFE") +VERYPALEGREEN = ManimColor("#CFFDBC") +VIBRANTBLUE = ManimColor("#0339F8") +VIBRANTGREEN = ManimColor("#0ADD08") +VIBRANTPURPLE = ManimColor("#AD03DE") +VIOLET = ManimColor("#9A0EEA") +VIOLETBLUE = ManimColor("#510AC9") +VIOLETPINK = ManimColor("#FB5FFC") +VIOLETRED = ManimColor("#A50055") +VIRIDIAN = ManimColor("#1E9167") +VIVIDBLUE = ManimColor("#152EFF") +VIVIDGREEN = ManimColor("#2FEF10") +VIVIDPURPLE = ManimColor("#9900FA") +VOMIT = ManimColor("#A2A415") +VOMITGREEN = ManimColor("#89A203") +VOMITYELLOW = ManimColor("#C7C10C") +WARMBLUE = ManimColor("#4B57DB") +WARMBROWN = ManimColor("#964E02") +WARMGREY = ManimColor("#978A84") +WARMPINK = ManimColor("#FB5581") +WARMPURPLE = ManimColor("#952E8F") +WASHEDOUTGREEN = ManimColor("#BCF5A6") +WATERBLUE = ManimColor("#0E87CC") +WATERMELON = ManimColor("#FD4659") +WEIRDGREEN = ManimColor("#3AE57F") +WHEAT = ManimColor("#FBDD7E") +WHITE = ManimColor("#FFFFFF") +WINDOWSBLUE = ManimColor("#3778BF") +WINE = ManimColor("#80013F") +WINERED = ManimColor("#7B0323") +WINTERGREEN = ManimColor("#20F986") +WISTERIA = ManimColor("#A87DC2") +YELLOW = ManimColor("#FFFF14") +YELLOWBROWN = ManimColor("#B79400") +YELLOWGREEN = ManimColor("#BBF90F") +YELLOWISH = ManimColor("#FAEE66") +YELLOWISHBROWN = ManimColor("#9B7A01") +YELLOWISHGREEN = ManimColor("#B0DD16") +YELLOWISHORANGE = ManimColor("#FFAB0F") +YELLOWISHTAN = ManimColor("#FCFC81") +YELLOWOCHRE = ManimColor("#CB9D06") +YELLOWORANGE = ManimColor("#FCB001") +YELLOWTAN = ManimColor("#FFE36E") +YELLOWYBROWN = ManimColor("#AE8B0C") +YELLOWYGREEN = ManimColor("#BFF128") diff --git a/manim/utils/color/__init__.py b/manim/utils/color/__init__.py new file mode 100644 index 0000000000..5df87f109d --- /dev/null +++ b/manim/utils/color/__init__.py @@ -0,0 +1,12 @@ +from typing import Dict, List + +from .core import * +from .manim_colors import * + +_colors: List[ManimColor] = [x for x in globals().values() if isinstance(x, ManimColor)] + +from . import AS2700, BS381, X11, XKCD + +_all_color_dict: Dict[str, ManimColor] = { + k: v for k, v in globals().items() if isinstance(v, ManimColor) +} diff --git a/manim/utils/color.py b/manim/utils/color/core.py similarity index 71% rename from manim/utils/color.py rename to manim/utils/color/core.py index 9faabb5aaa..8f05f20949 100644 --- a/manim/utils/color.py +++ b/manim/utils/color/core.py @@ -2,36 +2,17 @@ from __future__ import annotations -from typing import Any, Iterable, Sequence, Union - -from typing_extensions import Annotated, Literal, TypeAlias - -# from manim._config import logger - -__all__ = [ - "color_to_rgb", - "color_to_rgba", - "rgb_to_color", - "rgba_to_color", - "rgb_to_hex", - "hex_to_rgb", - "invert_color", - "color_to_int_rgb", - "color_to_int_rgba", - "color_gradient", - "interpolate_color", - "average_color", - "random_bright_color", - "random_color", - "get_shaded_rgb", -] - +# logger = _config.logger import random +from typing import Any, Sequence, Union import numpy as np +from typing_extensions import Literal, TypeAlias + +from ...utils.space_ops import normalize + +# import manim._config as _config -from ..utils.bezier import interpolate -from ..utils.space_ops import normalize """A list of pre-defined colors. @@ -198,6 +179,10 @@ def named_lines_group(length, colors, names, text_colors, align_to_block): ManimColorInternal: TypeAlias = "np.ndarray[Literal[4], np.dtype[ManimColorDType]]" +import re + +re_hex = re.compile("((?<=#)|(?<=0x))[A-F0-9]{6,8}", re.IGNORECASE) + class ManimColor: def __init__( @@ -208,35 +193,40 @@ def __init__( if value is None: self._internal_value = np.array([0, 0, 0, alpha], dtype=ManimColorDType) elif isinstance(value, ManimColor): - # logger.warning( + # logger.info( # "ManimColor was passed another ManimColor. This is probably not what you want. Created a copy of the passed ManimColor instead." # ) self._internal_value = value._internal_value elif isinstance(value, int): - self._internal_value = ManimColor.internal_from_integer(value, alpha) + self._internal_value = ManimColor._internal_from_integer(value, alpha) elif isinstance(value, str): - try: - self._internal_value = ManimColor.internal_from_hex_string(value, alpha) - except ValueError: - self._internal_value = ManimColor.internal_from_string(value) + result = re_hex.search(value) + if result is not None: + self._internal_value = ManimColor._internal_from_hex_string( + result.group(), alpha + ) + else: + # This is not expected to be called on module initialization time + # It can be horribly slow to convert a string to a color because it has to access the dictionary of colors and find the right color + self._internal_value = ManimColor._internal_from_string(value) elif isinstance(value, (list, tuple, np.ndarray)): length = len(value) if all(isinstance(x, float) for x in value): if length == 3: - self._internal_value = ManimColor.internal_from_rgb(value, alpha) # type: ignore + self._internal_value = ManimColor._internal_from_rgb(value, alpha) # type: ignore elif length == 4: - self._internal_value = ManimColor.internal_from_rgba(value) # type: ignore + self._internal_value = ManimColor._internal_from_rgba(value) # type: ignore else: raise ValueError( f"ManimColor only accepts lists/tuples/arrays of length 3 or 4, not {length}" ) else: if length == 3: - self._internal_value = ManimColor.internal_from_int_rgb( + self._internal_value = ManimColor._internal_from_int_rgb( value, alpha # type: ignore ) elif length == 4: - self._internal_value = ManimColor.internal_from_int_rgba(value) # type: ignore + self._internal_value = ManimColor._internal_from_int_rgba(value) # type: ignore else: raise ValueError( f"ManimColor only accepts lists/tuples/arrays of length 3 or 4, not {length}" @@ -258,7 +248,7 @@ def _internal_value(self, value: ManimColorInternal) -> None: self.__value: ManimColorInternal = value @staticmethod - def internal_from_integer(value: int, alpha: float) -> ManimColorInternal: + def _internal_from_integer(value: int, alpha: float) -> ManimColorInternal: return np.asarray( ( ((value >> 16) & 0xFF) / 255, @@ -270,13 +260,7 @@ def internal_from_integer(value: int, alpha: float) -> ManimColorInternal: ) @staticmethod - def internal_from_hex_string(hex: str, alpha: float) -> ManimColorInternal: - if hex.startswith("#"): - hex = hex[1:] - elif hex.startswith("0x"): - hex = hex[2:] - else: - raise ValueError(f"Invalid hex value: {hex}") + def _internal_from_hex_string(hex: str, alpha: float) -> ManimColorInternal: if len(hex) == 6: hex += "00" tmp = int(hex, 16) @@ -291,7 +275,7 @@ def internal_from_hex_string(hex: str, alpha: float) -> ManimColorInternal: ) @staticmethod - def internal_from_int_rgb( + def _internal_from_int_rgb( rgb: RGB_Tuple_Int, alpha: float = 1.0 ) -> ManimColorInternal: value: np.ndarray = np.asarray(rgb, dtype=ManimColorDType).copy() / 255 @@ -300,7 +284,7 @@ def internal_from_int_rgb( return value @staticmethod - def internal_from_rgb( + def _internal_from_rgb( rgb: RGB_Tuple_Float, alpha: float = 1.0 ) -> ManimColorInternal: value: np.ndarray = np.asarray(rgb, dtype=ManimColorDType).copy() @@ -309,18 +293,20 @@ def internal_from_rgb( return value @staticmethod - def internal_from_int_rgba(rgba: RGBA_Tuple_Int) -> ManimColorInternal: + def _internal_from_int_rgba(rgba: RGBA_Tuple_Int) -> ManimColorInternal: return np.asarray(rgba, dtype=ManimColorDType) / 255 @staticmethod - def internal_from_rgba(rgba: RGBA_Tuple_Float) -> ManimColorInternal: + def _internal_from_rgba(rgba: RGBA_Tuple_Float) -> ManimColorInternal: return np.asarray(rgba, dtype=ManimColorDType) # TODO: This may be a bad idea but i don't know what else will be better without writing an endless list of colors @staticmethod - def internal_from_string(name: str) -> ManimColorInternal: - if name.upper() in globals(): - return globals()[name]._internal_value + def _internal_from_string(name: str) -> ManimColorInternal: + from . import _all_color_dict + + if name.upper() in _all_color_dict: + return _all_color_dict[name]._internal_value else: raise ValueError(f"Color {name} not found") @@ -464,174 +450,6 @@ def __xor__(self, other: ManimColor) -> ManimColor: RGBA_Array_Float, ] -__all__ += ["ManimColor", "ParsableManimColor", "ManimColorDType"] - -WHITE: ManimColor = ManimColor("#FFFFFF") -GRAY_A: ManimColor = ManimColor("#DDDDDD") -GREY_A: ManimColor = ManimColor("#DDDDDD") -GRAY_B: ManimColor = ManimColor("#BBBBBB") -GREY_B: ManimColor = ManimColor("#BBBBBB") -GRAY_C: ManimColor = ManimColor("#888888") -GREY_C: ManimColor = ManimColor("#888888") -GRAY_D: ManimColor = ManimColor("#444444") -GREY_D: ManimColor = ManimColor("#444444") -GRAY_E: ManimColor = ManimColor("#222222") -GREY_E: ManimColor = ManimColor("#222222") -BLACK: ManimColor = ManimColor("#000000") -LIGHTER_GRAY: ManimColor = ManimColor("#DDDDDD") -LIGHTER_GREY: ManimColor = ManimColor("#DDDDDD") -LIGHT_GRAY: ManimColor = ManimColor("#BBBBBB") -LIGHT_GREY: ManimColor = ManimColor("#BBBBBB") -GRAY: ManimColor = ManimColor("#888888") -GREY: ManimColor = ManimColor("#888888") -DARK_GRAY: ManimColor = ManimColor("#444444") -DARK_GREY: ManimColor = ManimColor("#444444") -DARKER_GRAY: ManimColor = ManimColor("#222222") -DARKER_GREY: ManimColor = ManimColor("#222222") -BLUE_A: ManimColor = ManimColor("#C7E9F1") -BLUE_B: ManimColor = ManimColor("#9CDCEB") -BLUE_C: ManimColor = ManimColor("#58C4DD") -BLUE_D: ManimColor = ManimColor("#29ABCA") -BLUE_E: ManimColor = ManimColor("#236B8E") -PURE_BLUE: ManimColor = ManimColor("#0000FF") -BLUE: ManimColor = ManimColor("#58C4DD") -DARK_BLUE: ManimColor = ManimColor("#236B8E") -TEAL_A: ManimColor = ManimColor("#ACEAD7") -TEAL_B: ManimColor = ManimColor("#76DDC0") -TEAL_C: ManimColor = ManimColor("#5CD0B3") -TEAL_D: ManimColor = ManimColor("#55C1A7") -TEAL_E: ManimColor = ManimColor("#49A88F") -TEAL: ManimColor = ManimColor("#5CD0B3") -GREEN_A: ManimColor = ManimColor("#C9E2AE") -GREEN_B: ManimColor = ManimColor("#A6CF8C") -GREEN_C: ManimColor = ManimColor("#83C167") -GREEN_D: ManimColor = ManimColor("#77B05D") -GREEN_E: ManimColor = ManimColor("#699C52") -PURE_GREEN: ManimColor = ManimColor("#00FF00") -GREEN: ManimColor = ManimColor("#83C167") -YELLOW_A: ManimColor = ManimColor("#FFF1B6") -YELLOW_B: ManimColor = ManimColor("#FFEA94") -YELLOW_C: ManimColor = ManimColor("#FFFF00") -YELLOW_D: ManimColor = ManimColor("#F4D345") -YELLOW_E: ManimColor = ManimColor("#E8C11C") -YELLOW: ManimColor = ManimColor("#FFFF00") -GOLD_A: ManimColor = ManimColor("#F7C797") -GOLD_B: ManimColor = ManimColor("#F9B775") -GOLD_C: ManimColor = ManimColor("#F0AC5F") -GOLD_D: ManimColor = ManimColor("#E1A158") -GOLD_E: ManimColor = ManimColor("#C78D46") -GOLD: ManimColor = ManimColor("#F0AC5F") -RED_A: ManimColor = ManimColor("#F7A1A3") -RED_B: ManimColor = ManimColor("#FF8080") -RED_C: ManimColor = ManimColor("#FC6255") -RED_D: ManimColor = ManimColor("#E65A4C") -RED_E: ManimColor = ManimColor("#CF5044") -PURE_RED: ManimColor = ManimColor("#FF0000") -RED: ManimColor = ManimColor("#FC6255") -MAROON_A: ManimColor = ManimColor("#ECABC1") -MAROON_B: ManimColor = ManimColor("#EC92AB") -MAROON_C: ManimColor = ManimColor("#C55F73") -MAROON_D: ManimColor = ManimColor("#A24D61") -MAROON_E: ManimColor = ManimColor("#94424F") -MAROON: ManimColor = ManimColor("#C55F73") -PURPLE_A: ManimColor = ManimColor("#CAA3E8") -PURPLE_B: ManimColor = ManimColor("#B189C6") -PURPLE_C: ManimColor = ManimColor("#9A72AC") -PURPLE_D: ManimColor = ManimColor("#715582") -PURPLE_E: ManimColor = ManimColor("#644172") -PURPLE: ManimColor = ManimColor("#9A72AC") -PINK: ManimColor = ManimColor("#D147BD") -LIGHT_PINK: ManimColor = ManimColor("#DC75CD") -ORANGE: ManimColor = ManimColor("#FF862F") -LIGHT_BROWN: ManimColor = ManimColor("#CD853F") -DARK_BROWN: ManimColor = ManimColor("#8B4513") -GRAY_BROWN: ManimColor = ManimColor("#736357") -GREY_BROWN: ManimColor = ManimColor("#736357") - -__all__ += [ - "WHITE", - "GRAY_A", - "GREY_A", - "GRAY_B", - "GREY_B", - "GRAY_C", - "GREY_C", - "GRAY_D", - "GREY_D", - "GRAY_E", - "GREY_E", - "BLACK", - "LIGHTER_GRAY", - "LIGHTER_GREY", - "LIGHT_GRAY", - "LIGHT_GREY", - "GRAY", - "GREY", - "DARK_GRAY", - "DARK_GREY", - "DARKER_GRAY", - "DARKER_GREY", - "BLUE_A", - "BLUE_B", - "BLUE_C", - "BLUE_D", - "BLUE_E", - "PURE_BLUE", - "BLUE", - "DARK_BLUE", - "TEAL_A", - "TEAL_B", - "TEAL_C", - "TEAL_D", - "TEAL_E", - "TEAL", - "GREEN_A", - "GREEN_B", - "GREEN_C", - "GREEN_D", - "GREEN_E", - "PURE_GREEN", - "GREEN", - "YELLOW_A", - "YELLOW_B", - "YELLOW_C", - "YELLOW_D", - "YELLOW_E", - "YELLOW", - "GOLD_A", - "GOLD_B", - "GOLD_C", - "GOLD_D", - "GOLD_E", - "GOLD", - "RED_A", - "RED_B", - "RED_C", - "RED_D", - "RED_E", - "PURE_RED", - "RED", - "MAROON_A", - "MAROON_B", - "MAROON_C", - "MAROON_D", - "MAROON_E", - "MAROON", - "PURPLE_A", - "PURPLE_B", - "PURPLE_C", - "PURPLE_D", - "PURPLE_E", - "PURPLE", - "PINK", - "LIGHT_PINK", - "ORANGE", - "LIGHT_BROWN", - "DARK_BROWN", - "GRAY_BROWN", - "GREY_BROWN", -] - def color_to_rgb(color: ParsableManimColor) -> RGB_Array_Float: return ManimColor(color).to_rgb() @@ -715,10 +533,9 @@ def random_bright_color() -> ManimColor: return ManimColor(new_rgb) -_colors: list[ManimColor] = [x for x in globals().values() if isinstance(x, ManimColor)] - - def random_color() -> ManimColor: + from . import _colors + return random.choice(_colors) @@ -734,3 +551,26 @@ def get_shaded_rgb( factor *= 0.5 result = rgb + factor return result + + +__all__ = [ + "ManimColor", + "ManimColorDType", + "ParsableManimColor", + "color_to_rgb", + "color_to_rgba", + "color_to_int_rgb", + "color_to_int_rgba", + "rgb_to_color", + "rgba_to_color", + "rgb_to_hex", + "hex_to_rgb", + "invert_color", + "interpolate_arrays", + "color_gradient", + "interpolate_color", + "average_color", + "random_bright_color", + "random_color", + "get_shaded_rgb", +] diff --git a/manim/utils/color/manim_colors.py b/manim/utils/color/manim_colors.py new file mode 100644 index 0000000000..b7a8c1bf11 --- /dev/null +++ b/manim/utils/color/manim_colors.py @@ -0,0 +1,91 @@ +from .core import ManimColor + +WHITE: ManimColor = ManimColor("#FFFFFF") +GRAY_A: ManimColor = ManimColor("#DDDDDD") +GREY_A: ManimColor = ManimColor("#DDDDDD") +GRAY_B: ManimColor = ManimColor("#BBBBBB") +GREY_B: ManimColor = ManimColor("#BBBBBB") +GRAY_C: ManimColor = ManimColor("#888888") +GREY_C: ManimColor = ManimColor("#888888") +GRAY_D: ManimColor = ManimColor("#444444") +GREY_D: ManimColor = ManimColor("#444444") +GRAY_E: ManimColor = ManimColor("#222222") +GREY_E: ManimColor = ManimColor("#222222") +BLACK: ManimColor = ManimColor("#000000") +LIGHTER_GRAY: ManimColor = ManimColor("#DDDDDD") +LIGHTER_GREY: ManimColor = ManimColor("#DDDDDD") +LIGHT_GRAY: ManimColor = ManimColor("#BBBBBB") +LIGHT_GREY: ManimColor = ManimColor("#BBBBBB") +GRAY: ManimColor = ManimColor("#888888") +GREY: ManimColor = ManimColor("#888888") +DARK_GRAY: ManimColor = ManimColor("#444444") +DARK_GREY: ManimColor = ManimColor("#444444") +DARKER_GRAY: ManimColor = ManimColor("#222222") +DARKER_GREY: ManimColor = ManimColor("#222222") +BLUE_A: ManimColor = ManimColor("#C7E9F1") +BLUE_B: ManimColor = ManimColor("#9CDCEB") +BLUE_C: ManimColor = ManimColor("#58C4DD") +BLUE_D: ManimColor = ManimColor("#29ABCA") +BLUE_E: ManimColor = ManimColor("#236B8E") +PURE_BLUE: ManimColor = ManimColor("#0000FF") +BLUE: ManimColor = ManimColor("#58C4DD") +DARK_BLUE: ManimColor = ManimColor("#236B8E") +TEAL_A: ManimColor = ManimColor("#ACEAD7") +TEAL_B: ManimColor = ManimColor("#76DDC0") +TEAL_C: ManimColor = ManimColor("#5CD0B3") +TEAL_D: ManimColor = ManimColor("#55C1A7") +TEAL_E: ManimColor = ManimColor("#49A88F") +TEAL: ManimColor = ManimColor("#5CD0B3") +GREEN_A: ManimColor = ManimColor("#C9E2AE") +GREEN_B: ManimColor = ManimColor("#A6CF8C") +GREEN_C: ManimColor = ManimColor("#83C167") +GREEN_D: ManimColor = ManimColor("#77B05D") +GREEN_E: ManimColor = ManimColor("#699C52") +PURE_GREEN: ManimColor = ManimColor("#00FF00") +GREEN: ManimColor = ManimColor("#83C167") +YELLOW_A: ManimColor = ManimColor("#FFF1B6") +YELLOW_B: ManimColor = ManimColor("#FFEA94") +YELLOW_C: ManimColor = ManimColor("#FFFF00") +YELLOW_D: ManimColor = ManimColor("#F4D345") +YELLOW_E: ManimColor = ManimColor("#E8C11C") +YELLOW: ManimColor = ManimColor("#FFFF00") +GOLD_A: ManimColor = ManimColor("#F7C797") +GOLD_B: ManimColor = ManimColor("#F9B775") +GOLD_C: ManimColor = ManimColor("#F0AC5F") +GOLD_D: ManimColor = ManimColor("#E1A158") +GOLD_E: ManimColor = ManimColor("#C78D46") +GOLD: ManimColor = ManimColor("#F0AC5F") +RED_A: ManimColor = ManimColor("#F7A1A3") +RED_B: ManimColor = ManimColor("#FF8080") +RED_C: ManimColor = ManimColor("#FC6255") +RED_D: ManimColor = ManimColor("#E65A4C") +RED_E: ManimColor = ManimColor("#CF5044") +PURE_RED: ManimColor = ManimColor("#FF0000") +RED: ManimColor = ManimColor("#FC6255") +MAROON_A: ManimColor = ManimColor("#ECABC1") +MAROON_B: ManimColor = ManimColor("#EC92AB") +MAROON_C: ManimColor = ManimColor("#C55F73") +MAROON_D: ManimColor = ManimColor("#A24D61") +MAROON_E: ManimColor = ManimColor("#94424F") +MAROON: ManimColor = ManimColor("#C55F73") +PURPLE_A: ManimColor = ManimColor("#CAA3E8") +PURPLE_B: ManimColor = ManimColor("#B189C6") +PURPLE_C: ManimColor = ManimColor("#9A72AC") +PURPLE_D: ManimColor = ManimColor("#715582") +PURPLE_E: ManimColor = ManimColor("#644172") +PURPLE: ManimColor = ManimColor("#9A72AC") +PINK: ManimColor = ManimColor("#D147BD") +LIGHT_PINK: ManimColor = ManimColor("#DC75CD") +ORANGE: ManimColor = ManimColor("#FF862F") +LIGHT_BROWN: ManimColor = ManimColor("#CD853F") +DARK_BROWN: ManimColor = ManimColor("#8B4513") +GRAY_BROWN: ManimColor = ManimColor("#736357") +GREY_BROWN: ManimColor = ManimColor("#736357") + +"""The colormap of manim community""" + +LOGO_WHITE = ManimColor("#ECE7E2") +LOGO_GREEN = ManimColor("#87C2A5") +LOGO_BLUE = ManimColor("#525893") +LOGO_RED = ManimColor("#E07A5F") +LOGO_BLACK = ManimColor("#343434") From cd7a3858463f93614913a19190b7e55af8fc4cf8 Mon Sep 17 00:00:00 2001 From: MrDiver Date: Sun, 25 Dec 2022 03:21:16 +0100 Subject: [PATCH 23/91] Added typing.py and typed bezier.py, core.py, constants.py fully --- .mypy.ini | 85 +- manim/constants.py | 32 +- .../opengl/opengl_vectorized_mobject.py | 8 +- manim/typing.py | 77 + manim/utils/bezier.py | 308 +- manim/utils/color/core.py | 34 +- manim/utils/space_ops.py | 13 +- poetry.lock | 4089 ++++++++--------- pyproject.toml | 9 +- 9 files changed, 2459 insertions(+), 2196 deletions(-) create mode 100644 manim/typing.py diff --git a/.mypy.ini b/.mypy.ini index 48cad442f4..41ca07bdbf 100644 --- a/.mypy.ini +++ b/.mypy.ini @@ -1,33 +1,62 @@ [mypy] -show_error_codes = True - -# ignore most files; should be checked once proper types have been implemented -[mypy-manim.__main__] -ignore_errors = True - -[mypy-manim.camera.*] -ignore_errors = True - -[mypy-manim.scene.*] -ignore_errors = True - -[mypy-manim.cli.cfg.*] -ignore_errors = True - -[mypy-manim.mobject.*] +strict = False +python_version = 3.10 +plugins = numpy.typing.mypy_plugin ignore_errors = True - -[mypy-manim._config.*] -ignore_errors = True - -[mypy-manim.utils.*] -ignore_errors = True - +cache_fine_grained = True +use_fine_grained_cache = True + +# Disallow Dynamic Typing +# disallow_any_unimported = True +# disallow_any_expr = False +# disallow_any_decorated = True +# disallow_any_explicit = True +# disallow_any_generics = True +# disallow_subclassing_any = True +# +# # Disallow Untyped Defs and Calls +disallow_untyped_calls = True +disallow_untyped_defs = True +disallow_incomplete_defs = True +# check_untyped_defs = False +# disallow_untyped_decorators = True +# +# # None and Optional Handling +# implicit_optional = False +# strict_optional = True +# +# # Configuring Warnings +# warn_redundant_casts = True +# warn_unused_ignores = True +warn_return_any = True +# warn_unreachable = True +# +# # Strictness Flags +# allow_untyped_globals = False +# allow_redefinition = False +# local_partial_types = False +# strict_equality = True +# +# # Configuring Error Messages +# show_error_context = True +# show_column_numbers = True +# show_error_codes = True +# pretty = True +# color_output = True +# error_summary = True +# +# disable_recursive_aliases = True + +[mypy-manim.typing] +ignore_errors = False +[mypy-manim.constants] +ignore_errors = False [mypy-manim.utils.color] ignore_errors = False - -[mypy-manim.animation.*] -ignore_errors = True +[mypy-manim.utils] +ignore_errors = False +[mypy-manim.utils.bezier] +ignore_errors = False # ---------------- We can't properly type this ------------------------ @@ -40,10 +69,6 @@ ignore_errors = True [mypy-manimpango] ignore_missing_imports = True -# Has stubs in 3.8 -[mypy-numpy] -ignore_missing_imports = True - # Has stubs in 3.8 [mypy-pydub] ignore_missing_imports = True diff --git a/manim/constants.py b/manim/constants.py index d81d85902c..918bae55b9 100644 --- a/manim/constants.py +++ b/manim/constants.py @@ -7,9 +7,11 @@ from enum import Enum import numpy as np -from cloup import Context +from cloup import Context # type: ignore from PIL.Image import Resampling +from manim.typing import Point3D + __all__ = [ "SCENE_NOT_FOUND_MESSAGE", "CHOOSE_NUMBER_MESSAGE", @@ -119,43 +121,43 @@ } # Geometry: directions -ORIGIN: np.ndarray = np.array((0.0, 0.0, 0.0)) +ORIGIN: Point3D = np.array((0.0, 0.0, 0.0)) """The center of the coordinate system.""" -UP: np.ndarray = np.array((0.0, 1.0, 0.0)) +UP: Point3D = np.array((0.0, 1.0, 0.0)) """One unit step in the positive Y direction.""" -DOWN: np.ndarray = np.array((0.0, -1.0, 0.0)) +DOWN: Point3D = np.array((0.0, -1.0, 0.0)) """One unit step in the negative Y direction.""" -RIGHT: np.ndarray = np.array((1.0, 0.0, 0.0)) +RIGHT: Point3D = np.array((1.0, 0.0, 0.0)) """One unit step in the positive X direction.""" -LEFT: np.ndarray = np.array((-1.0, 0.0, 0.0)) +LEFT: Point3D = np.array((-1.0, 0.0, 0.0)) """One unit step in the negative X direction.""" -IN: np.ndarray = np.array((0.0, 0.0, -1.0)) +IN: Point3D = np.array((0.0, 0.0, -1.0)) """One unit step in the negative Z direction.""" -OUT: np.ndarray = np.array((0.0, 0.0, 1.0)) +OUT: Point3D = np.array((0.0, 0.0, 1.0)) """One unit step in the positive Z direction.""" # Geometry: axes -X_AXIS: np.ndarray = np.array((1.0, 0.0, 0.0)) -Y_AXIS: np.ndarray = np.array((0.0, 1.0, 0.0)) -Z_AXIS: np.ndarray = np.array((0.0, 0.0, 1.0)) +X_AXIS: Point3D = np.array((1.0, 0.0, 0.0)) +Y_AXIS: Point3D = np.array((0.0, 1.0, 0.0)) +Z_AXIS: Point3D = np.array((0.0, 0.0, 1.0)) # Geometry: useful abbreviations for diagonals -UL: np.ndarray = UP + LEFT +UL: Point3D = UP + LEFT """One step up plus one step left.""" -UR: np.ndarray = UP + RIGHT +UR: Point3D = UP + RIGHT """One step up plus one step right.""" -DL: np.ndarray = DOWN + LEFT +DL: Point3D = DOWN + LEFT """One step down plus one step left.""" -DR: np.ndarray = DOWN + RIGHT +DR: Point3D = DOWN + RIGHT """One step down plus one step right.""" # Geometry diff --git a/manim/mobject/opengl/opengl_vectorized_mobject.py b/manim/mobject/opengl/opengl_vectorized_mobject.py index b740380940..ee6f7a8bf8 100644 --- a/manim/mobject/opengl/opengl_vectorized_mobject.py +++ b/manim/mobject/opengl/opengl_vectorized_mobject.py @@ -9,6 +9,7 @@ import numpy as np from manim import config +from manim._config import logger from manim.constants import * from manim.mobject.opengl.opengl_mobject import OpenGLMobject, OpenGLPoint from manim.renderer.shader_wrapper import ShaderWrapper @@ -1283,14 +1284,17 @@ def insert_n_curves_to_point_list(self, n: int, points: np.ndarray) -> np.ndarra for _ in range(-diff): ipc[np.argmax(ipc)] -= 1 - new_points = [] + new_length = sum(x + 1 for x in ipc) + new_points = np.empty((new_length, nppc, 3)) + i = 0 for group, n_inserts in zip(bezier_groups, ipc): # What was once a single quadratic curve defined # by "group" will now be broken into n_inserts + 1 # smaller quadratic curves alphas = np.linspace(0, 1, n_inserts + 2) for a1, a2 in zip(alphas, alphas[1:]): - new_points += partial_quadratic_bezier_points(group, a1, a2) + new_points[i] = partial_quadratic_bezier_points(group, a1, a2) + i = i + 1 return np.vstack(new_points) def interpolate(self, mobject1, mobject2, alpha, *args, **kwargs): diff --git a/manim/typing.py b/manim/typing.py new file mode 100644 index 0000000000..d5342e1d94 --- /dev/null +++ b/manim/typing.py @@ -0,0 +1,77 @@ +from typing import Tuple, Protocol +from typing_extensions import TypeAlias, Annotated, Literal, TypeVar +import numpy as np +import numpy.typing as npt + +# Color Types + +ManimFloat: TypeAlias = np.float64 +ManimInt: TypeAlias = np.int64 +ManimColorDType: TypeAlias = ManimFloat + +RGB_Array_Float: TypeAlias = npt.NDArray[ManimFloat] +RGB_Tuple_Float: TypeAlias = Tuple[float, float, float] + +RGB_Array_Int: TypeAlias = npt.NDArray[ManimInt] +RGB_Tuple_Int: TypeAlias = Tuple[int, int, int] + +RGBA_Array_Float: TypeAlias = npt.NDArray[ManimFloat] +RGBA_Tuple_Float: TypeAlias = Tuple[float, float, float, float] + +RGBA_Array_Int: TypeAlias = npt.NDArray[ManimInt] +RGBA_Tuple_Int: TypeAlias = Tuple[int, int, int, int] + +ManimColorInternal: TypeAlias = npt.NDArray[ManimColorDType] + +# Point Types + +PointDType: TypeAlias = ManimFloat +""" DType for all points. """ +Point2D: TypeAlias = npt.NDArray[PointDType] +""" `shape: (2,) A 2D point. [float,float] """ +Point3D: TypeAlias = npt.NDArray[PointDType] +""" `shape: (3,) A 3D point. `[float,float,float]` """ + +# Bezier Types +QuadraticBezierPoints: TypeAlias = npt.NDArray[PointDType] +""" `shape: (3,3)` An Array of Quadratic Bezier Handles `[[float,float,float], [float,float,float], [float,float,float]]`. """ + +QuadraticBezierPoints_Array: TypeAlias = npt.NDArray[PointDType] +""" `shape: (N,3,3)` An Array of Quadratic Bezier Handles `[[[float,float,float], [float,float,float], [float,float,float]], ...]`. """ + +CubicBezierPoints: TypeAlias = npt.NDArray[PointDType] +""" `shape: (4,3)` An Array of Cubic Bezier Handles `[[float,float,float], [float,float,float], [float,float,float], [float,float,float]]`. """ + +BezierPoints: TypeAlias = npt.NDArray[PointDType] +""" `shape: (N,3)` An Array of Cubic Bezier Handles `[[float,float,float],...]`. +`N` Is always multiples of the degree of the Bezier curve. +(Please refer to the documentation of the function you are using for further type Information) +""" + +FlatBezierPoints: TypeAlias = npt.NDArray[PointDType] +""" `shape: (N)` An Array of Bezier Handles but flattened `[float,...]`.""" + +Point3D_Array: TypeAlias = npt.NDArray[PointDType] +""" `shape: (N,3)` An Array Points in 3D Space `[[float,float,float],...]`. + +(Please refer to the documentation of the function you are using for further type Information) +""" + +BezierPoints_Array: TypeAlias = npt.NDArray[PointDType] +""" `shape: (N,PPC,3)` An Array of Bezier Handles `[[[float,float,float],...],...]`. +`PPC` Is the number of points per bezier curve. `N` Is the number of bezier curves. +(Please refer to the documentation of the function you are using for further type Information) +""" + +# Vector Types +Vector: TypeAlias = npt.NDArray[PointDType] +""" `shape: (N,)` A Vector `[float,...]`. """ + +RowVector: TypeAlias = npt.NDArray[PointDType] +""" `shape: (1,N)` A Row Vector `[[float,...]]`. """ + +ColVector: TypeAlias = npt.NDArray[PointDType] +""" `shape: (N,1)` A Column Vector `[[float],[float],...]`. """ + +MatrixMN: TypeAlias = npt.NDArray[PointDType] +""" `shape: (M,N)` A Matrix `[[float,...],[float,...],...]`. """ diff --git a/manim/utils/bezier.py b/manim/utils/bezier.py index 79d93f764b..bcd20361cc 100644 --- a/manim/utils/bezier.py +++ b/manim/utils/bezier.py @@ -2,6 +2,23 @@ from __future__ import annotations +from cairo import Matrix + +from manim.typing import ( + BezierPoints, + BezierPoints_Array, + ColVector, + CubicBezierPoints, + MatrixMN, + Point3D, + Point3D_Array, + PointDType, + QuadraticBezierPoints, + QuadraticBezierPoints_Array, + RowVector, + Vector, +) + __all__ = [ "bezier", "partial_bezier_points", @@ -22,7 +39,7 @@ import typing from functools import reduce -from typing import Iterable +from typing import Callable, Iterable, List, Sequence, Tuple, overload import numpy as np from scipy import linalg @@ -32,8 +49,8 @@ def bezier( - points: np.ndarray, -) -> typing.Callable[[float], int | typing.Iterable]: + points: Sequence[Point3D] | Point3D_Array, +) -> Callable[[float], Point3D]: """Classic implementation of a bezier curve. Parameters @@ -43,34 +60,39 @@ def bezier( Returns ------- - typing.Callable[[float], typing.Union[int, typing.Iterable]] function describing the bezier curve. + You can pass a t value between 0 and 1 to get the corresponding point on the curve. """ n = len(points) - 1 - # Cubic Bezier curve if n == 3: - return ( - lambda t: (1 - t) ** 3 * points[0] + return lambda t: np.asarray( + (1 - t) ** 3 * points[0] + 3 * t * (1 - t) ** 2 * points[1] + 3 * (1 - t) * t**2 * points[2] - + t**3 * points[3] + + t**3 * points[3], + dtype=PointDType, ) # Quadratic Bezier curve if n == 2: - return ( - lambda t: (1 - t) ** 2 * points[0] - + 2 * t * (1 - t) * points[1] - + t**2 * points[2] + return lambda t: np.asarray( + (1 - t) ** 2 * points[0] + 2 * t * (1 - t) * points[1] + t**2 * points[2], + dtype=PointDType, ) - return lambda t: sum( - ((1 - t) ** (n - k)) * (t**k) * choose(n, k) * point - for k, point in enumerate(points) + return lambda t: np.asarray( + np.asarray( + [ + (((1 - t) ** (n - k)) * (t**k) * choose(n, k) * point) + for k, point in enumerate(points) + ], + dtype=PointDType, + ).sum(axis=0) ) -def partial_bezier_points(points: np.ndarray, a: float, b: float) -> np.ndarray: +# !TODO: This function has still a weird implementation with the overlapping points +def partial_bezier_points(points: BezierPoints, a: float, b: float) -> BezierPoints: """Given an array of points which define bezier curve, and two numbers 0<=a np.ndarray: np.ndarray Set of points defining the partial bezier curve. """ + _len = len(points) if a == 1: - return [points[-1]] * len(points) + return np.asarray([points[-1]] * _len, dtype=PointDType) - a_to_1 = np.array([bezier(points[i:])(a) for i in range(len(points))]) + a_to_1 = np.asarray( + [bezier(points[i:])(a) for i in range(_len)], + dtype=PointDType, + ) end_prop = (b - a) / (1.0 - a) - return np.array([bezier(a_to_1[: i + 1])(end_prop) for i in range(len(points))]) + return np.asarray( + [bezier(a_to_1[: i + 1])(end_prop) for i in range(_len)], + dtype=PointDType, + ) # Shortened version of partial_bezier_points just for quadratics, # since this is called a fair amount -def partial_quadratic_bezier_points(points, a, b): +def partial_quadratic_bezier_points( + points: QuadraticBezierPoints, a: float, b: float +) -> QuadraticBezierPoints: if a == 1: - return 3 * [points[-1]] + return np.asarray(3 * [points[-1]]) - def curve(t): - return ( + def curve(t: float) -> Point3D: + return np.asarray( points[0] * (1 - t) * (1 - t) + 2 * points[1] * t * (1 - t) + points[2] * t * t @@ -117,10 +148,10 @@ def curve(t): h1_prime = (1 - a) * points[1] + a * points[2] end_prop = (b - a) / (1.0 - a) h1 = (1 - end_prop) * h0 + end_prop * h1_prime - return [h0, h1, h2] + return np.asarray((h0, h1, h2)) -def split_quadratic_bezier(points: Iterable[float], t: float) -> np.ndarray: +def split_quadratic_bezier(points: QuadraticBezierPoints, t: float) -> BezierPoints: """Split a quadratic Bézier curve at argument ``t`` into two quadratic curves. Parameters @@ -142,10 +173,10 @@ def split_quadratic_bezier(points: Iterable[float], t: float) -> np.ndarray: s2 = interpolate(h1, a2, t) p = interpolate(s1, s2, t) - return np.array([a1, s1, p, p, s2, a2]) + return np.array((a1, s1, p, p, s2, a2)) -def subdivide_quadratic_bezier(points: Iterable[float], n: int) -> np.ndarray: +def subdivide_quadratic_bezier(points: QuadraticBezierPoints, n: int) -> BezierPoints: """Subdivide a quadratic Bézier curve into ``n`` subcurves which have the same shape. The points at which the curve is split are located at the @@ -176,8 +207,8 @@ def subdivide_quadratic_bezier(points: Iterable[float], n: int) -> np.ndarray: def quadratic_bezier_remap( - triplets: Iterable[Iterable[float]], new_number_of_curves: int -): + triplets: QuadraticBezierPoints_Array, new_number_of_curves: int +) -> QuadraticBezierPoints_Array: """Remaps the number of curves to a higher amount by splitting bezier curves Parameters @@ -234,62 +265,183 @@ def quadratic_bezier_remap( # Linear interpolation variants +@overload def interpolate(start: int, end: int, alpha: float) -> float: + ... + + +@overload +def interpolate(start: float, end: float, alpha: float) -> float: + ... + + +@overload +def interpolate(start: Point3D, end: Point3D, alpha: float) -> Point3D: + ... + + +def interpolate( + start: int | float | Point3D, end: int | float | Point3D, alpha: float | Point3D +) -> float | Point3D: return (1 - alpha) * start + alpha * end +@overload +def integer_interpolate(start: int, end: int, alpha: float) -> tuple[int, float]: + ... + + +@overload +def integer_interpolate(start: float, end: float, alpha: float) -> tuple[int, float]: + ... + + def integer_interpolate( - start: float, - end: float, + start: int | float, + end: int | float, alpha: float, ) -> tuple[int, float]: """ - Alpha is a float between 0 and 1. This returns - an integer between start and end (inclusive) representing - appropriate interpolation between them, along with a - "residue" representing a new proportion between the - returned integer and the next one of the - list. - - For example, if start=0, end=10, alpha=0.46, This - would return (4, 0.6). + This is a variant of interpolate that returns an integer and the residual + + Parameters + ---------- + start + The start of the range + end + The end of the range + alpha + a float between 0 and 1. + + Returns + ------- + tuple[int, float] + This returns an integer between start and end (inclusive) representing + appropriate interpolation between them, along with a + "residue" representing a new proportion between the + returned integer and the next one of the + list. + + For example, if start=0, end=10, alpha=0.46, This + would return (4, 0.6). """ if alpha >= 1: - return (end - 1, 1.0) + return (int(end - 1), 1.0) if alpha <= 0: - return (start, 0) + return (int(start), 0) value = int(interpolate(start, end, alpha)) residue = ((end - start) * alpha) % 1 return (value, residue) +@overload +def mid(start: int, end: int) -> float: + ... + + +@overload def mid(start: float, end: float) -> float: + ... + + +@overload +def mid(start: Point3D, end: Point3D) -> Point3D: + ... + + +def mid(start: int | float | Point3D, end: int | float | Point3D) -> float | Point3D: + """Returns the midpoint between two values. + + Parameters + ---------- + start + The first value + end + The second value + + Returns + ------- + The midpoint between the two values + """ return (start + end) / 2.0 -def inverse_interpolate(start: float, end: float, value: float) -> np.ndarray: +@overload +def inverse_interpolate(start: float, end: float, value: int) -> float: + ... + + +@overload +def inverse_interpolate(start: float, end: float, value: float) -> float: + ... + + +@overload +def inverse_interpolate(start: float, end: float, value: Point3D) -> Point3D: + ... + + +# !TODO: Add documentation to this function +def inverse_interpolate( + start: float, end: float, value: int | float | Point3D +) -> float | Point3D: return np.true_divide(value - start, end - start) +@overload +def match_interpolate( + new_start: float, + new_end: float, + old_start: float, + old_end: float, + old_value: int, +) -> float: + ... + + +@overload def match_interpolate( new_start: float, new_end: float, old_start: float, old_end: float, old_value: float, -) -> np.ndarray: +) -> float: + ... + + +@overload +def match_interpolate( + new_start: float, + new_end: float, + old_start: float, + old_end: float, + old_value: Point3D, +) -> Point3D: + ... + + +def match_interpolate( + new_start: float, + new_end: float, + old_start: float, + old_end: float, + old_value: int | float | Point3D, +) -> float | Point3D: return interpolate( new_start, new_end, - inverse_interpolate(old_start, old_end, old_value), + inverse_interpolate(old_start, old_end, old_value), # type: ignore ) # Figuring out which bezier curves most smoothly connect a sequence of points -def get_smooth_cubic_bezier_handle_points(points): - points = np.array(points) +def get_smooth_cubic_bezier_handle_points( + points: Point3D_Array, +) -> tuple[BezierPoints, BezierPoints]: + points = np.asarray(points) num_handles = len(points) - 1 dim = points.shape[1] if num_handles < 1: @@ -301,7 +453,7 @@ def get_smooth_cubic_bezier_handle_points(points): # diag is a representation of the matrix in diagonal form # See https://www.particleincell.com/2012/bezier-splines/ # for how to arrive at these equations - diag = np.zeros((l + u + 1, 2 * num_handles)) + diag: MatrixMN = np.zeros((l + u + 1, 2 * num_handles)) diag[0, 1::2] = -1 diag[0, 2::2] = 1 diag[1, 0::2] = 2 @@ -314,13 +466,13 @@ def get_smooth_cubic_bezier_handle_points(points): # This is the b as in Ax = b, where we are solving for x, # and A is represented using diag. However, think of entries # to x and b as being points in space, not numbers - b = np.zeros((2 * num_handles, dim)) + b: Point3D_Array = np.zeros((2 * num_handles, dim)) b[1::2] = 2 * points[1:] b[0] = points[0] b[-1] = points[-1] - def solve_func(b): - return linalg.solve_banded((l, u), diag, b) + def solve_func(b: ColVector) -> ColVector | MatrixMN: + return linalg.solve_banded((l, u), diag, b) # type: ignore use_closed_solve_function = is_closed(points) if use_closed_solve_function: @@ -334,8 +486,8 @@ def solve_func(b): b[0] = 2 * points[0] b[-1] = np.zeros(dim) - def closed_curve_solve_func(b): - return linalg.solve(matrix, b) + def closed_curve_solve_func(b: ColVector) -> ColVector | MatrixMN: + return linalg.solve(matrix, b) # type: ignore handle_pairs = np.zeros((2 * num_handles, dim)) for i in range(dim): @@ -347,8 +499,8 @@ def closed_curve_solve_func(b): def get_smooth_handle_points( - points: np.ndarray, -) -> tuple[np.ndarray, np.ndarray]: + points: BezierPoints, +) -> tuple[BezierPoints, BezierPoints]: """Given some anchors (points), compute handles so the resulting bezier curve is smooth. Parameters @@ -362,7 +514,7 @@ def get_smooth_handle_points( Computed handles. """ # NOTE points here are anchors. - points = np.array(points) + points = np.asarray(points) num_handles = len(points) - 1 dim = points.shape[1] if num_handles < 1: @@ -374,7 +526,7 @@ def get_smooth_handle_points( # diag is a representation of the matrix in diagonal form # See https://www.particleincell.com/2012/bezier-splines/ # for how to arrive at these equations - diag = np.zeros((l + u + 1, 2 * num_handles)) + diag: MatrixMN = np.zeros((l + u + 1, 2 * num_handles)) diag[0, 1::2] = -1 diag[0, 2::2] = 1 diag[1, 0::2] = 2 @@ -392,8 +544,8 @@ def get_smooth_handle_points( b[0] = points[0] b[-1] = points[-1] - def solve_func(b: np.ndarray) -> np.ndarray: - return linalg.solve_banded((l, u), diag, b) + def solve_func(b: ColVector) -> ColVector | MatrixMN: + return linalg.solve_banded((l, u), diag, b) # type: ignore use_closed_solve_function = is_closed(points) if use_closed_solve_function: @@ -407,8 +559,8 @@ def solve_func(b: np.ndarray) -> np.ndarray: b[0] = 2 * points[0] b[-1] = np.zeros(dim) - def closed_curve_solve_func(b: np.ndarray) -> np.ndarray: - return linalg.solve(matrix, b) + def closed_curve_solve_func(b: ColVector) -> ColVector | MatrixMN: + return linalg.solve(matrix, b) # type: ignore handle_pairs = np.zeros((2 * num_handles, dim)) for i in range(dim): @@ -438,7 +590,9 @@ def diag_to_matrix(l_and_u: tuple[int, int], diag: np.ndarray) -> np.ndarray: # Given 4 control points for a cubic bezier curve (or arrays of such) # return control points for 2 quadratics (or 2n quadratics) approximating them. -def get_quadratic_approximation_of_cubic(a0, h0, h1, a1): +def get_quadratic_approximation_of_cubic( + a0: Point3D, h0: Point3D, h1: Point3D, a1: Point3D +) -> BezierPoints: a0 = np.array(a0, ndmin=2) h0 = np.array(h0, ndmin=2) h1 = np.array(h1, ndmin=2) @@ -486,9 +640,9 @@ def get_quadratic_approximation_of_cubic(a0, h0, h1, a1): m, n = a0.shape t_mid = t_mid.repeat(n).reshape((m, n)) - # Compute bezier point and tangent at the chosen value of t - mid = bezier([a0, h0, h1, a1])(t_mid) - Tm = bezier([h0 - a0, h1 - h0, a1 - h1])(t_mid) + # Compute bezier point and tangent at the chosen value of t (these are vectorized) + mid = bezier([a0, h0, h1, a1])(t_mid) # type: ignore + Tm = bezier([h0 - a0, h1 - h0, a1 - h1])(t_mid) # type: ignore # Intersection between tangent lines at end points # and tangent in the middle @@ -506,14 +660,14 @@ def get_quadratic_approximation_of_cubic(a0, h0, h1, a1): return result -def is_closed(points: tuple[np.ndarray, np.ndarray]) -> bool: +def is_closed(points: Point3D_Array) -> bool: return np.allclose(points[0], points[-1]) def proportions_along_bezier_curve_for_point( - point: typing.Iterable[float | int], - control_points: typing.Iterable[typing.Iterable[float | int]], - round_to: float | int | None = 1e-6, + point: Point3D, + control_points: BezierPoints, + round_to: float | int = 1e-6, ) -> np.ndarray: """Obtains the proportion along the bezier curve corresponding to a given point given the bezier curve's control points. @@ -583,21 +737,23 @@ def proportions_along_bezier_curve_for_point( # Roots will be none, but in this specific instance, we don't need to consider that. continue bezier_polynom = np.polynomial.Polynomial(terms[::-1]) - polynom_roots = bezier_polynom.roots() + polynom_roots = bezier_polynom.roots() # type: ignore if len(polynom_roots) > 0: polynom_roots = np.around(polynom_roots, int(np.log10(1 / round_to))) roots.append(polynom_roots) roots = [[root for root in rootlist if root.imag == 0] for rootlist in roots] - roots = reduce(np.intersect1d, roots) # Get common roots. - roots = np.array([r.real for r in roots if 0 <= r.real <= 1]) - return roots + # Get common roots + # arg-type: ignore + roots = reduce(np.intersect1d, roots) # type: ignore + result = np.asarray([r.real for r in roots if 0 <= r.real <= 1]) + return result def point_lies_on_bezier( - point: typing.Iterable[float | int], - control_points: typing.Iterable[typing.Iterable[float | int]], - round_to: float | int | None = 1e-6, + point: Point3D, + control_points: BezierPoints, + round_to: float | int = 1e-6, ) -> bool: """Checks if a given point lies on the bezier curves with the given control points. diff --git a/manim/utils/color/core.py b/manim/utils/color/core.py index 8f05f20949..2809c9f8f5 100644 --- a/manim/utils/color/core.py +++ b/manim/utils/color/core.py @@ -9,6 +9,19 @@ import numpy as np from typing_extensions import Literal, TypeAlias +from manim.typing import ( + ManimColorDType, + ManimColorInternal, + RGB_Array_Float, + RGB_Array_Int, + RGB_Tuple_Float, + RGB_Tuple_Int, + RGBA_Array_Float, + RGBA_Array_Int, + RGBA_Tuple_Float, + RGBA_Tuple_Int, +) + from ...utils.space_ops import normalize # import manim._config as _config @@ -161,23 +174,6 @@ def named_lines_group(length, colors, names, text_colors, align_to_block): """ -ManimColorDType: TypeAlias = np.float64 -ManimFloat: TypeAlias = np.float64 -ManimInt: TypeAlias = np.int64 - -RGB_Array_Float: TypeAlias = "np.ndarray[Literal[3], np.dtype[ManimFloat]]" -RGB_Tuple_Float: TypeAlias = "tuple[float, float, float]" - -RGB_Array_Int: TypeAlias = "np.ndarray[Literal[3], np.dtype[ManimInt]]" -RGB_Tuple_Int: TypeAlias = "tuple[int, int, int]" - -RGBA_Array_Float: TypeAlias = "np.ndarray[Literal[4], np.dtype[ManimFloat]]" -RGBA_Tuple_Float: TypeAlias = "tuple[float, float, float, float]" - -RGBA_Array_Int: TypeAlias = "np.ndarray[Literal[4], np.dtype[ManimInt]]" -RGBA_Tuple_Int: TypeAlias = "tuple[int, int, int, int]" - -ManimColorInternal: TypeAlias = "np.ndarray[Literal[4], np.dtype[ManimColorDType]]" import re @@ -278,7 +274,7 @@ def _internal_from_hex_string(hex: str, alpha: float) -> ManimColorInternal: def _internal_from_int_rgb( rgb: RGB_Tuple_Int, alpha: float = 1.0 ) -> ManimColorInternal: - value: np.ndarray = np.asarray(rgb, dtype=ManimColorDType).copy() / 255 + value: RGB_Array_Float = np.asarray(rgb, dtype=ManimColorDType).copy() / 255 value.resize(4, refcheck=False) value[3] = alpha return value @@ -287,7 +283,7 @@ def _internal_from_int_rgb( def _internal_from_rgb( rgb: RGB_Tuple_Float, alpha: float = 1.0 ) -> ManimColorInternal: - value: np.ndarray = np.asarray(rgb, dtype=ManimColorDType).copy() + value: RGB_Array_Int = np.asarray(rgb, dtype=ManimColorDType).copy() value.resize(4, refcheck=False) value[3] = alpha return value diff --git a/manim/utils/space_ops.py b/manim/utils/space_ops.py index 203462057a..882759cc66 100644 --- a/manim/utils/space_ops.py +++ b/manim/utils/space_ops.py @@ -2,6 +2,8 @@ from __future__ import annotations +from manim.typing import ColVector, Point3D_Array, RowVector, Vector + __all__ = [ "quaternion_mult", "quaternion_from_angle_axis", @@ -559,10 +561,10 @@ def line_intersection( def find_intersection( - p0s: Sequence[np.ndarray], - v0s: Sequence[np.ndarray], - p1s: Sequence[np.ndarray], - v1s: Sequence[np.ndarray], + p0s: Sequence[np.ndarray] | Point3D_Array, + v0s: Sequence[np.ndarray] | Point3D_Array, + p1s: Sequence[np.ndarray] | Point3D_Array, + v1s: Sequence[np.ndarray] | Point3D_Array, threshold: float = 1e-5, ) -> Sequence[np.ndarray]: """ @@ -640,7 +642,8 @@ def shoelace_direction(x_y: np.ndarray) -> str: return "CW" if area > 0 else "CCW" -def cross2d(a, b): +# !TODO: Probably needs retyping but idk what it does at the moment +def cross2d(a: Vector, b: Vector) -> Vector: if len(a.shape) == 2: return a[:, 0] * b[:, 1] - a[:, 1] * b[:, 0] else: diff --git a/poetry.lock b/poetry.lock index bb771a861e..1a7e1ac33e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,3 +1,5 @@ +# This file is automatically @generated by Poetry and should not be changed by hand. + [[package]] name = "alabaster" version = "0.7.12" @@ -5,6 +7,10 @@ description = "A configurable sidebar-enabled Sphinx theme" category = "dev" optional = false python-versions = "*" +files = [ + {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, + {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, +] [[package]] name = "anyio" @@ -13,6 +19,10 @@ description = "High level compatibility layer for multiple asynchronous event lo category = "main" optional = true python-versions = ">=3.6.2" +files = [ + {file = "anyio-3.6.2-py3-none-any.whl", hash = "sha256:fbbe32bd270d2a2ef3ed1c5d45041250284e31fc0a4df4a5a6071842051a51e3"}, + {file = "anyio-3.6.2.tar.gz", hash = "sha256:25ea0d673ae30af41a0c442f81cf3b38c7e79fdc7b60335a4c14e05eb0947421"}, +] [package.dependencies] idna = ">=2.8" @@ -30,6 +40,10 @@ description = "Disable App Nap on macOS >= 10.9" category = "main" optional = true python-versions = "*" +files = [ + {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, + {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, +] [[package]] name = "argon2-cffi" @@ -38,6 +52,10 @@ description = "The secure Argon2 password hashing algorithm." category = "main" optional = true python-versions = ">=3.6" +files = [ + {file = "argon2-cffi-21.3.0.tar.gz", hash = "sha256:d384164d944190a7dd7ef22c6aa3ff197da12962bd04b17f64d4e93d934dba5b"}, + {file = "argon2_cffi-21.3.0-py3-none-any.whl", hash = "sha256:8c976986f2c5c0e5000919e6de187906cfd81fb1c72bf9d88c01177e77da7f80"}, +] [package.dependencies] argon2-cffi-bindings = "*" @@ -54,6 +72,29 @@ description = "Low-level CFFI bindings for Argon2" category = "main" optional = true python-versions = ">=3.6" +files = [ + {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f"}, + {file = "argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a"}, +] [package.dependencies] cffi = ">=1.0.1" @@ -69,6 +110,10 @@ description = "Better dates & times for Python" category = "main" optional = true python-versions = ">=3.6" +files = [ + {file = "arrow-1.2.3-py3-none-any.whl", hash = "sha256:5a49ab92e3b7b71d96cd6bfcc4df14efefc9dfa96ea19045815914a6ab6b1fe2"}, + {file = "arrow-1.2.3.tar.gz", hash = "sha256:3934b30ca1b9f292376d9db15b19446088d12ec58629bc3f0da28fd55fb633a1"}, +] [package.dependencies] python-dateutil = ">=2.7.0" @@ -80,6 +125,10 @@ description = "Read/rewrite/write Python ASTs" category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +files = [ + {file = "astor-0.8.1-py2.py3-none-any.whl", hash = "sha256:070a54e890cefb5b3739d19f30f5a5ec840ffc9c50ffa7d23cc9fc1a38ebbfc5"}, + {file = "astor-0.8.1.tar.gz", hash = "sha256:6a6effda93f4e1ce9f618779b2dd1d9d84f1e32812c23a29b3fff6fd7f63fa5e"}, +] [[package]] name = "astroid" @@ -88,6 +137,10 @@ description = "An abstract syntax tree for Python with inference support." category = "dev" optional = false python-versions = ">=3.7.2" +files = [ + {file = "astroid-2.12.13-py3-none-any.whl", hash = "sha256:10e0ad5f7b79c435179d0d0f0df69998c4eef4597534aae44910db060baeb907"}, + {file = "astroid-2.12.13.tar.gz", hash = "sha256:1493fe8bd3dfd73dc35bd53c9d5b6e49ead98497c47b2307662556a5692d29d7"}, +] [package.dependencies] lazy-object-proxy = ">=1.4.0" @@ -104,6 +157,10 @@ description = "Annotate AST trees with source code positions" category = "main" optional = true python-versions = "*" +files = [ + {file = "asttokens-2.2.1-py2.py3-none-any.whl", hash = "sha256:6b0ac9e93fb0335014d382b8fa9b3afa7df546984258005da0b9e7095b3deb1c"}, + {file = "asttokens-2.2.1.tar.gz", hash = "sha256:4622110b2a6f30b77e1473affaa97e711bc2f07d3f10848420ff1898edbe94f3"}, +] [package.dependencies] six = "*" @@ -113,25 +170,34 @@ test = ["astroid", "pytest"] [[package]] name = "attrs" -version = "22.1.0" +version = "22.2.0" description = "Classes Without Boilerplate" category = "main" optional = false -python-versions = ">=3.5" +python-versions = ">=3.6" +files = [ + {file = "attrs-22.2.0-py3-none-any.whl", hash = "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836"}, + {file = "attrs-22.2.0.tar.gz", hash = "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"}, +] [package.extras] -dev = ["cloudpickle", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy (>=0.900,!=0.940)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "sphinx", "sphinx-notfound-page", "zope.interface"] -docs = ["furo", "sphinx", "sphinx-notfound-page", "zope.interface"] -tests = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "zope.interface"] -tests_no_zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins"] +cov = ["attrs[tests]", "coverage-enable-subprocess", "coverage[toml] (>=5.3)"] +dev = ["attrs[docs,tests]"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope.interface"] +tests = ["attrs[tests-no-zope]", "zope.interface"] +tests-no-zope = ["cloudpickle", "cloudpickle", "hypothesis", "hypothesis", "mypy (>=0.971,<0.990)", "mypy (>=0.971,<0.990)", "pympler", "pympler", "pytest (>=4.3.0)", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-mypy-plugins", "pytest-xdist[psutil]", "pytest-xdist[psutil]"] [[package]] -name = "Babel" +name = "babel" version = "2.11.0" description = "Internationalization utilities" category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "Babel-2.11.0-py3-none-any.whl", hash = "sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe"}, + {file = "Babel-2.11.0.tar.gz", hash = "sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6"}, +] [package.dependencies] pytz = ">=2015.7" @@ -143,6 +209,10 @@ description = "Specifications for callback functions passed in to an API" category = "main" optional = true python-versions = "*" +files = [ + {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, + {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, +] [[package]] name = "beautifulsoup4" @@ -151,6 +221,10 @@ description = "Screen-scraping library" category = "main" optional = false python-versions = ">=3.6.0" +files = [ + {file = "beautifulsoup4-4.11.1-py3-none-any.whl", hash = "sha256:58d5c3d29f5a36ffeb94f02f0d786cd53014cf9b3b3951d42e0080d8a9498d30"}, + {file = "beautifulsoup4-4.11.1.tar.gz", hash = "sha256:ad9aa55b65ef2808eb405f46cf74df7fcb7044d5cbc26487f96eb2ef2e436693"}, +] [package.dependencies] soupsieve = ">1.2" @@ -161,18 +235,32 @@ lxml = ["lxml"] [[package]] name = "black" -version = "22.10.0" +version = "23.1a1" description = "The uncompromising code formatter." category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "black-23.1a1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fb7641d442ede92538bc70fa0201f884753a7d0f62f26c722b7b00301b95902"}, + {file = "black-23.1a1-cp310-cp310-win_amd64.whl", hash = "sha256:88288a645402106b8eb9f50d7340ae741e16240bb01c2eed8466549153daa96e"}, + {file = "black-23.1a1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4db1d8027ce7ae53f0ccf02b0be0b8808fefb291d6cb1543420f4165d96d364c"}, + {file = "black-23.1a1-cp311-cp311-win_amd64.whl", hash = "sha256:88ec25a64063945b4591b6378bead544c5d3260de1c93ad96f3ad2d76ddd76fd"}, + {file = "black-23.1a1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8dff6f0157e47fbbeada046fca144b6557d3be2fb2602d668881cd179f04a352"}, + {file = "black-23.1a1-cp37-cp37m-win_amd64.whl", hash = "sha256:ca658b69260a18bf7aa0b0a6562dbbd304a737487d1318998aaca5a75901fd2c"}, + {file = "black-23.1a1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85dede655442f5e246e7abd667fe07e14916897ba52f3640b5489bf11f7dbf67"}, + {file = "black-23.1a1-cp38-cp38-win_amd64.whl", hash = "sha256:ddbf9da228726d46f45c29024263e160d41030a415097254817d65127012d1a2"}, + {file = "black-23.1a1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63330069d8ec909cf4e2c4d43a7f00aeb03335430ef9fec6cd2328e6ebde8a77"}, + {file = "black-23.1a1-cp39-cp39-win_amd64.whl", hash = "sha256:793c9176beb2adf295f6b863d9a4dc953fe2ac359ca3da108d71d14cb2c09e52"}, + {file = "black-23.1a1-py3-none-any.whl", hash = "sha256:e88e4b633d64b9e7adc4a6b922f52bb204af9f90d7b1e3317e6490f2b598b1ea"}, + {file = "black-23.1a1.tar.gz", hash = "sha256:0b945a5a1e5a5321f884de0061d5a8585d947c9b608e37b6d26ceee4dfdf4b62"}, +] [package.dependencies] click = ">=8.0.0" mypy-extensions = ">=0.4.3" pathspec = ">=0.9.0" platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} [package.extras] @@ -188,6 +276,10 @@ description = "An easy safelist-based HTML-sanitizing tool." category = "main" optional = true python-versions = ">=3.7" +files = [ + {file = "bleach-5.0.1-py3-none-any.whl", hash = "sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a"}, + {file = "bleach-5.0.1.tar.gz", hash = "sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c"}, +] [package.dependencies] six = ">=1.9.0" @@ -204,6 +296,10 @@ description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, + {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, +] [[package]] name = "cffi" @@ -212,6 +308,72 @@ description = "Foreign Function Interface for Python calling C code." category = "main" optional = false python-versions = "*" +files = [ + {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, + {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, + {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, + {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, + {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, + {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, + {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, + {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, + {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, + {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, + {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, + {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, + {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, + {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, + {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, + {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, + {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, + {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, + {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, +] [package.dependencies] pycparser = "*" @@ -223,6 +385,10 @@ description = "Validate configuration and produce human readable error messages. category = "dev" optional = false python-versions = ">=3.6.1" +files = [ + {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, + {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, +] [[package]] name = "charset-normalizer" @@ -231,9 +397,13 @@ description = "The Real First Universal Charset Detector. Open, modern and activ category = "main" optional = false python-versions = ">=3.6.0" +files = [ + {file = "charset-normalizer-2.1.1.tar.gz", hash = "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845"}, + {file = "charset_normalizer-2.1.1-py3-none-any.whl", hash = "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f"}, +] [package.extras] -unicode_backport = ["unicodedata2"] +unicode-backport = ["unicodedata2"] [[package]] name = "click" @@ -242,6 +412,10 @@ description = "Composable command line interface toolkit" category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, + {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, +] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} @@ -253,6 +427,9 @@ description = "Extends click.Group to invoke a command without explicit subcomma category = "main" optional = false python-versions = "*" +files = [ + {file = "click-default-group-1.2.2.tar.gz", hash = "sha256:d9560e8e8dfa44b3562fbc9425042a0fd6d21956fcc2db0077f63f34253ab904"}, +] [package.dependencies] click = "*" @@ -264,6 +441,10 @@ description = "Adds features to Click: option groups, constraints, subcommand se category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "cloup-0.13.1-py2.py3-none-any.whl", hash = "sha256:04a29a483e122c04f401547dcbce451ce002ff3e392308122619d5b9009f321f"}, + {file = "cloup-0.13.1.tar.gz", hash = "sha256:ea0acc67eed994b86e79b70d76bc2ea525b7f98f3cd8e63696896d549597ef4d"}, +] [package.dependencies] click = ">=7.1,<9.0" @@ -276,6 +457,10 @@ 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 = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] [[package]] name = "colour" @@ -284,6 +469,10 @@ description = "converts and manipulates various color representation (HSL, RVB, category = "main" optional = false python-versions = "*" +files = [ + {file = "colour-0.1.5-py2.py3-none-any.whl", hash = "sha256:33f6db9d564fadc16e59921a56999b79571160ce09916303d35346dddc17978c"}, + {file = "colour-0.1.5.tar.gz", hash = "sha256:af20120fefd2afede8b001fbef2ea9da70ad7d49fafdb6489025dae8745c3aee"}, +] [package.extras] test = ["nose"] @@ -295,6 +484,10 @@ description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus- category = "main" optional = true python-versions = ">=3.6" +files = [ + {file = "comm-0.1.2-py3-none-any.whl", hash = "sha256:9f3abf3515112fa7c55a42a6a5ab358735c9dccc8b5910a9d8e3ef5998130666"}, + {file = "comm-0.1.2.tar.gz", hash = "sha256:3e2f5826578e683999b93716285b3b1f344f157bf75fa9ce0a797564e742f062"}, +] [package.dependencies] traitlets = ">=5.3" @@ -309,6 +502,10 @@ description = "Python parser for the CommonMark Markdown spec" category = "main" optional = false python-versions = "*" +files = [ + {file = "commonmark-0.9.1-py2.py3-none-any.whl", hash = "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"}, + {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"}, +] [package.extras] test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] @@ -320,6 +517,77 @@ description = "Python library for calculating contours of 2D quadrilateral grids category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "contourpy-1.0.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:613c665529899b5d9fade7e5d1760111a0b011231277a0d36c49f0d3d6914bd6"}, + {file = "contourpy-1.0.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:78ced51807ccb2f45d4ea73aca339756d75d021069604c2fccd05390dc3c28eb"}, + {file = "contourpy-1.0.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b3b1bd7577c530eaf9d2bc52d1a93fef50ac516a8b1062c3d1b9bcec9ebe329b"}, + {file = "contourpy-1.0.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8834c14b8c3dd849005e06703469db9bf96ba2d66a3f88ecc539c9a8982e0ee"}, + {file = "contourpy-1.0.6-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4052a8a4926d4468416fc7d4b2a7b2a3e35f25b39f4061a7e2a3a2748c4fc48"}, + {file = "contourpy-1.0.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c0e1308307a75e07d1f1b5f0f56b5af84538a5e9027109a7bcf6cb47c434e72"}, + {file = "contourpy-1.0.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9fc4e7973ed0e1fe689435842a6e6b330eb7ccc696080dda9a97b1a1b78e41db"}, + {file = "contourpy-1.0.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:08e8d09d96219ace6cb596506fb9b64ea5f270b2fb9121158b976d88871fcfd1"}, + {file = "contourpy-1.0.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f33da6b5d19ad1bb5e7ad38bb8ba5c426d2178928bc2b2c44e8823ea0ecb6ff3"}, + {file = "contourpy-1.0.6-cp310-cp310-win32.whl", hash = "sha256:12a7dc8439544ed05c6553bf026d5e8fa7fad48d63958a95d61698df0e00092b"}, + {file = "contourpy-1.0.6-cp310-cp310-win_amd64.whl", hash = "sha256:eadad75bf91897f922e0fb3dca1b322a58b1726a953f98c2e5f0606bd8408621"}, + {file = "contourpy-1.0.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:913bac9d064cff033cf3719e855d4f1db9f1c179e0ecf3ba9fdef21c21c6a16a"}, + {file = "contourpy-1.0.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46deb310a276cc5c1fd27958e358cce68b1e8a515fa5a574c670a504c3a3fe30"}, + {file = "contourpy-1.0.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b64f747e92af7da3b85631a55d68c45a2d728b4036b03cdaba4bd94bcc85bd6f"}, + {file = "contourpy-1.0.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50627bf76abb6ba291ad08db583161939c2c5fab38c38181b7833423ab9c7de3"}, + {file = "contourpy-1.0.6-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:358f6364e4873f4d73360b35da30066f40387dd3c427a3e5432c6b28dd24a8fa"}, + {file = "contourpy-1.0.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c78bfbc1a7bff053baf7e508449d2765964d67735c909b583204e3240a2aca45"}, + {file = "contourpy-1.0.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e43255a83835a129ef98f75d13d643844d8c646b258bebd11e4a0975203e018f"}, + {file = "contourpy-1.0.6-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:375d81366afd547b8558c4720337218345148bc2fcffa3a9870cab82b29667f2"}, + {file = "contourpy-1.0.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b98c820608e2dca6442e786817f646d11057c09a23b68d2b3737e6dcb6e4a49b"}, + {file = "contourpy-1.0.6-cp311-cp311-win32.whl", hash = "sha256:0e4854cc02006ad6684ce092bdadab6f0912d131f91c2450ce6dbdea78ee3c0b"}, + {file = "contourpy-1.0.6-cp311-cp311-win_amd64.whl", hash = "sha256:d2eff2af97ea0b61381828b1ad6cd249bbd41d280e53aea5cccd7b2b31b8225c"}, + {file = "contourpy-1.0.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5b117d29433fc8393b18a696d794961464e37afb34a6eeb8b2c37b5f4128a83e"}, + {file = "contourpy-1.0.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:341330ed19074f956cb20877ad8d2ae50e458884bfa6a6df3ae28487cc76c768"}, + {file = "contourpy-1.0.6-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:371f6570a81dfdddbb837ba432293a63b4babb942a9eb7aaa699997adfb53278"}, + {file = "contourpy-1.0.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9447c45df407d3ecb717d837af3b70cfef432138530712263730783b3d016512"}, + {file = "contourpy-1.0.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:730c27978a0003b47b359935478b7d63fd8386dbb2dcd36c1e8de88cbfc1e9de"}, + {file = "contourpy-1.0.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:da1ef35fd79be2926ba80fbb36327463e3656c02526e9b5b4c2b366588b74d9a"}, + {file = "contourpy-1.0.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:cd2bc0c8f2e8de7dd89a7f1c10b8844e291bca17d359373203ef2e6100819edd"}, + {file = "contourpy-1.0.6-cp37-cp37m-win32.whl", hash = "sha256:3a1917d3941dd58732c449c810fa7ce46cc305ce9325a11261d740118b85e6f3"}, + {file = "contourpy-1.0.6-cp37-cp37m-win_amd64.whl", hash = "sha256:06ca79e1efbbe2df795822df2fa173d1a2b38b6e0f047a0ec7903fbca1d1847e"}, + {file = "contourpy-1.0.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e626cefff8491bce356221c22af5a3ea528b0b41fbabc719c00ae233819ea0bf"}, + {file = "contourpy-1.0.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dbe6fe7a1166b1ddd7b6d887ea6fa8389d3f28b5ed3f73a8f40ece1fc5a3d340"}, + {file = "contourpy-1.0.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e13b31d1b4b68db60b3b29f8e337908f328c7f05b9add4b1b5c74e0691180109"}, + {file = "contourpy-1.0.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a79d239fc22c3b8d9d3de492aa0c245533f4f4c7608e5749af866949c0f1b1b9"}, + {file = "contourpy-1.0.6-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e8e686a6db92a46111a1ee0ee6f7fbfae4048f0019de207149f43ac1812cf95"}, + {file = "contourpy-1.0.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acd2bd02f1a7adff3a1f33e431eb96ab6d7987b039d2946a9b39fe6fb16a1036"}, + {file = "contourpy-1.0.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:03d1b9c6b44a9e30d554654c72be89af94fab7510b4b9f62356c64c81cec8b7d"}, + {file = "contourpy-1.0.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b48d94386f1994db7c70c76b5808c12e23ed7a4ee13693c2fc5ab109d60243c0"}, + {file = "contourpy-1.0.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:208bc904889c910d95aafcf7be9e677726df9ef71e216780170dbb7e37d118fa"}, + {file = "contourpy-1.0.6-cp38-cp38-win32.whl", hash = "sha256:444fb776f58f4906d8d354eb6f6ce59d0a60f7b6a720da6c1ccb839db7c80eb9"}, + {file = "contourpy-1.0.6-cp38-cp38-win_amd64.whl", hash = "sha256:9bc407a6af672da20da74823443707e38ece8b93a04009dca25856c2d9adadb1"}, + {file = "contourpy-1.0.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:aa4674cf3fa2bd9c322982644967f01eed0c91bb890f624e0e0daf7a5c3383e9"}, + {file = "contourpy-1.0.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6f56515e7c6fae4529b731f6c117752247bef9cdad2b12fc5ddf8ca6a50965a5"}, + {file = "contourpy-1.0.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:344cb3badf6fc7316ad51835f56ac387bdf86c8e1b670904f18f437d70da4183"}, + {file = "contourpy-1.0.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b1e66346acfb17694d46175a0cea7d9036f12ed0c31dfe86f0f405eedde2bdd"}, + {file = "contourpy-1.0.6-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8468b40528fa1e15181cccec4198623b55dcd58306f8815a793803f51f6c474a"}, + {file = "contourpy-1.0.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1dedf4c64185a216c35eb488e6f433297c660321275734401760dafaeb0ad5c2"}, + {file = "contourpy-1.0.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:494efed2c761f0f37262815f9e3c4bb9917c5c69806abdee1d1cb6611a7174a0"}, + {file = "contourpy-1.0.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:75a2e638042118118ab39d337da4c7908c1af74a8464cad59f19fbc5bbafec9b"}, + {file = "contourpy-1.0.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a628bba09ba72e472bf7b31018b6281fd4cc903f0888049a3724afba13b6e0b8"}, + {file = "contourpy-1.0.6-cp39-cp39-win32.whl", hash = "sha256:e1739496c2f0108013629aa095cc32a8c6363444361960c07493818d0dea2da4"}, + {file = "contourpy-1.0.6-cp39-cp39-win_amd64.whl", hash = "sha256:a457ee72d9032e86730f62c5eeddf402e732fdf5ca8b13b41772aa8ae13a4563"}, + {file = "contourpy-1.0.6-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d912f0154a20a80ea449daada904a7eb6941c83281a9fab95de50529bfc3a1da"}, + {file = "contourpy-1.0.6-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4081918147fc4c29fad328d5066cfc751da100a1098398742f9f364be63803fc"}, + {file = "contourpy-1.0.6-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0537cc1195245bbe24f2913d1f9211b8f04eb203de9044630abd3664c6cc339c"}, + {file = "contourpy-1.0.6-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcd556c8fc37a342dd636d7eef150b1399f823a4462f8c968e11e1ebeabee769"}, + {file = "contourpy-1.0.6-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:f6ca38dd8d988eca8f07305125dec6f54ac1c518f1aaddcc14d08c01aebb6efc"}, + {file = "contourpy-1.0.6-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c1baa49ab9fedbf19d40d93163b7d3e735d9cd8d5efe4cce9907902a6dad391f"}, + {file = "contourpy-1.0.6-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:211dfe2bd43bf5791d23afbe23a7952e8ac8b67591d24be3638cabb648b3a6eb"}, + {file = "contourpy-1.0.6-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c38c6536c2d71ca2f7e418acaf5bca30a3af7f2a2fa106083c7d738337848dbe"}, + {file = "contourpy-1.0.6-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b1ee48a130da4dd0eb8055bbab34abf3f6262957832fd575e0cab4979a15a41"}, + {file = "contourpy-1.0.6-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5641927cc5ae66155d0c80195dc35726eae060e7defc18b7ab27600f39dd1fe7"}, + {file = "contourpy-1.0.6-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7ee394502026d68652c2824348a40bf50f31351a668977b51437131a90d777ea"}, + {file = "contourpy-1.0.6-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b97454ed5b1368b66ed414c754cba15b9750ce69938fc6153679787402e4cdf"}, + {file = "contourpy-1.0.6-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0236875c5a0784215b49d00ebbe80c5b6b5d5244b3655a36dda88105334dea17"}, + {file = "contourpy-1.0.6-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84c593aeff7a0171f639da92cb86d24954bbb61f8a1b530f74eb750a14685832"}, + {file = "contourpy-1.0.6-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:9b0e7fe7f949fb719b206548e5cde2518ffb29936afa4303d8a1c4db43dcb675"}, + {file = "contourpy-1.0.6.tar.gz", hash = "sha256:6e459ebb8bb5ee4c22c19cc000174f8059981971a33ce11e17dddf6aca97a142"}, +] [package.dependencies] numpy = ">=1.16" @@ -333,11 +601,64 @@ test-no-codebase = ["Pillow", "matplotlib", "pytest"] [[package]] name = "coverage" -version = "6.5.0" +version = "7.0.1" description = "Code coverage measurement for Python" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "coverage-7.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b3695c4f4750bca943b3e1f74ad4be8d29e4aeab927d50772c41359107bd5d5c"}, + {file = "coverage-7.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fa6a5a224b7f4cfb226f4fc55a57e8537fcc096f42219128c2c74c0e7d0953e1"}, + {file = "coverage-7.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74f70cd92669394eaf8d7756d1b195c8032cf7bbbdfce3bc489d4e15b3b8cf73"}, + {file = "coverage-7.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b66bb21a23680dee0be66557dc6b02a3152ddb55edf9f6723fa4a93368f7158d"}, + {file = "coverage-7.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d87717959d4d0ee9db08a0f1d80d21eb585aafe30f9b0a54ecf779a69cb015f6"}, + {file = "coverage-7.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:854f22fa361d1ff914c7efa347398374cc7d567bdafa48ac3aa22334650dfba2"}, + {file = "coverage-7.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:1e414dc32ee5c3f36544ea466b6f52f28a7af788653744b8570d0bf12ff34bc0"}, + {file = "coverage-7.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6c5ad996c6fa4d8ed669cfa1e8551348729d008a2caf81489ab9ea67cfbc7498"}, + {file = "coverage-7.0.1-cp310-cp310-win32.whl", hash = "sha256:691571f31ace1837838b7e421d3a09a8c00b4aac32efacb4fc9bd0a5c647d25a"}, + {file = "coverage-7.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:89caf4425fe88889e2973a8e9a3f6f5f9bbe5dd411d7d521e86428c08a873a4a"}, + {file = "coverage-7.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:63d56165a7c76265468d7e0c5548215a5ba515fc2cba5232d17df97bffa10f6c"}, + {file = "coverage-7.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4f943a3b2bc520102dd3e0bb465e1286e12c9a54f58accd71b9e65324d9c7c01"}, + {file = "coverage-7.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:830525361249dc4cd013652b0efad645a385707a5ae49350c894b67d23fbb07c"}, + {file = "coverage-7.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd1b9c5adc066db699ccf7fa839189a649afcdd9e02cb5dc9d24e67e7922737d"}, + {file = "coverage-7.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e00c14720b8b3b6c23b487e70bd406abafc976ddc50490f645166f111c419c39"}, + {file = "coverage-7.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6d55d840e1b8c0002fce66443e124e8581f30f9ead2e54fbf6709fb593181f2c"}, + {file = "coverage-7.0.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:66b18c3cf8bbab0cce0d7b9e4262dc830e93588986865a8c78ab2ae324b3ed56"}, + {file = "coverage-7.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:12a5aa77783d49e05439fbe6e6b427484f8a0f9f456b46a51d8aac022cfd024d"}, + {file = "coverage-7.0.1-cp311-cp311-win32.whl", hash = "sha256:b77015d1cb8fe941be1222a5a8b4e3fbca88180cfa7e2d4a4e58aeabadef0ab7"}, + {file = "coverage-7.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:fb992c47cb1e5bd6a01e97182400bcc2ba2077080a17fcd7be23aaa6e572e390"}, + {file = "coverage-7.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e78e9dcbf4f3853d3ae18a8f9272111242531535ec9e1009fa8ec4a2b74557dc"}, + {file = "coverage-7.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e60bef2e2416f15fdc05772bf87db06c6a6f9870d1db08fdd019fbec98ae24a9"}, + {file = "coverage-7.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9823e4789ab70f3ec88724bba1a203f2856331986cd893dedbe3e23a6cfc1e4e"}, + {file = "coverage-7.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9158f8fb06747ac17bd237930c4372336edc85b6e13bdc778e60f9d685c3ca37"}, + {file = "coverage-7.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:486ee81fa694b4b796fc5617e376326a088f7b9729c74d9defa211813f3861e4"}, + {file = "coverage-7.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1285648428a6101b5f41a18991c84f1c3959cee359e51b8375c5882fc364a13f"}, + {file = "coverage-7.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2c44fcfb3781b41409d0f060a4ed748537557de9362a8a9282182fafb7a76ab4"}, + {file = "coverage-7.0.1-cp37-cp37m-win32.whl", hash = "sha256:d6814854c02cbcd9c873c0f3286a02e3ac1250625cca822ca6bc1018c5b19f1c"}, + {file = "coverage-7.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:f66460f17c9319ea4f91c165d46840314f0a7c004720b20be58594d162a441d8"}, + {file = "coverage-7.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9b373c9345c584bb4b5f5b8840df7f4ab48c4cbb7934b58d52c57020d911b856"}, + {file = "coverage-7.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d3022c3007d3267a880b5adcf18c2a9bf1fc64469b394a804886b401959b8742"}, + {file = "coverage-7.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92651580bd46519067e36493acb394ea0607b55b45bd81dd4e26379ed1871f55"}, + {file = "coverage-7.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3cfc595d2af13856505631be072835c59f1acf30028d1c860b435c5fc9c15b69"}, + {file = "coverage-7.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b4b3a4d9915b2be879aff6299c0a6129f3d08a775d5a061f503cf79571f73e4"}, + {file = "coverage-7.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b6f22bb64cc39bcb883e5910f99a27b200fdc14cdd79df8696fa96b0005c9444"}, + {file = "coverage-7.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:72d1507f152abacea81f65fee38e4ef3ac3c02ff8bc16f21d935fd3a8a4ad910"}, + {file = "coverage-7.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0a79137fc99815fff6a852c233628e735ec15903cfd16da0f229d9c4d45926ab"}, + {file = "coverage-7.0.1-cp38-cp38-win32.whl", hash = "sha256:b3763e7fcade2ff6c8e62340af9277f54336920489ceb6a8cd6cc96da52fcc62"}, + {file = "coverage-7.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:09f6b5a8415b6b3e136d5fec62b552972187265cb705097bf030eb9d4ffb9b60"}, + {file = "coverage-7.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:978258fec36c154b5e250d356c59af7d4c3ba02bef4b99cda90b6029441d797d"}, + {file = "coverage-7.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:19ec666533f0f70a0993f88b8273057b96c07b9d26457b41863ccd021a043b9a"}, + {file = "coverage-7.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfded268092a84605f1cc19e5c737f9ce630a8900a3589e9289622db161967e9"}, + {file = "coverage-7.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07bcfb1d8ac94af886b54e18a88b393f6a73d5959bb31e46644a02453c36e475"}, + {file = "coverage-7.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:397b4a923cc7566bbc7ae2dfd0ba5a039b61d19c740f1373791f2ebd11caea59"}, + {file = "coverage-7.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aec2d1515d9d39ff270059fd3afbb3b44e6ec5758af73caf18991807138c7118"}, + {file = "coverage-7.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c20cfebcc149a4c212f6491a5f9ff56f41829cd4f607b5be71bb2d530ef243b1"}, + {file = "coverage-7.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:fd556ff16a57a070ce4f31c635953cc44e25244f91a0378c6e9bdfd40fdb249f"}, + {file = "coverage-7.0.1-cp39-cp39-win32.whl", hash = "sha256:b9ea158775c7c2d3e54530a92da79496fb3fb577c876eec761c23e028f1e216c"}, + {file = "coverage-7.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:d1991f1dd95eba69d2cd7708ff6c2bbd2426160ffc73c2b81f617a053ebcb1a8"}, + {file = "coverage-7.0.1-pp37.pp38.pp39-none-any.whl", hash = "sha256:3dd4ee135e08037f458425b8842d24a95a0961831a33f89685ff86b77d378f89"}, + {file = "coverage-7.0.1.tar.gz", hash = "sha256:a4a574a19eeb67575a5328a5760bbbb737faa685616586a9f9da4281f940109c"}, +] [package.dependencies] tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} @@ -352,41 +673,131 @@ description = "Composable style cycles" category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, + {file = "cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"}, +] [[package]] -name = "Cython" +name = "cython" version = "0.29.32" description = "The Cython compiler for writing C extensions for the Python language." category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" - -[[package]] -name = "data-science-types" -version = "0.2.23" -description = "Type stubs for Python machine learning libraries" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.extras] -dev = ["black", "flake8", "flake8-pyi", "matplotlib", "mypy (==0.770)", "numpy", "pandas", "pytest"] - -[[package]] -name = "dearpygui" -version = "1.8.0" -description = "DearPyGui: A simple Python GUI Toolkit" -category = "main" -optional = true -python-versions = ">=3.7" - -[[package]] -name = "debugpy" -version = "1.6.4" -description = "An implementation of the Debug Adapter Protocol for Python" +files = [ + {file = "Cython-0.29.32-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:39afb4679b8c6bf7ccb15b24025568f4f9b4d7f9bf3cbd981021f542acecd75b"}, + {file = "Cython-0.29.32-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:dbee03b8d42dca924e6aa057b836a064c769ddfd2a4c2919e65da2c8a362d528"}, + {file = "Cython-0.29.32-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5ba622326f2862f9c1f99ca8d47ade49871241920a352c917e16861e25b0e5c3"}, + {file = "Cython-0.29.32-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e6ffa08aa1c111a1ebcbd1cf4afaaec120bc0bbdec3f2545f8bb7d3e8e77a1cd"}, + {file = "Cython-0.29.32-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:97335b2cd4acebf30d14e2855d882de83ad838491a09be2011745579ac975833"}, + {file = "Cython-0.29.32-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:06be83490c906b6429b4389e13487a26254ccaad2eef6f3d4ee21d8d3a4aaa2b"}, + {file = "Cython-0.29.32-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:eefd2b9a5f38ded8d859fe96cc28d7d06e098dc3f677e7adbafda4dcdd4a461c"}, + {file = "Cython-0.29.32-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5514f3b4122cb22317122a48e175a7194e18e1803ca555c4c959d7dfe68eaf98"}, + {file = "Cython-0.29.32-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:656dc5ff1d269de4d11ee8542f2ffd15ab466c447c1f10e5b8aba6f561967276"}, + {file = "Cython-0.29.32-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:cdf10af3e2e3279dc09fdc5f95deaa624850a53913f30350ceee824dc14fc1a6"}, + {file = "Cython-0.29.32-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:3875c2b2ea752816a4d7ae59d45bb546e7c4c79093c83e3ba7f4d9051dd02928"}, + {file = "Cython-0.29.32-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:79e3bab19cf1b021b613567c22eb18b76c0c547b9bc3903881a07bfd9e7e64cf"}, + {file = "Cython-0.29.32-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b0595aee62809ba353cebc5c7978e0e443760c3e882e2c7672c73ffe46383673"}, + {file = "Cython-0.29.32-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0ea8267fc373a2c5064ad77d8ff7bf0ea8b88f7407098ff51829381f8ec1d5d9"}, + {file = "Cython-0.29.32-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:c8e8025f496b5acb6ba95da2fb3e9dacffc97d9a92711aacfdd42f9c5927e094"}, + {file = "Cython-0.29.32-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:afbce249133a830f121b917f8c9404a44f2950e0e4f5d1e68f043da4c2e9f457"}, + {file = "Cython-0.29.32-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:513e9707407608ac0d306c8b09d55a28be23ea4152cbd356ceaec0f32ef08d65"}, + {file = "Cython-0.29.32-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e83228e0994497900af954adcac27f64c9a57cd70a9ec768ab0cb2c01fd15cf1"}, + {file = "Cython-0.29.32-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ea1dcc07bfb37367b639415333cfbfe4a93c3be340edf1db10964bc27d42ed64"}, + {file = "Cython-0.29.32-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8669cadeb26d9a58a5e6b8ce34d2c8986cc3b5c0bfa77eda6ceb471596cb2ec3"}, + {file = "Cython-0.29.32-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:ed087eeb88a8cf96c60fb76c5c3b5fb87188adee5e179f89ec9ad9a43c0c54b3"}, + {file = "Cython-0.29.32-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:3f85eb2343d20d91a4ea9cf14e5748092b376a64b7e07fc224e85b2753e9070b"}, + {file = "Cython-0.29.32-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:63b79d9e1f7c4d1f498ab1322156a0d7dc1b6004bf981a8abda3f66800e140cd"}, + {file = "Cython-0.29.32-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e1958e0227a4a6a2c06fd6e35b7469de50adf174102454db397cec6e1403cce3"}, + {file = "Cython-0.29.32-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:856d2fec682b3f31583719cb6925c6cdbb9aa30f03122bcc45c65c8b6f515754"}, + {file = "Cython-0.29.32-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:479690d2892ca56d34812fe6ab8f58e4b2e0129140f3d94518f15993c40553da"}, + {file = "Cython-0.29.32-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:67fdd2f652f8d4840042e2d2d91e15636ba2bcdcd92e7e5ffbc68e6ef633a754"}, + {file = "Cython-0.29.32-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:4a4b03ab483271f69221c3210f7cde0dcc456749ecf8243b95bc7a701e5677e0"}, + {file = "Cython-0.29.32-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:40eff7aa26e91cf108fd740ffd4daf49f39b2fdffadabc7292b4b7dc5df879f0"}, + {file = "Cython-0.29.32-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0bbc27abdf6aebfa1bce34cd92bd403070356f28b0ecb3198ff8a182791d58b9"}, + {file = "Cython-0.29.32-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cddc47ec746a08603037731f5d10aebf770ced08666100bd2cdcaf06a85d4d1b"}, + {file = "Cython-0.29.32-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:eca3065a1279456e81c615211d025ea11bfe4e19f0c5650b859868ca04b3fcbd"}, + {file = "Cython-0.29.32-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:d968ffc403d92addf20b68924d95428d523436adfd25cf505d427ed7ba3bee8b"}, + {file = "Cython-0.29.32-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:f3fd44cc362eee8ae569025f070d56208908916794b6ab21e139cea56470a2b3"}, + {file = "Cython-0.29.32-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:b6da3063c5c476f5311fd76854abae6c315f1513ef7d7904deed2e774623bbb9"}, + {file = "Cython-0.29.32-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:061e25151c38f2361bc790d3bcf7f9d9828a0b6a4d5afa56fbed3bd33fb2373a"}, + {file = "Cython-0.29.32-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:f9944013588a3543fca795fffb0a070a31a243aa4f2d212f118aa95e69485831"}, + {file = "Cython-0.29.32-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:07d173d3289415bb496e72cb0ddd609961be08fe2968c39094d5712ffb78672b"}, + {file = "Cython-0.29.32-py2.py3-none-any.whl", hash = "sha256:eeb475eb6f0ccf6c039035eb4f0f928eb53ead88777e0a760eccb140ad90930b"}, + {file = "Cython-0.29.32.tar.gz", hash = "sha256:8733cf4758b79304f2a4e39ebfac5e92341bce47bcceb26c1254398b2f8c1af7"}, +] + +[[package]] +name = "data-science-types" +version = "0.2.23" +description = "Type stubs for Python machine learning libraries" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "data-science-types-0.2.23.tar.gz", hash = "sha256:8096b9a35a8a187bf9a122b4707c97de841d810744690ee2a4ac30c6462e0d16"}, + {file = "data_science_types-0.2.23-py3-none-any.whl", hash = "sha256:bca319abc0e53a0316f9fcb887937e942477cb9e5fc63c8581e0b0438903b977"}, +] + +[package.extras] +dev = ["black", "flake8", "flake8-pyi", "matplotlib", "mypy (==0.770)", "numpy", "pandas", "pytest"] + +[[package]] +name = "dearpygui" +version = "1.8.0" +description = "DearPyGui: A simple Python GUI Toolkit" +category = "main" +optional = true +python-versions = ">=3.7" +files = [ + {file = "dearpygui-1.8.0-cp310-cp310-macosx_10_6_x86_64.whl", hash = "sha256:bbad360b80a29a2deb40a8a2f73aa17fee1c5e817035e590509e067f3dc531d3"}, + {file = "dearpygui-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dabeff583800aea84bc537ab188a87398ed9e5e0537cc3e37fdc6e59d6b40495"}, + {file = "dearpygui-1.8.0-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:7e93c41d64d884e1d9e8c6f991d51e4ed9dd9792f609d9a6f7399059c29d1706"}, + {file = "dearpygui-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:55006836de1d1a30ae6c03dd794d1798a4e9942b78f1239802afac4673c3fa38"}, + {file = "dearpygui-1.8.0-cp311-cp311-macosx_10_6_x86_64.whl", hash = "sha256:cf5b76bbefa1348e5bf53a68cd7a1d24768819e0e9b5535168b378830a20b6c1"}, + {file = "dearpygui-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe7c746ab87b57ef84495462b36b0533435b3b6a94d241af7fe9219f54744f6"}, + {file = "dearpygui-1.8.0-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:fe7ef89b9bd9ac34ab865b488b11fee5537767b63cedb436633054bd39bfc46e"}, + {file = "dearpygui-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:82c1ebd00d747e2c6d35eabaaacc851d29b38b49aad8f7726b6339aca2045aa2"}, + {file = "dearpygui-1.8.0-cp37-cp37m-macosx_10_6_x86_64.whl", hash = "sha256:476748dbaaf1d4749959e6192218d64c700bd4a06c1a5d26a77b1b1ef49ca7ab"}, + {file = "dearpygui-1.8.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:8ad1cc0a4af84e146f5191e86e54dcadff5a0863ae935ae34168af840848f0ab"}, + {file = "dearpygui-1.8.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e2cf13789ca6b91d56f1d83cfadc59ae21044bea0d19ff9d3c9b445d7ec05c8b"}, + {file = "dearpygui-1.8.0-cp38-cp38-macosx_10_6_x86_64.whl", hash = "sha256:0cc9ce8c3b4ad324c8e224a6e483ad7d6c7919ab758c3bbeccaea75bb414f727"}, + {file = "dearpygui-1.8.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:71e447e4f05200aae6839c45fccc08291c8e6b32540a4cf45f58e08cb1a0cf61"}, + {file = "dearpygui-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:f4637d217e0c773899947b73372e8685e45818af98e97838bee2c89a82d40c92"}, + {file = "dearpygui-1.8.0-cp39-cp39-macosx_10_6_x86_64.whl", hash = "sha256:2ec09455e38e9b0ed182a4933b76a9fd6c3300aebe3d87c2b0cffe70c5b77b07"}, + {file = "dearpygui-1.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:14ccf3cb6d877454a7943797e946e2b0f28ba7682e1cd876dac0a388853b01f8"}, + {file = "dearpygui-1.8.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:525849a1217ee1f78c7321a54cb5d2ffb5a80a55e25da5ceeb83ca5cc21b99e8"}, + {file = "dearpygui-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:9c1233e887f956df7747468f51459f583760fc2e82670cf0dc9b8adf54c8a01a"}, +] + +[[package]] +name = "debugpy" +version = "1.6.4" +description = "An implementation of the Debug Adapter Protocol for Python" category = "main" optional = true python-versions = ">=3.7" +files = [ + {file = "debugpy-1.6.4-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:6ae238943482c78867ac707c09122688efb700372b617ffd364261e5e41f7a2f"}, + {file = "debugpy-1.6.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a39e7da178e1f22f4bc04b57f085e785ed1bcf424aaf318835a1a7129eefe35"}, + {file = "debugpy-1.6.4-cp310-cp310-win32.whl", hash = "sha256:143f79d0798a9acea21cd1d111badb789f19d414aec95fa6389cfea9485ddfb1"}, + {file = "debugpy-1.6.4-cp310-cp310-win_amd64.whl", hash = "sha256:563f148f94434365ec0ce94739c749aabf60bf67339e68a9446499f3582d62f3"}, + {file = "debugpy-1.6.4-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:1caee68f7e254267df908576c0d0938f8f88af16383f172cb9f0602e24c30c01"}, + {file = "debugpy-1.6.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40e2a83d31a16b83666f19fa06d97b2cc311af88e6266590579737949971a17e"}, + {file = "debugpy-1.6.4-cp37-cp37m-win32.whl", hash = "sha256:82229790442856962aec4767b98ba2559fe0998f897e9f21fb10b4fd24b6c436"}, + {file = "debugpy-1.6.4-cp37-cp37m-win_amd64.whl", hash = "sha256:67edf033f9e512958f7b472975ff9d9b7ff64bf4440f6f6ae44afdc66b89e6b6"}, + {file = "debugpy-1.6.4-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:4ab5e938925e5d973f567d6ef32751b17d10f3be3a8c4d73c52f53e727f69bf1"}, + {file = "debugpy-1.6.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8df268e9f72fc06efc2e75e8dc8e2b881d6a397356faec26efb2ee70b6863b7"}, + {file = "debugpy-1.6.4-cp38-cp38-win32.whl", hash = "sha256:86bd25f38f8b6c5d430a5e2931eebbd5f580c640f4819fcd236d0498790c7204"}, + {file = "debugpy-1.6.4-cp38-cp38-win_amd64.whl", hash = "sha256:62ba4179b372a62abf9c89b56997d70a4100c6dea6c2a4e0e4be5f45920b3253"}, + {file = "debugpy-1.6.4-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:d2968e589bda4e485a9c61f113754a28e48d88c5152ed8e0b2564a1fadbe50a5"}, + {file = "debugpy-1.6.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e62b8034ede98932b92268669318848a0d42133d857087a3b9cec03bb844c615"}, + {file = "debugpy-1.6.4-cp39-cp39-win32.whl", hash = "sha256:3d9c31baf64bf959a593996c108e911c5a9aa1693a296840e5469473f064bcec"}, + {file = "debugpy-1.6.4-cp39-cp39-win_amd64.whl", hash = "sha256:ea4bf208054e6d41749f17612066da861dff10102729d32c85b47f155223cf2b"}, + {file = "debugpy-1.6.4-py2.py3-none-any.whl", hash = "sha256:e886a1296cd20a10172e94788009ce74b759e54229ebd64a43fa5c2b4e62cd76"}, + {file = "debugpy-1.6.4.zip", hash = "sha256:d5ab9bd3f4e7faf3765fd52c7c43c074104ab1e109621dc73219099ed1a5399d"}, +] [[package]] name = "decorator" @@ -395,6 +806,10 @@ description = "Decorators for Humans" category = "main" optional = false python-versions = ">=3.5" +files = [ + {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, + {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, +] [[package]] name = "defusedxml" @@ -403,14 +818,22 @@ 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 = [ + {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, + {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, +] [[package]] -name = "Deprecated" +name = "deprecated" version = "1.2.13" 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 = [ + {file = "Deprecated-1.2.13-py2.py3-none-any.whl", hash = "sha256:64756e3e14c8c5eea9795d93c524551432a0be75629f8f29e67ab8caf076c76d"}, + {file = "Deprecated-1.2.13.tar.gz", hash = "sha256:43ac5335da90c31c24ba028af536a91d41d53f9e6901ddb021bcc572ce44e38d"}, +] [package.dependencies] wrapt = ">=1.10,<2" @@ -425,6 +848,10 @@ description = "serialize all of python" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "dill-0.3.6-py3-none-any.whl", hash = "sha256:a07ffd2351b8c678dfc4a856a3005f8067aea51d6ba6c700796a4d9e280f39f0"}, + {file = "dill-0.3.6.tar.gz", hash = "sha256:e5db55f3687856d8fbdab002ed78544e1c4559a130302693d839dfe8f93f2373"}, +] [package.extras] graph = ["objgraph (>=1.7.2)"] @@ -436,6 +863,10 @@ description = "Distribution utilities" category = "dev" optional = false python-versions = "*" +files = [ + {file = "distlib-0.3.6-py2.py3-none-any.whl", hash = "sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e"}, + {file = "distlib-0.3.6.tar.gz", hash = "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46"}, +] [[package]] name = "docutils" @@ -444,6 +875,10 @@ description = "Docutils -- Python Documentation Utilities" category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, + {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, +] [[package]] name = "entrypoints" @@ -452,14 +887,22 @@ description = "Discover and load entry points from installed packages." category = "main" optional = true python-versions = ">=3.6" +files = [ + {file = "entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f"}, + {file = "entrypoints-0.4.tar.gz", hash = "sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4"}, +] [[package]] name = "exceptiongroup" -version = "1.0.4" +version = "1.1.0" description = "Backport of PEP 654 (exception groups)" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.1.0-py3-none-any.whl", hash = "sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e"}, + {file = "exceptiongroup-1.1.0.tar.gz", hash = "sha256:bcb67d800a4497e1b404c2dd44fca47d3b7a5e5433dbab67f96c1a685cdfdf23"}, +] [package.extras] test = ["pytest (>=6)"] @@ -471,6 +914,10 @@ description = "execnet: rapid multi-Python deployment" category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "execnet-1.9.0-py2.py3-none-any.whl", hash = "sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142"}, + {file = "execnet-1.9.0.tar.gz", hash = "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5"}, +] [package.extras] testing = ["pre-commit"] @@ -482,6 +929,10 @@ description = "Get the currently executing AST node of a frame, and other inform category = "main" optional = true python-versions = "*" +files = [ + {file = "executing-1.2.0-py2.py3-none-any.whl", hash = "sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc"}, + {file = "executing-1.2.0.tar.gz", hash = "sha256:19da64c18d2d851112f09c287f8d3dbbdf725ab0e569077efb6cdcbd3497c107"}, +] [package.extras] tests = ["asttokens", "littleutils", "pytest", "rich"] @@ -493,6 +944,10 @@ description = "Fastest Python implementation of JSON schema" category = "main" optional = true python-versions = "*" +files = [ + {file = "fastjsonschema-2.16.2-py3-none-any.whl", hash = "sha256:21f918e8d9a1a4ba9c22e09574ba72267a6762d47822db9add95f6454e51cc1c"}, + {file = "fastjsonschema-2.16.2.tar.gz", hash = "sha256:01e366f25d9047816fe3d288cbfc3e10541daf0af2044763f3d0ade42476da18"}, +] [package.extras] devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] @@ -504,6 +959,10 @@ description = "A platform independent file lock." category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "filelock-3.8.2-py3-none-any.whl", hash = "sha256:8df285554452285f79c035efb0c861eb33a4bcfa5b7a137016e32e6a90f9792c"}, + {file = "filelock-3.8.2.tar.gz", hash = "sha256:7565f628ea56bfcd8e54e42bdc55da899c85c1abfe1b5bcfd147e9188cebb3b2"}, +] [package.extras] docs = ["furo (>=2022.9.29)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.5)"] @@ -516,6 +975,10 @@ description = "the modular source code checker: pep8 pyflakes and co" category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +files = [ + {file = "flake8-3.9.2-py2.py3-none-any.whl", hash = "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"}, + {file = "flake8-3.9.2.tar.gz", hash = "sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b"}, +] [package.dependencies] mccabe = ">=0.6.0,<0.7.0" @@ -529,6 +992,10 @@ description = "A plugin for flake8 finding likely bugs and design problems in yo category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "flake8-bugbear-21.11.29.tar.gz", hash = "sha256:8b04cb2fafc6a78e1a9d873bd3988e4282f7959bb6b0d7c1ae648ec09b937a7b"}, + {file = "flake8_bugbear-21.11.29-py36.py37.py38-none-any.whl", hash = "sha256:179e41ddae5de5e3c20d1f61736feeb234e70958fbb56ab3c28a67739c8e9a82"}, +] [package.dependencies] attrs = ">=19.2.0" @@ -544,6 +1011,10 @@ description = "Check for python builtins being used as variables or parameters." category = "dev" optional = false python-versions = "*" +files = [ + {file = "flake8-builtins-1.5.3.tar.gz", hash = "sha256:09998853b2405e98e61d2ff3027c47033adbdc17f9fe44ca58443d876eb00f3b"}, + {file = "flake8_builtins-1.5.3-py2.py3-none-any.whl", hash = "sha256:7706babee43879320376861897e5d1468e396a40b8918ed7bccf70e5f90b8687"}, +] [package.dependencies] flake8 = "*" @@ -558,6 +1029,10 @@ description = "A flake8 plugin to help you write better list/set/dict comprehens category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "flake8-comprehensions-3.10.1.tar.gz", hash = "sha256:412052ac4a947f36b891143430fef4859705af11b2572fbb689f90d372cf26ab"}, + {file = "flake8_comprehensions-3.10.1-py3-none-any.whl", hash = "sha256:d763de3c74bc18a79c039a7ec732e0a1985b0c79309ceb51e56401ad0a2cd44e"}, +] [package.dependencies] flake8 = ">=3.0,<3.2.0 || >3.2.0" @@ -569,6 +1044,10 @@ description = "Extension for flake8 which uses pydocstyle to check docstrings" category = "dev" optional = false python-versions = "*" +files = [ + {file = "flake8-docstrings-1.6.0.tar.gz", hash = "sha256:9fe7c6a306064af8e62a055c2f61e9eb1da55f84bb39caef2b84ce53708ac34b"}, + {file = "flake8_docstrings-1.6.0-py2.py3-none-any.whl", hash = "sha256:99cac583d6c7e32dd28bbfbef120a7c0d1b6dde4adb5a9fd441c4227a6534bde"}, +] [package.dependencies] flake8 = ">=3" @@ -581,6 +1060,10 @@ description = "The package provides base classes and utils for flake8 plugin wri category = "dev" optional = false python-versions = ">=3.6,<4.0" +files = [ + {file = "flake8-plugin-utils-1.3.2.tar.gz", hash = "sha256:20fa2a8ca2decac50116edb42e6af0a1253ef639ad79941249b840531889c65a"}, + {file = "flake8_plugin_utils-1.3.2-py3-none-any.whl", hash = "sha256:1fe43e3e9acf3a7c0f6b88f5338cad37044d2f156c43cb6b080b5f9da8a76f06"}, +] [[package]] name = "flake8-pytest-style" @@ -589,6 +1072,10 @@ description = "A flake8 plugin checking common style issues or inconsistencies w category = "dev" optional = false python-versions = ">=3.6.2,<4.0.0" +files = [ + {file = "flake8-pytest-style-1.6.0.tar.gz", hash = "sha256:c1175713e9e11b78cd1a035ed0bca0d1e41d09c4af329a952750b61d4194ddac"}, + {file = "flake8_pytest_style-1.6.0-py3-none-any.whl", hash = "sha256:5fedb371a950e9fe0e0e6bfc854be7d99151271208f34cd2cc517681ece27780"}, +] [package.dependencies] flake8-plugin-utils = ">=1.3.2,<2.0.0" @@ -600,6 +1087,10 @@ description = "Python docstring reStructuredText (RST) validator" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "flake8-rst-docstrings-0.2.7.tar.gz", hash = "sha256:2740067ab9237559dd45a3434d8c987792c7b259ca563621a3b95efe201f5382"}, + {file = "flake8_rst_docstrings-0.2.7-py3-none-any.whl", hash = "sha256:5d56075dce360bcc9c6775bfe7cb431aa395de600ca7e8d40580a28d50b2a803"}, +] [package.dependencies] flake8 = ">=3.0.0" @@ -613,6 +1104,10 @@ description = "flake8 plugin which checks for code that can be simplified" category = "dev" optional = false python-versions = ">=3.6.1" +files = [ + {file = "flake8_simplify-0.14.6-py3-none-any.whl", hash = "sha256:8831fb8ff46dee1018d0b4c29f043a010cffafce7309fca536fde8461b98b6f6"}, + {file = "flake8_simplify-0.14.6.tar.gz", hash = "sha256:c4008db8016707684a1f0502ee69f3c2da37687d3cf7031cc1f326bf5986bf47"}, +] [package.dependencies] astor = ">=0.1" @@ -625,6 +1120,10 @@ description = "Tools to manipulate font files" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "fonttools-4.38.0-py3-none-any.whl", hash = "sha256:820466f43c8be8c3009aef8b87e785014133508f0de64ec469e4efb643ae54fb"}, + {file = "fonttools-4.38.0.zip", hash = "sha256:2bb244009f9bf3fa100fc3ead6aeb99febe5985fa20afbfbaa2f8946c2fbdaf1"}, +] [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", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=14.0.0)", "xattr", "zopfli (>=0.1.4)"] @@ -647,6 +1146,10 @@ description = "Validates fully-qualified domain names against RFC 1123, so that category = "main" optional = true python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" +files = [ + {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, + {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, +] [[package]] name = "furo" @@ -655,6 +1158,10 @@ description = "A clean customisable Sphinx documentation theme." category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "furo-2022.9.29-py3-none-any.whl", hash = "sha256:559ee17999c0f52728481dcf6b1b0cf8c9743e68c5e3a18cb45a7992747869a9"}, + {file = "furo-2022.9.29.tar.gz", hash = "sha256:d4238145629c623609c2deb5384f8d036e2a1ee2a101d64b67b4348112470dbd"}, +] [package.dependencies] beautifulsoup4 = "*" @@ -669,17 +1176,25 @@ description = "Git Object Database" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "gitdb-4.0.10-py3-none-any.whl", hash = "sha256:c286cf298426064079ed96a9e4a9d39e7f3e9bf15ba60701e95f5492f28415c7"}, + {file = "gitdb-4.0.10.tar.gz", hash = "sha256:6eb990b69df4e15bad899ea868dc46572c3f75339735663b81de79b06f17eb9a"}, +] [package.dependencies] smmap = ">=3.0.1,<6" [[package]] -name = "GitPython" +name = "gitpython" version = "3.1.29" 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.29-py3-none-any.whl", hash = "sha256:41eea0deec2deea139b459ac03656f0dd28fc4a3387240ec1d3c259a2c47850f"}, + {file = "GitPython-3.1.29.tar.gz", hash = "sha256:cc36bfc4a3f913e66805a28e84703e419d9c264c1077e537b54f0e1af85dbefd"}, +] [package.dependencies] gitdb = ">=4.0.1,<5" @@ -691,14 +1206,70 @@ description = "Portable OpenGL Context" category = "main" optional = false python-versions = "*" +files = [ + {file = "glcontext-2.3.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8ece87d8616bf12e55a08a05159f4303c8b82d348c2c43c7297c85d8e95dfa3e"}, + {file = "glcontext-2.3.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b5dcd68b23b1a549a3b0851d3621630e492ff9015a18f29f2512088b4e03e4d9"}, + {file = "glcontext-2.3.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3dc6a6133bffc33cb75bbc79dc08bd1e206017ac69ec68f703227aaf5f5129bb"}, + {file = "glcontext-2.3.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc906a19be96d2820dee8e681ca1d3129821eb6e5c4f1544db723edf0c0696bd"}, + {file = "glcontext-2.3.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89869925f4e1762878561fa1e3cbd1ee5ce73e5597275b5fc8bc054dd894fca4"}, + {file = "glcontext-2.3.7-cp310-cp310-win32.whl", hash = "sha256:088482e07aed6229a34fbb1d0c5fbe0ad9c413dbddb5eaaa8e5c83d933cbe8d6"}, + {file = "glcontext-2.3.7-cp310-cp310-win_amd64.whl", hash = "sha256:03b505fc8ce2dfcf800feac0e20cbb7b1899a5ef7407fa0cccb3267a5b2abbdb"}, + {file = "glcontext-2.3.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:155154084bdedfc8904524d8bd212e5896cc5d5caf1d45c19d13dc34aee4b5ab"}, + {file = "glcontext-2.3.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:65bf63b2068e13183e34a4beaf921f20cd144a25cebed0fa9a46f25e8b47577d"}, + {file = "glcontext-2.3.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51e04b162529f99c7b764129e07aaa3ec8edfc63ca7a212b71e348319f8b821b"}, + {file = "glcontext-2.3.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0961811d85ac551b1ce1f197296a8e5f497b35a149cfc6e128f74dfaef5e592f"}, + {file = "glcontext-2.3.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa4595600a699ed13e854b87116a1519a25e47a10100df01650c1be3532bd629"}, + {file = "glcontext-2.3.7-cp311-cp311-win32.whl", hash = "sha256:7dc827f119ccc3ea55b7bec73573516117c55319edc93bc2bbcf389bf1e7acfe"}, + {file = "glcontext-2.3.7-cp311-cp311-win_amd64.whl", hash = "sha256:a22a3fbb3abefd7a9f5a672af8fccb8d8d996b2eae2075ac9d8ca10f4a6f6653"}, + {file = "glcontext-2.3.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6df4cf354adb911a9ca58bc5c60fb1ae27544527878bc3ddf8f7ea56946c6fcc"}, + {file = "glcontext-2.3.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f1656e931c937f8bdce12c551fa0077db814b123e7f16b6db26e1e7c89dae16"}, + {file = "glcontext-2.3.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:058bf839884b5d5d8488978ed804023be64fc9bafb674a0ede1ba26c05bd9146"}, + {file = "glcontext-2.3.7-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f17be52c99e3eaeefaaac780bde40bfa99be3ad32bbfed346bb347c9d0b01967"}, + {file = "glcontext-2.3.7-cp37-cp37m-win32.whl", hash = "sha256:5a4cc4fef74dcab0b428ef750fad3c05311657ffb4f1dd3d4afa75e664551588"}, + {file = "glcontext-2.3.7-cp37-cp37m-win_amd64.whl", hash = "sha256:fd03d6d8dbfdd9bab97ada98759e345b29d50f690cec95dd01d22d02f616bfea"}, + {file = "glcontext-2.3.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:03b3925472771607d13feb9a0de93b04408ae86c91eee3f5e09e43744f90b1af"}, + {file = "glcontext-2.3.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f234ebcc3355155811389c320974056ce20233770205fc7cb41d8653d6137efa"}, + {file = "glcontext-2.3.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:46ef33b616027a616dcceba33bc48e589ba24fa84ee43c5b8611c5b57d2dace3"}, + {file = "glcontext-2.3.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ff822473d498d606424f92a341d01121562af35bf1d3d0e2ccd1f9c2f86859b"}, + {file = "glcontext-2.3.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87c90b525296c4930b1f74bf460b97af052c3cc9ba47d811f416ed82e1b16b03"}, + {file = "glcontext-2.3.7-cp38-cp38-win32.whl", hash = "sha256:f1444229f84a7aea48ce3f1143147acee92eee264826db4c41ea38c6b0a924a9"}, + {file = "glcontext-2.3.7-cp38-cp38-win_amd64.whl", hash = "sha256:59580776fd7e520995b82a6134c8ca7152a7881e174077fc785f4cc69c476d69"}, + {file = "glcontext-2.3.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8aa90a648f17bacacef95b09a5fab368e8feff3714fc4b81eb9374bd439850e6"}, + {file = "glcontext-2.3.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:867fe03c1c241d2416b719e23d1671537e34e03bab741dcc50d49298c1397073"}, + {file = "glcontext-2.3.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae930d226f9145ec580f3fe10fc23262b8c21a6a0cd6fbc081a6606e9000ce74"}, + {file = "glcontext-2.3.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cc73099fa7525a20e2021a2f2befa61e9ef306364838c1859ba79f5bd8eda33a"}, + {file = "glcontext-2.3.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:755698083c6119e771ea3f5837143324636700e1e5b397885c05085a837d5876"}, + {file = "glcontext-2.3.7-cp39-cp39-win32.whl", hash = "sha256:ab8147607af85fc2ec2e02b4364ff36b636f63781295e74220dc5c5856794e07"}, + {file = "glcontext-2.3.7-cp39-cp39-win_amd64.whl", hash = "sha256:2fae2d4bcb0564e0eb8e72c97e149faebfad369aeaef74ed7fd17f5f84a07428"}, + {file = "glcontext-2.3.7-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e48550269c3baff04cc46ca79bd9d2d5a62216665751b10aa86d95ebe182d319"}, + {file = "glcontext-2.3.7-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82eff3e5664c5a17fc0cbb1dae2c32088cdd3c3bfbfe4b9c71012275c2a63e8e"}, + {file = "glcontext-2.3.7-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44f7dbf800e6f933a5c56e07b18ef70f44949f34bf57f5d5318e2199c12cbfbc"}, + {file = "glcontext-2.3.7-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d18b3e9e9259595dd5c538c1fd9238f8b26c22d6351397e721ef8a89ad55f12"}, + {file = "glcontext-2.3.7-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:376e12d230fd198a329dfe253b41480b0a015a2dabbac5eecf6b279fe3afb1b3"}, + {file = "glcontext-2.3.7-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:84dc3b831af386cb20cae8fb10ac78d8007bb29118730db2e9f21c329a528028"}, + {file = "glcontext-2.3.7-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b85c873315741dbc208c199cbe449aa77d1831551dd78d9b3d67e0a6f9eb576d"}, + {file = "glcontext-2.3.7-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:94e47dd8cf39cabe20b41dd0c4c6589f0c7a4de2a5bad8e51ab0fc0b4a26ae6b"}, + {file = "glcontext-2.3.7-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79e561b67e606b6e13ba58e6ae3e688e3429dbb5d60e551ba40d649432044f37"}, + {file = "glcontext-2.3.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d986976c9b758d60d966fbaf8bdff129d125e8b2c58889d2220ca96991f1071e"}, + {file = "glcontext-2.3.7-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:891b56a3bbaf3470595c218e847e79448e95cecb412224c8585da640c61cf29a"}, + {file = "glcontext-2.3.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a349317c9d634aa56e30aae9ad408bc1b9de281af0e4f87de682b454ebaf540e"}, + {file = "glcontext-2.3.7-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1716d21d423a1a2261cd717bc66714eeb5464d6a061b92678f356ca69cfd1255"}, + {file = "glcontext-2.3.7-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:440ff5f59f318ce495c6bdddfa01a23dd64713fb960ceb87c3a9423745781d47"}, + {file = "glcontext-2.3.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ef0c7e534e53f14b7b09dc3fe1e207243c9bb3eb2543d9876ed253156ca7a8bf"}, + {file = "glcontext-2.3.7.tar.gz", hash = "sha256:bb2d0503f45ad85ca7319bd37fd983e374b3f824c38a450b5f72cfc974114156"}, +] [[package]] name = "identify" -version = "2.5.9" +version = "2.5.11" description = "File identification library for Python" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "identify-2.5.11-py2.py3-none-any.whl", hash = "sha256:e7db36b772b188099616aaf2accbee122949d1c6a1bac4f38196720d6f9f06db"}, + {file = "identify-2.5.11.tar.gz", hash = "sha256:14b7076b29c99b1b0b8b08e96d448c7b877a9b07683cd8cfda2ea06af85ffa1c"}, +] [package.extras] license = ["ukkonen"] @@ -710,6 +1281,10 @@ description = "Internationalized Domain Names in Applications (IDNA)" category = "main" optional = false python-versions = ">=3.5" +files = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] [[package]] name = "imagesize" @@ -718,20 +1293,28 @@ 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 = [ + {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, + {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, +] [[package]] name = "importlib-metadata" -version = "5.1.0" +version = "5.2.0" description = "Read metadata from Python packages" category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "importlib_metadata-5.2.0-py3-none-any.whl", hash = "sha256:0eafa39ba42bf225fc00e67f701d71f85aead9f878569caf13c3724f704b970f"}, + {file = "importlib_metadata-5.2.0.tar.gz", hash = "sha256:404d48d62bba0b7a77ff9d405efd91501bef2e67ff4ace0bed40a0cf28c3c7cd"}, +] [package.dependencies] zipp = ">=0.5" [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] @@ -742,6 +1325,10 @@ description = "Read resources from Python packages" category = "main" optional = true python-versions = ">=3.7" +files = [ + {file = "importlib_resources-5.10.1-py3-none-any.whl", hash = "sha256:c09b067d82e72c66f4f8eb12332f5efbebc9b007c0b6c40818108c9870adc363"}, + {file = "importlib_resources-5.10.1.tar.gz", hash = "sha256:32bb095bda29741f6ef0e5278c42df98d135391bee5f932841efc0041f748dc3"}, +] [package.dependencies] zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} @@ -757,14 +1344,22 @@ description = "iniconfig: brain-dead simple config-ini parsing" category = "dev" optional = false python-versions = "*" +files = [ + {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, + {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, +] [[package]] name = "ipykernel" -version = "6.19.1" +version = "6.19.4" description = "IPython Kernel for Jupyter" category = "main" optional = true python-versions = ">=3.8" +files = [ + {file = "ipykernel-6.19.4-py3-none-any.whl", hash = "sha256:0ecdae0060da61c5222ad221681f3b99b5bef739e11a3b1eb5778aa47f056f1f"}, + {file = "ipykernel-6.19.4.tar.gz", hash = "sha256:4140c282a6c71cdde59abe5eae2c71bf1eeb4a69316ab76e1c4c25150a49722b"}, +] [package.dependencies] appnope = {version = "*", markers = "platform_system == \"Darwin\""} @@ -783,9 +1378,7 @@ traitlets = ">=5.4.0" [package.extras] cov = ["coverage[toml]", "curio", "matplotlib", "pytest-cov", "trio"] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt"] -lint = ["black (>=22.6.0)", "mdformat (>0.7)", "ruff (>=0.0.156)"] test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov", "pytest-timeout"] -typing = ["mypy (>=0.990)"] [[package]] name = "ipython" @@ -794,6 +1387,10 @@ description = "IPython: Productive Interactive Computing" category = "main" optional = true python-versions = ">=3.8" +files = [ + {file = "ipython-8.7.0-py3-none-any.whl", hash = "sha256:352042ddcb019f7c04e48171b4dd78e4c4bb67bf97030d170e154aac42b656d9"}, + {file = "ipython-8.7.0.tar.gz", hash = "sha256:882899fe78d5417a0aa07f995db298fa28b58faeba2112d2e3a4c95fe14bb738"}, +] [package.dependencies] appnope = {version = "*", markers = "sys_platform == \"darwin\""} @@ -820,15 +1417,19 @@ notebook = ["ipywidgets", "notebook"] parallel = ["ipyparallel"] qtconsole = ["qtconsole"] test = ["pytest (<7.1)", "pytest-asyncio", "testpath"] -test_extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.20)", "pandas", "pytest (<7.1)", "pytest-asyncio", "testpath", "trio"] +test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.20)", "pandas", "pytest (<7.1)", "pytest-asyncio", "testpath", "trio"] [[package]] -name = "ipython_genutils" +name = "ipython-genutils" version = "0.2.0" description = "Vestigial utilities from IPython" category = "main" optional = true python-versions = "*" +files = [ + {file = "ipython_genutils-0.2.0-py2.py3-none-any.whl", hash = "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8"}, + {file = "ipython_genutils-0.2.0.tar.gz", hash = "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8"}, +] [[package]] name = "isoduration" @@ -837,23 +1438,31 @@ description = "Operations with ISO 8601 durations" category = "main" optional = true python-versions = ">=3.7" +files = [ + {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, + {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, +] [package.dependencies] arrow = ">=0.15.0" [[package]] name = "isort" -version = "5.10.1" +version = "5.11.4" description = "A Python utility / library to sort Python imports." category = "dev" optional = false -python-versions = ">=3.6.1,<4.0" +python-versions = ">=3.7.0" +files = [ + {file = "isort-5.11.4-py3-none-any.whl", hash = "sha256:c033fd0edb91000a7f09527fe5c75321878f98322a77ddcc81adbd83724afb7b"}, + {file = "isort-5.11.4.tar.gz", hash = "sha256:6db30c5ded9815d813932c04c2f85a360bcdd35fed496f4d8f35495ef0a261b6"}, +] [package.extras] colors = ["colorama (>=0.4.3,<0.5.0)"] -pipfile_deprecated_finder = ["pipreqs", "requirementslib"] +pipfile-deprecated-finder = ["pipreqs", "requirementslib"] plugins = ["setuptools"] -requirements_deprecated_finder = ["pip-api", "pipreqs"] +requirements-deprecated-finder = ["pip-api", "pipreqs"] [[package]] name = "isosurfaces" @@ -862,6 +1471,10 @@ description = "Construct isolines/isosurfaces over a 2D/3D scalar field defined category = "main" optional = false python-versions = "*" +files = [ + {file = "isosurfaces-0.1.0-py3-none-any.whl", hash = "sha256:a3421f7e7115f72f8f1af538ac4723e5570b1aaa0ddfc6a86520d2d781f3e91f"}, + {file = "isosurfaces-0.1.0.tar.gz", hash = "sha256:fa1b44e5e59d2f429add49289ab89e36f8dcda49b7badd99e0beea273be331f4"}, +] [package.dependencies] numpy = "*" @@ -873,6 +1486,10 @@ description = "An autocompletion tool for Python that can be used for text edito category = "main" optional = true python-versions = ">=3.6" +files = [ + {file = "jedi-0.18.2-py2.py3-none-any.whl", hash = "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e"}, + {file = "jedi-0.18.2.tar.gz", hash = "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612"}, +] [package.dependencies] parso = ">=0.8.0,<0.9.0" @@ -883,12 +1500,16 @@ qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] -name = "Jinja2" +name = "jinja2" version = "3.1.2" description = "A very fast and expressive template engine." category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, +] [package.dependencies] MarkupSafe = ">=2.0" @@ -903,6 +1524,10 @@ description = "A Python implementation of the JSON5 data format." category = "main" optional = true python-versions = "*" +files = [ + {file = "json5-0.9.10-py2.py3-none-any.whl", hash = "sha256:993189671e7412e9cdd8be8dc61cf402e8e579b35f1d1bb20ae6b09baa78bbce"}, + {file = "json5-0.9.10.tar.gz", hash = "sha256:ad9f048c5b5a4c3802524474ce40a622fae789860a86f10cc4f7e5f9cf9b46ab"}, +] [package.extras] dev = ["hypothesis"] @@ -914,6 +1539,10 @@ 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.*" +files = [ + {file = "jsonpointer-2.3-py2.py3-none-any.whl", hash = "sha256:51801e558539b4e9cd268638c078c6c5746c9ac96bc38152d443400e4f3793e9"}, + {file = "jsonpointer-2.3.tar.gz", hash = "sha256:97cba51526c829282218feb99dab1b1e6bdf8efd1c43dc9d57be093c0d69c99a"}, +] [[package]] name = "jsonschema" @@ -922,6 +1551,10 @@ description = "An implementation of JSON Schema validation for Python" category = "main" optional = true python-versions = ">=3.7" +files = [ + {file = "jsonschema-4.17.3-py3-none-any.whl", hash = "sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6"}, + {file = "jsonschema-4.17.3.tar.gz", hash = "sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d"}, +] [package.dependencies] attrs = ">=17.4.0" @@ -948,6 +1581,10 @@ description = "Jupyter protocol implementation and client libraries" category = "main" optional = true python-versions = ">=3.7" +files = [ + {file = "jupyter_client-7.4.8-py3-none-any.whl", hash = "sha256:d4a67ae86ee014bcb96bd8190714f6af921f2b0f52f4208b086aa5acfd9f8d65"}, + {file = "jupyter_client-7.4.8.tar.gz", hash = "sha256:109a3c33b62a9cf65aa8325850a0999a795fac155d9de4f7555aef5f310ee35a"}, +] [package.dependencies] entrypoints = "*" @@ -964,11 +1601,15 @@ test = ["codecov", "coverage", "ipykernel (>=6.12)", "ipython", "mypy", "pre-com [[package]] name = "jupyter-core" -version = "5.1.0" +version = "5.1.1" 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.1.1-py3-none-any.whl", hash = "sha256:f1038179d0f179b0e92c8fa2289c012b29dafdc9484b41821079f1a496f5a0f2"}, + {file = "jupyter_core-5.1.1.tar.gz", hash = "sha256:f342d29eb6edb06f8dffa69adea987b3a9ee2b6702338a8cb6911516ea0b432d"}, +] [package.dependencies] platformdirs = ">=2.5" @@ -986,6 +1627,10 @@ description = "Jupyter Event System library" category = "main" optional = true python-versions = ">=3.7" +files = [ + {file = "jupyter_events-0.5.0-py3-none-any.whl", hash = "sha256:6f7b67bf42b8a370c992187194ed02847dfa02307a7aebe9913e2d3979b9b6b8"}, + {file = "jupyter_events-0.5.0.tar.gz", hash = "sha256:e27ffdd6138699d47d42cb65ae6d79334ff7c0d923694381c991ce56a140f2cd"}, +] [package.dependencies] jsonschema = {version = ">=4.3.0", extras = ["format-nongpl"]} @@ -999,11 +1644,15 @@ test = ["click", "coverage", "pre-commit", "pytest (>=6.1.0)", "pytest-asyncio ( [[package]] name = "jupyter-server" -version = "2.0.1" +version = "2.0.5" 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.0.5-py3-none-any.whl", hash = "sha256:18a952c0b75c18f801e91221798fd3e91aef09562896f03877db39db332f7cd2"}, + {file = "jupyter_server-2.0.5.tar.gz", hash = "sha256:0d9e63d40412334dfa348cef8bfe8415b973752d12ca3afd64f0ea478e52aa4a"}, +] [package.dependencies] anyio = ">=3.1.0,<4" @@ -1027,33 +1676,39 @@ websocket-client = "*" [package.extras] docs = ["docutils (<0.20)", "ipykernel", "jinja2", "jupyter-client", "jupyter-server", "mistune (<1.0.0)", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxemoji", "tornado"] -lint = ["black (>=22.6.0)", "mdformat (>0.7)", "ruff (>=0.0.156)"] test = ["ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.4)", "pytest-timeout", "requests"] -typing = ["mypy (>=0.990)"] [[package]] name = "jupyter-server-terminals" -version = "0.4.2" +version = "0.4.3" description = "A Jupyter Server Extension Providing Terminals." category = "main" optional = true python-versions = ">=3.8" +files = [ + {file = "jupyter_server_terminals-0.4.3-py3-none-any.whl", hash = "sha256:ec67d3f1895d25cfb586a87a50b8eee13b709898a4afd721058e551e0a0f480d"}, + {file = "jupyter_server_terminals-0.4.3.tar.gz", hash = "sha256:8421438d95a1f1f6994c48dd5dc10ad167ea7c196972bb5d1d7a9da1e30fde02"}, +] [package.dependencies] pywinpty = {version = ">=2.0.3", markers = "os_name == \"nt\""} terminado = ">=0.8.3" [package.extras] -docs = ["jinja2", "jupyter-server", "mistune (<2.0)", "myst-parser", "nbformat", "packaging", "pydata-sphinx-theme", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxemoji", "tornado"] -test = ["coverage", "jupyter-server (>=2.0.0rc8)", "pytest (>=7.0)", "pytest-cov", "pytest-jupyter[server] (>=0.5.3)", "pytest-timeout"] +docs = ["jinja2", "jupyter-server", "mistune (<3.0)", "myst-parser", "nbformat", "packaging", "pydata-sphinx-theme", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxemoji", "tornado"] +test = ["coverage", "jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-cov", "pytest-jupyter[server] (>=0.5.3)", "pytest-timeout"] [[package]] name = "jupyterlab" -version = "3.5.1" +version = "3.5.2" description = "JupyterLab computational environment" category = "main" optional = true python-versions = ">=3.7" +files = [ + {file = "jupyterlab-3.5.2-py3-none-any.whl", hash = "sha256:16e9b8320dcec469c70bb883e993e0bb84c4ea1a734063731f66922cf72add1b"}, + {file = "jupyterlab-3.5.2.tar.gz", hash = "sha256:10ac094215ffb872ddffbe2982bf1c039a79fecc326e191e7cc5efd84f331dad"}, +] [package.dependencies] ipython = "*" @@ -1068,8 +1723,7 @@ tomli = "*" tornado = ">=6.1.0" [package.extras] -test = ["check-manifest", "coverage", "jupyterlab-server[test]", "pre-commit", "pytest (>=6.0)", "pytest-check-links (>=0.5)", "pytest-console-scripts", "pytest-cov", "requests", "requests-cache", "virtualenv"] -ui-tests = ["build"] +test = ["check-manifest", "coverage", "jupyterlab-server[test]", "pre-commit", "pytest (>=6.0)", "pytest-check-links (>=0.5)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.6.0)", "pytest-tornasync", "requests", "requests-cache", "virtualenv"] [[package]] name = "jupyterlab-pygments" @@ -1078,29 +1732,39 @@ description = "Pygments theme using JupyterLab CSS variables" category = "main" optional = true python-versions = ">=3.7" +files = [ + {file = "jupyterlab_pygments-0.2.2-py2.py3-none-any.whl", hash = "sha256:2405800db07c9f770863bcf8049a529c3dd4d3e28536638bd7c1c01d2748309f"}, + {file = "jupyterlab_pygments-0.2.2.tar.gz", hash = "sha256:7405d7fde60819d905a9fa8ce89e4cd830e318cdad22a0030f7a901da705585d"}, +] [[package]] name = "jupyterlab-server" -version = "2.16.3" +version = "2.16.6" description = "A set of server components for JupyterLab and JupyterLab like applications." category = "main" optional = true python-versions = ">=3.7" +files = [ + {file = "jupyterlab_server-2.16.6-py3-none-any.whl", hash = "sha256:df4cd2633068ca13449b05cbe1320ee69e64aa303f7a0d7492d10d1254a4b422"}, + {file = "jupyterlab_server-2.16.6.tar.gz", hash = "sha256:5061b0ca0731d4ab346aac9ced7ad419f6751b058b3405eedfee66d013d8c355"}, +] [package.dependencies] -babel = "*" +babel = ">=2.10" importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} jinja2 = ">=3.0.3" -json5 = "*" +json5 = ">=0.9.0" jsonschema = ">=3.0.1" -jupyter-server = ">=1.8,<3" -packaging = "*" -requests = "*" +jupyter-server = ">=1.21,<3" +packaging = ">=21.3" +requests = ">=2.28" [package.extras] -docs = ["autodoc-traits", "docutils (<0.19)", "jinja2 (<3.1.0)", "mistune (<1)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi"] +docs = ["autodoc-traits", "docutils (<0.20)", "jinja2 (<3.2.0)", "mistune (<3)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi"] +lint = ["black[jupyter] (>=22.6.0)", "mdformat (>0.7)", "mdformat-gfm (>=0.3.5)", "ruff (>=0.0.156)"] openapi = ["openapi-core (>=0.14.2)", "ruamel-yaml"] -test = ["codecov", "ipykernel", "jupyter-server[test]", "openapi-core (>=0.14.2,<0.15.0)", "openapi-spec-validator (<0.5)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "requests-mock", "ruamel-yaml", "strict-rfc3339"] +test = ["codecov", "ipykernel", "openapi-core (>=0.14.2,<0.15.0)", "openapi-spec-validator (<0.6)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6)", "pytest-timeout", "requests-mock", "ruamel-yaml", "strict-rfc3339"] +typing = ["mypy (>=0.990)"] [[package]] name = "kiwisolver" @@ -1109,6 +1773,76 @@ description = "A fast implementation of the Cassowary constraint solver" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "kiwisolver-1.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2f5e60fabb7343a836360c4f0919b8cd0d6dbf08ad2ca6b9cf90bf0c76a3c4f6"}, + {file = "kiwisolver-1.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:10ee06759482c78bdb864f4109886dff7b8a56529bc1609d4f1112b93fe6423c"}, + {file = "kiwisolver-1.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c79ebe8f3676a4c6630fd3f777f3cfecf9289666c84e775a67d1d358578dc2e3"}, + {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:abbe9fa13da955feb8202e215c4018f4bb57469b1b78c7a4c5c7b93001699938"}, + {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7577c1987baa3adc4b3c62c33bd1118c3ef5c8ddef36f0f2c950ae0b199e100d"}, + {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8ad8285b01b0d4695102546b342b493b3ccc6781fc28c8c6a1bb63e95d22f09"}, + {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ed58b8acf29798b036d347791141767ccf65eee7f26bde03a71c944449e53de"}, + {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a68b62a02953b9841730db7797422f983935aeefceb1679f0fc85cbfbd311c32"}, + {file = "kiwisolver-1.4.4-cp310-cp310-win32.whl", hash = "sha256:e92a513161077b53447160b9bd8f522edfbed4bd9759e4c18ab05d7ef7e49408"}, + {file = "kiwisolver-1.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:3fe20f63c9ecee44560d0e7f116b3a747a5d7203376abeea292ab3152334d004"}, + {file = "kiwisolver-1.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e0ea21f66820452a3f5d1655f8704a60d66ba1191359b96541eaf457710a5fc6"}, + {file = "kiwisolver-1.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bc9db8a3efb3e403e4ecc6cd9489ea2bac94244f80c78e27c31dcc00d2790ac2"}, + {file = "kiwisolver-1.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d5b61785a9ce44e5a4b880272baa7cf6c8f48a5180c3e81c59553ba0cb0821ca"}, + {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2dbb44c3f7e6c4d3487b31037b1bdbf424d97687c1747ce4ff2895795c9bf69"}, + {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6295ecd49304dcf3bfbfa45d9a081c96509e95f4b9d0eb7ee4ec0530c4a96514"}, + {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4bd472dbe5e136f96a4b18f295d159d7f26fd399136f5b17b08c4e5f498cd494"}, + {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf7d9fce9bcc4752ca4a1b80aabd38f6d19009ea5cbda0e0856983cf6d0023f5"}, + {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78d6601aed50c74e0ef02f4204da1816147a6d3fbdc8b3872d263338a9052c51"}, + {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:877272cf6b4b7e94c9614f9b10140e198d2186363728ed0f701c6eee1baec1da"}, + {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:db608a6757adabb32f1cfe6066e39b3706d8c3aa69bbc353a5b61edad36a5cb4"}, + {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:5853eb494c71e267912275e5586fe281444eb5e722de4e131cddf9d442615626"}, + {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:f0a1dbdb5ecbef0d34eb77e56fcb3e95bbd7e50835d9782a45df81cc46949750"}, + {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:283dffbf061a4ec60391d51e6155e372a1f7a4f5b15d59c8505339454f8989e4"}, + {file = "kiwisolver-1.4.4-cp311-cp311-win32.whl", hash = "sha256:d06adcfa62a4431d404c31216f0f8ac97397d799cd53800e9d3efc2fbb3cf14e"}, + {file = "kiwisolver-1.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:e7da3fec7408813a7cebc9e4ec55afed2d0fd65c4754bc376bf03498d4e92686"}, + {file = "kiwisolver-1.4.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:62ac9cc684da4cf1778d07a89bf5f81b35834cb96ca523d3a7fb32509380cbf6"}, + {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41dae968a94b1ef1897cb322b39360a0812661dba7c682aa45098eb8e193dbdf"}, + {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02f79693ec433cb4b5f51694e8477ae83b3205768a6fb48ffba60549080e295b"}, + {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0611a0a2a518464c05ddd5a3a1a0e856ccc10e67079bb17f265ad19ab3c7597"}, + {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:db5283d90da4174865d520e7366801a93777201e91e79bacbac6e6927cbceede"}, + {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1041feb4cda8708ce73bb4dcb9ce1ccf49d553bf87c3954bdfa46f0c3f77252c"}, + {file = "kiwisolver-1.4.4-cp37-cp37m-win32.whl", hash = "sha256:a553dadda40fef6bfa1456dc4be49b113aa92c2a9a9e8711e955618cd69622e3"}, + {file = "kiwisolver-1.4.4-cp37-cp37m-win_amd64.whl", hash = "sha256:03baab2d6b4a54ddbb43bba1a3a2d1627e82d205c5cf8f4c924dc49284b87166"}, + {file = "kiwisolver-1.4.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:841293b17ad704d70c578f1f0013c890e219952169ce8a24ebc063eecf775454"}, + {file = "kiwisolver-1.4.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f4f270de01dd3e129a72efad823da90cc4d6aafb64c410c9033aba70db9f1ff0"}, + {file = "kiwisolver-1.4.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f9f39e2f049db33a908319cf46624a569b36983c7c78318e9726a4cb8923b26c"}, + {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c97528e64cb9ebeff9701e7938653a9951922f2a38bd847787d4a8e498cc83ae"}, + {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d1573129aa0fd901076e2bfb4275a35f5b7aa60fbfb984499d661ec950320b0"}, + {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad881edc7ccb9d65b0224f4e4d05a1e85cf62d73aab798943df6d48ab0cd79a1"}, + {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b428ef021242344340460fa4c9185d0b1f66fbdbfecc6c63eff4b7c29fad429d"}, + {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2e407cb4bd5a13984a6c2c0fe1845e4e41e96f183e5e5cd4d77a857d9693494c"}, + {file = "kiwisolver-1.4.4-cp38-cp38-win32.whl", hash = "sha256:75facbe9606748f43428fc91a43edb46c7ff68889b91fa31f53b58894503a191"}, + {file = "kiwisolver-1.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:5bce61af018b0cb2055e0e72e7d65290d822d3feee430b7b8203d8a855e78766"}, + {file = "kiwisolver-1.4.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8c808594c88a025d4e322d5bb549282c93c8e1ba71b790f539567932722d7bd8"}, + {file = "kiwisolver-1.4.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f0a71d85ecdd570ded8ac3d1c0f480842f49a40beb423bb8014539a9f32a5897"}, + {file = "kiwisolver-1.4.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b533558eae785e33e8c148a8d9921692a9fe5aa516efbdff8606e7d87b9d5824"}, + {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:efda5fc8cc1c61e4f639b8067d118e742b812c930f708e6667a5ce0d13499e29"}, + {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7c43e1e1206cd421cd92e6b3280d4385d41d7166b3ed577ac20444b6995a445f"}, + {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc8d3bd6c72b2dd9decf16ce70e20abcb3274ba01b4e1c96031e0c4067d1e7cd"}, + {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ea39b0ccc4f5d803e3337dd46bcce60b702be4d86fd0b3d7531ef10fd99a1ac"}, + {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:968f44fdbf6dd757d12920d63b566eeb4d5b395fd2d00d29d7ef00a00582aac9"}, + {file = "kiwisolver-1.4.4-cp39-cp39-win32.whl", hash = "sha256:da7e547706e69e45d95e116e6939488d62174e033b763ab1496b4c29b76fabea"}, + {file = "kiwisolver-1.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:ba59c92039ec0a66103b1d5fe588fa546373587a7d68f5c96f743c3396afc04b"}, + {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:91672bacaa030f92fc2f43b620d7b337fd9a5af28b0d6ed3f77afc43c4a64b5a"}, + {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:787518a6789009c159453da4d6b683f468ef7a65bbde796bcea803ccf191058d"}, + {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da152d8cdcab0e56e4f45eb08b9aea6455845ec83172092f09b0e077ece2cf7a"}, + {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ecb1fa0db7bf4cff9dac752abb19505a233c7f16684c5826d1f11ebd9472b871"}, + {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:28bc5b299f48150b5f822ce68624e445040595a4ac3d59251703779836eceff9"}, + {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:81e38381b782cc7e1e46c4e14cd997ee6040768101aefc8fa3c24a4cc58e98f8"}, + {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2a66fdfb34e05b705620dd567f5a03f239a088d5a3f321e7b6ac3239d22aa286"}, + {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:872b8ca05c40d309ed13eb2e582cab0c5a05e81e987ab9c521bf05ad1d5cf5cb"}, + {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:70e7c2e7b750585569564e2e5ca9845acfaa5da56ac46df68414f29fea97be9f"}, + {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9f85003f5dfa867e86d53fac6f7e6f30c045673fa27b603c397753bebadc3008"}, + {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e307eb9bd99801f82789b44bb45e9f541961831c7311521b13a6c85afc09767"}, + {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1792d939ec70abe76f5054d3f36ed5656021dcad1322d1cc996d4e54165cef9"}, + {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6cb459eea32a4e2cf18ba5fcece2dbdf496384413bc1bae15583f19e567f3b2"}, + {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:36dafec3d6d6088d34e2de6b85f9d8e2324eb734162fba59d2ba9ed7a2043d5b"}, + {file = "kiwisolver-1.4.4.tar.gz", hash = "sha256:d41997519fcba4a1e46eb4a2fe31bc12f0ff957b2b81bac28db24744f333e955"}, +] [[package]] name = "lazy-object-proxy" @@ -1117,14 +1851,53 @@ description = "A fast and thorough lazy object proxy." category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "lazy-object-proxy-1.8.0.tar.gz", hash = "sha256:c219a00245af0f6fa4e95901ed28044544f50152840c5b6a3e7b2568db34d156"}, + {file = "lazy_object_proxy-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4fd031589121ad46e293629b39604031d354043bb5cdf83da4e93c2d7f3389fe"}, + {file = "lazy_object_proxy-1.8.0-cp310-cp310-win32.whl", hash = "sha256:b70d6e7a332eb0217e7872a73926ad4fdc14f846e85ad6749ad111084e76df25"}, + {file = "lazy_object_proxy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:eb329f8d8145379bf5dbe722182410fe8863d186e51bf034d2075eb8d85ee25b"}, + {file = "lazy_object_proxy-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4e2d9f764f1befd8bdc97673261b8bb888764dfdbd7a4d8f55e4fbcabb8c3fb7"}, + {file = "lazy_object_proxy-1.8.0-cp311-cp311-win32.whl", hash = "sha256:e20bfa6db17a39c706d24f82df8352488d2943a3b7ce7d4c22579cb89ca8896e"}, + {file = "lazy_object_proxy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:14010b49a2f56ec4943b6cf925f597b534ee2fe1f0738c84b3bce0c1a11ff10d"}, + {file = "lazy_object_proxy-1.8.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6850e4aeca6d0df35bb06e05c8b934ff7c533734eb51d0ceb2d63696f1e6030c"}, + {file = "lazy_object_proxy-1.8.0-cp37-cp37m-win32.whl", hash = "sha256:5b51d6f3bfeb289dfd4e95de2ecd464cd51982fe6f00e2be1d0bf94864d58acd"}, + {file = "lazy_object_proxy-1.8.0-cp37-cp37m-win_amd64.whl", hash = "sha256:6f593f26c470a379cf7f5bc6db6b5f1722353e7bf937b8d0d0b3fba911998858"}, + {file = "lazy_object_proxy-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c1c7c0433154bb7c54185714c6929acc0ba04ee1b167314a779b9025517eada"}, + {file = "lazy_object_proxy-1.8.0-cp38-cp38-win32.whl", hash = "sha256:d176f392dbbdaacccf15919c77f526edf11a34aece58b55ab58539807b85436f"}, + {file = "lazy_object_proxy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:afcaa24e48bb23b3be31e329deb3f1858f1f1df86aea3d70cb5c8578bfe5261c"}, + {file = "lazy_object_proxy-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:71d9ae8a82203511a6f60ca5a1b9f8ad201cac0fc75038b2dc5fa519589c9288"}, + {file = "lazy_object_proxy-1.8.0-cp39-cp39-win32.whl", hash = "sha256:8f6ce2118a90efa7f62dd38c7dbfffd42f468b180287b748626293bf12ed468f"}, + {file = "lazy_object_proxy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:eac3a9a5ef13b332c059772fd40b4b1c3d45a3a2b05e33a361dee48e54a4dad0"}, + {file = "lazy_object_proxy-1.8.0-pp37-pypy37_pp73-any.whl", hash = "sha256:ae032743794fba4d171b5b67310d69176287b5bf82a21f588282406a79498891"}, + {file = "lazy_object_proxy-1.8.0-pp38-pypy38_pp73-any.whl", hash = "sha256:7e1561626c49cb394268edd00501b289053a652ed762c58e1081224c8d881cec"}, + {file = "lazy_object_proxy-1.8.0-pp39-pypy39_pp73-any.whl", hash = "sha256:ce58b2b3734c73e68f0e30e4e725264d4d6be95818ec0a0be4bb6bf9a7e79aa8"}, +] [[package]] -name = "ManimPango" +name = "manimpango" version = "0.4.3" description = "Bindings for Pango for using with Manim." category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "ManimPango-0.4.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ad4f43f3c009a9c2f37607f1a4c51bcb3cde0911f2cf262cb7797b44556d005e"}, + {file = "ManimPango-0.4.3-cp310-cp310-win32.whl", hash = "sha256:49ebf511467e5feb32427a9d4a61a381b52c41b02facdfbdeee9d8ff49cbdf14"}, + {file = "ManimPango-0.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:6ce45a782d844fbc6d6476334b1bf9855697466f6eb299491108dfb45bf45211"}, + {file = "ManimPango-0.4.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:138e4fc9805132b39c490e49327687b1518d9e4ccc7d3c34c8b40367605ec0d9"}, + {file = "ManimPango-0.4.3-cp311-cp311-win32.whl", hash = "sha256:4039228b466fd56fbcd38d451ebbbc77124af09b9a047f07964334b1debe9881"}, + {file = "ManimPango-0.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:302c5e157d1b188759e84b44da85e396180cbcaf71bad3adf7792fc2cbad29fd"}, + {file = "ManimPango-0.4.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d03a13712376d25ef4679a17a8584533a1405d315d66d317934d6d576786eea6"}, + {file = "ManimPango-0.4.3-cp37-cp37m-win32.whl", hash = "sha256:bf1712059111378558b36d3b73f2ed47b0431e2f7b9706887735c81e64b7d004"}, + {file = "ManimPango-0.4.3-cp37-cp37m-win_amd64.whl", hash = "sha256:58d6119f64f4ba1e0ae11c3edd115616780e113701359593cb3a4d11b7ff7d64"}, + {file = "ManimPango-0.4.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6ff3d7c02195bc7b38146c1de7acb69e7588670976f260a93dd83436ccd85ab8"}, + {file = "ManimPango-0.4.3-cp38-cp38-win32.whl", hash = "sha256:c31d5581a14b9644ad6fa2645fa5a171048d204f7c47be62e9dc31af2e48bd8a"}, + {file = "ManimPango-0.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:edfdbf355be331dc489fcaf67521e26f3c00ed1f084308d96b5e5ab244c3fba0"}, + {file = "ManimPango-0.4.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b9dc620362e5ff1e984a9801d2886a70a48561c13976e83c1e9f3bd0a18618a1"}, + {file = "ManimPango-0.4.3-cp39-cp39-win32.whl", hash = "sha256:cb2bc381a301fca5b27ff73169db2be7d3f42eddd6812216fb0e2e6be07c7e79"}, + {file = "ManimPango-0.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:5f3430fccc6270812b2f0ebaa01d653cfaea517821b04260a8e706e19ce18a76"}, + {file = "ManimPango-0.4.3.tar.gz", hash = "sha256:732f1cb98bcc122c0dee93bb54966aa595f90730e5096ad6d86602cf4ba1a103"}, +] [[package]] name = "mapbox-earcut" @@ -1133,6 +1906,67 @@ description = "Python bindings for the mapbox earcut C++ polygon triangulation l category = "main" optional = false python-versions = "*" +files = [ + {file = "mapbox_earcut-1.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:60f8299b724b5ad1f171c2666a12591845536b0e9318ddc9649f75805096686c"}, + {file = "mapbox_earcut-1.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4af0911ed9d1920c36c54b500ea69fbcc948f409c66f632c75b15fee04c7544e"}, + {file = "mapbox_earcut-1.0.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:584fd2f7de878f14b3268257ec3c55bac146f1adc1887a64f0ecbf91ee39489f"}, + {file = "mapbox_earcut-1.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20929541c1c9f5fefde45c6c33e8ed3138c7bdd1034ced998877913878f3457c"}, + {file = "mapbox_earcut-1.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:48e8d8ebadd4e4d0dfd87374d43ca3caf8c8e692f1b6897588594d12527d5020"}, + {file = "mapbox_earcut-1.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:352f92997fd39024919a258db29df1642dd98632807ca96e737242adf64b5e96"}, + {file = "mapbox_earcut-1.0.1-cp310-cp310-win32.whl", hash = "sha256:5cf359c5ae1a5dcdd6d9c150ec43a820a289c28596ae7c52de09075543cc19ae"}, + {file = "mapbox_earcut-1.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f5cd49d6e13b3627c6cd6d3a945285e1ce7e9b193f3ce5ca53f0b7b86acd41e"}, + {file = "mapbox_earcut-1.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1e02d61d01aa1239ffbe1b8384cdc224d7c67db604eb7bfc34dd39fb1dc515c2"}, + {file = "mapbox_earcut-1.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d170d0a79b4ef3c9591ec6727a0ab35bae9e267b389122365343d6f55f9027a0"}, + {file = "mapbox_earcut-1.0.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78945356229992d7aa6da750059f401f329651adc76c000505a0e9e4f93be5df"}, + {file = "mapbox_earcut-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66cf29a2434d3366889c69fc50e6d2f9f1abf3a8a4154c7e03ef8f180d3bea40"}, + {file = "mapbox_earcut-1.0.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:a73f6f422932b2758b03f78e92aa5c4d5b5f7ce6456483f5993f4677b0bbde23"}, + {file = "mapbox_earcut-1.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9af9369266bf0ca32f4d401152217c46c699392513f22639c6b1be32bde9c1cc"}, + {file = "mapbox_earcut-1.0.1-cp311-cp311-win32.whl", hash = "sha256:ff9a13be4364625697b0e0e04ba6a0f77300148b871bba0a85bfa67e972e85c4"}, + {file = "mapbox_earcut-1.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:5e736557539c74fa969e866889c2b0149fc12668f35e3ae33667d837ff2880d3"}, + {file = "mapbox_earcut-1.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:aa6111a18efacb79c081f3d3cdd7d25d0585bb0e9f28896b207ebe1d56efa40e"}, + {file = "mapbox_earcut-1.0.1-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2911829d1e6e5e1282fbe2840fadf578f606580f02ed436346c2d51c92f810b"}, + {file = "mapbox_earcut-1.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01ff909a7b8405a923abedd701b53633c997cc2b5dc9d5b78462f51c25ec2c33"}, + {file = "mapbox_earcut-1.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:b7e73477b4ef3951ef5c32848126f047ac7fd2dd04dc033444a85261a346ed08"}, + {file = "mapbox_earcut-1.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:dae325af3553afa4d0ca0caa5afe57dc3d2e3a90a51dfbabc49a5ce1ea1009f7"}, + {file = "mapbox_earcut-1.0.1-cp36-cp36m-win32.whl", hash = "sha256:29f8f746a9c68f1509084b0c78227d4e142241a2e30aab6def872e53a46f7281"}, + {file = "mapbox_earcut-1.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:3c487b93b0e1059b404be4daea62c22cfc8054ffd88591377848c8e399d4abeb"}, + {file = "mapbox_earcut-1.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f85f8d95503dba4612a2dd5c076ed18845a46cea4ba38660e4929efccb5a594a"}, + {file = "mapbox_earcut-1.0.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8ade6c4822be1680c933bda32af0bb23a73e63e951db348ac1adef8de137239"}, + {file = "mapbox_earcut-1.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04431a498a836c62aba5d807572daf3c8b064b25ab83e79994498455524ce517"}, + {file = "mapbox_earcut-1.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:714d33603c59d7306650615d7b05d51da273f1aa5b41c3b462207271a2283fa7"}, + {file = "mapbox_earcut-1.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:065faa6b4a7525faa48e46e692176cbcf9587ade7a1abdb2c96cb6477ab0004d"}, + {file = "mapbox_earcut-1.0.1-cp37-cp37m-win32.whl", hash = "sha256:9f433276f54e302aa0c3ef0f8edb7a4092cdd677aafc623fab2b81e1db9f2729"}, + {file = "mapbox_earcut-1.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:2ac93a18a19acffaa7dc42646534f3850b545d6ad31469f3b7157efc9da113db"}, + {file = "mapbox_earcut-1.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b23d0b41d5d7e72fa197e981c3e317f234336b4594bb64252837a0558c9c505d"}, + {file = "mapbox_earcut-1.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:57337d9cf95a97b926eab57845525501df61abb0334ed59502a6485cf9216f64"}, + {file = "mapbox_earcut-1.0.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5447f35b1dda5f89a6d5c95e9a1831f1c5aaf1eeac853f0b2f3df97ec81c2c75"}, + {file = "mapbox_earcut-1.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dffb3e2a0253e3e2e1b7638df80a029d4d80f38db42a7736f92a8e8d4d1a3209"}, + {file = "mapbox_earcut-1.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:202761e67b0974b1618e638b83a1bb24d0a421a0c773435833a368b9b4f0ee2b"}, + {file = "mapbox_earcut-1.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9c37424997c46f45f16a8ec42fc892a011f9528257f207e2aae4bd14cfcd7c3d"}, + {file = "mapbox_earcut-1.0.1-cp38-cp38-win32.whl", hash = "sha256:ed5ec84c85a6e6cbfa294bdcbf567d3fa0abec9191acc8f362552946b8b7b398"}, + {file = "mapbox_earcut-1.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:da5eeb66f50b01e77340b00f29867fa89df4b9e28646f9a0b8f6b5c8827515fd"}, + {file = "mapbox_earcut-1.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:eb4aa9a7d1c5f92458d73f460d1f063fbcb38c50ff1f0b7e3485b8dc0f1f6635"}, + {file = "mapbox_earcut-1.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f7f779084b11bd74be374be69054803ac36095a68d1a0da1d499a47d3c7f7ccc"}, + {file = "mapbox_earcut-1.0.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5190425932e82e22e3e35dfb892f5eb441aef155c45fa055da027c72c124b3d1"}, + {file = "mapbox_earcut-1.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d68b47dc4ab2aaa9ec163c18bc6133c74739990b5013d17e13bac2d1b5c9afea"}, + {file = "mapbox_earcut-1.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e1b737d4b7b1c52c3915b898714e036990149a422343ec1481ac66b35df17f24"}, + {file = "mapbox_earcut-1.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3b77f444324a3b0e91ba2b4b2d533a66503f8fb7103e4901d0064ec2413bff8c"}, + {file = "mapbox_earcut-1.0.1-cp39-cp39-win32.whl", hash = "sha256:db61cec2374ff063e314c40b3a868237d2af1b0d98f3ec1217bc0f881e7cc40a"}, + {file = "mapbox_earcut-1.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:86b8c3732fb93f4e8ed8b1cc8388b93a72d0e9755a00f324e780b15a00fe5bc0"}, + {file = "mapbox_earcut-1.0.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0b5ad819f3fd57fc8a18c7b61a244e63b2a24475195f57e826a066e007a7a877"}, + {file = "mapbox_earcut-1.0.1-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:732e5c86037692f6c635dc4e139520be8366cde0fd39dbe122480f657b2cca90"}, + {file = "mapbox_earcut-1.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6cf7c0d0d862addc99fe0b33150c8f5c06baafa320b6dd6f67d17309512d1e9a"}, + {file = "mapbox_earcut-1.0.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:8416071bd3af616afab4513347b064274899f73e0ffe309c2a1be66600736c98"}, + {file = "mapbox_earcut-1.0.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1310c3e208e0bfd6da090ae65226ee49adba4078fe1ed2d95197c3b97ad513b9"}, + {file = "mapbox_earcut-1.0.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b657a30f677de4005f497c79ab3bb2827ba01e2642cb58ac30242f7cff48e40b"}, + {file = "mapbox_earcut-1.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34e3476d9af878887fd0d9cce759d6951fe0cc6c240e13afed1ff38fc23fc9d5"}, + {file = "mapbox_earcut-1.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e480ce4794b0c391f0b829362c78ec74b690104ef36866160a7e14232b2d3779"}, + {file = "mapbox_earcut-1.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c21271dd89263d037af5caeac425e54a8fba727ea30d1b42e3ce94cc675df15a"}, + {file = "mapbox_earcut-1.0.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11c784ba52c981dcf709bcc8de99d75a214a476f7c16369d219ca4751c7f6f6f"}, + {file = "mapbox_earcut-1.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be37a75c94017a2efaffc8763475867d4860fc4cb3262b6839d635690403d28f"}, + {file = "mapbox_earcut-1.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2ad50f947d44c8c1c0900c3e1869a4a550509450117b87b0368b06014f66590b"}, + {file = "mapbox_earcut-1.0.1.tar.gz", hash = "sha256:9f155e429a22e27387cfd7a6372c3a3865aafa609ad725e2c4465257f154a438"}, +] [package.dependencies] numpy = "*" @@ -1147,13 +1981,17 @@ description = "Python port of markdown-it. Markdown parsing, done right!" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "markdown-it-py-2.1.0.tar.gz", hash = "sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da"}, + {file = "markdown_it_py-2.1.0-py3-none-any.whl", hash = "sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27"}, +] [package.dependencies] mdurl = ">=0.1,<1.0" [package.extras] benchmarking = ["psutil", "pytest", "pytest-benchmark (>=3.2,<4.0)"] -code_style = ["pre-commit (==2.6)"] +code-style = ["pre-commit (==2.6)"] compare = ["commonmark (>=0.9.1,<0.10.0)", "markdown (>=3.3.6,<3.4.0)", "mistletoe (>=0.8.1,<0.9.0)", "mistune (>=2.0.2,<2.1.0)", "panflute (>=2.1.3,<2.2.0)"] linkify = ["linkify-it-py (>=1.0,<2.0)"] plugins = ["mdit-py-plugins"] @@ -1162,12 +2000,54 @@ rtd = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx- testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] -name = "MarkupSafe" +name = "markupsafe" version = "2.1.1" description = "Safely add untrusted strings to HTML/XML markup." category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, + {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, +] [[package]] name = "matplotlib" @@ -1176,6 +2056,49 @@ description = "Python plotting package" category = "dev" optional = false python-versions = ">=3.8" +files = [ + {file = "matplotlib-3.6.2-cp310-cp310-macosx_10_12_universal2.whl", hash = "sha256:8d0068e40837c1d0df6e3abf1cdc9a34a6d2611d90e29610fa1d2455aeb4e2e5"}, + {file = "matplotlib-3.6.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:252957e208c23db72ca9918cb33e160c7833faebf295aaedb43f5b083832a267"}, + {file = "matplotlib-3.6.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d50e8c1e571ee39b5dfbc295c11ad65988879f68009dd281a6e1edbc2ff6c18c"}, + {file = "matplotlib-3.6.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d840adcad7354be6f2ec28d0706528b0026e4c3934cc6566b84eac18633eab1b"}, + {file = "matplotlib-3.6.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78ec3c3412cf277e6252764ee4acbdbec6920cc87ad65862272aaa0e24381eee"}, + {file = "matplotlib-3.6.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9347cc6822f38db2b1d1ce992f375289670e595a2d1c15961aacbe0977407dfc"}, + {file = "matplotlib-3.6.2-cp310-cp310-win32.whl", hash = "sha256:e0bbee6c2a5bf2a0017a9b5e397babb88f230e6f07c3cdff4a4c4bc75ed7c617"}, + {file = "matplotlib-3.6.2-cp310-cp310-win_amd64.whl", hash = "sha256:8a0ae37576ed444fe853709bdceb2be4c7df6f7acae17b8378765bd28e61b3ae"}, + {file = "matplotlib-3.6.2-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:5ecfc6559132116dedfc482d0ad9df8a89dc5909eebffd22f3deb684132d002f"}, + {file = "matplotlib-3.6.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:9f335e5625feb90e323d7e3868ec337f7b9ad88b5d633f876e3b778813021dab"}, + {file = "matplotlib-3.6.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b2604c6450f9dd2c42e223b1f5dca9643a23cfecc9fde4a94bb38e0d2693b136"}, + {file = "matplotlib-3.6.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5afe0a7ea0e3a7a257907060bee6724a6002b7eec55d0db16fd32409795f3e1"}, + {file = "matplotlib-3.6.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca0e7a658fbafcddcaefaa07ba8dae9384be2343468a8e011061791588d839fa"}, + {file = "matplotlib-3.6.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32d29c8c26362169c80c5718ce367e8c64f4dd068a424e7110df1dd2ed7bd428"}, + {file = "matplotlib-3.6.2-cp311-cp311-win32.whl", hash = "sha256:5024b8ed83d7f8809982d095d8ab0b179bebc07616a9713f86d30cf4944acb73"}, + {file = "matplotlib-3.6.2-cp311-cp311-win_amd64.whl", hash = "sha256:52c2bdd7cd0bf9d5ccdf9c1816568fd4ccd51a4d82419cc5480f548981b47dd0"}, + {file = "matplotlib-3.6.2-cp38-cp38-macosx_10_12_universal2.whl", hash = "sha256:8a8dbe2cb7f33ff54b16bb5c500673502a35f18ac1ed48625e997d40c922f9cc"}, + {file = "matplotlib-3.6.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:380d48c15ec41102a2b70858ab1dedfa33eb77b2c0982cb65a200ae67a48e9cb"}, + {file = "matplotlib-3.6.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0844523dfaaff566e39dbfa74e6f6dc42e92f7a365ce80929c5030b84caa563a"}, + {file = "matplotlib-3.6.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7f716b6af94dc1b6b97c46401774472f0867e44595990fe80a8ba390f7a0a028"}, + {file = "matplotlib-3.6.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74153008bd24366cf099d1f1e83808d179d618c4e32edb0d489d526523a94d9f"}, + {file = "matplotlib-3.6.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f41e57ad63d336fe50d3a67bb8eaa26c09f6dda6a59f76777a99b8ccd8e26aec"}, + {file = "matplotlib-3.6.2-cp38-cp38-win32.whl", hash = "sha256:d0e9ac04065a814d4cf2c6791a2ad563f739ae3ae830d716d54245c2b96fead6"}, + {file = "matplotlib-3.6.2-cp38-cp38-win_amd64.whl", hash = "sha256:8a9d899953c722b9afd7e88dbefd8fb276c686c3116a43c577cfabf636180558"}, + {file = "matplotlib-3.6.2-cp39-cp39-macosx_10_12_universal2.whl", hash = "sha256:f04f97797df35e442ed09f529ad1235d1f1c0f30878e2fe09a2676b71a8801e0"}, + {file = "matplotlib-3.6.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:3964934731fd7a289a91d315919cf757f293969a4244941ab10513d2351b4e83"}, + {file = "matplotlib-3.6.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:168093410b99f647ba61361b208f7b0d64dde1172b5b1796d765cd243cadb501"}, + {file = "matplotlib-3.6.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e16dcaecffd55b955aa5e2b8a804379789c15987e8ebd2f32f01398a81e975b"}, + {file = "matplotlib-3.6.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83dc89c5fd728fdb03b76f122f43b4dcee8c61f1489e232d9ad0f58020523e1c"}, + {file = "matplotlib-3.6.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:795ad83940732b45d39b82571f87af0081c120feff2b12e748d96bb191169e33"}, + {file = "matplotlib-3.6.2-cp39-cp39-win32.whl", hash = "sha256:19d61ee6414c44a04addbe33005ab1f87539d9f395e25afcbe9a3c50ce77c65c"}, + {file = "matplotlib-3.6.2-cp39-cp39-win_amd64.whl", hash = "sha256:5ba73aa3aca35d2981e0b31230d58abb7b5d7ca104e543ae49709208d8ce706a"}, + {file = "matplotlib-3.6.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:1836f366272b1557a613f8265db220eb8dd883202bbbabe01bad5a4eadfd0c95"}, + {file = "matplotlib-3.6.2-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0eda9d1b43f265da91fb9ae10d6922b5a986e2234470a524e6b18f14095b20d2"}, + {file = "matplotlib-3.6.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec9be0f4826cdb3a3a517509dcc5f87f370251b76362051ab59e42b6b765f8c4"}, + {file = "matplotlib-3.6.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:3cef89888a466228fc4e4b2954e740ce8e9afde7c4315fdd18caa1b8de58ca17"}, + {file = "matplotlib-3.6.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:54fa9fe27f5466b86126ff38123261188bed568c1019e4716af01f97a12fe812"}, + {file = "matplotlib-3.6.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e68be81cd8c22b029924b6d0ee814c337c0e706b8d88495a617319e5dd5441c3"}, + {file = "matplotlib-3.6.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0ca2c60d3966dfd6608f5f8c49b8a0fcf76de6654f2eda55fc6ef038d5a6f27"}, + {file = "matplotlib-3.6.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4426c74761790bff46e3d906c14c7aab727543293eed5a924300a952e1a3a3c1"}, + {file = "matplotlib-3.6.2.tar.gz", hash = "sha256:b03fd10a1709d0101c054883b550f7c4c5e974f751e2680318759af005964990"}, +] [package.dependencies] contourpy = ">=1.0.1" @@ -1187,7 +2110,6 @@ packaging = ">=20.0" pillow = ">=6.2.0" pyparsing = ">=2.2.1" python-dateutil = ">=2.7" -setuptools_scm = ">=7" [[package]] name = "matplotlib-inline" @@ -1196,6 +2118,10 @@ description = "Inline Matplotlib backend for Jupyter" category = "main" optional = true python-versions = ">=3.5" +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"}, +] [package.dependencies] traitlets = "*" @@ -1207,6 +2133,10 @@ description = "McCabe checker, plugin for flake8" category = "dev" optional = false python-versions = "*" +files = [ + {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, + {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, +] [[package]] name = "mdit-py-plugins" @@ -1215,12 +2145,16 @@ description = "Collection of plugins for markdown-it-py" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "mdit-py-plugins-0.3.3.tar.gz", hash = "sha256:5cfd7e7ac582a594e23ba6546a2f406e94e42eb33ae596d0734781261c251260"}, + {file = "mdit_py_plugins-0.3.3-py3-none-any.whl", hash = "sha256:36d08a29def19ec43acdcd8ba471d3ebab132e7879d442760d963f19913e04b9"}, +] [package.dependencies] markdown-it-py = ">=1.0.0,<3.0.0" [package.extras] -code_style = ["pre-commit"] +code-style = ["pre-commit"] rtd = ["attrs", "myst-parser (>=0.16.1,<0.17.0)", "sphinx-book-theme (>=0.1.0,<0.2.0)"] testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] @@ -1231,6 +2165,10 @@ description = "Markdown URL utilities" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] [[package]] name = "mistune" @@ -1239,14 +2177,70 @@ description = "A sane Markdown parser with useful plugins and renderers" category = "main" optional = true python-versions = "*" +files = [ + {file = "mistune-2.0.4-py2.py3-none-any.whl", hash = "sha256:182cc5ee6f8ed1b807de6b7bb50155df7b66495412836b9a74c8fbdfc75fe36d"}, + {file = "mistune-2.0.4.tar.gz", hash = "sha256:9ee0a66053e2267aba772c71e06891fa8f1af6d4b01d5e84e267b4570d4d9808"}, +] [[package]] name = "moderngl" -version = "5.7.3" +version = "5.7.4" description = "ModernGL: High performance rendering for Python 3" category = "main" optional = false python-versions = "*" +files = [ + {file = "moderngl-5.7.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1719892e83bda0b433b254f1be22a41745ee6b5a4fd3a6ee5aa799756383d4f"}, + {file = "moderngl-5.7.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c6fdea10f5176b8018d2e5a05ed9fa5010b8ab24fcbabe64c05a943d50b9ba7d"}, + {file = "moderngl-5.7.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:396b2bc0a09d409b40e7c559bb1092ee327f5394b125e2ebfa9fc2951e27550d"}, + {file = "moderngl-5.7.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8eea6a083e8737bbe666e83c460a2628556f7df489987405fe33b27db3df386c"}, + {file = "moderngl-5.7.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca77be80c96c0585d7dd0f0b65815883fb5416f22de60875bec0f87f8c1c2b6b"}, + {file = "moderngl-5.7.4-cp310-cp310-win32.whl", hash = "sha256:48c3677f0303a2c5887dccd4ff3c06cc60bc54f05646bb4575f87dd69f65f83b"}, + {file = "moderngl-5.7.4-cp310-cp310-win_amd64.whl", hash = "sha256:7d28d49892923c2cc8eb145266af95ed99a0c4f3fc686228af941d1e0cdbd9bb"}, + {file = "moderngl-5.7.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:dd2446134c7bd71c8d47606545ca7820cb411723edf77d2b09301651a2356e91"}, + {file = "moderngl-5.7.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d549c518624975652ad511659d2b27827d2aa9ccbf09b17b4b53afe4226b68c7"}, + {file = "moderngl-5.7.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4441cc13384c41b7434eb1eab42f1c305f6c9b3dd8665e98ad8dc1870ff83d38"}, + {file = "moderngl-5.7.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc921e7b716a0260eeb352d3c6fd1c0fa5edb434de89e0325fc58611d3929f9e"}, + {file = "moderngl-5.7.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bdab10cbe2b87394440a3678c1445fe7fe687e82fd6b3ae7ddd76ec68766115a"}, + {file = "moderngl-5.7.4-cp311-cp311-win32.whl", hash = "sha256:631876e886aebf293a9afdf54160d46f1dc2646631750837ef04518044c4de5f"}, + {file = "moderngl-5.7.4-cp311-cp311-win_amd64.whl", hash = "sha256:38c5409df54f6601b4df94f61609ef7519bb570061333ba2f7d58bddef0963df"}, + {file = "moderngl-5.7.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:875fe5701061a7bbe833cbd42cd779c68748ed277b2ab1ec06be61972e3e846f"}, + {file = "moderngl-5.7.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb49672482406f539968b10f30d982578242a850dd7f071dc57b34fa88aebe3d"}, + {file = "moderngl-5.7.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f502d3ac58a776a57f1f524efbd05b6b95a601e087082dc8cd5cd71cb315c577"}, + {file = "moderngl-5.7.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:918f11262c4724e2515c4afc76ad57c6148d486fd6e7c3b1c04470f43f57f97b"}, + {file = "moderngl-5.7.4-cp37-cp37m-win32.whl", hash = "sha256:dce7cb87d7faced6f78e06c7e2fa607a79a50cb8ff0aed3dc9bca77b814ee042"}, + {file = "moderngl-5.7.4-cp37-cp37m-win_amd64.whl", hash = "sha256:dd010370e30bc52e65baee5061eb2ec6965adc2b08e81c232ccf7ec76553af5e"}, + {file = "moderngl-5.7.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:49546570a7eb4594cc1a4109fdef47a035ffb0b11cc3d38aafe92ab81dc6d50f"}, + {file = "moderngl-5.7.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:824f6dc34316530a617fea9e6a46d008cfe82a01e9d34ae308ad51ef127720a7"}, + {file = "moderngl-5.7.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6cb8c76c77c47cf05c29bd1940d95a641ad1b6052b5b0d29ffca816295ca364e"}, + {file = "moderngl-5.7.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b923f6644989cde6675394f63027914546fc33a380148cec449176980c25e47"}, + {file = "moderngl-5.7.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe9a40751133744018dcb19289a1f798908b1eff1a8455803dfe1bc4028f0f34"}, + {file = "moderngl-5.7.4-cp38-cp38-win32.whl", hash = "sha256:fcc0e5b557a67137a5c6944faf4dde096cf5afab296d11e86bbf20ead043eddf"}, + {file = "moderngl-5.7.4-cp38-cp38-win_amd64.whl", hash = "sha256:8ffbad06fb39116406a8988d19fd073bbbf973513a376b3c6b181ae67408237b"}, + {file = "moderngl-5.7.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:82cd399b152f3a775c1f93ef3192980a9d3d2d1c51a9df07a329ce4e4fc82430"}, + {file = "moderngl-5.7.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:eb6ad78ecfc06c0aab0be9706b71be5ee0ad443efbc4f6578a315da88dc3d4ef"}, + {file = "moderngl-5.7.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1d6c79fad12df622fa0dc8b832a2c624368cd949a0326f65ebc234891726068"}, + {file = "moderngl-5.7.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9630a42cefafaeb19a816e23de2869d855af39b880c38d9efc16b50e354297c4"}, + {file = "moderngl-5.7.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:395f96f81ea9b3c8fcd9cf1e5aedd9fe81ef0a2475922fe8f1657fbfdbd03397"}, + {file = "moderngl-5.7.4-cp39-cp39-win32.whl", hash = "sha256:512d9287a9e80bdc706c6f54b190820d8f3887619a574d5f996eb27ff2385777"}, + {file = "moderngl-5.7.4-cp39-cp39-win_amd64.whl", hash = "sha256:664a0089abc845bba2198fcadbe6d78adf65e4e5f8e117147f0d36353e9a2090"}, + {file = "moderngl-5.7.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2f8ec6ddb6141751f35734e8ce2222868da3fca57fbcb83ce4f28c93a5fcb91c"}, + {file = "moderngl-5.7.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4660a33a093d44237d40adf884a4b678dc7c1237a6d634a2ffa4652cd476aa19"}, + {file = "moderngl-5.7.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70477f355e45a8c2cce4f97818191ab28313e4203b15554214a417853ee8cfcb"}, + {file = "moderngl-5.7.4-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35f5e916d3d33753ec7a0611b5cf5addbe88a8a1aa3d292f2693808381bb19c5"}, + {file = "moderngl-5.7.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:a2e50913ab8e53b3c8da792f4b75ff7afcd117e596346110ec085de535d03ef1"}, + {file = "moderngl-5.7.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9dc27da2e9225fc9df21fa0522cd77e781ee0a2d7b75a03449c963516fb9b96c"}, + {file = "moderngl-5.7.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bfd84ac24d141b490293487e63eacebc0f198d12049adfe44d08168fc89f979a"}, + {file = "moderngl-5.7.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3cde28a2091222f51a743561cebc8d80314042a7db9a8e723e8fa5f1ad6618d"}, + {file = "moderngl-5.7.4-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f7579e66c345342f9b3fdf33e23107b874499979577b14014249856e73071c06"}, + {file = "moderngl-5.7.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:3a6d180fab423cbbaac1ee37e4d76821bf3a13e79776597c85199876f3053635"}, + {file = "moderngl-5.7.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9c3e825088a0acfb0080f3ccc0332584f99868ed39bf986e44f03581f6d33128"}, + {file = "moderngl-5.7.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44a69c62e468fd71c84384041242194f81a88fdfe08799a5f01393729c9928bd"}, + {file = "moderngl-5.7.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7963e49cadb621b7ffbd5effe43ce6472afb535dd5c074924b95fdce54d289e"}, + {file = "moderngl-5.7.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c226cb05022372b4e6b841b47d7c67d9da026d93dd38801351ce679e70beacf"}, + {file = "moderngl-5.7.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a20a575d9a5cab62554fbcb7b53e5459a13f380ee2e5c4888e9b537ef575f1ca"}, + {file = "moderngl-5.7.4.tar.gz", hash = "sha256:20f821bf66b2811bc8648d7cf7f64402afff7619fea271f42a6ee85fe03e4041"}, +] [package.dependencies] glcontext = ">=2.3.6,<3" @@ -1258,6 +2252,9 @@ description = "A cross platform helper library for ModernGL making window creati category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "moderngl_window-2.4.2-py3-none-any.whl", hash = "sha256:19aca4048ca037bd9f2ca8b154ac15d07e90a05ad2d5fce32d746be8ffcc319d"}, +] [package.dependencies] moderngl = "<6" @@ -1283,26 +2280,65 @@ description = "Multiple dispatch" category = "main" optional = false python-versions = "*" +files = [ + {file = "multipledispatch-0.6.0-py2-none-any.whl", hash = "sha256:407e6d8c5fa27075968ba07c4db3ef5f02bea4e871e959570eeb69ee39a6565b"}, + {file = "multipledispatch-0.6.0-py3-none-any.whl", hash = "sha256:a55c512128fb3f7c2efd2533f2550accb93c35f1045242ef74645fc92a2c3cba"}, + {file = "multipledispatch-0.6.0.tar.gz", hash = "sha256:a7ab1451fd0bf9b92cab3edbd7b205622fb767aeefb4fb536c2e3de9e0a38bea"}, +] [package.dependencies] six = "*" [[package]] name = "mypy" -version = "0.931" +version = "0.991" description = "Optional static typing for Python" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" +files = [ + {file = "mypy-0.991-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7d17e0a9707d0772f4a7b878f04b4fd11f6f5bcb9b3813975a9b13c9332153ab"}, + {file = "mypy-0.991-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0714258640194d75677e86c786e80ccf294972cc76885d3ebbb560f11db0003d"}, + {file = "mypy-0.991-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0c8f3be99e8a8bd403caa8c03be619544bc2c77a7093685dcf308c6b109426c6"}, + {file = "mypy-0.991-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc9ec663ed6c8f15f4ae9d3c04c989b744436c16d26580eaa760ae9dd5d662eb"}, + {file = "mypy-0.991-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4307270436fd7694b41f913eb09210faff27ea4979ecbcd849e57d2da2f65305"}, + {file = "mypy-0.991-cp310-cp310-win_amd64.whl", hash = "sha256:901c2c269c616e6cb0998b33d4adbb4a6af0ac4ce5cd078afd7bc95830e62c1c"}, + {file = "mypy-0.991-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d13674f3fb73805ba0c45eb6c0c3053d218aa1f7abead6e446d474529aafc372"}, + {file = "mypy-0.991-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1c8cd4fb70e8584ca1ed5805cbc7c017a3d1a29fb450621089ffed3e99d1857f"}, + {file = "mypy-0.991-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:209ee89fbb0deed518605edddd234af80506aec932ad28d73c08f1400ef80a33"}, + {file = "mypy-0.991-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37bd02ebf9d10e05b00d71302d2c2e6ca333e6c2a8584a98c00e038db8121f05"}, + {file = "mypy-0.991-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:26efb2fcc6b67e4d5a55561f39176821d2adf88f2745ddc72751b7890f3194ad"}, + {file = "mypy-0.991-cp311-cp311-win_amd64.whl", hash = "sha256:3a700330b567114b673cf8ee7388e949f843b356a73b5ab22dd7cff4742a5297"}, + {file = "mypy-0.991-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:1f7d1a520373e2272b10796c3ff721ea1a0712288cafaa95931e66aa15798813"}, + {file = "mypy-0.991-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:641411733b127c3e0dab94c45af15fea99e4468f99ac88b39efb1ad677da5711"}, + {file = "mypy-0.991-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3d80e36b7d7a9259b740be6d8d906221789b0d836201af4234093cae89ced0cd"}, + {file = "mypy-0.991-cp37-cp37m-win_amd64.whl", hash = "sha256:e62ebaad93be3ad1a828a11e90f0e76f15449371ffeecca4a0a0b9adc99abcef"}, + {file = "mypy-0.991-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b86ce2c1866a748c0f6faca5232059f881cda6dda2a893b9a8373353cfe3715a"}, + {file = "mypy-0.991-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac6e503823143464538efda0e8e356d871557ef60ccd38f8824a4257acc18d93"}, + {file = "mypy-0.991-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0cca5adf694af539aeaa6ac633a7afe9bbd760df9d31be55ab780b77ab5ae8bf"}, + {file = "mypy-0.991-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a12c56bf73cdab116df96e4ff39610b92a348cc99a1307e1da3c3768bbb5b135"}, + {file = "mypy-0.991-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:652b651d42f155033a1967739788c436491b577b6a44e4c39fb340d0ee7f0d70"}, + {file = "mypy-0.991-cp38-cp38-win_amd64.whl", hash = "sha256:4175593dc25d9da12f7de8de873a33f9b2b8bdb4e827a7cae952e5b1a342e243"}, + {file = "mypy-0.991-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:98e781cd35c0acf33eb0295e8b9c55cdbef64fcb35f6d3aa2186f289bed6e80d"}, + {file = "mypy-0.991-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6d7464bac72a85cb3491c7e92b5b62f3dcccb8af26826257760a552a5e244aa5"}, + {file = "mypy-0.991-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c9166b3f81a10cdf9b49f2d594b21b31adadb3d5e9db9b834866c3258b695be3"}, + {file = "mypy-0.991-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8472f736a5bfb159a5e36740847808f6f5b659960115ff29c7cecec1741c648"}, + {file = "mypy-0.991-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5e80e758243b97b618cdf22004beb09e8a2de1af481382e4d84bc52152d1c476"}, + {file = "mypy-0.991-cp39-cp39-win_amd64.whl", hash = "sha256:74e259b5c19f70d35fcc1ad3d56499065c601dfe94ff67ae48b85596b9ec1461"}, + {file = "mypy-0.991-py3-none-any.whl", hash = "sha256:de32edc9b0a7e67c2775e574cb061a537660e51210fbf6006b0b36ea695ae9bb"}, + {file = "mypy-0.991.tar.gz", hash = "sha256:3c0165ba8f354a6d9881809ef29f1a9318a236a6d81c690094c5df32107bde06"}, +] [package.dependencies] mypy-extensions = ">=0.4.3" -tomli = ">=1.1.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} typing-extensions = ">=3.10" [package.extras] dmypy = ["psutil (>=4.0)"] +install-types = ["pip"] python2 = ["typed-ast (>=1.4.0,<2)"] +reports = ["lxml"] [[package]] name = "mypy-extensions" @@ -1311,6 +2347,10 @@ description = "Experimental type system extensions for programs checked with the category = "dev" optional = false python-versions = "*" +files = [ + {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, + {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, +] [[package]] name = "myst-parser" @@ -1319,6 +2359,10 @@ description = "An extended commonmark compliant parser, with bridges to docutils category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "myst-parser-0.17.2.tar.gz", hash = "sha256:4c076d649e066f9f5c7c661bae2658be1ca06e76b002bb97f02a09398707686c"}, + {file = "myst_parser-0.17.2-py3-none-any.whl", hash = "sha256:1635ce3c18965a528d6de980f989ff64d6a1effb482e1f611b1bfb79e38f3d98"}, +] [package.dependencies] docutils = ">=0.15,<0.18" @@ -1330,7 +2374,7 @@ sphinx = ">=3.1,<5" typing-extensions = "*" [package.extras] -code_style = ["pre-commit (>=2.12,<3.0)"] +code-style = ["pre-commit (>=2.12,<3.0)"] linkify = ["linkify-it-py (>=1.0,<2.0)"] rtd = ["ipython", "sphinx-book-theme", "sphinx-panels", "sphinxcontrib-bibtex (>=2.4,<3.0)", "sphinxcontrib.mermaid (>=0.7.1,<0.8.0)", "sphinxext-opengraph (>=0.6.3,<0.7.0)", "sphinxext-rediraffe (>=0.2.7,<0.3.0)"] testing = ["beautifulsoup4", "coverage", "docutils (>=0.17.0,<0.18.0)", "pytest (>=6,<7)", "pytest-cov", "pytest-param-files (>=0.3.4,<0.4.0)", "pytest-regressions"] @@ -1342,6 +2386,10 @@ description = "A web-based notebook environment for interactive computing" category = "main" optional = true python-versions = ">=3.7" +files = [ + {file = "nbclassic-0.4.8-py3-none-any.whl", hash = "sha256:cbf05df5842b420d5cece0143462380ea9d308ff57c2dc0eb4d6e035b18fbfb3"}, + {file = "nbclassic-0.4.8.tar.gz", hash = "sha256:c74d8a500f8e058d46b576a41e5bc640711e1032cf7541dde5f73ea49497e283"}, +] [package.dependencies] argon2-cffi = "*" @@ -1374,6 +2422,10 @@ description = "A client library for executing notebooks. Formerly nbconvert's Ex category = "main" optional = true python-versions = ">=3.7.0" +files = [ + {file = "nbclient-0.7.2-py3-none-any.whl", hash = "sha256:d97ac6257de2794f5397609df754fcbca1a603e94e924eb9b99787c031ae2e7c"}, + {file = "nbclient-0.7.2.tar.gz", hash = "sha256:884a3f4a8c4fc24bb9302f263e0af47d97f0d01fe11ba714171b320c8ac09547"}, +] [package.dependencies] jupyter-client = ">=6.1.12" @@ -1388,11 +2440,15 @@ test = ["ipykernel", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>= [[package]] name = "nbconvert" -version = "7.2.6" +version = "7.2.7" description = "Converting Jupyter Notebooks" category = "main" optional = true python-versions = ">=3.7" +files = [ + {file = "nbconvert-7.2.7-py3-none-any.whl", hash = "sha256:e057f1f87a6ac50629b724d9a46b40e2ba394d6f20ee7f33f4acef1928a15af3"}, + {file = "nbconvert-7.2.7.tar.gz", hash = "sha256:8b727b0503bf4e0ff3907c8bea030d3fc4015fbee8669ac6ac2a5a6668b49d5e"}, +] [package.dependencies] beautifulsoup4 = "*" @@ -1418,16 +2474,20 @@ docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sp qtpdf = ["nbconvert[qtpng]"] qtpng = ["pyqtwebengine (>=5.15)"] serve = ["tornado (>=6.1)"] -test = ["ipykernel", "ipywidgets (>=7)", "pre-commit", "pyppeteer (>=1,<1.1)", "pytest", "pytest-dependency"] +test = ["ipykernel", "ipywidgets (>=7)", "pre-commit", "pytest", "pytest-dependency"] webpdf = ["pyppeteer (>=1,<1.1)"] [[package]] name = "nbformat" -version = "5.7.0" +version = "5.7.1" description = "The Jupyter Notebook format" category = "main" optional = true python-versions = ">=3.7" +files = [ + {file = "nbformat-5.7.1-py3-none-any.whl", hash = "sha256:e52ab802ce7f7a2863861e914642f021b9d7c23ad9726d14c36df92a79acd754"}, + {file = "nbformat-5.7.1.tar.gz", hash = "sha256:3810a0130453ed031970521d20989b8a592f3c2e73283a8280ae34ae1f75b3f8"}, +] [package.dependencies] fastjsonschema = "*" @@ -1436,7 +2496,8 @@ jupyter-core = "*" traitlets = ">=5.1" [package.extras] -test = ["check-manifest", "pep440", "pre-commit", "pytest", "testpath"] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt"] +test = ["pep440", "pre-commit", "pytest", "testpath"] [[package]] name = "nest-asyncio" @@ -1445,6 +2506,10 @@ description = "Patch asyncio to allow nested event loops" category = "main" optional = true python-versions = ">=3.5" +files = [ + {file = "nest_asyncio-1.5.6-py3-none-any.whl", hash = "sha256:b9a953fb40dceaa587d109609098db21900182b16440652454a146cffb06e8b8"}, + {file = "nest_asyncio-1.5.6.tar.gz", hash = "sha256:d267cc1ff794403f7df692964d1d2a3fa9418ffea2a3f6859a439ff482fef290"}, +] [[package]] name = "networkx" @@ -1453,6 +2518,10 @@ description = "Python package for creating and manipulating graphs and networks" category = "main" optional = false python-versions = ">=3.8" +files = [ + {file = "networkx-2.8.8-py3-none-any.whl", hash = "sha256:e435dfa75b1d7195c7b8378c3859f0445cd88c6b0375c181ed66823a9ceb7524"}, + {file = "networkx-2.8.8.tar.gz", hash = "sha256:230d388117af870fce5647a3c52401fcf753e94720e6ea6b4197a5355648885e"}, +] [package.extras] default = ["matplotlib (>=3.4)", "numpy (>=1.19)", "pandas (>=1.3)", "scipy (>=1.8)"] @@ -1468,6 +2537,10 @@ 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 = [ + {file = "nodeenv-1.7.0-py2.py3-none-any.whl", hash = "sha256:27083a7b96a25f2f5e1d8cb4b6317ee8aeda3bdd121394e5ac54e498028a042e"}, + {file = "nodeenv-1.7.0.tar.gz", hash = "sha256:e0e7f7dfb85fc5394c6fe1e8fa98131a2473e04311a45afb6508f7cf1836fa2b"}, +] [package.dependencies] setuptools = "*" @@ -1479,6 +2552,10 @@ description = "A web-based notebook environment for interactive computing" category = "main" optional = true python-versions = ">=3.7" +files = [ + {file = "notebook-6.5.2-py3-none-any.whl", hash = "sha256:e04f9018ceb86e4fa841e92ea8fb214f8d23c1cedfde530cc96f92446924f0e4"}, + {file = "notebook-6.5.2.tar.gz", hash = "sha256:c1897e5317e225fc78b45549a6ab4b668e4c996fd03a04e938fe5e7af2bfffd0"}, +] [package.dependencies] argon2-cffi = "*" @@ -1510,6 +2587,10 @@ description = "A shim layer for notebook traits and config" category = "main" optional = true python-versions = ">=3.7" +files = [ + {file = "notebook_shim-0.2.2-py3-none-any.whl", hash = "sha256:9c6c30f74c4fbea6fce55c1be58e7fd0409b1c681b075dcedceb005db5026949"}, + {file = "notebook_shim-0.2.2.tar.gz", hash = "sha256:090e0baf9a5582ff59b607af523ca2db68ff216da0c69956b62cab2ef4fc9c3f"}, +] [package.dependencies] jupyter-server = ">=1.8,<3" @@ -1519,11 +2600,41 @@ test = ["pytest", "pytest-console-scripts", "pytest-tornasync"] [[package]] name = "numpy" -version = "1.23.5" -description = "NumPy is the fundamental package for array computing with Python." +version = "1.24.0" +description = "Fundamental package for array computing in Python" category = "main" optional = false python-versions = ">=3.8" +files = [ + {file = "numpy-1.24.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6e73a1f4f5b74a42abb55bc2b3d869f1b38cbc8776da5f8b66bf110284f7a437"}, + {file = "numpy-1.24.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9387c7d6d50e8f8c31e7bfc034241e9c6f4b3eb5db8d118d6487047b922f82af"}, + {file = "numpy-1.24.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ad6a024a32ee61d18f5b402cd02e9c0e22c0fb9dc23751991b3a16d209d972e"}, + {file = "numpy-1.24.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:73cf2c5b5a07450f20a0c8e04d9955491970177dce8df8d6903bf253e53268e0"}, + {file = "numpy-1.24.0-cp310-cp310-win32.whl", hash = "sha256:cec79ff3984b2d1d103183fc4a3361f5b55bbb66cb395cbf5a920a4bb1fd588d"}, + {file = "numpy-1.24.0-cp310-cp310-win_amd64.whl", hash = "sha256:4f5e78b8b710cd7cd1a8145994cfffc6ddd5911669a437777d8cedfce6c83a98"}, + {file = "numpy-1.24.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4445f472b246cad6514cc09fbb5ecb7aab09ca2acc3c16f29f8dca6c468af501"}, + {file = "numpy-1.24.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ec3e5e8172a0a6a4f3c2e7423d4a8434c41349141b04744b11a90e017a95bad5"}, + {file = "numpy-1.24.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9168790149f917ad8e3cf5047b353fefef753bd50b07c547da0bdf30bc15d91"}, + {file = "numpy-1.24.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ada6c1e9608ceadaf7020e1deea508b73ace85560a16f51bef26aecb93626a72"}, + {file = "numpy-1.24.0-cp311-cp311-win32.whl", hash = "sha256:f3c4a9a9f92734a4728ddbd331e0124eabbc968a0359a506e8e74a9b0d2d419b"}, + {file = "numpy-1.24.0-cp311-cp311-win_amd64.whl", hash = "sha256:90075ef2c6ac6397d0035bcd8b298b26e481a7035f7a3f382c047eb9c3414db0"}, + {file = "numpy-1.24.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0885d9a7666cafe5f9876c57bfee34226e2b2847bfb94c9505e18d81011e5401"}, + {file = "numpy-1.24.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e63d2157f9fc98cc178870db83b0e0c85acdadd598b134b00ebec9e0db57a01f"}, + {file = "numpy-1.24.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf8960f72997e56781eb1c2ea256a70124f92a543b384f89e5fb3503a308b1d3"}, + {file = "numpy-1.24.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f8e0df2ecc1928ef7256f18e309c9d6229b08b5be859163f5caa59c93d53646"}, + {file = "numpy-1.24.0-cp38-cp38-win32.whl", hash = "sha256:fe44e925c68fb5e8db1334bf30ac1a1b6b963b932a19cf41d2e899cf02f36aab"}, + {file = "numpy-1.24.0-cp38-cp38-win_amd64.whl", hash = "sha256:d7f223554aba7280e6057727333ed357b71b7da7422d02ff5e91b857888c25d1"}, + {file = "numpy-1.24.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ab11f6a7602cf8ea4c093e091938207de3068c5693a0520168ecf4395750f7ea"}, + {file = "numpy-1.24.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:12bba5561d8118981f2f1ff069ecae200c05d7b6c78a5cdac0911f74bc71cbd1"}, + {file = "numpy-1.24.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9af91f794d2d3007d91d749ebc955302889261db514eb24caef30e03e8ec1e41"}, + {file = "numpy-1.24.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b1ddfac6a82d4f3c8e99436c90b9c2c68c0bb14658d1684cdd00f05fab241f5"}, + {file = "numpy-1.24.0-cp39-cp39-win32.whl", hash = "sha256:ac4fe68f1a5a18136acebd4eff91aab8bed00d1ef2fdb34b5d9192297ffbbdfc"}, + {file = "numpy-1.24.0-cp39-cp39-win_amd64.whl", hash = "sha256:667b5b1f6a352419e340f6475ef9930348ae5cb7fca15f2cc3afcb530823715e"}, + {file = "numpy-1.24.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4d01f7832fa319a36fd75ba10ea4027c9338ede875792f7bf617f4b45056fc3a"}, + {file = "numpy-1.24.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbb0490f0a880700a6cc4d000384baf19c1f4df59fff158d9482d4dbbca2b239"}, + {file = "numpy-1.24.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:0104d8adaa3a4cc60c2777cab5196593bf8a7f416eda133be1f3803dd0838886"}, + {file = "numpy-1.24.0.tar.gz", hash = "sha256:c4ab7c9711fe6b235e86487ca74c1b092a6dd59a3cb45b63241ea0a148501853"}, +] [[package]] name = "packaging" @@ -1532,6 +2643,10 @@ description = "Core utilities for Python packages" category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "packaging-22.0-py3-none-any.whl", hash = "sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3"}, + {file = "packaging-22.0.tar.gz", hash = "sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3"}, +] [[package]] name = "pandocfilters" @@ -1540,6 +2655,10 @@ 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 = [ + {file = "pandocfilters-1.5.0-py2.py3-none-any.whl", hash = "sha256:33aae3f25fd1a026079f5d27bdd52496f0e0803b3469282162bafdcbdf6ef14f"}, + {file = "pandocfilters-1.5.0.tar.gz", hash = "sha256:0b679503337d233b4339a817bfc8c50064e2eff681314376a47cb582305a7a38"}, +] [[package]] name = "parso" @@ -1548,6 +2667,10 @@ 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"}, +] [package.extras] qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] @@ -1555,11 +2678,15 @@ testing = ["docopt", "pytest (<6.0.0)"] [[package]] name = "pathspec" -version = "0.10.2" +version = "0.10.3" description = "Utility library for gitignore style pattern matching of file paths." category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "pathspec-0.10.3-py3-none-any.whl", hash = "sha256:3c95343af8b756205e2aba76e843ba9520a24dd84f68c22b9f93251507509dd6"}, + {file = "pathspec-0.10.3.tar.gz", hash = "sha256:56200de4077d9d0791465aa9095a01d421861e405b5096955051deefd697d6f6"}, +] [[package]] name = "pexpect" @@ -1568,6 +2695,10 @@ description = "Pexpect allows easy control of interactive console applications." category = "main" optional = true python-versions = "*" +files = [ + {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, + {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, +] [package.dependencies] ptyprocess = ">=0.5" @@ -1579,26 +2710,97 @@ description = "Tiny 'shelve'-like database with concurrency support" category = "main" optional = true python-versions = "*" +files = [ + {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, + {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, +] [[package]] -name = "Pillow" +name = "pillow" version = "9.3.0" description = "Python Imaging Library (Fork)" category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "Pillow-9.3.0-1-cp37-cp37m-win32.whl", hash = "sha256:e6ea6b856a74d560d9326c0f5895ef8050126acfdc7ca08ad703eb0081e82b74"}, + {file = "Pillow-9.3.0-1-cp37-cp37m-win_amd64.whl", hash = "sha256:32a44128c4bdca7f31de5be641187367fe2a450ad83b833ef78910397db491aa"}, + {file = "Pillow-9.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:0b7257127d646ff8676ec8a15520013a698d1fdc48bc2a79ba4e53df792526f2"}, + {file = "Pillow-9.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b90f7616ea170e92820775ed47e136208e04c967271c9ef615b6fbd08d9af0e3"}, + {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68943d632f1f9e3dce98908e873b3a090f6cba1cbb1b892a9e8d97c938871fbe"}, + {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be55f8457cd1eac957af0c3f5ece7bc3f033f89b114ef30f710882717670b2a8"}, + {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d77adcd56a42d00cc1be30843d3426aa4e660cab4a61021dc84467123f7a00c"}, + {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:829f97c8e258593b9daa80638aee3789b7df9da5cf1336035016d76f03b8860c"}, + {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:801ec82e4188e935c7f5e22e006d01611d6b41661bba9fe45b60e7ac1a8f84de"}, + {file = "Pillow-9.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:871b72c3643e516db4ecf20efe735deb27fe30ca17800e661d769faab45a18d7"}, + {file = "Pillow-9.3.0-cp310-cp310-win32.whl", hash = "sha256:655a83b0058ba47c7c52e4e2df5ecf484c1b0b0349805896dd350cbc416bdd91"}, + {file = "Pillow-9.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:9f47eabcd2ded7698106b05c2c338672d16a6f2a485e74481f524e2a23c2794b"}, + {file = "Pillow-9.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:57751894f6618fd4308ed8e0c36c333e2f5469744c34729a27532b3db106ee20"}, + {file = "Pillow-9.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7db8b751ad307d7cf238f02101e8e36a128a6cb199326e867d1398067381bff4"}, + {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3033fbe1feb1b59394615a1cafaee85e49d01b51d54de0cbf6aa8e64182518a1"}, + {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22b012ea2d065fd163ca096f4e37e47cd8b59cf4b0fd47bfca6abb93df70b34c"}, + {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9a65733d103311331875c1dca05cb4606997fd33d6acfed695b1232ba1df193"}, + {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:502526a2cbfa431d9fc2a079bdd9061a2397b842bb6bc4239bb176da00993812"}, + {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:90fb88843d3902fe7c9586d439d1e8c05258f41da473952aa8b328d8b907498c"}, + {file = "Pillow-9.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:89dca0ce00a2b49024df6325925555d406b14aa3efc2f752dbb5940c52c56b11"}, + {file = "Pillow-9.3.0-cp311-cp311-win32.whl", hash = "sha256:3168434d303babf495d4ba58fc22d6604f6e2afb97adc6a423e917dab828939c"}, + {file = "Pillow-9.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:18498994b29e1cf86d505edcb7edbe814d133d2232d256db8c7a8ceb34d18cef"}, + {file = "Pillow-9.3.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:772a91fc0e03eaf922c63badeca75e91baa80fe2f5f87bdaed4280662aad25c9"}, + {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa4107d1b306cdf8953edde0534562607fe8811b6c4d9a486298ad31de733b2"}, + {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4012d06c846dc2b80651b120e2cdd787b013deb39c09f407727ba90015c684f"}, + {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77ec3e7be99629898c9a6d24a09de089fa5356ee408cdffffe62d67bb75fdd72"}, + {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:6c738585d7a9961d8c2821a1eb3dcb978d14e238be3d70f0a706f7fa9316946b"}, + {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:828989c45c245518065a110434246c44a56a8b2b2f6347d1409c787e6e4651ee"}, + {file = "Pillow-9.3.0-cp37-cp37m-win32.whl", hash = "sha256:82409ffe29d70fd733ff3c1025a602abb3e67405d41b9403b00b01debc4c9a29"}, + {file = "Pillow-9.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:41e0051336807468be450d52b8edd12ac60bebaa97fe10c8b660f116e50b30e4"}, + {file = "Pillow-9.3.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:b03ae6f1a1878233ac620c98f3459f79fd77c7e3c2b20d460284e1fb370557d4"}, + {file = "Pillow-9.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4390e9ce199fc1951fcfa65795f239a8a4944117b5935a9317fb320e7767b40f"}, + {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40e1ce476a7804b0fb74bcfa80b0a2206ea6a882938eaba917f7a0f004b42502"}, + {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0a06a052c5f37b4ed81c613a455a81f9a3a69429b4fd7bb913c3fa98abefc20"}, + {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03150abd92771742d4a8cd6f2fa6246d847dcd2e332a18d0c15cc75bf6703040"}, + {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:15c42fb9dea42465dfd902fb0ecf584b8848ceb28b41ee2b58f866411be33f07"}, + {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:51e0e543a33ed92db9f5ef69a0356e0b1a7a6b6a71b80df99f1d181ae5875636"}, + {file = "Pillow-9.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3dd6caf940756101205dffc5367babf288a30043d35f80936f9bfb37f8355b32"}, + {file = "Pillow-9.3.0-cp38-cp38-win32.whl", hash = "sha256:f1ff2ee69f10f13a9596480335f406dd1f70c3650349e2be67ca3139280cade0"}, + {file = "Pillow-9.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:276a5ca930c913f714e372b2591a22c4bd3b81a418c0f6635ba832daec1cbcfc"}, + {file = "Pillow-9.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:73bd195e43f3fadecfc50c682f5055ec32ee2c933243cafbfdec69ab1aa87cad"}, + {file = "Pillow-9.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1c7c8ae3864846fc95f4611c78129301e203aaa2af813b703c55d10cc1628535"}, + {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e0918e03aa0c72ea56edbb00d4d664294815aa11291a11504a377ea018330d3"}, + {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0915e734b33a474d76c28e07292f196cdf2a590a0d25bcc06e64e545f2d146c"}, + {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af0372acb5d3598f36ec0914deed2a63f6bcdb7b606da04dc19a88d31bf0c05b"}, + {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:ad58d27a5b0262c0c19b47d54c5802db9b34d38bbf886665b626aff83c74bacd"}, + {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:97aabc5c50312afa5e0a2b07c17d4ac5e865b250986f8afe2b02d772567a380c"}, + {file = "Pillow-9.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9aaa107275d8527e9d6e7670b64aabaaa36e5b6bd71a1015ddd21da0d4e06448"}, + {file = "Pillow-9.3.0-cp39-cp39-win32.whl", hash = "sha256:bac18ab8d2d1e6b4ce25e3424f709aceef668347db8637c2296bcf41acb7cf48"}, + {file = "Pillow-9.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:b472b5ea442148d1c3e2209f20f1e0bb0eb556538690fa70b5e1f79fa0ba8dc2"}, + {file = "Pillow-9.3.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ab388aaa3f6ce52ac1cb8e122c4bd46657c15905904b3120a6248b5b8b0bc228"}, + {file = "Pillow-9.3.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbb8e7f2abee51cef77673be97760abff1674ed32847ce04b4af90f610144c7b"}, + {file = "Pillow-9.3.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca31dd6014cb8b0b2db1e46081b0ca7d936f856da3b39744aef499db5d84d02"}, + {file = "Pillow-9.3.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c7025dce65566eb6e89f56c9509d4f628fddcedb131d9465cacd3d8bac337e7e"}, + {file = "Pillow-9.3.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ebf2029c1f464c59b8bdbe5143c79fa2045a581ac53679733d3a91d400ff9efb"}, + {file = "Pillow-9.3.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b59430236b8e58840a0dfb4099a0e8717ffb779c952426a69ae435ca1f57210c"}, + {file = "Pillow-9.3.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12ce4932caf2ddf3e41d17fc9c02d67126935a44b86df6a206cf0d7161548627"}, + {file = "Pillow-9.3.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae5331c23ce118c53b172fa64a4c037eb83c9165aba3a7ba9ddd3ec9fa64a699"}, + {file = "Pillow-9.3.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:0b07fffc13f474264c336298d1b4ce01d9c5a011415b79d4ee5527bb69ae6f65"}, + {file = "Pillow-9.3.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:073adb2ae23431d3b9bcbcff3fe698b62ed47211d0716b067385538a1b0f28b8"}, + {file = "Pillow-9.3.0.tar.gz", hash = "sha256:c935a22a557a560108d780f9a0fc426dd7459940dc54faa49d83249c8d3e760f"}, +] [package.extras] docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinxext-opengraph"] tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] [[package]] -name = "pkgutil_resolve_name" +name = "pkgutil-resolve-name" version = "1.3.10" description = "Resolve a name to an object." category = "main" optional = true python-versions = ">=3.6" +files = [ + {file = "pkgutil_resolve_name-1.3.10-py3-none-any.whl", hash = "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e"}, + {file = "pkgutil_resolve_name-1.3.10.tar.gz", hash = "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174"}, +] [[package]] name = "platformdirs" @@ -1607,6 +2809,10 @@ description = "A small Python package for determining appropriate platform-speci category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "platformdirs-2.6.0-py3-none-any.whl", hash = "sha256:1a89a12377800c81983db6be069ec068eee989748799b946cce2a6e80dcc54ca"}, + {file = "platformdirs-2.6.0.tar.gz", hash = "sha256:b46ffafa316e6b83b47489d240ce17173f123a9b9c83282141c3daf26ad9ac2e"}, +] [package.extras] docs = ["furo (>=2022.9.29)", "proselint (>=0.13)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.4)"] @@ -1619,6 +2825,10 @@ description = "plugin and hook calling mechanisms for python" category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, + {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, +] [package.extras] dev = ["pre-commit", "tox"] @@ -1631,6 +2841,10 @@ description = "A framework for managing and maintaining multi-language pre-commi category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "pre_commit-2.20.0-py2.py3-none-any.whl", hash = "sha256:51a5ba7c480ae8072ecdb6933df22d2f812dc897d5fe848778116129a681aac7"}, + {file = "pre_commit-2.20.0.tar.gz", hash = "sha256:a978dac7bc9ec0bcee55c18a277d553b0f419d259dadb4b9418ff2d00eb43959"}, +] [package.dependencies] cfgv = ">=2.0.0" @@ -1647,6 +2861,10 @@ description = "Python client for the Prometheus monitoring system." category = "main" optional = true python-versions = ">=3.6" +files = [ + {file = "prometheus_client-0.15.0-py3-none-any.whl", hash = "sha256:db7c05cbd13a0f79975592d112320f2605a325969b270a94b71dcabc47b931d2"}, + {file = "prometheus_client-0.15.0.tar.gz", hash = "sha256:be26aa452490cfcf6da953f9436e95a9f2b4d578ca80094b4458930e5f584ab1"}, +] [package.extras] twisted = ["twisted"] @@ -1658,6 +2876,10 @@ description = "Library for building powerful interactive command lines in Python category = "main" optional = true python-versions = ">=3.6.2" +files = [ + {file = "prompt_toolkit-3.0.36-py3-none-any.whl", hash = "sha256:aa64ad242a462c5ff0363a7b9cfe696c20d55d9fc60c11fd8e632d064804d305"}, + {file = "prompt_toolkit-3.0.36.tar.gz", hash = "sha256:3e163f254bef5a03b146397d7c1963bd3e2812f0964bb9a24e6ec761fd28db63"}, +] [package.dependencies] wcwidth = "*" @@ -1669,6 +2891,22 @@ 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.*" +files = [ + {file = "psutil-5.9.4-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c1ca331af862803a42677c120aff8a814a804e09832f166f226bfd22b56feee8"}, + {file = "psutil-5.9.4-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:68908971daf802203f3d37e78d3f8831b6d1014864d7a85937941bb35f09aefe"}, + {file = "psutil-5.9.4-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:3ff89f9b835100a825b14c2808a106b6fdcc4b15483141482a12c725e7f78549"}, + {file = "psutil-5.9.4-cp27-cp27m-win32.whl", hash = "sha256:852dd5d9f8a47169fe62fd4a971aa07859476c2ba22c2254d4a1baa4e10b95ad"}, + {file = "psutil-5.9.4-cp27-cp27m-win_amd64.whl", hash = "sha256:9120cd39dca5c5e1c54b59a41d205023d436799b1c8c4d3ff71af18535728e94"}, + {file = "psutil-5.9.4-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:6b92c532979bafc2df23ddc785ed116fced1f492ad90a6830cf24f4d1ea27d24"}, + {file = "psutil-5.9.4-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:efeae04f9516907be44904cc7ce08defb6b665128992a56957abc9b61dca94b7"}, + {file = "psutil-5.9.4-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:54d5b184728298f2ca8567bf83c422b706200bcbbfafdc06718264f9393cfeb7"}, + {file = "psutil-5.9.4-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16653106f3b59386ffe10e0bad3bb6299e169d5327d3f187614b1cb8f24cf2e1"}, + {file = "psutil-5.9.4-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54c0d3d8e0078b7666984e11b12b88af2db11d11249a8ac8920dd5ef68a66e08"}, + {file = "psutil-5.9.4-cp36-abi3-win32.whl", hash = "sha256:149555f59a69b33f056ba1c4eb22bb7bf24332ce631c44a319cec09f876aaeff"}, + {file = "psutil-5.9.4-cp36-abi3-win_amd64.whl", hash = "sha256:fd8522436a6ada7b4aad6638662966de0d61d241cb821239b2ae7013d41a43d4"}, + {file = "psutil-5.9.4-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:6001c809253a29599bc0dfd5179d9f8a5779f9dffea1da0f13c53ee568115e1e"}, + {file = "psutil-5.9.4.tar.gz", hash = "sha256:3d7f9739eb435d4b1338944abe23f49584bde5395f27487d2ee25ad9a8774a62"}, +] [package.extras] test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] @@ -1680,6 +2918,21 @@ 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 = [ + {file = "psutil-wheels-5.8.0.tar.gz", hash = "sha256:9fb80725195402a66e5db947f239d032500cde75ca5d8625326d797a65341d6f"}, + {file = "psutil_wheels-5.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2cfbb317f3ee0c8ac9dd5d82e6913b0216222d2b22ea65cbc2f8072dabb167d4"}, + {file = "psutil_wheels-5.8.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ea1f7f6bcc536669a22c07429dde993bc707f45339137b085394faada25fc813"}, + {file = "psutil_wheels-5.8.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d13d705fb5026d3ae476c7988601430dfaa6143e695058a3182146adc0457b7f"}, + {file = "psutil_wheels-5.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:3f0ca7c4c9031e04b18e52cd4c6f17e196bb7896071dd1eacaeb352948b47517"}, + {file = "psutil_wheels-5.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:902ab2a221529cd7c0d9fa2f865fdd22bc45df87db825437aeee0dcaeed9b787"}, + {file = "psutil_wheels-5.8.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:96838ad949609621e369d327834ade3b3e1b0fa3f450e0a7460855a3cf41a6d6"}, + {file = "psutil_wheels-5.8.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:933c4079c8121f8f0d3d1525671e3b6182d804d54c7819b6a7dddeac5605ba69"}, + {file = "psutil_wheels-5.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:5dd57fb06b081bf2e3cebe89ca92f6ef606ecc5e50ac7ecb2dc7a68262d6cd91"}, + {file = "psutil_wheels-5.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:05a4b136c395273066ecd63d64200868fc57561c65f6dda988b28d08f4a60f69"}, + {file = "psutil_wheels-5.8.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c7c13e8264fa26f0bde4ddc15f2959d04c2a8f7537c41541d1503dd159b01a86"}, + {file = "psutil_wheels-5.8.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b07890d22db82a135b8d5149ba1736e0fde998605cfa73c4d030bbfc77e890b6"}, + {file = "psutil_wheels-5.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:84bb63b669aa918b4a62226276b1c1f952e57a461debfb7b9eed848c41e7cbda"}, +] [package.extras] test = ["enum34", "ipaddress", "mock", "pywin32", "unittest2", "wmi"] @@ -1691,6 +2944,10 @@ description = "Run a subprocess in a pseudo terminal" category = "main" optional = true python-versions = "*" +files = [ + {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, + {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, +] [[package]] name = "pure-eval" @@ -1699,6 +2956,10 @@ description = "Safely evaluate AST nodes without side effects" category = "main" optional = true python-versions = "*" +files = [ + {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"}, + {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"}, +] [package.extras] tests = ["pytest"] @@ -1710,6 +2971,10 @@ description = "library with cross-python path, ini-parsing, io, code, log facili category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, +] [[package]] name = "pycairo" @@ -1718,6 +2983,19 @@ description = "Python interface for cairo" category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "pycairo-1.23.0-cp310-cp310-win32.whl", hash = "sha256:564601e5f528531c6caec1c0177c3d0709081e1a2a5cccc13561f715080ae535"}, + {file = "pycairo-1.23.0-cp310-cp310-win_amd64.whl", hash = "sha256:e7cde633986435d87a86b6118b7b6109c384266fd719ef959883e2729f6eafae"}, + {file = "pycairo-1.23.0-cp311-cp311-win32.whl", hash = "sha256:3a71f758e461180d241e62ef52e85499c843bd2660fd6d87cec99c9833792bfa"}, + {file = "pycairo-1.23.0-cp311-cp311-win_amd64.whl", hash = "sha256:2dec5378133778961993fb59d66df16070e03f4d491b67eb695ca9ad7a696008"}, + {file = "pycairo-1.23.0-cp37-cp37m-win32.whl", hash = "sha256:d6bacff15d688ed135b4567965a4b664d9fb8de7417a7865bb138ad612043c9f"}, + {file = "pycairo-1.23.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ec305fc7f2f0299df78aadec0eaf6eb9accb90eda242b5d3492544d3f2b28027"}, + {file = "pycairo-1.23.0-cp38-cp38-win32.whl", hash = "sha256:1a6d8e0f353062ad92954784e33dbbaf66c880c9c30e947996c542ed9748aaaf"}, + {file = "pycairo-1.23.0-cp38-cp38-win_amd64.whl", hash = "sha256:82e335774a17870bc038e0c2fb106c1e5e7ad0c764662023886dfcfce5bb5a52"}, + {file = "pycairo-1.23.0-cp39-cp39-win32.whl", hash = "sha256:a4b1f525bbdf637c40f4d91378de36c01ec2b7f8ecc585b700a079b9ff83298e"}, + {file = "pycairo-1.23.0-cp39-cp39-win_amd64.whl", hash = "sha256:87efd62a7b7afad9a0a420f05b6008742a6cfc59077697be65afe8dc73ae15ad"}, + {file = "pycairo-1.23.0.tar.gz", hash = "sha256:9b61ac818723adc04367301317eb2e814a83522f07bbd1f409af0dada463c44c"}, +] [[package]] name = "pycodestyle" @@ -1726,6 +3004,10 @@ description = "Python style guide checker" category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"}, + {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"}, +] [[package]] name = "pycparser" @@ -1734,6 +3016,10 @@ description = "C parser in Python" category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, + {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, +] [[package]] name = "pydocstyle" @@ -1742,6 +3028,10 @@ description = "Python docstring style checker" category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "pydocstyle-6.1.1-py3-none-any.whl", hash = "sha256:6987826d6775056839940041beef5c08cc7e3d71d63149b48e36727f70144dc4"}, + {file = "pydocstyle-6.1.1.tar.gz", hash = "sha256:1d41b7c459ba0ee6c345f2eb9ae827cab14a7533a88c5c6f7e94923f72df92dc"}, +] [package.dependencies] snowballstemmer = "*" @@ -1756,6 +3046,10 @@ description = "Manipulate audio with an simple and easy high level interface" category = "main" optional = false python-versions = "*" +files = [ + {file = "pydub-0.25.1-py2.py3-none-any.whl", hash = "sha256:65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6"}, + {file = "pydub-0.25.1.tar.gz", hash = "sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f"}, +] [[package]] name = "pyflakes" @@ -1764,14 +3058,22 @@ description = "passive checker of Python programs" category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pyflakes-2.3.1-py2.py3-none-any.whl", hash = "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3"}, + {file = "pyflakes-2.3.1.tar.gz", hash = "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"}, +] [[package]] -name = "PyGithub" +name = "pygithub" version = "1.57" description = "Use the full Github API v3" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "PyGithub-1.57-py3-none-any.whl", hash = "sha256:5822febeac2391f1306c55a99af2bc8f86c8bf82ded000030cd02c18f31b731f"}, + {file = "PyGithub-1.57.tar.gz", hash = "sha256:c273f252b278fb81f1769505cc6921bdb6791e1cebd6ac850cc97dad13c31ff3"}, +] [package.dependencies] deprecated = "*" @@ -1784,30 +3086,42 @@ integrations = ["cryptography"] [[package]] name = "pyglet" -version = "2.0.1" +version = "2.0.2.1" description = "Cross-platform windowing and multimedia library" category = "main" optional = false python-versions = "*" +files = [ + {file = "pyglet-2.0.2.1-py3-none-any.whl", hash = "sha256:28d78881bed68abc04a00d5f29cfb9e38fe66b93f5b208a6425c4060632033bf"}, + {file = "pyglet-2.0.2.1.zip", hash = "sha256:5a89c68dda280f761bdeb0216b9dfa027fb2e27519a0ea3c16f6558b204f1e5f"}, +] [[package]] -name = "Pygments" +name = "pygments" version = "2.13.0" description = "Pygments is a syntax highlighting package written in Python." category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "Pygments-2.13.0-py3-none-any.whl", hash = "sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42"}, + {file = "Pygments-2.13.0.tar.gz", hash = "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1"}, +] [package.extras] plugins = ["importlib-metadata"] [[package]] -name = "PyJWT" +name = "pyjwt" version = "2.6.0" description = "JSON Web Token implementation in Python" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "PyJWT-2.6.0-py3-none-any.whl", hash = "sha256:d83c3d892a77bbb74d3e1a2cfa90afaadb60945205d1095d9221f04466f64c14"}, + {file = "PyJWT-2.6.0.tar.gz", hash = "sha256:69285c7e31fc44f68a1feb309e948e0df53259d579295e6cfe2b1792329f05fd"}, +] [package.extras] crypto = ["cryptography (>=3.4.0)"] @@ -1817,16 +3131,23 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] [[package]] name = "pylint" -version = "2.15.8" +version = "2.15.9" description = "python code static checker" category = "dev" optional = false python-versions = ">=3.7.2" +files = [ + {file = "pylint-2.15.9-py3-none-any.whl", hash = "sha256:349c8cd36aede4d50a0754a8c0218b43323d13d5d88f4b2952ddfe3e169681eb"}, + {file = "pylint-2.15.9.tar.gz", hash = "sha256:18783cca3cfee5b83c6c5d10b3cdb66c6594520ffae61890858fe8d932e1c6b4"}, +] [package.dependencies] astroid = ">=2.12.13,<=2.14.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} -dill = ">=0.2" +dill = [ + {version = ">=0.2", markers = "python_version < \"3.11\""}, + {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, +] isort = ">=4.2.5,<6" mccabe = ">=0.6,<0.8" platformdirs = ">=2.2.0" @@ -1839,38 +3160,68 @@ spelling = ["pyenchant (>=3.2,<4.0)"] testutils = ["gitpython (>3)"] [[package]] -name = "PyNaCl" +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 = [ + {file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858"}, + {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b"}, + {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff"}, + {file = "PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543"}, + {file = "PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93"}, + {file = "PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"}, +] [package.dependencies] cffi = ">=1.4.1" [package.extras] -docs = ["sphinx (>=1.6.5)", "sphinx_rtd_theme"] +docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"] tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] [[package]] name = "pyobjc-core" -version = "9.0" +version = "9.0.1" description = "Python<->ObjC Interoperability Module" category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "pyobjc-core-9.0.1.tar.gz", hash = "sha256:5ce1510bb0bdff527c597079a42b2e13a19b7592e76850be7960a2775b59c929"}, + {file = "pyobjc_core-9.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b614406d46175b1438a9596b664bf61952323116704d19bc1dea68052a0aad98"}, + {file = "pyobjc_core-9.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bd397e729f6271c694fb70df8f5d3d3c9b2f2b8ac02fbbdd1757ca96027b94bb"}, + {file = "pyobjc_core-9.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d919934eaa6d1cf1505ff447a5c2312be4c5651efcb694eb9f59e86f5bd25e6b"}, + {file = "pyobjc_core-9.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:67d67ca8b164f38ceacce28a18025845c3ec69613f3301935d4d2c4ceb22e3fd"}, + {file = "pyobjc_core-9.0.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:39d11d71f6161ac0bd93cffc8ea210bb0178b56d16a7408bf74283d6ecfa7430"}, + {file = "pyobjc_core-9.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:25be1c4d530e473ed98b15063b8d6844f0733c98914de6f09fe1f7652b772bbc"}, +] [[package]] -name = "pyobjc-framework-Cocoa" -version = "9.0" +name = "pyobjc-framework-cocoa" +version = "9.0.1" description = "Wrappers for the Cocoa frameworks on macOS" category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "pyobjc-framework-Cocoa-9.0.1.tar.gz", hash = "sha256:a8b53b3426f94307a58e2f8214dc1094c19afa9dcb96f21be12f937d968b2df3"}, + {file = "pyobjc_framework_Cocoa-9.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5f94b0f92a62b781e633e58f09bcaded63d612f9b1e15202f5f372ea59e4aebd"}, + {file = "pyobjc_framework_Cocoa-9.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f062c3bb5cc89902e6d164aa9a66ffc03638645dd5f0468b6f525ac997c86e51"}, + {file = "pyobjc_framework_Cocoa-9.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0b374c0a9d32ba4fc5610ab2741cb05a005f1dfb82a47dbf2dbb2b3a34b73ce5"}, + {file = "pyobjc_framework_Cocoa-9.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8928080cebbce91ac139e460d3dfc94c7cb6935be032dcae9c0a51b247f9c2d9"}, + {file = "pyobjc_framework_Cocoa-9.0.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:9d2bd86a0a98d906f762f5dc59f2fc67cce32ae9633b02ff59ac8c8a33dd862d"}, + {file = "pyobjc_framework_Cocoa-9.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2a41053cbcee30e1e8914efa749c50b70bf782527d5938f2bc2a6393740969ce"}, +] [package.dependencies] -pyobjc-core = ">=9.0" +pyobjc-core = ">=9.0.1" [[package]] name = "pyparsing" @@ -1879,6 +3230,10 @@ description = "pyparsing module - Classes and methods to define and execute pars category = "dev" optional = false python-versions = ">=3.6.8" +files = [ + {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, + {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, +] [package.extras] diagrams = ["jinja2", "railroad-diagrams"] @@ -1890,6 +3245,10 @@ description = "3D mathematical functions using NumPy" category = "main" optional = false python-versions = "*" +files = [ + {file = "pyrr-0.10.3-py3-none-any.whl", hash = "sha256:d8af23fb9bb29262405845e1c98f7339fbba5e49323b98528bd01160a75c65ac"}, + {file = "pyrr-0.10.3.tar.gz", hash = "sha256:3c0f7b20326e71f706a610d58f2190fff73af01eef60c19cb188b186f0ec7e1d"}, +] [package.dependencies] multipledispatch = "*" @@ -1902,6 +3261,30 @@ description = "Persistent/Functional/Immutable data structures" category = "main" optional = true python-versions = ">=3.7" +files = [ + {file = "pyrsistent-0.19.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d6982b5a0237e1b7d876b60265564648a69b14017f3b5f908c5be2de3f9abb7a"}, + {file = "pyrsistent-0.19.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:187d5730b0507d9285a96fca9716310d572e5464cadd19f22b63a6976254d77a"}, + {file = "pyrsistent-0.19.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:055ab45d5911d7cae397dc418808d8802fb95262751872c841c170b0dbf51eed"}, + {file = "pyrsistent-0.19.2-cp310-cp310-win32.whl", hash = "sha256:456cb30ca8bff00596519f2c53e42c245c09e1a4543945703acd4312949bfd41"}, + {file = "pyrsistent-0.19.2-cp310-cp310-win_amd64.whl", hash = "sha256:b39725209e06759217d1ac5fcdb510e98670af9e37223985f330b611f62e7425"}, + {file = "pyrsistent-0.19.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2aede922a488861de0ad00c7630a6e2d57e8023e4be72d9d7147a9fcd2d30712"}, + {file = "pyrsistent-0.19.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:879b4c2f4d41585c42df4d7654ddffff1239dc4065bc88b745f0341828b83e78"}, + {file = "pyrsistent-0.19.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c43bec251bbd10e3cb58ced80609c5c1eb238da9ca78b964aea410fb820d00d6"}, + {file = "pyrsistent-0.19.2-cp37-cp37m-win32.whl", hash = "sha256:d690b18ac4b3e3cab73b0b7aa7dbe65978a172ff94970ff98d82f2031f8971c2"}, + {file = "pyrsistent-0.19.2-cp37-cp37m-win_amd64.whl", hash = "sha256:3ba4134a3ff0fc7ad225b6b457d1309f4698108fb6b35532d015dca8f5abed73"}, + {file = "pyrsistent-0.19.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a178209e2df710e3f142cbd05313ba0c5ebed0a55d78d9945ac7a4e09d923308"}, + {file = "pyrsistent-0.19.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e371b844cec09d8dc424d940e54bba8f67a03ebea20ff7b7b0d56f526c71d584"}, + {file = "pyrsistent-0.19.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:111156137b2e71f3a9936baf27cb322e8024dac3dc54ec7fb9f0bcf3249e68bb"}, + {file = "pyrsistent-0.19.2-cp38-cp38-win32.whl", hash = "sha256:e5d8f84d81e3729c3b506657dddfe46e8ba9c330bf1858ee33108f8bb2adb38a"}, + {file = "pyrsistent-0.19.2-cp38-cp38-win_amd64.whl", hash = "sha256:9cd3e9978d12b5d99cbdc727a3022da0430ad007dacf33d0bf554b96427f33ab"}, + {file = "pyrsistent-0.19.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f1258f4e6c42ad0b20f9cfcc3ada5bd6b83374516cd01c0960e3cb75fdca6770"}, + {file = "pyrsistent-0.19.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21455e2b16000440e896ab99e8304617151981ed40c29e9507ef1c2e4314ee95"}, + {file = "pyrsistent-0.19.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bfd880614c6237243ff53a0539f1cb26987a6dc8ac6e66e0c5a40617296a045e"}, + {file = "pyrsistent-0.19.2-cp39-cp39-win32.whl", hash = "sha256:71d332b0320642b3261e9fee47ab9e65872c2bd90260e5d225dabeed93cbd42b"}, + {file = "pyrsistent-0.19.2-cp39-cp39-win_amd64.whl", hash = "sha256:dec3eac7549869365fe263831f576c8457f6c833937c68542d08fde73457d291"}, + {file = "pyrsistent-0.19.2-py3-none-any.whl", hash = "sha256:ea6b79a02a28550c98b6ca9c35b9f492beaa54d7c5c9e9949555893c8a9234d0"}, + {file = "pyrsistent-0.19.2.tar.gz", hash = "sha256:bfa0351be89c9fcbcb8c9879b826f4353be10f58f8a677efab0c017bf7137ec2"}, +] [[package]] name = "pytest" @@ -1910,6 +3293,10 @@ description = "pytest: simple powerful testing with Python" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "pytest-7.2.0-py3-none-any.whl", hash = "sha256:892f933d339f068883b6fd5a459f03d85bfcb355e4981e146d2c7616c21fef71"}, + {file = "pytest-7.2.0.tar.gz", hash = "sha256:c4014eb40e10f11f355ad4e3c2fb2c6c6d1919c73f3b5a433de4708202cade59"}, +] [package.dependencies] attrs = ">=19.2.0" @@ -1930,6 +3317,10 @@ description = "Pytest plugin for measuring coverage." category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "pytest-cov-3.0.0.tar.gz", hash = "sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470"}, + {file = "pytest_cov-3.0.0-py3-none-any.whl", hash = "sha256:578d5d15ac4a25e5f961c938b85a05b09fdaae9deef3bb6de9a6e766622ca7a6"}, +] [package.dependencies] coverage = {version = ">=5.2.1", extras = ["toml"]} @@ -1945,6 +3336,10 @@ description = "run tests in isolated forked subprocesses" category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "pytest-forked-1.4.0.tar.gz", hash = "sha256:8b67587c8f98cbbadfdd804539ed5455b6ed03802203485dd2f53c1422d7440e"}, + {file = "pytest_forked-1.4.0-py3-none-any.whl", hash = "sha256:bbbb6717efc886b9d64537b41fb1497cfaf3c9601276be8da2cccfea5a3c8ad8"}, +] [package.dependencies] py = "*" @@ -1957,6 +3352,10 @@ description = "pytest xdist plugin for distributed testing and loop-on-failing m category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "pytest-xdist-2.5.0.tar.gz", hash = "sha256:4580deca3ff04ddb2ac53eba39d76cb5dd5edeac050cb6fbc768b0dd712b4edf"}, + {file = "pytest_xdist-2.5.0-py3-none-any.whl", hash = "sha256:6fe5c74fec98906deb8f2d2b616b5c782022744978e7bd4695d39c8f42d0ce65"}, +] [package.dependencies] execnet = ">=1.1" @@ -1975,6 +3374,10 @@ 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"}, +] [package.dependencies] six = ">=1.5" @@ -1986,14 +3389,22 @@ description = "A python library adding a json log formatter" category = "main" optional = true python-versions = ">=3.5" +files = [ + {file = "python-json-logger-2.0.4.tar.gz", hash = "sha256:764d762175f99fcc4630bd4853b09632acb60a6224acb27ce08cd70f0b1b81bd"}, + {file = "python_json_logger-2.0.4-py3-none-any.whl", hash = "sha256:3b03487b14eb9e4f77e4fc2a023358b5394b82fd89cecf5586259baed57d8c6f"}, +] [[package]] name = "pytz" -version = "2022.6" +version = "2022.7" description = "World timezone definitions, modern and historical" category = "main" optional = false python-versions = "*" +files = [ + {file = "pytz-2022.7-py2.py3-none-any.whl", hash = "sha256:93007def75ae22f7cd991c84e02d434876818661f8df9ad5df9e950ff4e52cfd"}, + {file = "pytz-2022.7.tar.gz", hash = "sha256:7ccfae7b4b2c067464a6733c6261673fdb8fd1be905460396b97a073e9fa683a"}, +] [[package]] name = "pywin32" @@ -2002,6 +3413,22 @@ description = "Python for Window Extensions" category = "main" optional = true python-versions = "*" +files = [ + {file = "pywin32-305-cp310-cp310-win32.whl", hash = "sha256:421f6cd86e84bbb696d54563c48014b12a23ef95a14e0bdba526be756d89f116"}, + {file = "pywin32-305-cp310-cp310-win_amd64.whl", hash = "sha256:73e819c6bed89f44ff1d690498c0a811948f73777e5f97c494c152b850fad478"}, + {file = "pywin32-305-cp310-cp310-win_arm64.whl", hash = "sha256:742eb905ce2187133a29365b428e6c3b9001d79accdc30aa8969afba1d8470f4"}, + {file = "pywin32-305-cp311-cp311-win32.whl", hash = "sha256:19ca459cd2e66c0e2cc9a09d589f71d827f26d47fe4a9d09175f6aa0256b51c2"}, + {file = "pywin32-305-cp311-cp311-win_amd64.whl", hash = "sha256:326f42ab4cfff56e77e3e595aeaf6c216712bbdd91e464d167c6434b28d65990"}, + {file = "pywin32-305-cp311-cp311-win_arm64.whl", hash = "sha256:4ecd404b2c6eceaca52f8b2e3e91b2187850a1ad3f8b746d0796a98b4cea04db"}, + {file = "pywin32-305-cp36-cp36m-win32.whl", hash = "sha256:48d8b1659284f3c17b68587af047d110d8c44837736b8932c034091683e05863"}, + {file = "pywin32-305-cp36-cp36m-win_amd64.whl", hash = "sha256:13362cc5aa93c2beaf489c9c9017c793722aeb56d3e5166dadd5ef82da021fe1"}, + {file = "pywin32-305-cp37-cp37m-win32.whl", hash = "sha256:a55db448124d1c1484df22fa8bbcbc45c64da5e6eae74ab095b9ea62e6d00496"}, + {file = "pywin32-305-cp37-cp37m-win_amd64.whl", hash = "sha256:109f98980bfb27e78f4df8a51a8198e10b0f347257d1e265bb1a32993d0c973d"}, + {file = "pywin32-305-cp38-cp38-win32.whl", hash = "sha256:9dd98384da775afa009bc04863426cb30596fd78c6f8e4e2e5bbf4edf8029504"}, + {file = "pywin32-305-cp38-cp38-win_amd64.whl", hash = "sha256:56d7a9c6e1a6835f521788f53b5af7912090674bb84ef5611663ee1595860fc7"}, + {file = "pywin32-305-cp39-cp39-win32.whl", hash = "sha256:9d968c677ac4d5cbdaa62fd3014ab241718e619d8e36ef8e11fb930515a1e918"}, + {file = "pywin32-305-cp39-cp39-win_amd64.whl", hash = "sha256:50768c6b7c3f0b38b7fb14dd4104da93ebced5f1a50dc0e834594bff6fbe1271"}, +] [[package]] name = "pywinpty" @@ -2010,14 +3437,64 @@ description = "Pseudo terminal support for Windows from Python." category = "main" optional = true python-versions = ">=3.7" +files = [ + {file = "pywinpty-2.0.9-cp310-none-win_amd64.whl", hash = "sha256:30a7b371446a694a6ce5ef906d70ac04e569de5308c42a2bdc9c3bc9275ec51f"}, + {file = "pywinpty-2.0.9-cp311-none-win_amd64.whl", hash = "sha256:d78ef6f4bd7a6c6f94dc1a39ba8fb028540cc39f5cb593e756506db17843125f"}, + {file = "pywinpty-2.0.9-cp37-none-win_amd64.whl", hash = "sha256:5ed36aa087e35a3a183f833631b3e4c1ae92fe2faabfce0fa91b77ed3f0f1382"}, + {file = "pywinpty-2.0.9-cp38-none-win_amd64.whl", hash = "sha256:2352f44ee913faaec0a02d3c112595e56b8af7feeb8100efc6dc1a8685044199"}, + {file = "pywinpty-2.0.9-cp39-none-win_amd64.whl", hash = "sha256:ba75ec55f46c9e17db961d26485b033deb20758b1731e8e208e1e8a387fcf70c"}, + {file = "pywinpty-2.0.9.tar.gz", hash = "sha256:01b6400dd79212f50a2f01af1c65b781290ff39610853db99bf03962eb9a615f"}, +] [[package]] -name = "PyYAML" +name = "pyyaml" version = "6.0" description = "YAML parser and emitter for Python" category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, + {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, + {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, + {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, + {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, + {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, + {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, + {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, + {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, + {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, + {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, + {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, + {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, + {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, + {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, + {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, + {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, + {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, +] [[package]] name = "pyzmq" @@ -2026,6 +3503,82 @@ description = "Python bindings for 0MQ" category = "main" optional = true python-versions = ">=3.6" +files = [ + {file = "pyzmq-24.0.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:28b119ba97129d3001673a697b7cce47fe6de1f7255d104c2f01108a5179a066"}, + {file = "pyzmq-24.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bcbebd369493d68162cddb74a9c1fcebd139dfbb7ddb23d8f8e43e6c87bac3a6"}, + {file = "pyzmq-24.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae61446166983c663cee42c852ed63899e43e484abf080089f771df4b9d272ef"}, + {file = "pyzmq-24.0.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:87f7ac99b15270db8d53f28c3c7b968612993a90a5cf359da354efe96f5372b4"}, + {file = "pyzmq-24.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9dca7c3956b03b7663fac4d150f5e6d4f6f38b2462c1e9afd83bcf7019f17913"}, + {file = "pyzmq-24.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8c78bfe20d4c890cb5580a3b9290f700c570e167d4cdcc55feec07030297a5e3"}, + {file = "pyzmq-24.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:48f721f070726cd2a6e44f3c33f8ee4b24188e4b816e6dd8ba542c8c3bb5b246"}, + {file = "pyzmq-24.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:afe1f3bc486d0ce40abb0a0c9adb39aed3bbac36ebdc596487b0cceba55c21c1"}, + {file = "pyzmq-24.0.1-cp310-cp310-win32.whl", hash = "sha256:3e6192dbcefaaa52ed81be88525a54a445f4b4fe2fffcae7fe40ebb58bd06bfd"}, + {file = "pyzmq-24.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:86de64468cad9c6d269f32a6390e210ca5ada568c7a55de8e681ca3b897bb340"}, + {file = "pyzmq-24.0.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:838812c65ed5f7c2bd11f7b098d2e5d01685a3f6d1f82849423b570bae698c00"}, + {file = "pyzmq-24.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dfb992dbcd88d8254471760879d48fb20836d91baa90f181c957122f9592b3dc"}, + {file = "pyzmq-24.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7abddb2bd5489d30ffeb4b93a428130886c171b4d355ccd226e83254fcb6b9ef"}, + {file = "pyzmq-24.0.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:94010bd61bc168c103a5b3b0f56ed3b616688192db7cd5b1d626e49f28ff51b3"}, + {file = "pyzmq-24.0.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:8242543c522d84d033fe79be04cb559b80d7eb98ad81b137ff7e0a9020f00ace"}, + {file = "pyzmq-24.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ccb94342d13e3bf3ffa6e62f95b5e3f0bc6bfa94558cb37f4b3d09d6feb536ff"}, + {file = "pyzmq-24.0.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6640f83df0ae4ae1104d4c62b77e9ef39be85ebe53f636388707d532bee2b7b8"}, + {file = "pyzmq-24.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a180dbd5ea5d47c2d3b716d5c19cc3fb162d1c8db93b21a1295d69585bfddac1"}, + {file = "pyzmq-24.0.1-cp311-cp311-win32.whl", hash = "sha256:624321120f7e60336be8ec74a172ae7fba5c3ed5bf787cc85f7e9986c9e0ebc2"}, + {file = "pyzmq-24.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:1724117bae69e091309ffb8255412c4651d3f6355560d9af312d547f6c5bc8b8"}, + {file = "pyzmq-24.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:15975747462ec49fdc863af906bab87c43b2491403ab37a6d88410635786b0f4"}, + {file = "pyzmq-24.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b947e264f0e77d30dcbccbb00f49f900b204b922eb0c3a9f0afd61aaa1cedc3d"}, + {file = "pyzmq-24.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0ec91f1bad66f3ee8c6deb65fa1fe418e8ad803efedd69c35f3b5502f43bd1dc"}, + {file = "pyzmq-24.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:db03704b3506455d86ec72c3358a779e9b1d07b61220dfb43702b7b668edcd0d"}, + {file = "pyzmq-24.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:e7e66b4e403c2836ac74f26c4b65d8ac0ca1eef41dfcac2d013b7482befaad83"}, + {file = "pyzmq-24.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:7a23ccc1083c260fa9685c93e3b170baba45aeed4b524deb3f426b0c40c11639"}, + {file = "pyzmq-24.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:fa0ae3275ef706c0309556061185dd0e4c4cd3b7d6f67ae617e4e677c7a41e2e"}, + {file = "pyzmq-24.0.1-cp36-cp36m-win32.whl", hash = "sha256:f01de4ec083daebf210531e2cca3bdb1608dbbbe00a9723e261d92087a1f6ebc"}, + {file = "pyzmq-24.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:de4217b9eb8b541cf2b7fde4401ce9d9a411cc0af85d410f9d6f4333f43640be"}, + {file = "pyzmq-24.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:78068e8678ca023594e4a0ab558905c1033b2d3e806a0ad9e3094e231e115a33"}, + {file = "pyzmq-24.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77c2713faf25a953c69cf0f723d1b7dd83827b0834e6c41e3fb3bbc6765914a1"}, + {file = "pyzmq-24.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8bb4af15f305056e95ca1bd086239b9ebc6ad55e9f49076d27d80027f72752f6"}, + {file = "pyzmq-24.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0f14cffd32e9c4c73da66db97853a6aeceaac34acdc0fae9e5bbc9370281864c"}, + {file = "pyzmq-24.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0108358dab8c6b27ff6b985c2af4b12665c1bc659648284153ee501000f5c107"}, + {file = "pyzmq-24.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:d66689e840e75221b0b290b0befa86f059fb35e1ee6443bce51516d4d61b6b99"}, + {file = "pyzmq-24.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ae08ac90aa8fa14caafc7a6251bd218bf6dac518b7bff09caaa5e781119ba3f2"}, + {file = "pyzmq-24.0.1-cp37-cp37m-win32.whl", hash = "sha256:8421aa8c9b45ea608c205db9e1c0c855c7e54d0e9c2c2f337ce024f6843cab3b"}, + {file = "pyzmq-24.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:54d8b9c5e288362ec8595c1d98666d36f2070fd0c2f76e2b3c60fbad9bd76227"}, + {file = "pyzmq-24.0.1-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:acbd0a6d61cc954b9f535daaa9ec26b0a60a0d4353c5f7c1438ebc88a359a47e"}, + {file = "pyzmq-24.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:47b11a729d61a47df56346283a4a800fa379ae6a85870d5a2e1e4956c828eedc"}, + {file = "pyzmq-24.0.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:abe6eb10122f0d746a0d510c2039ae8edb27bc9af29f6d1b05a66cc2401353ff"}, + {file = "pyzmq-24.0.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:07bec1a1b22dacf718f2c0e71b49600bb6a31a88f06527dfd0b5aababe3fa3f7"}, + {file = "pyzmq-24.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0d945a85b70da97ae86113faf9f1b9294efe66bd4a5d6f82f2676d567338b66"}, + {file = "pyzmq-24.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1b7928bb7580736ffac5baf814097be342ba08d3cfdfb48e52773ec959572287"}, + {file = "pyzmq-24.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b946da90dc2799bcafa682692c1d2139b2a96ec3c24fa9fc6f5b0da782675330"}, + {file = "pyzmq-24.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c8840f064b1fb377cffd3efeaad2b190c14d4c8da02316dae07571252d20b31f"}, + {file = "pyzmq-24.0.1-cp38-cp38-win32.whl", hash = "sha256:4854f9edc5208f63f0841c0c667260ae8d6846cfa233c479e29fdc85d42ebd58"}, + {file = "pyzmq-24.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:42d4f97b9795a7aafa152a36fe2ad44549b83a743fd3e77011136def512e6c2a"}, + {file = "pyzmq-24.0.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:52afb0ac962963fff30cf1be775bc51ae083ef4c1e354266ab20e5382057dd62"}, + {file = "pyzmq-24.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bad8210ad4df68c44ff3685cca3cda448ee46e20d13edcff8909eba6ec01ca4"}, + {file = "pyzmq-24.0.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:dabf1a05318d95b1537fd61d9330ef4313ea1216eea128a17615038859da3b3b"}, + {file = "pyzmq-24.0.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5bd3d7dfd9cd058eb68d9a905dec854f86649f64d4ddf21f3ec289341386c44b"}, + {file = "pyzmq-24.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8012bce6836d3f20a6c9599f81dfa945f433dab4dbd0c4917a6fb1f998ab33d"}, + {file = "pyzmq-24.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c31805d2c8ade9b11feca4674eee2b9cce1fec3e8ddb7bbdd961a09dc76a80ea"}, + {file = "pyzmq-24.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:3104f4b084ad5d9c0cb87445cc8cfd96bba710bef4a66c2674910127044df209"}, + {file = "pyzmq-24.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:df0841f94928f8af9c7a1f0aaaffba1fb74607af023a152f59379c01c53aee58"}, + {file = "pyzmq-24.0.1-cp39-cp39-win32.whl", hash = "sha256:a435ef8a3bd95c8a2d316d6e0ff70d0db524f6037411652803e118871d703333"}, + {file = "pyzmq-24.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:2032d9cb994ce3b4cba2b8dfae08c7e25bc14ba484c770d4d3be33c27de8c45b"}, + {file = "pyzmq-24.0.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bb5635c851eef3a7a54becde6da99485eecf7d068bd885ac8e6d173c4ecd68b0"}, + {file = "pyzmq-24.0.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:83ea1a398f192957cb986d9206ce229efe0ee75e3c6635baff53ddf39bd718d5"}, + {file = "pyzmq-24.0.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:941fab0073f0a54dc33d1a0460cb04e0d85893cb0c5e1476c785000f8b359409"}, + {file = "pyzmq-24.0.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e8f482c44ccb5884bf3f638f29bea0f8dc68c97e38b2061769c4cb697f6140d"}, + {file = "pyzmq-24.0.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:613010b5d17906c4367609e6f52e9a2595e35d5cc27d36ff3f1b6fa6e954d944"}, + {file = "pyzmq-24.0.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:65c94410b5a8355cfcf12fd600a313efee46ce96a09e911ea92cf2acf6708804"}, + {file = "pyzmq-24.0.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:20e7eeb1166087db636c06cae04a1ef59298627f56fb17da10528ab52a14c87f"}, + {file = "pyzmq-24.0.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a2712aee7b3834ace51738c15d9ee152cc5a98dc7d57dd93300461b792ab7b43"}, + {file = "pyzmq-24.0.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a7c280185c4da99e0cc06c63bdf91f5b0b71deb70d8717f0ab870a43e376db8"}, + {file = "pyzmq-24.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:858375573c9225cc8e5b49bfac846a77b696b8d5e815711b8d4ba3141e6e8879"}, + {file = "pyzmq-24.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:80093b595921eed1a2cead546a683b9e2ae7f4a4592bb2ab22f70d30174f003a"}, + {file = "pyzmq-24.0.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f3f3154fde2b1ff3aa7b4f9326347ebc89c8ef425ca1db8f665175e6d3bd42f"}, + {file = "pyzmq-24.0.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abb756147314430bee5d10919b8493c0ccb109ddb7f5dfd2fcd7441266a25b75"}, + {file = "pyzmq-24.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44e706bac34e9f50779cb8c39f10b53a4d15aebb97235643d3112ac20bd577b4"}, + {file = "pyzmq-24.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:687700f8371643916a1d2c61f3fdaa630407dd205c38afff936545d7b7466066"}, + {file = "pyzmq-24.0.1.tar.gz", hash = "sha256:216f5d7dbb67166759e59b0479bca82b8acf9bed6015b526b8eb10143fb08e77"}, +] [package.dependencies] cffi = {version = "*", markers = "implementation_name == \"pypy\""} @@ -2038,6 +3591,10 @@ description = "A docutils-compatibility bridge to CommonMark, enabling you to wr category = "dev" optional = false python-versions = "*" +files = [ + {file = "recommonmark-0.7.1-py2.py3-none-any.whl", hash = "sha256:1b1db69af0231efce3fa21b94ff627ea33dee7079a01dd0a7f8482c3da148b3f"}, + {file = "recommonmark-0.7.1.tar.gz", hash = "sha256:bdb4db649f2222dcd8d2d844f0006b958d627f732415d399791ee436a3686d67"}, +] [package.dependencies] commonmark = ">=0.8.1" @@ -2051,6 +3608,10 @@ description = "Python HTTP for Humans." category = "main" optional = false python-versions = ">=3.7, <4" +files = [ + {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"}, + {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"}, +] [package.dependencies] certifi = ">=2017.4.17" @@ -2060,7 +3621,7 @@ urllib3 = ">=1.21.1,<1.27" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "restructuredtext-lint" @@ -2069,6 +3630,9 @@ description = "reStructuredText linter" category = "dev" optional = false python-versions = "*" +files = [ + {file = "restructuredtext_lint-1.4.0.tar.gz", hash = "sha256:1b235c0c922341ab6c530390892eb9e92f90b9b75046063e047cacfb0f050c45"}, +] [package.dependencies] docutils = ">=0.11,<1.0" @@ -2080,6 +3644,10 @@ 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 = [ + {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, + {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, +] [package.dependencies] six = "*" @@ -2091,6 +3659,10 @@ description = "Pure python rfc3986 validator" category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"}, + {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"}, +] [[package]] name = "rich" @@ -2099,6 +3671,10 @@ description = "Render rich text, tables, progress bars, syntax highlighting, mar category = "main" optional = false python-versions = ">=3.6.3,<4.0.0" +files = [ + {file = "rich-12.6.0-py3-none-any.whl", hash = "sha256:a4eb26484f2c82589bd9a17c73d32a010b1e29d89f1604cd9bf3a2097b81bb5e"}, + {file = "rich-12.6.0.tar.gz", hash = "sha256:ba3a3775974105c221d31141f2c116f4fd65c5ceb0698657a11e9f295ec93fd0"}, +] [package.dependencies] commonmark = ">=0.9.0,<0.10.0" @@ -2115,34 +3691,65 @@ description = "Fundamental algorithms for scientific computing in Python" category = "main" optional = false python-versions = ">=3.8" - -[package.dependencies] -numpy = ">=1.18.5,<1.26.0" - -[package.extras] -dev = ["flake8", "mypy", "pycodestyle", "typing_extensions"] -doc = ["matplotlib (>2)", "numpydoc", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-panels (>=0.5.2)", "sphinx-tabs"] -test = ["asv", "gmpy2", "mpmath", "pytest", "pytest-cov", "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" - -[package.dependencies] -Cython = {version = "*", markers = "sys_platform == \"darwin\""} -pyobjc-framework-Cocoa = {version = "*", markers = "sys_platform == \"darwin\""} +files = [ + {file = "scipy-1.9.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1884b66a54887e21addf9c16fb588720a8309a57b2e258ae1c7986d4444d3bc0"}, + {file = "scipy-1.9.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:83b89e9586c62e787f5012e8475fbb12185bafb996a03257e9675cd73d3736dd"}, + {file = "scipy-1.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a72d885fa44247f92743fc20732ae55564ff2a519e8302fb7e18717c5355a8b"}, + {file = "scipy-1.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d01e1dd7b15bd2449c8bfc6b7cc67d630700ed655654f0dfcf121600bad205c9"}, + {file = "scipy-1.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:68239b6aa6f9c593da8be1509a05cb7f9efe98b80f43a5861cd24c7557e98523"}, + {file = "scipy-1.9.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b41bc822679ad1c9a5f023bc93f6d0543129ca0f37c1ce294dd9d386f0a21096"}, + {file = "scipy-1.9.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:90453d2b93ea82a9f434e4e1cba043e779ff67b92f7a0e85d05d286a3625df3c"}, + {file = "scipy-1.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83c06e62a390a9167da60bedd4575a14c1f58ca9dfde59830fc42e5197283dab"}, + {file = "scipy-1.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abaf921531b5aeaafced90157db505e10345e45038c39e5d9b6c7922d68085cb"}, + {file = "scipy-1.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:06d2e1b4c491dc7d8eacea139a1b0b295f74e1a1a0f704c375028f8320d16e31"}, + {file = "scipy-1.9.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5a04cd7d0d3eff6ea4719371cbc44df31411862b9646db617c99718ff68d4840"}, + {file = "scipy-1.9.3-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:545c83ffb518094d8c9d83cce216c0c32f8c04aaf28b92cc8283eda0685162d5"}, + {file = "scipy-1.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d54222d7a3ba6022fdf5773931b5d7c56efe41ede7f7128c7b1637700409108"}, + {file = "scipy-1.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cff3a5295234037e39500d35316a4c5794739433528310e117b8a9a0c76d20fc"}, + {file = "scipy-1.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:2318bef588acc7a574f5bfdff9c172d0b1bf2c8143d9582e05f878e580a3781e"}, + {file = "scipy-1.9.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d644a64e174c16cb4b2e41dfea6af722053e83d066da7343f333a54dae9bc31c"}, + {file = "scipy-1.9.3-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:da8245491d73ed0a994ed9c2e380fd058ce2fa8a18da204681f2fe1f57f98f95"}, + {file = "scipy-1.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4db5b30849606a95dcf519763dd3ab6fe9bd91df49eba517359e450a7d80ce2e"}, + {file = "scipy-1.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c68db6b290cbd4049012990d7fe71a2abd9ffbe82c0056ebe0f01df8be5436b0"}, + {file = "scipy-1.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:5b88e6d91ad9d59478fafe92a7c757d00c59e3bdc3331be8ada76a4f8d683f58"}, + {file = "scipy-1.9.3.tar.gz", hash = "sha256:fbc5c05c85c1a02be77b1ff591087c83bc44579c6d2bd9fb798bb64ea5e1a027"}, +] + +[package.dependencies] +numpy = ">=1.18.5,<1.26.0" + +[package.extras] +dev = ["flake8", "mypy", "pycodestyle", "typing_extensions"] +doc = ["matplotlib (>2)", "numpydoc", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-panels (>=0.5.2)", "sphinx-tabs"] +test = ["asv", "gmpy2", "mpmath", "pytest", "pytest-cov", "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 = [ + {file = "screeninfo-0.8.1-py3-none-any.whl", hash = "sha256:e97d6b173856edcfa3bd282f81deb528188aff14b11ec3e195584e7641be733c"}, + {file = "screeninfo-0.8.1.tar.gz", hash = "sha256:9983076bcc7e34402a1a9e4d7dabf3729411fd2abb3f3b4be7eba73519cd2ed1"}, +] + +[package.dependencies] +Cython = {version = "*", markers = "sys_platform == \"darwin\""} +pyobjc-framework-Cocoa = {version = "*", markers = "sys_platform == \"darwin\""} [[package]] -name = "Send2Trash" +name = "send2trash" version = "1.8.0" description = "Send file to trash natively under Mac OS X, Windows and Linux." category = "main" optional = true python-versions = "*" +files = [ + {file = "Send2Trash-1.8.0-py3-none-any.whl", hash = "sha256:f20eaadfdb517eaca5ce077640cb261c7d2698385a6a0f072a4a5447fd49fa08"}, + {file = "Send2Trash-1.8.0.tar.gz", hash = "sha256:d2c24762fd3759860a0aff155e45871447ea58d2be6bdd39b5c8f966a0c99c2d"}, +] [package.extras] nativelib = ["pyobjc-framework-Cocoa", "pywin32"] @@ -2156,30 +3763,16 @@ description = "Easily download, build, install, upgrade, and uninstall Python pa category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "setuptools-65.6.3-py3-none-any.whl", hash = "sha256:57f6f22bde4e042978bcd50176fdb381d7c21a9efa4041202288d3737a0c6a54"}, + {file = "setuptools-65.6.3.tar.gz", hash = "sha256:a7620757bf984b58deaf32fc8a4577a9bbc0850cf92c20e1ce41c38c19e5fb75"}, +] [package.extras] docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] -[[package]] -name = "setuptools-scm" -version = "7.0.5" -description = "the blessed package to manage your versions by scm tags" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -packaging = ">=20.0" -setuptools = "*" -tomli = ">=1.0.0" -typing-extensions = "*" - -[package.extras] -test = ["pytest (>=6.2)", "virtualenv (>20)"] -toml = ["setuptools (>=42)"] - [[package]] name = "six" version = "1.16.0" @@ -2187,6 +3780,10 @@ description = "Python 2 and 3 compatibility utilities" category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] [[package]] name = "skia-pathops" @@ -2195,6 +3792,51 @@ description = "Python access to operations on paths using the Skia library" category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "skia-pathops-0.7.4.zip", hash = "sha256:0a2fdee87b7adb018cbfa6e95ef9e4299ed63b0080be27677a30ffefbca91350"}, + {file = "skia_pathops-0.7.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1301f3c0d7656a38208098bd37a7365a5325e09d59f1875fc99738116b0bc924"}, + {file = "skia_pathops-0.7.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:19288f9128d46be2960739242aedb1be618a618350c6d8e006b3c619449e6464"}, + {file = "skia_pathops-0.7.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a4d324b4d3c3863536f0922a18d61d7c3567acd88c69109b5fb79f60f532de5"}, + {file = "skia_pathops-0.7.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f35e2ea1a43f44ccaab75dd5c782510f79f3bd478fa404a4907597ab9d5d379"}, + {file = "skia_pathops-0.7.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3a7107d11947249fa6af3996e123442bfc6893dd81565fadca023f0d9f977694"}, + {file = "skia_pathops-0.7.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a5fa30b7bc525db188672f0360e633fbc14be8f1b975b2f9a105173b212c0794"}, + {file = "skia_pathops-0.7.4-cp310-cp310-win32.whl", hash = "sha256:2367a8179d823d3c3c5ccf9e889d8a96890245f31f2bbfdc16824263f7e4d2e2"}, + {file = "skia_pathops-0.7.4-cp310-cp310-win_amd64.whl", hash = "sha256:487a3d8289a31f565fb34988155797150dabe7434cfea0006ce99337f4422666"}, + {file = "skia_pathops-0.7.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6b3e4c5aa986ece9f9c89f55c4c2c43b60859697602993055ac3ef75784bf996"}, + {file = "skia_pathops-0.7.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c1e55be8e0de805751515fb5d707c5fe3daab73c218b30134e8c05ba104746ef"}, + {file = "skia_pathops-0.7.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c823bf270c0869ee712647a0cf03b6aeb39669211dcc44a5a3c039075fc04f3"}, + {file = "skia_pathops-0.7.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:003119e9a5f24395f134c8223c5fbc9baddecd1002ee0814287cd78a52477655"}, + {file = "skia_pathops-0.7.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ab0fbbd008d586cfbc98fc2b5ce45f70dab6090a787f65292d40acd43644f6d0"}, + {file = "skia_pathops-0.7.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5aa500bd39e28cdd043f8c9edcbc793a86f557c26dc3698f0981080bfec0dd67"}, + {file = "skia_pathops-0.7.4-cp311-cp311-win32.whl", hash = "sha256:5c18a6e749389885cd6a18bd06a29bd945ad8b962f81ce3761bf0b85127ffa1a"}, + {file = "skia_pathops-0.7.4-cp311-cp311-win_amd64.whl", hash = "sha256:82fbef52409db9ccad07c0504ba692f9bc0e58095f4aeb7cd35ce1d06205781a"}, + {file = "skia_pathops-0.7.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f901bf5e43caa16a783abf3cd2d595dfdfbb9a93348a452a5d9c1e143885d09a"}, + {file = "skia_pathops-0.7.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:308cdf420138a7f34680e3c6e07314d335bf1796365dbbfc807c73b503d39b0e"}, + {file = "skia_pathops-0.7.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a8097c2ce9d7ea4fc0586466e62ae5bc106f7d929b61b70ad8246e104cdba67"}, + {file = "skia_pathops-0.7.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f2601a831638fe511f67ee25ef25c43724f7b3abbb2cae50d0d86d4546176c41"}, + {file = "skia_pathops-0.7.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e05be6fc8937972beb071e7d5651ed7108aa6761b02d4ae4baaefdeb4b8d3649"}, + {file = "skia_pathops-0.7.4-cp37-cp37m-win32.whl", hash = "sha256:48b6f55117c56de80cb3d986497f1556a56823cebc9be648f2bcccfa0b869a99"}, + {file = "skia_pathops-0.7.4-cp37-cp37m-win_amd64.whl", hash = "sha256:486cb9e5bcd7801450af4188d84c12a7fa8a37f6f0a05c71f917bd429deafda5"}, + {file = "skia_pathops-0.7.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:74bda285e6fb4d891f24d8937479a57d29b38e69dcb735d515c63cd911cafb24"}, + {file = "skia_pathops-0.7.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ee23c6f3db16f5b2b5fc8e805d57570613fa75febe3d21fb819897fa54f82081"}, + {file = "skia_pathops-0.7.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88eeaa7b4d1d86364bc63c5d88522c40113df24f1abc7be34edd22d7b137d4c6"}, + {file = "skia_pathops-0.7.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c09c8af59ae8a7bc883342c29c062a6032a7558fd31f7b852db5a4fb0d5c0545"}, + {file = "skia_pathops-0.7.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:fe58f22bc1f37af1829e38f4867bc81346272953f764bac68c05efc88bd2fbef"}, + {file = "skia_pathops-0.7.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2f0fbccd30d6778bfec3d69d28947d80432eed55a45fcbc1584331b00da4caf1"}, + {file = "skia_pathops-0.7.4-cp38-cp38-win32.whl", hash = "sha256:84f8006a3049ba4ff17d44b4bcd8b050ac8fc6630a36d56435c1ce9e8e5500a2"}, + {file = "skia_pathops-0.7.4-cp38-cp38-win_amd64.whl", hash = "sha256:be2b601133a1e7346c9ecc791ca06e37d05ed89a425d0388a5dab04863689a5b"}, + {file = "skia_pathops-0.7.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8b1e0683ab485ed9ab42dd264f30c137efa3c308727b1931dc52073a77cd1029"}, + {file = "skia_pathops-0.7.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e8fde29c64cae35d3c44586cadfae0c09f4eeb2d428ebc45de2fe5c3de3a4f07"}, + {file = "skia_pathops-0.7.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b555157958a785f63744f77b7a3cd6a99a2df8bfcc43bc80fa6332d777eff84a"}, + {file = "skia_pathops-0.7.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9aa3dfb7349f78cef20cf7b1eb0ab2393aab26d403a958f5821c18d9357f3938"}, + {file = "skia_pathops-0.7.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a868cb5e943fc90e8de4f987f890004e01de238dafaec265daa684eae0af42b6"}, + {file = "skia_pathops-0.7.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:608408ac31c5eb187dae10ad29986be16a1d179ca734264b454aca1d46c2cc4b"}, + {file = "skia_pathops-0.7.4-cp39-cp39-win32.whl", hash = "sha256:4da2d43512b07ba913ab2f3f0f64f80590b366c3aca3a3f35605568c9997a9ad"}, + {file = "skia_pathops-0.7.4-cp39-cp39-win_amd64.whl", hash = "sha256:8e701fa2c0535d428e93b145c7be0a0c41b8ec9a203256c378e66d8052d0e29d"}, + {file = "skia_pathops-0.7.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36f8eaa534d6e38e788fec9157efb11093d5de2c1cfec0d350c3e1af097a043d"}, + {file = "skia_pathops-0.7.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f63cfc73dc1f20e5ef5bdd766022c70491e2ab73c8d6b3cc1f8ca2c28c9114d7"}, + {file = "skia_pathops-0.7.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d47d48192241688609f2194273d89266bcd18c45426af417991634fc811bf37"}, +] [package.extras] testing = ["coverage", "pytest", "pytest-randomly", "pytest-xdist"] @@ -2206,6 +3848,10 @@ description = "A pure Python implementation of a sliding window memory map manag category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"}, + {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, +] [[package]] name = "sniffio" @@ -2214,6 +3860,10 @@ 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"}, +] [[package]] name = "snowballstemmer" @@ -2222,6 +3872,10 @@ description = "This package provides 29 stemmers for 28 languages generated from category = "dev" optional = false python-versions = "*" +files = [ + {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, + {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, +] [[package]] name = "soupsieve" @@ -2230,14 +3884,22 @@ description = "A modern CSS selector implementation for Beautiful Soup." category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "soupsieve-2.3.2.post1-py3-none-any.whl", hash = "sha256:3b2503d3c7084a42b1ebd08116e5f81aadfaea95863628c80a3b774a11b7c759"}, + {file = "soupsieve-2.3.2.post1.tar.gz", hash = "sha256:fc53893b3da2c33de295667a0e19f078c14bf86544af307354de5fcf12a3f30d"}, +] [[package]] -name = "Sphinx" +name = "sphinx" version = "4.5.0" description = "Python documentation generator" category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "Sphinx-4.5.0-py3-none-any.whl", hash = "sha256:ebf612653238bcc8f4359627a9b7ce44ede6fdd75d9d30f68255c7383d3a6226"}, + {file = "Sphinx-4.5.0.tar.gz", hash = "sha256:7bf8ca9637a4ee15af412d1a1d9689fec70523a68ca9bb9127c2f3eeb344e2e6"}, +] [package.dependencies] alabaster = ">=0.7,<0.8" @@ -2270,6 +3932,10 @@ description = "A modern skeleton for Sphinx themes." category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "sphinx_basic_ng-1.0.0b1-py3-none-any.whl", hash = "sha256:ade597a3029c7865b24ad0eda88318766bcc2f9f4cef60df7e28126fde94db2a"}, + {file = "sphinx_basic_ng-1.0.0b1.tar.gz", hash = "sha256:89374bd3ccd9452a301786781e28c8718e99960f2d4f411845ea75fc7bb5a9b0"}, +] [package.dependencies] sphinx = ">=4.0" @@ -2284,12 +3950,16 @@ description = "Add a copy button to each of your code cells." category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "sphinx-copybutton-0.4.0.tar.gz", hash = "sha256:8daed13a87afd5013c3a9af3575cc4d5bec052075ccd3db243f895c07a689386"}, + {file = "sphinx_copybutton-0.4.0-py3-none-any.whl", hash = "sha256:4340d33c169dac6dd82dce2c83333412aa786a42dd01a81a8decac3b130dc8b0"}, +] [package.dependencies] sphinx = ">=1.8" [package.extras] -code_style = ["pre-commit (==2.12.1)"] +code-style = ["pre-commit (==2.12.1)"] rtd = ["ipython", "sphinx", "sphinx-book-theme"] [[package]] @@ -2299,6 +3969,10 @@ description = "sphinxcontrib-applehelp is a sphinx extension which outputs Apple category = "dev" optional = false python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, + {file = "sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a"}, +] [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] @@ -2311,6 +3985,10 @@ description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp category = "dev" optional = false python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, + {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, +] [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] @@ -2323,6 +4001,10 @@ description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML h category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, + {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, +] [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] @@ -2335,6 +4017,10 @@ description = "A sphinx extension which renders display math in HTML via JavaScr category = "dev" optional = false python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, + {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, +] [package.extras] test = ["flake8", "mypy", "pytest"] @@ -2346,6 +4032,10 @@ 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 = [ + {file = "sphinxcontrib-programoutput-0.17.tar.gz", hash = "sha256:300ee9b8caee8355d25cc74b4d1c7efd12e608d2ad165e3141d31e6fbc152b7f"}, + {file = "sphinxcontrib_programoutput-0.17-py2.py3-none-any.whl", hash = "sha256:0ef1c1d9159dbe7103077748214305eb4e0138e861feb71c0c346afc5fe97f84"}, +] [package.dependencies] Sphinx = ">=1.7.0" @@ -2357,6 +4047,10 @@ description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp d category = "dev" optional = false python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, + {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, +] [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] @@ -2369,6 +4063,10 @@ description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs category = "dev" optional = false python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, + {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, +] [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] @@ -2381,6 +4079,10 @@ description = "Sphinx Extension to enable OGP support" category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "sphinxext-opengraph-0.5.1.tar.gz", hash = "sha256:78675a8a490c749a881892abc4f28ac3a2e8e65b066fe346fa7da882290906a5"}, + {file = "sphinxext_opengraph-0.5.1-py3-none-any.whl", hash = "sha256:3fd0df576ae11e55c710653413edd7c05db65a4fbf985d536127c5ac06f5d2cb"}, +] [package.dependencies] sphinx = ">=2.0" @@ -2392,6 +4094,9 @@ description = "A tiny library for parsing, modifying, and composing SRT files." category = "main" optional = false python-versions = ">=2.7" +files = [ + {file = "srt-3.5.2.tar.gz", hash = "sha256:7aa4ad5ce4126d3f53b3e7bc4edaa86653d0378bf1c0b1ab8c59f5ab41384450"}, +] [[package]] name = "stack-data" @@ -2400,6 +4105,10 @@ description = "Extract data from python stack frames and tracebacks for informat category = "main" optional = true python-versions = "*" +files = [ + {file = "stack_data-0.6.2-py3-none-any.whl", hash = "sha256:cbb2a53eb64e5785878201a97ed7c7b94883f48b87bfb0bbe8b623c74679e4a8"}, + {file = "stack_data-0.6.2.tar.gz", hash = "sha256:32d2dd0376772d01b6cb9fc996f3c8b57a357089dec328ed4b6553d037eaf815"}, +] [package.dependencies] asttokens = ">=2.1.0" @@ -2411,11 +4120,15 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] [[package]] name = "svgelements" -version = "1.8.4" +version = "1.9.0" description = "Svg Elements Parsing" category = "main" optional = false python-versions = "*" +files = [ + {file = "svgelements-1.9.0-py2.py3-none-any.whl", hash = "sha256:9e0181245bfbad78c600616dadb4a98b380be991dafe92fb325b7f55daec5fdf"}, + {file = "svgelements-1.9.0.tar.gz", hash = "sha256:21ce32f188d7968da07f585d88141c0cd8638049a68813d69c7eb941fa09fad6"}, +] [[package]] name = "terminado" @@ -2424,6 +4137,10 @@ description = "Tornado websocket backend for the Xterm.js Javascript terminal em category = "main" optional = true python-versions = ">=3.7" +files = [ + {file = "terminado-0.17.1-py3-none-any.whl", hash = "sha256:8650d44334eba354dd591129ca3124a6ba42c3d5b70df5051b6921d506fdaeae"}, + {file = "terminado-0.17.1.tar.gz", hash = "sha256:6ccbbcd3a4f8a25a5ec04991f39a0b8db52dfcd487ea0e578d977e6752380333"}, +] [package.dependencies] ptyprocess = {version = "*", markers = "os_name != \"nt\""} @@ -2441,6 +4158,10 @@ description = "A tiny CSS parser" category = "main" optional = true python-versions = ">=3.7" +files = [ + {file = "tinycss2-1.2.1-py3-none-any.whl", hash = "sha256:2b80a96d41e7c3914b8cda8bc7f705a4d9c49275616e886103dd839dfc847847"}, + {file = "tinycss2-1.2.1.tar.gz", hash = "sha256:8cff3a8f066c2ec677c06dbc7b45619804a6938478d9d73c284b29d14ecb0627"}, +] [package.dependencies] webencodings = ">=0.4" @@ -2456,6 +4177,10 @@ description = "Python Library for Tom's Obvious, Minimal Language" category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] [[package]] name = "tomli" @@ -2464,6 +4189,10 @@ description = "A lil' TOML parser" category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] [[package]] name = "tomlkit" @@ -2472,6 +4201,10 @@ description = "Style preserving TOML library" category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "tomlkit-0.11.6-py3-none-any.whl", hash = "sha256:07de26b0d8cfc18f871aec595fda24d95b08fef89d147caa861939f37230bf4b"}, + {file = "tomlkit-0.11.6.tar.gz", hash = "sha256:71b952e5721688937fb02cf9d354dbcf0785066149d2855e44531ebdd2b65d73"}, +] [[package]] name = "tornado" @@ -2480,6 +4213,19 @@ description = "Tornado is a Python web framework and asynchronous networking lib category = "main" optional = true python-versions = ">= 3.7" +files = [ + {file = "tornado-6.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:20f638fd8cc85f3cbae3c732326e96addff0a15e22d80f049e00121651e82e72"}, + {file = "tornado-6.2-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:87dcafae3e884462f90c90ecc200defe5e580a7fbbb4365eda7c7c1eb809ebc9"}, + {file = "tornado-6.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba09ef14ca9893954244fd872798b4ccb2367c165946ce2dd7376aebdde8e3ac"}, + {file = "tornado-6.2-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8150f721c101abdef99073bf66d3903e292d851bee51910839831caba341a75"}, + {file = "tornado-6.2-cp37-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3a2f5999215a3a06a4fc218026cd84c61b8b2b40ac5296a6db1f1451ef04c1e"}, + {file = "tornado-6.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5f8c52d219d4995388119af7ccaa0bcec289535747620116a58d830e7c25d8a8"}, + {file = "tornado-6.2-cp37-abi3-musllinux_1_1_i686.whl", hash = "sha256:6fdfabffd8dfcb6cf887428849d30cf19a3ea34c2c248461e1f7d718ad30b66b"}, + {file = "tornado-6.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:1d54d13ab8414ed44de07efecb97d4ef7c39f7438cf5e976ccd356bebb1b5fca"}, + {file = "tornado-6.2-cp37-abi3-win32.whl", hash = "sha256:5c87076709343557ef8032934ce5f637dbb552efa7b21d08e89ae7619ed0eb23"}, + {file = "tornado-6.2-cp37-abi3-win_amd64.whl", hash = "sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b"}, + {file = "tornado-6.2.tar.gz", hash = "sha256:9b630419bde84ec666bfd7ea0a4cb2a8a651c2d5cccdbdd1972a0c859dfc3c13"}, +] [[package]] name = "tqdm" @@ -2488,6 +4234,10 @@ description = "Fast, Extensible Progress Meter" category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +files = [ + {file = "tqdm-4.64.1-py2.py3-none-any.whl", hash = "sha256:6fee160d6ffcd1b1c68c65f14c829c22832bc401726335ce92c52d395944a6a1"}, + {file = "tqdm-4.64.1.tar.gz", hash = "sha256:5f4f682a004951c1b450bc753c710e9280c5746ce6ffedee253ddbcbf54cf1e4"}, +] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} @@ -2500,15 +4250,19 @@ telegram = ["requests"] [[package]] name = "traitlets" -version = "5.6.0" +version = "5.8.0" description = "Traitlets Python configuration system" category = "main" optional = true python-versions = ">=3.7" +files = [ + {file = "traitlets-5.8.0-py3-none-any.whl", hash = "sha256:c864831efa0ba6576d09b44884b34e41defc18c0d7e720b4a2d6698c842cab3e"}, + {file = "traitlets-5.8.0.tar.gz", hash = "sha256:6cc57d6dc28c85d5365961726ffd19b538739347749e13ebe34e03323a0e8f84"}, +] [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["pre-commit", "pytest"] +test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] [[package]] name = "types-decorator" @@ -2517,6 +4271,10 @@ description = "Typing stubs for decorator" category = "dev" optional = false python-versions = "*" +files = [ + {file = "types-decorator-0.1.7.tar.gz", hash = "sha256:1772c7a83d2846a09c90ae0549058baffb10d0dd01f9494e2032567d3b62ac5e"}, + {file = "types_decorator-0.1.7-py3-none-any.whl", hash = "sha256:b55f4c8c59bdd25bd1ecf835f0bc21d88b99be0f5bb51b1c0d73090be90f62db"}, +] [[package]] name = "types-docutils" @@ -2525,14 +4283,22 @@ description = "Typing stubs for docutils" category = "dev" optional = false python-versions = "*" +files = [ + {file = "types-docutils-0.19.1.1.tar.gz", hash = "sha256:be0a51ba1c7dd215d9d2df66d6845e63c1009b4bbf4c5beb87a0d9745cdba962"}, + {file = "types_docutils-0.19.1.1-py3-none-any.whl", hash = "sha256:a024cada35f0c13cc45eb0b68a102719018a634013690b7fef723bcbfadbd1f1"}, +] [[package]] -name = "types-Pillow" -version = "8.3.11" +name = "types-pillow" +version = "9.3.0.4" description = "Typing stubs for Pillow" category = "dev" optional = false python-versions = "*" +files = [ + {file = "types-Pillow-9.3.0.4.tar.gz", hash = "sha256:c18d466dc18550d96b8b4a279ff94f0cbad696825b5ad55466604f1daf5709de"}, + {file = "types_Pillow-9.3.0.4-py3-none-any.whl", hash = "sha256:98b8484ff343676f6f7051682a6cfd26896e993e86b3ce9badfa0ec8750f5405"}, +] [[package]] name = "types-protobuf" @@ -2541,14 +4307,22 @@ description = "Typing stubs for protobuf" category = "dev" optional = false python-versions = "*" +files = [ + {file = "types-protobuf-3.20.4.6.tar.gz", hash = "sha256:ba27443c592bbec1629dd69494a24c84461c63f0d3b7d648ce258aaae9680965"}, + {file = "types_protobuf-3.20.4.6-py3-none-any.whl", hash = "sha256:ab2d315ba82246b83d28f8797c98dc0fe1dd5cfd187909e56faf87239aedaae3"}, +] [[package]] -name = "types-Pygments" +name = "types-pygments" version = "2.13.1.1" description = "Typing stubs for Pygments" category = "dev" optional = false python-versions = "*" +files = [ + {file = "types-Pygments-2.13.1.1.tar.gz", hash = "sha256:bcc24601e698b1393744f77901376d55b7a9a6a23d4f4ba80c84347c1f7939b1"}, + {file = "types_Pygments-2.13.1.1-py3-none-any.whl", hash = "sha256:9c789be357e21f611d215af3ae9dfcc24469dc4be96e96ea9b4e5e0c783afba5"}, +] [package.dependencies] types-docutils = "*" @@ -2556,11 +4330,15 @@ types-setuptools = "*" [[package]] name = "types-requests" -version = "2.28.11.5" +version = "2.28.11.7" description = "Typing stubs for requests" category = "dev" optional = false python-versions = "*" +files = [ + {file = "types-requests-2.28.11.7.tar.gz", hash = "sha256:0ae38633734990d019b80f5463dfa164ebd3581998ac8435f526da6fe4d598c3"}, + {file = "types_requests-2.28.11.7-py3-none-any.whl", hash = "sha256:b6a2fca8109f4fdba33052f11ed86102bddb2338519e1827387137fefc66a98b"}, +] [package.dependencies] types-urllib3 = "<1.27" @@ -2572,6 +4350,22 @@ description = "Typing stubs for setuptools" category = "dev" optional = false python-versions = "*" +files = [ + {file = "types-setuptools-57.4.18.tar.gz", hash = "sha256:8ee03d823fe7fda0bd35faeae33d35cb5c25b497263e6a58b34c4cfd05f40bcf"}, + {file = "types_setuptools-57.4.18-py3-none-any.whl", hash = "sha256:9660b8774b12cd61b448e2fd87a667c02e7ec13ce9f15171f1d49a4654c4df6a"}, +] + +[[package]] +name = "types-tqdm" +version = "4.64.7.9" +description = "Typing stubs for tqdm" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "types-tqdm-4.64.7.9.tar.gz", hash = "sha256:aecd96552e9c3b87e1926cb312734f135426ffc3254d8e64cfeb3ba591ef72c5"}, + {file = "types_tqdm-4.64.7.9-py3-none-any.whl", hash = "sha256:8871999c7f4a8cd24655dcb44cfcca03efd931a9b49e62530a8880bd909c5474"}, +] [[package]] name = "types-urllib3" @@ -2580,6 +4374,10 @@ description = "Typing stubs for urllib3" category = "dev" optional = false python-versions = "*" +files = [ + {file = "types-urllib3-1.26.25.4.tar.gz", hash = "sha256:eec5556428eec862b1ac578fb69aab3877995a99ffec9e5a12cf7fbd0cc9daee"}, + {file = "types_urllib3-1.26.25.4-py3-none-any.whl", hash = "sha256:ed6b9e8a8be488796f72306889a06a3fc3cb1aa99af02ab8afb50144d7317e49"}, +] [[package]] name = "typing-extensions" @@ -2588,6 +4386,10 @@ description = "Backported and Experimental Type Hints for Python 3.7+" category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, + {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, +] [[package]] name = "uri-template" @@ -2596,6 +4398,10 @@ description = "RFC 6570 URI Template Processor" category = "main" optional = true python-versions = ">=3.6" +files = [ + {file = "uri_template-1.2.0-py3-none-any.whl", hash = "sha256:f1699c77b73b925cf4937eae31ab282a86dc885c333f2e942513f08f691fc7db"}, + {file = "uri_template-1.2.0.tar.gz", hash = "sha256:934e4d09d108b70eb8a24410af8615294d09d279ce0e7cbcdaef1bd21f932b06"}, +] [package.extras] dev = ["flake8 (<4.0.0)", "flake8-annotations", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-noqa", "flake8-requirements", "flake8-type-annotations", "flake8-use-fstring", "mypy", "pep8-naming"] @@ -2607,6 +4413,10 @@ description = "HTTP library with thread-safe connection pooling, file post, and category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "urllib3-1.26.13-py2.py3-none-any.whl", hash = "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc"}, + {file = "urllib3-1.26.13.tar.gz", hash = "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8"}, +] [package.extras] brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] @@ -2620,6 +4430,10 @@ description = "Virtual Python Environment builder" category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "virtualenv-20.17.1-py3-none-any.whl", hash = "sha256:ce3b1684d6e1a20a3e5ed36795a97dfc6af29bc3970ca8dab93e11ac6094b3c4"}, + {file = "virtualenv-20.17.1.tar.gz", hash = "sha256:f8b927684efc6f1cc206c9db297a570ab9ad0e51c16fa9e45487d36d1905c058"}, +] [package.dependencies] distlib = ">=0.3.6,<1" @@ -2637,1895 +4451,7 @@ description = "Filesystem events monitoring" category = "main" optional = false python-versions = ">=3.6" - -[package.extras] -watchmedo = ["PyYAML (>=3.10)"] - -[[package]] -name = "wcwidth" -version = "0.2.5" -description = "Measures the displayed width of unicode strings in a terminal" -category = "main" -optional = true -python-versions = "*" - -[[package]] -name = "webcolors" -version = "1.12" -description = "A library for working with color names and color values formats defined by HTML and CSS." -category = "main" -optional = true -python-versions = ">=3.7" - -[[package]] -name = "webencodings" -version = "0.5.1" -description = "Character encoding aliases for legacy web content" -category = "main" -optional = true -python-versions = "*" - -[[package]] -name = "websocket-client" -version = "1.4.2" -description = "WebSocket client for Python with low level API options" -category = "main" -optional = true -python-versions = ">=3.7" - -[package.extras] -docs = ["Sphinx (>=3.4)", "sphinx-rtd-theme (>=0.5)"] -optional = ["python-socks", "wsaccel"] -test = ["websockets"] - -[[package]] -name = "wrapt" -version = "1.14.1" -description = "Module for decorators, wrappers and monkey patching." -category = "dev" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" - -[[package]] -name = "zipp" -version = "3.11.0" -description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"] -testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] - -[extras] -gui = ["dearpygui"] -jupyterlab = ["jupyterlab", "notebook"] - -[metadata] -lock-version = "1.1" -python-versions = ">=3.8,<3.12" -content-hash = "9df7ccd72cfd7f4a98b9a39546c11e4302f0390eecedd60882a8f4cdb7ffb22b" - -[metadata.files] -alabaster = [ - {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, - {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, -] -anyio = [ - {file = "anyio-3.6.2-py3-none-any.whl", hash = "sha256:fbbe32bd270d2a2ef3ed1c5d45041250284e31fc0a4df4a5a6071842051a51e3"}, - {file = "anyio-3.6.2.tar.gz", hash = "sha256:25ea0d673ae30af41a0c442f81cf3b38c7e79fdc7b60335a4c14e05eb0947421"}, -] -appnope = [ - {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, - {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, -] -argon2-cffi = [ - {file = "argon2-cffi-21.3.0.tar.gz", hash = "sha256:d384164d944190a7dd7ef22c6aa3ff197da12962bd04b17f64d4e93d934dba5b"}, - {file = "argon2_cffi-21.3.0-py3-none-any.whl", hash = "sha256:8c976986f2c5c0e5000919e6de187906cfd81fb1c72bf9d88c01177e77da7f80"}, -] -argon2-cffi-bindings = [ - {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f"}, - {file = "argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a"}, -] -arrow = [ - {file = "arrow-1.2.3-py3-none-any.whl", hash = "sha256:5a49ab92e3b7b71d96cd6bfcc4df14efefc9dfa96ea19045815914a6ab6b1fe2"}, - {file = "arrow-1.2.3.tar.gz", hash = "sha256:3934b30ca1b9f292376d9db15b19446088d12ec58629bc3f0da28fd55fb633a1"}, -] -astor = [ - {file = "astor-0.8.1-py2.py3-none-any.whl", hash = "sha256:070a54e890cefb5b3739d19f30f5a5ec840ffc9c50ffa7d23cc9fc1a38ebbfc5"}, - {file = "astor-0.8.1.tar.gz", hash = "sha256:6a6effda93f4e1ce9f618779b2dd1d9d84f1e32812c23a29b3fff6fd7f63fa5e"}, -] -astroid = [ - {file = "astroid-2.12.13-py3-none-any.whl", hash = "sha256:10e0ad5f7b79c435179d0d0f0df69998c4eef4597534aae44910db060baeb907"}, - {file = "astroid-2.12.13.tar.gz", hash = "sha256:1493fe8bd3dfd73dc35bd53c9d5b6e49ead98497c47b2307662556a5692d29d7"}, -] -asttokens = [ - {file = "asttokens-2.2.1-py2.py3-none-any.whl", hash = "sha256:6b0ac9e93fb0335014d382b8fa9b3afa7df546984258005da0b9e7095b3deb1c"}, - {file = "asttokens-2.2.1.tar.gz", hash = "sha256:4622110b2a6f30b77e1473affaa97e711bc2f07d3f10848420ff1898edbe94f3"}, -] -attrs = [ - {file = "attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"}, - {file = "attrs-22.1.0.tar.gz", hash = "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6"}, -] -Babel = [ - {file = "Babel-2.11.0-py3-none-any.whl", hash = "sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe"}, - {file = "Babel-2.11.0.tar.gz", hash = "sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6"}, -] -backcall = [ - {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, - {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, -] -beautifulsoup4 = [ - {file = "beautifulsoup4-4.11.1-py3-none-any.whl", hash = "sha256:58d5c3d29f5a36ffeb94f02f0d786cd53014cf9b3b3951d42e0080d8a9498d30"}, - {file = "beautifulsoup4-4.11.1.tar.gz", hash = "sha256:ad9aa55b65ef2808eb405f46cf74df7fcb7044d5cbc26487f96eb2ef2e436693"}, -] -black = [ - {file = "black-22.10.0-1fixedarch-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:5cc42ca67989e9c3cf859e84c2bf014f6633db63d1cbdf8fdb666dcd9e77e3fa"}, - {file = "black-22.10.0-1fixedarch-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:5d8f74030e67087b219b032aa33a919fae8806d49c867846bfacde57f43972ef"}, - {file = "black-22.10.0-1fixedarch-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:197df8509263b0b8614e1df1756b1dd41be6738eed2ba9e9769f3880c2b9d7b6"}, - {file = "black-22.10.0-1fixedarch-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:2644b5d63633702bc2c5f3754b1b475378fbbfb481f62319388235d0cd104c2d"}, - {file = "black-22.10.0-1fixedarch-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:e41a86c6c650bcecc6633ee3180d80a025db041a8e2398dcc059b3afa8382cd4"}, - {file = "black-22.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2039230db3c6c639bd84efe3292ec7b06e9214a2992cd9beb293d639c6402edb"}, - {file = "black-22.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14ff67aec0a47c424bc99b71005202045dc09270da44a27848d534600ac64fc7"}, - {file = "black-22.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:819dc789f4498ecc91438a7de64427c73b45035e2e3680c92e18795a839ebb66"}, - {file = "black-22.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5b9b29da4f564ba8787c119f37d174f2b69cdfdf9015b7d8c5c16121ddc054ae"}, - {file = "black-22.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8b49776299fece66bffaafe357d929ca9451450f5466e997a7285ab0fe28e3b"}, - {file = "black-22.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:21199526696b8f09c3997e2b4db8d0b108d801a348414264d2eb8eb2532e540d"}, - {file = "black-22.10.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e464456d24e23d11fced2bc8c47ef66d471f845c7b7a42f3bd77bf3d1789650"}, - {file = "black-22.10.0-cp37-cp37m-win_amd64.whl", hash = "sha256:9311e99228ae10023300ecac05be5a296f60d2fd10fff31cf5c1fa4ca4b1988d"}, - {file = "black-22.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fba8a281e570adafb79f7755ac8721b6cf1bbf691186a287e990c7929c7692ff"}, - {file = "black-22.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:915ace4ff03fdfff953962fa672d44be269deb2eaf88499a0f8805221bc68c87"}, - {file = "black-22.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:444ebfb4e441254e87bad00c661fe32df9969b2bf224373a448d8aca2132b395"}, - {file = "black-22.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:974308c58d057a651d182208a484ce80a26dac0caef2895836a92dd6ebd725e0"}, - {file = "black-22.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72ef3925f30e12a184889aac03d77d031056860ccae8a1e519f6cbb742736383"}, - {file = "black-22.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:432247333090c8c5366e69627ccb363bc58514ae3e63f7fc75c54b1ea80fa7de"}, - {file = "black-22.10.0-py3-none-any.whl", hash = "sha256:c957b2b4ea88587b46cf49d1dc17681c1e672864fd7af32fc1e9664d572b3458"}, - {file = "black-22.10.0.tar.gz", hash = "sha256:f513588da599943e0cde4e32cc9879e825d58720d6557062d1098c5ad80080e1"}, -] -bleach = [ - {file = "bleach-5.0.1-py3-none-any.whl", hash = "sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a"}, - {file = "bleach-5.0.1.tar.gz", hash = "sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c"}, -] -certifi = [ - {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, - {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, -] -cffi = [ - {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, - {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, - {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, - {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, - {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, - {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, - {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, - {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, - {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, - {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, - {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, - {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, - {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, - {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, - {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, - {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, - {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, - {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, - {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, -] -cfgv = [ - {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, - {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, -] -charset-normalizer = [ - {file = "charset-normalizer-2.1.1.tar.gz", hash = "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845"}, - {file = "charset_normalizer-2.1.1-py3-none-any.whl", hash = "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f"}, -] -click = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, -] -click-default-group = [ - {file = "click-default-group-1.2.2.tar.gz", hash = "sha256:d9560e8e8dfa44b3562fbc9425042a0fd6d21956fcc2db0077f63f34253ab904"}, -] -cloup = [ - {file = "cloup-0.13.1-py2.py3-none-any.whl", hash = "sha256:04a29a483e122c04f401547dcbce451ce002ff3e392308122619d5b9009f321f"}, - {file = "cloup-0.13.1.tar.gz", hash = "sha256:ea0acc67eed994b86e79b70d76bc2ea525b7f98f3cd8e63696896d549597ef4d"}, -] -colorama = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] -colour = [ - {file = "colour-0.1.5-py2.py3-none-any.whl", hash = "sha256:33f6db9d564fadc16e59921a56999b79571160ce09916303d35346dddc17978c"}, - {file = "colour-0.1.5.tar.gz", hash = "sha256:af20120fefd2afede8b001fbef2ea9da70ad7d49fafdb6489025dae8745c3aee"}, -] -comm = [ - {file = "comm-0.1.2-py3-none-any.whl", hash = "sha256:9f3abf3515112fa7c55a42a6a5ab358735c9dccc8b5910a9d8e3ef5998130666"}, - {file = "comm-0.1.2.tar.gz", hash = "sha256:3e2f5826578e683999b93716285b3b1f344f157bf75fa9ce0a797564e742f062"}, -] -commonmark = [ - {file = "commonmark-0.9.1-py2.py3-none-any.whl", hash = "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"}, - {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"}, -] -contourpy = [ - {file = "contourpy-1.0.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:613c665529899b5d9fade7e5d1760111a0b011231277a0d36c49f0d3d6914bd6"}, - {file = "contourpy-1.0.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:78ced51807ccb2f45d4ea73aca339756d75d021069604c2fccd05390dc3c28eb"}, - {file = "contourpy-1.0.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b3b1bd7577c530eaf9d2bc52d1a93fef50ac516a8b1062c3d1b9bcec9ebe329b"}, - {file = "contourpy-1.0.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8834c14b8c3dd849005e06703469db9bf96ba2d66a3f88ecc539c9a8982e0ee"}, - {file = "contourpy-1.0.6-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4052a8a4926d4468416fc7d4b2a7b2a3e35f25b39f4061a7e2a3a2748c4fc48"}, - {file = "contourpy-1.0.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c0e1308307a75e07d1f1b5f0f56b5af84538a5e9027109a7bcf6cb47c434e72"}, - {file = "contourpy-1.0.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9fc4e7973ed0e1fe689435842a6e6b330eb7ccc696080dda9a97b1a1b78e41db"}, - {file = "contourpy-1.0.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:08e8d09d96219ace6cb596506fb9b64ea5f270b2fb9121158b976d88871fcfd1"}, - {file = "contourpy-1.0.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f33da6b5d19ad1bb5e7ad38bb8ba5c426d2178928bc2b2c44e8823ea0ecb6ff3"}, - {file = "contourpy-1.0.6-cp310-cp310-win32.whl", hash = "sha256:12a7dc8439544ed05c6553bf026d5e8fa7fad48d63958a95d61698df0e00092b"}, - {file = "contourpy-1.0.6-cp310-cp310-win_amd64.whl", hash = "sha256:eadad75bf91897f922e0fb3dca1b322a58b1726a953f98c2e5f0606bd8408621"}, - {file = "contourpy-1.0.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:913bac9d064cff033cf3719e855d4f1db9f1c179e0ecf3ba9fdef21c21c6a16a"}, - {file = "contourpy-1.0.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46deb310a276cc5c1fd27958e358cce68b1e8a515fa5a574c670a504c3a3fe30"}, - {file = "contourpy-1.0.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b64f747e92af7da3b85631a55d68c45a2d728b4036b03cdaba4bd94bcc85bd6f"}, - {file = "contourpy-1.0.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50627bf76abb6ba291ad08db583161939c2c5fab38c38181b7833423ab9c7de3"}, - {file = "contourpy-1.0.6-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:358f6364e4873f4d73360b35da30066f40387dd3c427a3e5432c6b28dd24a8fa"}, - {file = "contourpy-1.0.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c78bfbc1a7bff053baf7e508449d2765964d67735c909b583204e3240a2aca45"}, - {file = "contourpy-1.0.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e43255a83835a129ef98f75d13d643844d8c646b258bebd11e4a0975203e018f"}, - {file = "contourpy-1.0.6-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:375d81366afd547b8558c4720337218345148bc2fcffa3a9870cab82b29667f2"}, - {file = "contourpy-1.0.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b98c820608e2dca6442e786817f646d11057c09a23b68d2b3737e6dcb6e4a49b"}, - {file = "contourpy-1.0.6-cp311-cp311-win32.whl", hash = "sha256:0e4854cc02006ad6684ce092bdadab6f0912d131f91c2450ce6dbdea78ee3c0b"}, - {file = "contourpy-1.0.6-cp311-cp311-win_amd64.whl", hash = "sha256:d2eff2af97ea0b61381828b1ad6cd249bbd41d280e53aea5cccd7b2b31b8225c"}, - {file = "contourpy-1.0.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5b117d29433fc8393b18a696d794961464e37afb34a6eeb8b2c37b5f4128a83e"}, - {file = "contourpy-1.0.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:341330ed19074f956cb20877ad8d2ae50e458884bfa6a6df3ae28487cc76c768"}, - {file = "contourpy-1.0.6-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:371f6570a81dfdddbb837ba432293a63b4babb942a9eb7aaa699997adfb53278"}, - {file = "contourpy-1.0.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9447c45df407d3ecb717d837af3b70cfef432138530712263730783b3d016512"}, - {file = "contourpy-1.0.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:730c27978a0003b47b359935478b7d63fd8386dbb2dcd36c1e8de88cbfc1e9de"}, - {file = "contourpy-1.0.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:da1ef35fd79be2926ba80fbb36327463e3656c02526e9b5b4c2b366588b74d9a"}, - {file = "contourpy-1.0.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:cd2bc0c8f2e8de7dd89a7f1c10b8844e291bca17d359373203ef2e6100819edd"}, - {file = "contourpy-1.0.6-cp37-cp37m-win32.whl", hash = "sha256:3a1917d3941dd58732c449c810fa7ce46cc305ce9325a11261d740118b85e6f3"}, - {file = "contourpy-1.0.6-cp37-cp37m-win_amd64.whl", hash = "sha256:06ca79e1efbbe2df795822df2fa173d1a2b38b6e0f047a0ec7903fbca1d1847e"}, - {file = "contourpy-1.0.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e626cefff8491bce356221c22af5a3ea528b0b41fbabc719c00ae233819ea0bf"}, - {file = "contourpy-1.0.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dbe6fe7a1166b1ddd7b6d887ea6fa8389d3f28b5ed3f73a8f40ece1fc5a3d340"}, - {file = "contourpy-1.0.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e13b31d1b4b68db60b3b29f8e337908f328c7f05b9add4b1b5c74e0691180109"}, - {file = "contourpy-1.0.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a79d239fc22c3b8d9d3de492aa0c245533f4f4c7608e5749af866949c0f1b1b9"}, - {file = "contourpy-1.0.6-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e8e686a6db92a46111a1ee0ee6f7fbfae4048f0019de207149f43ac1812cf95"}, - {file = "contourpy-1.0.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acd2bd02f1a7adff3a1f33e431eb96ab6d7987b039d2946a9b39fe6fb16a1036"}, - {file = "contourpy-1.0.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:03d1b9c6b44a9e30d554654c72be89af94fab7510b4b9f62356c64c81cec8b7d"}, - {file = "contourpy-1.0.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b48d94386f1994db7c70c76b5808c12e23ed7a4ee13693c2fc5ab109d60243c0"}, - {file = "contourpy-1.0.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:208bc904889c910d95aafcf7be9e677726df9ef71e216780170dbb7e37d118fa"}, - {file = "contourpy-1.0.6-cp38-cp38-win32.whl", hash = "sha256:444fb776f58f4906d8d354eb6f6ce59d0a60f7b6a720da6c1ccb839db7c80eb9"}, - {file = "contourpy-1.0.6-cp38-cp38-win_amd64.whl", hash = "sha256:9bc407a6af672da20da74823443707e38ece8b93a04009dca25856c2d9adadb1"}, - {file = "contourpy-1.0.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:aa4674cf3fa2bd9c322982644967f01eed0c91bb890f624e0e0daf7a5c3383e9"}, - {file = "contourpy-1.0.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6f56515e7c6fae4529b731f6c117752247bef9cdad2b12fc5ddf8ca6a50965a5"}, - {file = "contourpy-1.0.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:344cb3badf6fc7316ad51835f56ac387bdf86c8e1b670904f18f437d70da4183"}, - {file = "contourpy-1.0.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b1e66346acfb17694d46175a0cea7d9036f12ed0c31dfe86f0f405eedde2bdd"}, - {file = "contourpy-1.0.6-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8468b40528fa1e15181cccec4198623b55dcd58306f8815a793803f51f6c474a"}, - {file = "contourpy-1.0.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1dedf4c64185a216c35eb488e6f433297c660321275734401760dafaeb0ad5c2"}, - {file = "contourpy-1.0.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:494efed2c761f0f37262815f9e3c4bb9917c5c69806abdee1d1cb6611a7174a0"}, - {file = "contourpy-1.0.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:75a2e638042118118ab39d337da4c7908c1af74a8464cad59f19fbc5bbafec9b"}, - {file = "contourpy-1.0.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a628bba09ba72e472bf7b31018b6281fd4cc903f0888049a3724afba13b6e0b8"}, - {file = "contourpy-1.0.6-cp39-cp39-win32.whl", hash = "sha256:e1739496c2f0108013629aa095cc32a8c6363444361960c07493818d0dea2da4"}, - {file = "contourpy-1.0.6-cp39-cp39-win_amd64.whl", hash = "sha256:a457ee72d9032e86730f62c5eeddf402e732fdf5ca8b13b41772aa8ae13a4563"}, - {file = "contourpy-1.0.6-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d912f0154a20a80ea449daada904a7eb6941c83281a9fab95de50529bfc3a1da"}, - {file = "contourpy-1.0.6-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4081918147fc4c29fad328d5066cfc751da100a1098398742f9f364be63803fc"}, - {file = "contourpy-1.0.6-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0537cc1195245bbe24f2913d1f9211b8f04eb203de9044630abd3664c6cc339c"}, - {file = "contourpy-1.0.6-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcd556c8fc37a342dd636d7eef150b1399f823a4462f8c968e11e1ebeabee769"}, - {file = "contourpy-1.0.6-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:f6ca38dd8d988eca8f07305125dec6f54ac1c518f1aaddcc14d08c01aebb6efc"}, - {file = "contourpy-1.0.6-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c1baa49ab9fedbf19d40d93163b7d3e735d9cd8d5efe4cce9907902a6dad391f"}, - {file = "contourpy-1.0.6-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:211dfe2bd43bf5791d23afbe23a7952e8ac8b67591d24be3638cabb648b3a6eb"}, - {file = "contourpy-1.0.6-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c38c6536c2d71ca2f7e418acaf5bca30a3af7f2a2fa106083c7d738337848dbe"}, - {file = "contourpy-1.0.6-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b1ee48a130da4dd0eb8055bbab34abf3f6262957832fd575e0cab4979a15a41"}, - {file = "contourpy-1.0.6-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5641927cc5ae66155d0c80195dc35726eae060e7defc18b7ab27600f39dd1fe7"}, - {file = "contourpy-1.0.6-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7ee394502026d68652c2824348a40bf50f31351a668977b51437131a90d777ea"}, - {file = "contourpy-1.0.6-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b97454ed5b1368b66ed414c754cba15b9750ce69938fc6153679787402e4cdf"}, - {file = "contourpy-1.0.6-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0236875c5a0784215b49d00ebbe80c5b6b5d5244b3655a36dda88105334dea17"}, - {file = "contourpy-1.0.6-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84c593aeff7a0171f639da92cb86d24954bbb61f8a1b530f74eb750a14685832"}, - {file = "contourpy-1.0.6-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:9b0e7fe7f949fb719b206548e5cde2518ffb29936afa4303d8a1c4db43dcb675"}, - {file = "contourpy-1.0.6.tar.gz", hash = "sha256:6e459ebb8bb5ee4c22c19cc000174f8059981971a33ce11e17dddf6aca97a142"}, -] -coverage = [ - {file = "coverage-6.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef8674b0ee8cc11e2d574e3e2998aea5df5ab242e012286824ea3c6970580e53"}, - {file = "coverage-6.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:784f53ebc9f3fd0e2a3f6a78b2be1bd1f5575d7863e10c6e12504f240fd06660"}, - {file = "coverage-6.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4a5be1748d538a710f87542f22c2cad22f80545a847ad91ce45e77417293eb4"}, - {file = "coverage-6.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83516205e254a0cb77d2d7bb3632ee019d93d9f4005de31dca0a8c3667d5bc04"}, - {file = "coverage-6.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af4fffaffc4067232253715065e30c5a7ec6faac36f8fc8d6f64263b15f74db0"}, - {file = "coverage-6.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:97117225cdd992a9c2a5515db1f66b59db634f59d0679ca1fa3fe8da32749cae"}, - {file = "coverage-6.5.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a1170fa54185845505fbfa672f1c1ab175446c887cce8212c44149581cf2d466"}, - {file = "coverage-6.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:11b990d520ea75e7ee8dcab5bc908072aaada194a794db9f6d7d5cfd19661e5a"}, - {file = "coverage-6.5.0-cp310-cp310-win32.whl", hash = "sha256:5dbec3b9095749390c09ab7c89d314727f18800060d8d24e87f01fb9cfb40b32"}, - {file = "coverage-6.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:59f53f1dc5b656cafb1badd0feb428c1e7bc19b867479ff72f7a9dd9b479f10e"}, - {file = "coverage-6.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4a5375e28c5191ac38cca59b38edd33ef4cc914732c916f2929029b4bfb50795"}, - {file = "coverage-6.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4ed2820d919351f4167e52425e096af41bfabacb1857186c1ea32ff9983ed75"}, - {file = "coverage-6.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:33a7da4376d5977fbf0a8ed91c4dffaaa8dbf0ddbf4c8eea500a2486d8bc4d7b"}, - {file = "coverage-6.5.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8fb6cf131ac4070c9c5a3e21de0f7dc5a0fbe8bc77c9456ced896c12fcdad91"}, - {file = "coverage-6.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a6b7d95969b8845250586f269e81e5dfdd8ff828ddeb8567a4a2eaa7313460c4"}, - {file = "coverage-6.5.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1ef221513e6f68b69ee9e159506d583d31aa3567e0ae84eaad9d6ec1107dddaa"}, - {file = "coverage-6.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cca4435eebea7962a52bdb216dec27215d0df64cf27fc1dd538415f5d2b9da6b"}, - {file = "coverage-6.5.0-cp311-cp311-win32.whl", hash = "sha256:98e8a10b7a314f454d9eff4216a9a94d143a7ee65018dd12442e898ee2310578"}, - {file = "coverage-6.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:bc8ef5e043a2af066fa8cbfc6e708d58017024dc4345a1f9757b329a249f041b"}, - {file = "coverage-6.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4433b90fae13f86fafff0b326453dd42fc9a639a0d9e4eec4d366436d1a41b6d"}, - {file = "coverage-6.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4f05d88d9a80ad3cac6244d36dd89a3c00abc16371769f1340101d3cb899fc3"}, - {file = "coverage-6.5.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:94e2565443291bd778421856bc975d351738963071e9b8839ca1fc08b42d4bef"}, - {file = "coverage-6.5.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:027018943386e7b942fa832372ebc120155fd970837489896099f5cfa2890f79"}, - {file = "coverage-6.5.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:255758a1e3b61db372ec2736c8e2a1fdfaf563977eedbdf131de003ca5779b7d"}, - {file = "coverage-6.5.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:851cf4ff24062c6aec510a454b2584f6e998cada52d4cb58c5e233d07172e50c"}, - {file = "coverage-6.5.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:12adf310e4aafddc58afdb04d686795f33f4d7a6fa67a7a9d4ce7d6ae24d949f"}, - {file = "coverage-6.5.0-cp37-cp37m-win32.whl", hash = "sha256:b5604380f3415ba69de87a289a2b56687faa4fe04dbee0754bfcae433489316b"}, - {file = "coverage-6.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:4a8dbc1f0fbb2ae3de73eb0bdbb914180c7abfbf258e90b311dcd4f585d44bd2"}, - {file = "coverage-6.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d900bb429fdfd7f511f868cedd03a6bbb142f3f9118c09b99ef8dc9bf9643c3c"}, - {file = "coverage-6.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2198ea6fc548de52adc826f62cb18554caedfb1d26548c1b7c88d8f7faa8f6ba"}, - {file = "coverage-6.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c4459b3de97b75e3bd6b7d4b7f0db13f17f504f3d13e2a7c623786289dd670e"}, - {file = "coverage-6.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:20c8ac5386253717e5ccc827caad43ed66fea0efe255727b1053a8154d952398"}, - {file = "coverage-6.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b07130585d54fe8dff3d97b93b0e20290de974dc8177c320aeaf23459219c0b"}, - {file = "coverage-6.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:dbdb91cd8c048c2b09eb17713b0c12a54fbd587d79adcebad543bc0cd9a3410b"}, - {file = "coverage-6.5.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:de3001a203182842a4630e7b8d1a2c7c07ec1b45d3084a83d5d227a3806f530f"}, - {file = "coverage-6.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e07f4a4a9b41583d6eabec04f8b68076ab3cd44c20bd29332c6572dda36f372e"}, - {file = "coverage-6.5.0-cp38-cp38-win32.whl", hash = "sha256:6d4817234349a80dbf03640cec6109cd90cba068330703fa65ddf56b60223a6d"}, - {file = "coverage-6.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:7ccf362abd726b0410bf8911c31fbf97f09f8f1061f8c1cf03dfc4b6372848f6"}, - {file = "coverage-6.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:633713d70ad6bfc49b34ead4060531658dc6dfc9b3eb7d8a716d5873377ab745"}, - {file = "coverage-6.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:95203854f974e07af96358c0b261f1048d8e1083f2de9b1c565e1be4a3a48cfc"}, - {file = "coverage-6.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9023e237f4c02ff739581ef35969c3739445fb059b060ca51771e69101efffe"}, - {file = "coverage-6.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:265de0fa6778d07de30bcf4d9dc471c3dc4314a23a3c6603d356a3c9abc2dfcf"}, - {file = "coverage-6.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f830ed581b45b82451a40faabb89c84e1a998124ee4212d440e9c6cf70083e5"}, - {file = "coverage-6.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7b6be138d61e458e18d8e6ddcddd36dd96215edfe5f1168de0b1b32635839b62"}, - {file = "coverage-6.5.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:42eafe6778551cf006a7c43153af1211c3aaab658d4d66fa5fcc021613d02518"}, - {file = "coverage-6.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:723e8130d4ecc8f56e9a611e73b31219595baa3bb252d539206f7bbbab6ffc1f"}, - {file = "coverage-6.5.0-cp39-cp39-win32.whl", hash = "sha256:d9ecf0829c6a62b9b573c7bb6d4dcd6ba8b6f80be9ba4fc7ed50bf4ac9aecd72"}, - {file = "coverage-6.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:fc2af30ed0d5ae0b1abdb4ebdce598eafd5b35397d4d75deb341a614d333d987"}, - {file = "coverage-6.5.0-pp36.pp37.pp38-none-any.whl", hash = "sha256:1431986dac3923c5945271f169f59c45b8802a114c8f548d611f2015133df77a"}, - {file = "coverage-6.5.0.tar.gz", hash = "sha256:f642e90754ee3e06b0e7e51bce3379590e76b7f76b708e1a71ff043f87025c84"}, -] -cycler = [ - {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, - {file = "cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"}, -] -Cython = [ - {file = "Cython-0.29.32-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:39afb4679b8c6bf7ccb15b24025568f4f9b4d7f9bf3cbd981021f542acecd75b"}, - {file = "Cython-0.29.32-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:dbee03b8d42dca924e6aa057b836a064c769ddfd2a4c2919e65da2c8a362d528"}, - {file = "Cython-0.29.32-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5ba622326f2862f9c1f99ca8d47ade49871241920a352c917e16861e25b0e5c3"}, - {file = "Cython-0.29.32-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e6ffa08aa1c111a1ebcbd1cf4afaaec120bc0bbdec3f2545f8bb7d3e8e77a1cd"}, - {file = "Cython-0.29.32-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:97335b2cd4acebf30d14e2855d882de83ad838491a09be2011745579ac975833"}, - {file = "Cython-0.29.32-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:06be83490c906b6429b4389e13487a26254ccaad2eef6f3d4ee21d8d3a4aaa2b"}, - {file = "Cython-0.29.32-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:eefd2b9a5f38ded8d859fe96cc28d7d06e098dc3f677e7adbafda4dcdd4a461c"}, - {file = "Cython-0.29.32-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5514f3b4122cb22317122a48e175a7194e18e1803ca555c4c959d7dfe68eaf98"}, - {file = "Cython-0.29.32-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:656dc5ff1d269de4d11ee8542f2ffd15ab466c447c1f10e5b8aba6f561967276"}, - {file = "Cython-0.29.32-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:cdf10af3e2e3279dc09fdc5f95deaa624850a53913f30350ceee824dc14fc1a6"}, - {file = "Cython-0.29.32-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:3875c2b2ea752816a4d7ae59d45bb546e7c4c79093c83e3ba7f4d9051dd02928"}, - {file = "Cython-0.29.32-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:79e3bab19cf1b021b613567c22eb18b76c0c547b9bc3903881a07bfd9e7e64cf"}, - {file = "Cython-0.29.32-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b0595aee62809ba353cebc5c7978e0e443760c3e882e2c7672c73ffe46383673"}, - {file = "Cython-0.29.32-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0ea8267fc373a2c5064ad77d8ff7bf0ea8b88f7407098ff51829381f8ec1d5d9"}, - {file = "Cython-0.29.32-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:c8e8025f496b5acb6ba95da2fb3e9dacffc97d9a92711aacfdd42f9c5927e094"}, - {file = "Cython-0.29.32-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:afbce249133a830f121b917f8c9404a44f2950e0e4f5d1e68f043da4c2e9f457"}, - {file = "Cython-0.29.32-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:513e9707407608ac0d306c8b09d55a28be23ea4152cbd356ceaec0f32ef08d65"}, - {file = "Cython-0.29.32-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e83228e0994497900af954adcac27f64c9a57cd70a9ec768ab0cb2c01fd15cf1"}, - {file = "Cython-0.29.32-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ea1dcc07bfb37367b639415333cfbfe4a93c3be340edf1db10964bc27d42ed64"}, - {file = "Cython-0.29.32-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8669cadeb26d9a58a5e6b8ce34d2c8986cc3b5c0bfa77eda6ceb471596cb2ec3"}, - {file = "Cython-0.29.32-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:ed087eeb88a8cf96c60fb76c5c3b5fb87188adee5e179f89ec9ad9a43c0c54b3"}, - {file = "Cython-0.29.32-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:3f85eb2343d20d91a4ea9cf14e5748092b376a64b7e07fc224e85b2753e9070b"}, - {file = "Cython-0.29.32-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:63b79d9e1f7c4d1f498ab1322156a0d7dc1b6004bf981a8abda3f66800e140cd"}, - {file = "Cython-0.29.32-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e1958e0227a4a6a2c06fd6e35b7469de50adf174102454db397cec6e1403cce3"}, - {file = "Cython-0.29.32-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:856d2fec682b3f31583719cb6925c6cdbb9aa30f03122bcc45c65c8b6f515754"}, - {file = "Cython-0.29.32-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:479690d2892ca56d34812fe6ab8f58e4b2e0129140f3d94518f15993c40553da"}, - {file = "Cython-0.29.32-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:67fdd2f652f8d4840042e2d2d91e15636ba2bcdcd92e7e5ffbc68e6ef633a754"}, - {file = "Cython-0.29.32-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:4a4b03ab483271f69221c3210f7cde0dcc456749ecf8243b95bc7a701e5677e0"}, - {file = "Cython-0.29.32-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:40eff7aa26e91cf108fd740ffd4daf49f39b2fdffadabc7292b4b7dc5df879f0"}, - {file = "Cython-0.29.32-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0bbc27abdf6aebfa1bce34cd92bd403070356f28b0ecb3198ff8a182791d58b9"}, - {file = "Cython-0.29.32-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cddc47ec746a08603037731f5d10aebf770ced08666100bd2cdcaf06a85d4d1b"}, - {file = "Cython-0.29.32-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:eca3065a1279456e81c615211d025ea11bfe4e19f0c5650b859868ca04b3fcbd"}, - {file = "Cython-0.29.32-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:d968ffc403d92addf20b68924d95428d523436adfd25cf505d427ed7ba3bee8b"}, - {file = "Cython-0.29.32-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:f3fd44cc362eee8ae569025f070d56208908916794b6ab21e139cea56470a2b3"}, - {file = "Cython-0.29.32-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:b6da3063c5c476f5311fd76854abae6c315f1513ef7d7904deed2e774623bbb9"}, - {file = "Cython-0.29.32-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:061e25151c38f2361bc790d3bcf7f9d9828a0b6a4d5afa56fbed3bd33fb2373a"}, - {file = "Cython-0.29.32-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:f9944013588a3543fca795fffb0a070a31a243aa4f2d212f118aa95e69485831"}, - {file = "Cython-0.29.32-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:07d173d3289415bb496e72cb0ddd609961be08fe2968c39094d5712ffb78672b"}, - {file = "Cython-0.29.32-py2.py3-none-any.whl", hash = "sha256:eeb475eb6f0ccf6c039035eb4f0f928eb53ead88777e0a760eccb140ad90930b"}, - {file = "Cython-0.29.32.tar.gz", hash = "sha256:8733cf4758b79304f2a4e39ebfac5e92341bce47bcceb26c1254398b2f8c1af7"}, -] -data-science-types = [ - {file = "data-science-types-0.2.23.tar.gz", hash = "sha256:8096b9a35a8a187bf9a122b4707c97de841d810744690ee2a4ac30c6462e0d16"}, - {file = "data_science_types-0.2.23-py3-none-any.whl", hash = "sha256:bca319abc0e53a0316f9fcb887937e942477cb9e5fc63c8581e0b0438903b977"}, -] -dearpygui = [ - {file = "dearpygui-1.8.0-cp310-cp310-macosx_10_6_x86_64.whl", hash = "sha256:bbad360b80a29a2deb40a8a2f73aa17fee1c5e817035e590509e067f3dc531d3"}, - {file = "dearpygui-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dabeff583800aea84bc537ab188a87398ed9e5e0537cc3e37fdc6e59d6b40495"}, - {file = "dearpygui-1.8.0-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:7e93c41d64d884e1d9e8c6f991d51e4ed9dd9792f609d9a6f7399059c29d1706"}, - {file = "dearpygui-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:55006836de1d1a30ae6c03dd794d1798a4e9942b78f1239802afac4673c3fa38"}, - {file = "dearpygui-1.8.0-cp311-cp311-macosx_10_6_x86_64.whl", hash = "sha256:cf5b76bbefa1348e5bf53a68cd7a1d24768819e0e9b5535168b378830a20b6c1"}, - {file = "dearpygui-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe7c746ab87b57ef84495462b36b0533435b3b6a94d241af7fe9219f54744f6"}, - {file = "dearpygui-1.8.0-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:fe7ef89b9bd9ac34ab865b488b11fee5537767b63cedb436633054bd39bfc46e"}, - {file = "dearpygui-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:82c1ebd00d747e2c6d35eabaaacc851d29b38b49aad8f7726b6339aca2045aa2"}, - {file = "dearpygui-1.8.0-cp37-cp37m-macosx_10_6_x86_64.whl", hash = "sha256:476748dbaaf1d4749959e6192218d64c700bd4a06c1a5d26a77b1b1ef49ca7ab"}, - {file = "dearpygui-1.8.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:8ad1cc0a4af84e146f5191e86e54dcadff5a0863ae935ae34168af840848f0ab"}, - {file = "dearpygui-1.8.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e2cf13789ca6b91d56f1d83cfadc59ae21044bea0d19ff9d3c9b445d7ec05c8b"}, - {file = "dearpygui-1.8.0-cp38-cp38-macosx_10_6_x86_64.whl", hash = "sha256:0cc9ce8c3b4ad324c8e224a6e483ad7d6c7919ab758c3bbeccaea75bb414f727"}, - {file = "dearpygui-1.8.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:71e447e4f05200aae6839c45fccc08291c8e6b32540a4cf45f58e08cb1a0cf61"}, - {file = "dearpygui-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:f4637d217e0c773899947b73372e8685e45818af98e97838bee2c89a82d40c92"}, - {file = "dearpygui-1.8.0-cp39-cp39-macosx_10_6_x86_64.whl", hash = "sha256:2ec09455e38e9b0ed182a4933b76a9fd6c3300aebe3d87c2b0cffe70c5b77b07"}, - {file = "dearpygui-1.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:14ccf3cb6d877454a7943797e946e2b0f28ba7682e1cd876dac0a388853b01f8"}, - {file = "dearpygui-1.8.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:525849a1217ee1f78c7321a54cb5d2ffb5a80a55e25da5ceeb83ca5cc21b99e8"}, - {file = "dearpygui-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:9c1233e887f956df7747468f51459f583760fc2e82670cf0dc9b8adf54c8a01a"}, -] -debugpy = [ - {file = "debugpy-1.6.4-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:6ae238943482c78867ac707c09122688efb700372b617ffd364261e5e41f7a2f"}, - {file = "debugpy-1.6.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a39e7da178e1f22f4bc04b57f085e785ed1bcf424aaf318835a1a7129eefe35"}, - {file = "debugpy-1.6.4-cp310-cp310-win32.whl", hash = "sha256:143f79d0798a9acea21cd1d111badb789f19d414aec95fa6389cfea9485ddfb1"}, - {file = "debugpy-1.6.4-cp310-cp310-win_amd64.whl", hash = "sha256:563f148f94434365ec0ce94739c749aabf60bf67339e68a9446499f3582d62f3"}, - {file = "debugpy-1.6.4-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:1caee68f7e254267df908576c0d0938f8f88af16383f172cb9f0602e24c30c01"}, - {file = "debugpy-1.6.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40e2a83d31a16b83666f19fa06d97b2cc311af88e6266590579737949971a17e"}, - {file = "debugpy-1.6.4-cp37-cp37m-win32.whl", hash = "sha256:82229790442856962aec4767b98ba2559fe0998f897e9f21fb10b4fd24b6c436"}, - {file = "debugpy-1.6.4-cp37-cp37m-win_amd64.whl", hash = "sha256:67edf033f9e512958f7b472975ff9d9b7ff64bf4440f6f6ae44afdc66b89e6b6"}, - {file = "debugpy-1.6.4-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:4ab5e938925e5d973f567d6ef32751b17d10f3be3a8c4d73c52f53e727f69bf1"}, - {file = "debugpy-1.6.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8df268e9f72fc06efc2e75e8dc8e2b881d6a397356faec26efb2ee70b6863b7"}, - {file = "debugpy-1.6.4-cp38-cp38-win32.whl", hash = "sha256:86bd25f38f8b6c5d430a5e2931eebbd5f580c640f4819fcd236d0498790c7204"}, - {file = "debugpy-1.6.4-cp38-cp38-win_amd64.whl", hash = "sha256:62ba4179b372a62abf9c89b56997d70a4100c6dea6c2a4e0e4be5f45920b3253"}, - {file = "debugpy-1.6.4-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:d2968e589bda4e485a9c61f113754a28e48d88c5152ed8e0b2564a1fadbe50a5"}, - {file = "debugpy-1.6.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e62b8034ede98932b92268669318848a0d42133d857087a3b9cec03bb844c615"}, - {file = "debugpy-1.6.4-cp39-cp39-win32.whl", hash = "sha256:3d9c31baf64bf959a593996c108e911c5a9aa1693a296840e5469473f064bcec"}, - {file = "debugpy-1.6.4-cp39-cp39-win_amd64.whl", hash = "sha256:ea4bf208054e6d41749f17612066da861dff10102729d32c85b47f155223cf2b"}, - {file = "debugpy-1.6.4-py2.py3-none-any.whl", hash = "sha256:e886a1296cd20a10172e94788009ce74b759e54229ebd64a43fa5c2b4e62cd76"}, - {file = "debugpy-1.6.4.zip", hash = "sha256:d5ab9bd3f4e7faf3765fd52c7c43c074104ab1e109621dc73219099ed1a5399d"}, -] -decorator = [ - {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, - {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, -] -defusedxml = [ - {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, - {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, -] -Deprecated = [ - {file = "Deprecated-1.2.13-py2.py3-none-any.whl", hash = "sha256:64756e3e14c8c5eea9795d93c524551432a0be75629f8f29e67ab8caf076c76d"}, - {file = "Deprecated-1.2.13.tar.gz", hash = "sha256:43ac5335da90c31c24ba028af536a91d41d53f9e6901ddb021bcc572ce44e38d"}, -] -dill = [ - {file = "dill-0.3.6-py3-none-any.whl", hash = "sha256:a07ffd2351b8c678dfc4a856a3005f8067aea51d6ba6c700796a4d9e280f39f0"}, - {file = "dill-0.3.6.tar.gz", hash = "sha256:e5db55f3687856d8fbdab002ed78544e1c4559a130302693d839dfe8f93f2373"}, -] -distlib = [ - {file = "distlib-0.3.6-py2.py3-none-any.whl", hash = "sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e"}, - {file = "distlib-0.3.6.tar.gz", hash = "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46"}, -] -docutils = [ - {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, - {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, -] -entrypoints = [ - {file = "entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f"}, - {file = "entrypoints-0.4.tar.gz", hash = "sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4"}, -] -exceptiongroup = [ - {file = "exceptiongroup-1.0.4-py3-none-any.whl", hash = "sha256:542adf9dea4055530d6e1279602fa5cb11dab2395fa650b8674eaec35fc4a828"}, - {file = "exceptiongroup-1.0.4.tar.gz", hash = "sha256:bd14967b79cd9bdb54d97323216f8fdf533e278df937aa2a90089e7d6e06e5ec"}, -] -execnet = [ - {file = "execnet-1.9.0-py2.py3-none-any.whl", hash = "sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142"}, - {file = "execnet-1.9.0.tar.gz", hash = "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5"}, -] -executing = [ - {file = "executing-1.2.0-py2.py3-none-any.whl", hash = "sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc"}, - {file = "executing-1.2.0.tar.gz", hash = "sha256:19da64c18d2d851112f09c287f8d3dbbdf725ab0e569077efb6cdcbd3497c107"}, -] -fastjsonschema = [ - {file = "fastjsonschema-2.16.2-py3-none-any.whl", hash = "sha256:21f918e8d9a1a4ba9c22e09574ba72267a6762d47822db9add95f6454e51cc1c"}, - {file = "fastjsonschema-2.16.2.tar.gz", hash = "sha256:01e366f25d9047816fe3d288cbfc3e10541daf0af2044763f3d0ade42476da18"}, -] -filelock = [ - {file = "filelock-3.8.2-py3-none-any.whl", hash = "sha256:8df285554452285f79c035efb0c861eb33a4bcfa5b7a137016e32e6a90f9792c"}, - {file = "filelock-3.8.2.tar.gz", hash = "sha256:7565f628ea56bfcd8e54e42bdc55da899c85c1abfe1b5bcfd147e9188cebb3b2"}, -] -flake8 = [ - {file = "flake8-3.9.2-py2.py3-none-any.whl", hash = "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"}, - {file = "flake8-3.9.2.tar.gz", hash = "sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b"}, -] -flake8-bugbear = [ - {file = "flake8-bugbear-21.11.29.tar.gz", hash = "sha256:8b04cb2fafc6a78e1a9d873bd3988e4282f7959bb6b0d7c1ae648ec09b937a7b"}, - {file = "flake8_bugbear-21.11.29-py36.py37.py38-none-any.whl", hash = "sha256:179e41ddae5de5e3c20d1f61736feeb234e70958fbb56ab3c28a67739c8e9a82"}, -] -flake8-builtins = [ - {file = "flake8-builtins-1.5.3.tar.gz", hash = "sha256:09998853b2405e98e61d2ff3027c47033adbdc17f9fe44ca58443d876eb00f3b"}, - {file = "flake8_builtins-1.5.3-py2.py3-none-any.whl", hash = "sha256:7706babee43879320376861897e5d1468e396a40b8918ed7bccf70e5f90b8687"}, -] -flake8-comprehensions = [ - {file = "flake8-comprehensions-3.10.1.tar.gz", hash = "sha256:412052ac4a947f36b891143430fef4859705af11b2572fbb689f90d372cf26ab"}, - {file = "flake8_comprehensions-3.10.1-py3-none-any.whl", hash = "sha256:d763de3c74bc18a79c039a7ec732e0a1985b0c79309ceb51e56401ad0a2cd44e"}, -] -flake8-docstrings = [ - {file = "flake8-docstrings-1.6.0.tar.gz", hash = "sha256:9fe7c6a306064af8e62a055c2f61e9eb1da55f84bb39caef2b84ce53708ac34b"}, - {file = "flake8_docstrings-1.6.0-py2.py3-none-any.whl", hash = "sha256:99cac583d6c7e32dd28bbfbef120a7c0d1b6dde4adb5a9fd441c4227a6534bde"}, -] -flake8-plugin-utils = [ - {file = "flake8-plugin-utils-1.3.2.tar.gz", hash = "sha256:20fa2a8ca2decac50116edb42e6af0a1253ef639ad79941249b840531889c65a"}, - {file = "flake8_plugin_utils-1.3.2-py3-none-any.whl", hash = "sha256:1fe43e3e9acf3a7c0f6b88f5338cad37044d2f156c43cb6b080b5f9da8a76f06"}, -] -flake8-pytest-style = [ - {file = "flake8-pytest-style-1.6.0.tar.gz", hash = "sha256:c1175713e9e11b78cd1a035ed0bca0d1e41d09c4af329a952750b61d4194ddac"}, - {file = "flake8_pytest_style-1.6.0-py3-none-any.whl", hash = "sha256:5fedb371a950e9fe0e0e6bfc854be7d99151271208f34cd2cc517681ece27780"}, -] -flake8-rst-docstrings = [ - {file = "flake8-rst-docstrings-0.2.7.tar.gz", hash = "sha256:2740067ab9237559dd45a3434d8c987792c7b259ca563621a3b95efe201f5382"}, - {file = "flake8_rst_docstrings-0.2.7-py3-none-any.whl", hash = "sha256:5d56075dce360bcc9c6775bfe7cb431aa395de600ca7e8d40580a28d50b2a803"}, -] -flake8-simplify = [ - {file = "flake8_simplify-0.14.6-py3-none-any.whl", hash = "sha256:8831fb8ff46dee1018d0b4c29f043a010cffafce7309fca536fde8461b98b6f6"}, - {file = "flake8_simplify-0.14.6.tar.gz", hash = "sha256:c4008db8016707684a1f0502ee69f3c2da37687d3cf7031cc1f326bf5986bf47"}, -] -fonttools = [ - {file = "fonttools-4.38.0-py3-none-any.whl", hash = "sha256:820466f43c8be8c3009aef8b87e785014133508f0de64ec469e4efb643ae54fb"}, - {file = "fonttools-4.38.0.zip", hash = "sha256:2bb244009f9bf3fa100fc3ead6aeb99febe5985fa20afbfbaa2f8946c2fbdaf1"}, -] -fqdn = [ - {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, - {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, -] -furo = [ - {file = "furo-2022.9.29-py3-none-any.whl", hash = "sha256:559ee17999c0f52728481dcf6b1b0cf8c9743e68c5e3a18cb45a7992747869a9"}, - {file = "furo-2022.9.29.tar.gz", hash = "sha256:d4238145629c623609c2deb5384f8d036e2a1ee2a101d64b67b4348112470dbd"}, -] -gitdb = [ - {file = "gitdb-4.0.10-py3-none-any.whl", hash = "sha256:c286cf298426064079ed96a9e4a9d39e7f3e9bf15ba60701e95f5492f28415c7"}, - {file = "gitdb-4.0.10.tar.gz", hash = "sha256:6eb990b69df4e15bad899ea868dc46572c3f75339735663b81de79b06f17eb9a"}, -] -GitPython = [ - {file = "GitPython-3.1.29-py3-none-any.whl", hash = "sha256:41eea0deec2deea139b459ac03656f0dd28fc4a3387240ec1d3c259a2c47850f"}, - {file = "GitPython-3.1.29.tar.gz", hash = "sha256:cc36bfc4a3f913e66805a28e84703e419d9c264c1077e537b54f0e1af85dbefd"}, -] -glcontext = [ - {file = "glcontext-2.3.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8ece87d8616bf12e55a08a05159f4303c8b82d348c2c43c7297c85d8e95dfa3e"}, - {file = "glcontext-2.3.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b5dcd68b23b1a549a3b0851d3621630e492ff9015a18f29f2512088b4e03e4d9"}, - {file = "glcontext-2.3.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3dc6a6133bffc33cb75bbc79dc08bd1e206017ac69ec68f703227aaf5f5129bb"}, - {file = "glcontext-2.3.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc906a19be96d2820dee8e681ca1d3129821eb6e5c4f1544db723edf0c0696bd"}, - {file = "glcontext-2.3.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89869925f4e1762878561fa1e3cbd1ee5ce73e5597275b5fc8bc054dd894fca4"}, - {file = "glcontext-2.3.7-cp310-cp310-win32.whl", hash = "sha256:088482e07aed6229a34fbb1d0c5fbe0ad9c413dbddb5eaaa8e5c83d933cbe8d6"}, - {file = "glcontext-2.3.7-cp310-cp310-win_amd64.whl", hash = "sha256:03b505fc8ce2dfcf800feac0e20cbb7b1899a5ef7407fa0cccb3267a5b2abbdb"}, - {file = "glcontext-2.3.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:155154084bdedfc8904524d8bd212e5896cc5d5caf1d45c19d13dc34aee4b5ab"}, - {file = "glcontext-2.3.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:65bf63b2068e13183e34a4beaf921f20cd144a25cebed0fa9a46f25e8b47577d"}, - {file = "glcontext-2.3.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51e04b162529f99c7b764129e07aaa3ec8edfc63ca7a212b71e348319f8b821b"}, - {file = "glcontext-2.3.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0961811d85ac551b1ce1f197296a8e5f497b35a149cfc6e128f74dfaef5e592f"}, - {file = "glcontext-2.3.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa4595600a699ed13e854b87116a1519a25e47a10100df01650c1be3532bd629"}, - {file = "glcontext-2.3.7-cp311-cp311-win32.whl", hash = "sha256:7dc827f119ccc3ea55b7bec73573516117c55319edc93bc2bbcf389bf1e7acfe"}, - {file = "glcontext-2.3.7-cp311-cp311-win_amd64.whl", hash = "sha256:a22a3fbb3abefd7a9f5a672af8fccb8d8d996b2eae2075ac9d8ca10f4a6f6653"}, - {file = "glcontext-2.3.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6df4cf354adb911a9ca58bc5c60fb1ae27544527878bc3ddf8f7ea56946c6fcc"}, - {file = "glcontext-2.3.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f1656e931c937f8bdce12c551fa0077db814b123e7f16b6db26e1e7c89dae16"}, - {file = "glcontext-2.3.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:058bf839884b5d5d8488978ed804023be64fc9bafb674a0ede1ba26c05bd9146"}, - {file = "glcontext-2.3.7-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f17be52c99e3eaeefaaac780bde40bfa99be3ad32bbfed346bb347c9d0b01967"}, - {file = "glcontext-2.3.7-cp37-cp37m-win32.whl", hash = "sha256:5a4cc4fef74dcab0b428ef750fad3c05311657ffb4f1dd3d4afa75e664551588"}, - {file = "glcontext-2.3.7-cp37-cp37m-win_amd64.whl", hash = "sha256:fd03d6d8dbfdd9bab97ada98759e345b29d50f690cec95dd01d22d02f616bfea"}, - {file = "glcontext-2.3.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:03b3925472771607d13feb9a0de93b04408ae86c91eee3f5e09e43744f90b1af"}, - {file = "glcontext-2.3.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f234ebcc3355155811389c320974056ce20233770205fc7cb41d8653d6137efa"}, - {file = "glcontext-2.3.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:46ef33b616027a616dcceba33bc48e589ba24fa84ee43c5b8611c5b57d2dace3"}, - {file = "glcontext-2.3.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ff822473d498d606424f92a341d01121562af35bf1d3d0e2ccd1f9c2f86859b"}, - {file = "glcontext-2.3.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87c90b525296c4930b1f74bf460b97af052c3cc9ba47d811f416ed82e1b16b03"}, - {file = "glcontext-2.3.7-cp38-cp38-win32.whl", hash = "sha256:f1444229f84a7aea48ce3f1143147acee92eee264826db4c41ea38c6b0a924a9"}, - {file = "glcontext-2.3.7-cp38-cp38-win_amd64.whl", hash = "sha256:59580776fd7e520995b82a6134c8ca7152a7881e174077fc785f4cc69c476d69"}, - {file = "glcontext-2.3.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8aa90a648f17bacacef95b09a5fab368e8feff3714fc4b81eb9374bd439850e6"}, - {file = "glcontext-2.3.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:867fe03c1c241d2416b719e23d1671537e34e03bab741dcc50d49298c1397073"}, - {file = "glcontext-2.3.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae930d226f9145ec580f3fe10fc23262b8c21a6a0cd6fbc081a6606e9000ce74"}, - {file = "glcontext-2.3.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cc73099fa7525a20e2021a2f2befa61e9ef306364838c1859ba79f5bd8eda33a"}, - {file = "glcontext-2.3.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:755698083c6119e771ea3f5837143324636700e1e5b397885c05085a837d5876"}, - {file = "glcontext-2.3.7-cp39-cp39-win32.whl", hash = "sha256:ab8147607af85fc2ec2e02b4364ff36b636f63781295e74220dc5c5856794e07"}, - {file = "glcontext-2.3.7-cp39-cp39-win_amd64.whl", hash = "sha256:2fae2d4bcb0564e0eb8e72c97e149faebfad369aeaef74ed7fd17f5f84a07428"}, - {file = "glcontext-2.3.7-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e48550269c3baff04cc46ca79bd9d2d5a62216665751b10aa86d95ebe182d319"}, - {file = "glcontext-2.3.7-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82eff3e5664c5a17fc0cbb1dae2c32088cdd3c3bfbfe4b9c71012275c2a63e8e"}, - {file = "glcontext-2.3.7-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44f7dbf800e6f933a5c56e07b18ef70f44949f34bf57f5d5318e2199c12cbfbc"}, - {file = "glcontext-2.3.7-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d18b3e9e9259595dd5c538c1fd9238f8b26c22d6351397e721ef8a89ad55f12"}, - {file = "glcontext-2.3.7-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:376e12d230fd198a329dfe253b41480b0a015a2dabbac5eecf6b279fe3afb1b3"}, - {file = "glcontext-2.3.7-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:84dc3b831af386cb20cae8fb10ac78d8007bb29118730db2e9f21c329a528028"}, - {file = "glcontext-2.3.7-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b85c873315741dbc208c199cbe449aa77d1831551dd78d9b3d67e0a6f9eb576d"}, - {file = "glcontext-2.3.7-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:94e47dd8cf39cabe20b41dd0c4c6589f0c7a4de2a5bad8e51ab0fc0b4a26ae6b"}, - {file = "glcontext-2.3.7-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79e561b67e606b6e13ba58e6ae3e688e3429dbb5d60e551ba40d649432044f37"}, - {file = "glcontext-2.3.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d986976c9b758d60d966fbaf8bdff129d125e8b2c58889d2220ca96991f1071e"}, - {file = "glcontext-2.3.7-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:891b56a3bbaf3470595c218e847e79448e95cecb412224c8585da640c61cf29a"}, - {file = "glcontext-2.3.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a349317c9d634aa56e30aae9ad408bc1b9de281af0e4f87de682b454ebaf540e"}, - {file = "glcontext-2.3.7-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1716d21d423a1a2261cd717bc66714eeb5464d6a061b92678f356ca69cfd1255"}, - {file = "glcontext-2.3.7-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:440ff5f59f318ce495c6bdddfa01a23dd64713fb960ceb87c3a9423745781d47"}, - {file = "glcontext-2.3.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ef0c7e534e53f14b7b09dc3fe1e207243c9bb3eb2543d9876ed253156ca7a8bf"}, - {file = "glcontext-2.3.7.tar.gz", hash = "sha256:bb2d0503f45ad85ca7319bd37fd983e374b3f824c38a450b5f72cfc974114156"}, -] -identify = [ - {file = "identify-2.5.9-py2.py3-none-any.whl", hash = "sha256:a390fb696e164dbddb047a0db26e57972ae52fbd037ae68797e5ae2f4492485d"}, - {file = "identify-2.5.9.tar.gz", hash = "sha256:906036344ca769539610436e40a684e170c3648b552194980bb7b617a8daeb9f"}, -] -idna = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, -] -imagesize = [ - {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, - {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, -] -importlib-metadata = [ - {file = "importlib_metadata-5.1.0-py3-none-any.whl", hash = "sha256:d84d17e21670ec07990e1044a99efe8d615d860fd176fc29ef5c306068fda313"}, - {file = "importlib_metadata-5.1.0.tar.gz", hash = "sha256:d5059f9f1e8e41f80e9c56c2ee58811450c31984dfa625329ffd7c0dad88a73b"}, -] -importlib-resources = [ - {file = "importlib_resources-5.10.1-py3-none-any.whl", hash = "sha256:c09b067d82e72c66f4f8eb12332f5efbebc9b007c0b6c40818108c9870adc363"}, - {file = "importlib_resources-5.10.1.tar.gz", hash = "sha256:32bb095bda29741f6ef0e5278c42df98d135391bee5f932841efc0041f748dc3"}, -] -iniconfig = [ - {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, - {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, -] -ipykernel = [ - {file = "ipykernel-6.19.1-py3-none-any.whl", hash = "sha256:8b358a5aaa77c7e4b6cec22b03a910ab6c2968a449dced12082b6a6c56404083"}, - {file = "ipykernel-6.19.1.tar.gz", hash = "sha256:d472029d14408273265a7b0ec6d1923f1b1f51d8643f125c6a6881e5e6e56a39"}, -] -ipython = [ - {file = "ipython-8.7.0-py3-none-any.whl", hash = "sha256:352042ddcb019f7c04e48171b4dd78e4c4bb67bf97030d170e154aac42b656d9"}, - {file = "ipython-8.7.0.tar.gz", hash = "sha256:882899fe78d5417a0aa07f995db298fa28b58faeba2112d2e3a4c95fe14bb738"}, -] -ipython_genutils = [ - {file = "ipython_genutils-0.2.0-py2.py3-none-any.whl", hash = "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8"}, - {file = "ipython_genutils-0.2.0.tar.gz", hash = "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8"}, -] -isoduration = [ - {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, - {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, -] -isort = [ - {file = "isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"}, - {file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"}, -] -isosurfaces = [ - {file = "isosurfaces-0.1.0-py3-none-any.whl", hash = "sha256:a3421f7e7115f72f8f1af538ac4723e5570b1aaa0ddfc6a86520d2d781f3e91f"}, - {file = "isosurfaces-0.1.0.tar.gz", hash = "sha256:fa1b44e5e59d2f429add49289ab89e36f8dcda49b7badd99e0beea273be331f4"}, -] -jedi = [ - {file = "jedi-0.18.2-py2.py3-none-any.whl", hash = "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e"}, - {file = "jedi-0.18.2.tar.gz", hash = "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612"}, -] -Jinja2 = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, -] -json5 = [ - {file = "json5-0.9.10-py2.py3-none-any.whl", hash = "sha256:993189671e7412e9cdd8be8dc61cf402e8e579b35f1d1bb20ae6b09baa78bbce"}, - {file = "json5-0.9.10.tar.gz", hash = "sha256:ad9f048c5b5a4c3802524474ce40a622fae789860a86f10cc4f7e5f9cf9b46ab"}, -] -jsonpointer = [ - {file = "jsonpointer-2.3-py2.py3-none-any.whl", hash = "sha256:51801e558539b4e9cd268638c078c6c5746c9ac96bc38152d443400e4f3793e9"}, - {file = "jsonpointer-2.3.tar.gz", hash = "sha256:97cba51526c829282218feb99dab1b1e6bdf8efd1c43dc9d57be093c0d69c99a"}, -] -jsonschema = [ - {file = "jsonschema-4.17.3-py3-none-any.whl", hash = "sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6"}, - {file = "jsonschema-4.17.3.tar.gz", hash = "sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d"}, -] -jupyter-client = [ - {file = "jupyter_client-7.4.8-py3-none-any.whl", hash = "sha256:d4a67ae86ee014bcb96bd8190714f6af921f2b0f52f4208b086aa5acfd9f8d65"}, - {file = "jupyter_client-7.4.8.tar.gz", hash = "sha256:109a3c33b62a9cf65aa8325850a0999a795fac155d9de4f7555aef5f310ee35a"}, -] -jupyter-core = [ - {file = "jupyter_core-5.1.0-py3-none-any.whl", hash = "sha256:f5740d99606958544396914b08e67b668f45e7eff99ab47a7f4bcead419c02f4"}, - {file = "jupyter_core-5.1.0.tar.gz", hash = "sha256:a5ae7c09c55c0b26f692ec69323ba2b62e8d7295354d20f6cd57b749de4a05bf"}, -] -jupyter-events = [ - {file = "jupyter_events-0.5.0-py3-none-any.whl", hash = "sha256:6f7b67bf42b8a370c992187194ed02847dfa02307a7aebe9913e2d3979b9b6b8"}, - {file = "jupyter_events-0.5.0.tar.gz", hash = "sha256:e27ffdd6138699d47d42cb65ae6d79334ff7c0d923694381c991ce56a140f2cd"}, -] -jupyter-server = [ - {file = "jupyter_server-2.0.1-py3-none-any.whl", hash = "sha256:3bc09974a5290249de6924a614933e6f4f3d6d11f3061423a9f4e0271064a8b3"}, - {file = "jupyter_server-2.0.1.tar.gz", hash = "sha256:6e71268380ad7e4f2d9dda2f3e51a4fd4d1997b5390d5acdb74c7a195cfe4c00"}, -] -jupyter-server-terminals = [ - {file = "jupyter_server_terminals-0.4.2-py3-none-any.whl", hash = "sha256:c0eaacee6cac21b597c23c38dd523dc4e9b947f97af5101e0396c08f28db3e37"}, - {file = "jupyter_server_terminals-0.4.2.tar.gz", hash = "sha256:0e68cba38eb0f9f2d93f1160e0a7f84b943d0d0c4d2f77eeaabbb4a2919c47c6"}, -] -jupyterlab = [ - {file = "jupyterlab-3.5.1-py3-none-any.whl", hash = "sha256:c6748b4f21850c0095ed2187ce86d7e06edd9d1180cc4e6a572c4013163c0c74"}, - {file = "jupyterlab-3.5.1.tar.gz", hash = "sha256:59a1b2d79d4b3ebee4d997c8bed8cf450f460c7c35f46b613a93f0b7712b47fc"}, -] -jupyterlab-pygments = [ - {file = "jupyterlab_pygments-0.2.2-py2.py3-none-any.whl", hash = "sha256:2405800db07c9f770863bcf8049a529c3dd4d3e28536638bd7c1c01d2748309f"}, - {file = "jupyterlab_pygments-0.2.2.tar.gz", hash = "sha256:7405d7fde60819d905a9fa8ce89e4cd830e318cdad22a0030f7a901da705585d"}, -] -jupyterlab-server = [ - {file = "jupyterlab_server-2.16.3-py3-none-any.whl", hash = "sha256:d18eb623428b4ee732c2258afaa365eedd70f38b609981ea040027914df32bc6"}, - {file = "jupyterlab_server-2.16.3.tar.gz", hash = "sha256:635a0b176a901f19351c02221a124e59317c476f511200409b7d867e8b2905c3"}, -] -kiwisolver = [ - {file = "kiwisolver-1.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2f5e60fabb7343a836360c4f0919b8cd0d6dbf08ad2ca6b9cf90bf0c76a3c4f6"}, - {file = "kiwisolver-1.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:10ee06759482c78bdb864f4109886dff7b8a56529bc1609d4f1112b93fe6423c"}, - {file = "kiwisolver-1.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c79ebe8f3676a4c6630fd3f777f3cfecf9289666c84e775a67d1d358578dc2e3"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:abbe9fa13da955feb8202e215c4018f4bb57469b1b78c7a4c5c7b93001699938"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7577c1987baa3adc4b3c62c33bd1118c3ef5c8ddef36f0f2c950ae0b199e100d"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8ad8285b01b0d4695102546b342b493b3ccc6781fc28c8c6a1bb63e95d22f09"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ed58b8acf29798b036d347791141767ccf65eee7f26bde03a71c944449e53de"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a68b62a02953b9841730db7797422f983935aeefceb1679f0fc85cbfbd311c32"}, - {file = "kiwisolver-1.4.4-cp310-cp310-win32.whl", hash = "sha256:e92a513161077b53447160b9bd8f522edfbed4bd9759e4c18ab05d7ef7e49408"}, - {file = "kiwisolver-1.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:3fe20f63c9ecee44560d0e7f116b3a747a5d7203376abeea292ab3152334d004"}, - {file = "kiwisolver-1.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e0ea21f66820452a3f5d1655f8704a60d66ba1191359b96541eaf457710a5fc6"}, - {file = "kiwisolver-1.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bc9db8a3efb3e403e4ecc6cd9489ea2bac94244f80c78e27c31dcc00d2790ac2"}, - {file = "kiwisolver-1.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d5b61785a9ce44e5a4b880272baa7cf6c8f48a5180c3e81c59553ba0cb0821ca"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2dbb44c3f7e6c4d3487b31037b1bdbf424d97687c1747ce4ff2895795c9bf69"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6295ecd49304dcf3bfbfa45d9a081c96509e95f4b9d0eb7ee4ec0530c4a96514"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4bd472dbe5e136f96a4b18f295d159d7f26fd399136f5b17b08c4e5f498cd494"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf7d9fce9bcc4752ca4a1b80aabd38f6d19009ea5cbda0e0856983cf6d0023f5"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78d6601aed50c74e0ef02f4204da1816147a6d3fbdc8b3872d263338a9052c51"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:877272cf6b4b7e94c9614f9b10140e198d2186363728ed0f701c6eee1baec1da"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:db608a6757adabb32f1cfe6066e39b3706d8c3aa69bbc353a5b61edad36a5cb4"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:5853eb494c71e267912275e5586fe281444eb5e722de4e131cddf9d442615626"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:f0a1dbdb5ecbef0d34eb77e56fcb3e95bbd7e50835d9782a45df81cc46949750"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:283dffbf061a4ec60391d51e6155e372a1f7a4f5b15d59c8505339454f8989e4"}, - {file = "kiwisolver-1.4.4-cp311-cp311-win32.whl", hash = "sha256:d06adcfa62a4431d404c31216f0f8ac97397d799cd53800e9d3efc2fbb3cf14e"}, - {file = "kiwisolver-1.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:e7da3fec7408813a7cebc9e4ec55afed2d0fd65c4754bc376bf03498d4e92686"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:62ac9cc684da4cf1778d07a89bf5f81b35834cb96ca523d3a7fb32509380cbf6"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41dae968a94b1ef1897cb322b39360a0812661dba7c682aa45098eb8e193dbdf"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02f79693ec433cb4b5f51694e8477ae83b3205768a6fb48ffba60549080e295b"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0611a0a2a518464c05ddd5a3a1a0e856ccc10e67079bb17f265ad19ab3c7597"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:db5283d90da4174865d520e7366801a93777201e91e79bacbac6e6927cbceede"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1041feb4cda8708ce73bb4dcb9ce1ccf49d553bf87c3954bdfa46f0c3f77252c"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-win32.whl", hash = "sha256:a553dadda40fef6bfa1456dc4be49b113aa92c2a9a9e8711e955618cd69622e3"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-win_amd64.whl", hash = "sha256:03baab2d6b4a54ddbb43bba1a3a2d1627e82d205c5cf8f4c924dc49284b87166"}, - {file = "kiwisolver-1.4.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:841293b17ad704d70c578f1f0013c890e219952169ce8a24ebc063eecf775454"}, - {file = "kiwisolver-1.4.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f4f270de01dd3e129a72efad823da90cc4d6aafb64c410c9033aba70db9f1ff0"}, - {file = "kiwisolver-1.4.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f9f39e2f049db33a908319cf46624a569b36983c7c78318e9726a4cb8923b26c"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c97528e64cb9ebeff9701e7938653a9951922f2a38bd847787d4a8e498cc83ae"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d1573129aa0fd901076e2bfb4275a35f5b7aa60fbfb984499d661ec950320b0"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad881edc7ccb9d65b0224f4e4d05a1e85cf62d73aab798943df6d48ab0cd79a1"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b428ef021242344340460fa4c9185d0b1f66fbdbfecc6c63eff4b7c29fad429d"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2e407cb4bd5a13984a6c2c0fe1845e4e41e96f183e5e5cd4d77a857d9693494c"}, - {file = "kiwisolver-1.4.4-cp38-cp38-win32.whl", hash = "sha256:75facbe9606748f43428fc91a43edb46c7ff68889b91fa31f53b58894503a191"}, - {file = "kiwisolver-1.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:5bce61af018b0cb2055e0e72e7d65290d822d3feee430b7b8203d8a855e78766"}, - {file = "kiwisolver-1.4.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8c808594c88a025d4e322d5bb549282c93c8e1ba71b790f539567932722d7bd8"}, - {file = "kiwisolver-1.4.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f0a71d85ecdd570ded8ac3d1c0f480842f49a40beb423bb8014539a9f32a5897"}, - {file = "kiwisolver-1.4.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b533558eae785e33e8c148a8d9921692a9fe5aa516efbdff8606e7d87b9d5824"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:efda5fc8cc1c61e4f639b8067d118e742b812c930f708e6667a5ce0d13499e29"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7c43e1e1206cd421cd92e6b3280d4385d41d7166b3ed577ac20444b6995a445f"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc8d3bd6c72b2dd9decf16ce70e20abcb3274ba01b4e1c96031e0c4067d1e7cd"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ea39b0ccc4f5d803e3337dd46bcce60b702be4d86fd0b3d7531ef10fd99a1ac"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:968f44fdbf6dd757d12920d63b566eeb4d5b395fd2d00d29d7ef00a00582aac9"}, - {file = "kiwisolver-1.4.4-cp39-cp39-win32.whl", hash = "sha256:da7e547706e69e45d95e116e6939488d62174e033b763ab1496b4c29b76fabea"}, - {file = "kiwisolver-1.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:ba59c92039ec0a66103b1d5fe588fa546373587a7d68f5c96f743c3396afc04b"}, - {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:91672bacaa030f92fc2f43b620d7b337fd9a5af28b0d6ed3f77afc43c4a64b5a"}, - {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:787518a6789009c159453da4d6b683f468ef7a65bbde796bcea803ccf191058d"}, - {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da152d8cdcab0e56e4f45eb08b9aea6455845ec83172092f09b0e077ece2cf7a"}, - {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ecb1fa0db7bf4cff9dac752abb19505a233c7f16684c5826d1f11ebd9472b871"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:28bc5b299f48150b5f822ce68624e445040595a4ac3d59251703779836eceff9"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:81e38381b782cc7e1e46c4e14cd997ee6040768101aefc8fa3c24a4cc58e98f8"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2a66fdfb34e05b705620dd567f5a03f239a088d5a3f321e7b6ac3239d22aa286"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:872b8ca05c40d309ed13eb2e582cab0c5a05e81e987ab9c521bf05ad1d5cf5cb"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:70e7c2e7b750585569564e2e5ca9845acfaa5da56ac46df68414f29fea97be9f"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9f85003f5dfa867e86d53fac6f7e6f30c045673fa27b603c397753bebadc3008"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e307eb9bd99801f82789b44bb45e9f541961831c7311521b13a6c85afc09767"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1792d939ec70abe76f5054d3f36ed5656021dcad1322d1cc996d4e54165cef9"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6cb459eea32a4e2cf18ba5fcece2dbdf496384413bc1bae15583f19e567f3b2"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:36dafec3d6d6088d34e2de6b85f9d8e2324eb734162fba59d2ba9ed7a2043d5b"}, - {file = "kiwisolver-1.4.4.tar.gz", hash = "sha256:d41997519fcba4a1e46eb4a2fe31bc12f0ff957b2b81bac28db24744f333e955"}, -] -lazy-object-proxy = [ - {file = "lazy-object-proxy-1.8.0.tar.gz", hash = "sha256:c219a00245af0f6fa4e95901ed28044544f50152840c5b6a3e7b2568db34d156"}, - {file = "lazy_object_proxy-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4fd031589121ad46e293629b39604031d354043bb5cdf83da4e93c2d7f3389fe"}, - {file = "lazy_object_proxy-1.8.0-cp310-cp310-win32.whl", hash = "sha256:b70d6e7a332eb0217e7872a73926ad4fdc14f846e85ad6749ad111084e76df25"}, - {file = "lazy_object_proxy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:eb329f8d8145379bf5dbe722182410fe8863d186e51bf034d2075eb8d85ee25b"}, - {file = "lazy_object_proxy-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4e2d9f764f1befd8bdc97673261b8bb888764dfdbd7a4d8f55e4fbcabb8c3fb7"}, - {file = "lazy_object_proxy-1.8.0-cp311-cp311-win32.whl", hash = "sha256:e20bfa6db17a39c706d24f82df8352488d2943a3b7ce7d4c22579cb89ca8896e"}, - {file = "lazy_object_proxy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:14010b49a2f56ec4943b6cf925f597b534ee2fe1f0738c84b3bce0c1a11ff10d"}, - {file = "lazy_object_proxy-1.8.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6850e4aeca6d0df35bb06e05c8b934ff7c533734eb51d0ceb2d63696f1e6030c"}, - {file = "lazy_object_proxy-1.8.0-cp37-cp37m-win32.whl", hash = "sha256:5b51d6f3bfeb289dfd4e95de2ecd464cd51982fe6f00e2be1d0bf94864d58acd"}, - {file = "lazy_object_proxy-1.8.0-cp37-cp37m-win_amd64.whl", hash = "sha256:6f593f26c470a379cf7f5bc6db6b5f1722353e7bf937b8d0d0b3fba911998858"}, - {file = "lazy_object_proxy-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c1c7c0433154bb7c54185714c6929acc0ba04ee1b167314a779b9025517eada"}, - {file = "lazy_object_proxy-1.8.0-cp38-cp38-win32.whl", hash = "sha256:d176f392dbbdaacccf15919c77f526edf11a34aece58b55ab58539807b85436f"}, - {file = "lazy_object_proxy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:afcaa24e48bb23b3be31e329deb3f1858f1f1df86aea3d70cb5c8578bfe5261c"}, - {file = "lazy_object_proxy-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:71d9ae8a82203511a6f60ca5a1b9f8ad201cac0fc75038b2dc5fa519589c9288"}, - {file = "lazy_object_proxy-1.8.0-cp39-cp39-win32.whl", hash = "sha256:8f6ce2118a90efa7f62dd38c7dbfffd42f468b180287b748626293bf12ed468f"}, - {file = "lazy_object_proxy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:eac3a9a5ef13b332c059772fd40b4b1c3d45a3a2b05e33a361dee48e54a4dad0"}, - {file = "lazy_object_proxy-1.8.0-pp37-pypy37_pp73-any.whl", hash = "sha256:ae032743794fba4d171b5b67310d69176287b5bf82a21f588282406a79498891"}, - {file = "lazy_object_proxy-1.8.0-pp38-pypy38_pp73-any.whl", hash = "sha256:7e1561626c49cb394268edd00501b289053a652ed762c58e1081224c8d881cec"}, - {file = "lazy_object_proxy-1.8.0-pp39-pypy39_pp73-any.whl", hash = "sha256:ce58b2b3734c73e68f0e30e4e725264d4d6be95818ec0a0be4bb6bf9a7e79aa8"}, -] -ManimPango = [ - {file = "ManimPango-0.4.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ad4f43f3c009a9c2f37607f1a4c51bcb3cde0911f2cf262cb7797b44556d005e"}, - {file = "ManimPango-0.4.3-cp310-cp310-win32.whl", hash = "sha256:49ebf511467e5feb32427a9d4a61a381b52c41b02facdfbdeee9d8ff49cbdf14"}, - {file = "ManimPango-0.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:6ce45a782d844fbc6d6476334b1bf9855697466f6eb299491108dfb45bf45211"}, - {file = "ManimPango-0.4.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:138e4fc9805132b39c490e49327687b1518d9e4ccc7d3c34c8b40367605ec0d9"}, - {file = "ManimPango-0.4.3-cp311-cp311-win32.whl", hash = "sha256:4039228b466fd56fbcd38d451ebbbc77124af09b9a047f07964334b1debe9881"}, - {file = "ManimPango-0.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:302c5e157d1b188759e84b44da85e396180cbcaf71bad3adf7792fc2cbad29fd"}, - {file = "ManimPango-0.4.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d03a13712376d25ef4679a17a8584533a1405d315d66d317934d6d576786eea6"}, - {file = "ManimPango-0.4.3-cp37-cp37m-win32.whl", hash = "sha256:bf1712059111378558b36d3b73f2ed47b0431e2f7b9706887735c81e64b7d004"}, - {file = "ManimPango-0.4.3-cp37-cp37m-win_amd64.whl", hash = "sha256:58d6119f64f4ba1e0ae11c3edd115616780e113701359593cb3a4d11b7ff7d64"}, - {file = "ManimPango-0.4.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6ff3d7c02195bc7b38146c1de7acb69e7588670976f260a93dd83436ccd85ab8"}, - {file = "ManimPango-0.4.3-cp38-cp38-win32.whl", hash = "sha256:c31d5581a14b9644ad6fa2645fa5a171048d204f7c47be62e9dc31af2e48bd8a"}, - {file = "ManimPango-0.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:edfdbf355be331dc489fcaf67521e26f3c00ed1f084308d96b5e5ab244c3fba0"}, - {file = "ManimPango-0.4.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b9dc620362e5ff1e984a9801d2886a70a48561c13976e83c1e9f3bd0a18618a1"}, - {file = "ManimPango-0.4.3-cp39-cp39-win32.whl", hash = "sha256:cb2bc381a301fca5b27ff73169db2be7d3f42eddd6812216fb0e2e6be07c7e79"}, - {file = "ManimPango-0.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:5f3430fccc6270812b2f0ebaa01d653cfaea517821b04260a8e706e19ce18a76"}, - {file = "ManimPango-0.4.3.tar.gz", hash = "sha256:732f1cb98bcc122c0dee93bb54966aa595f90730e5096ad6d86602cf4ba1a103"}, -] -mapbox-earcut = [ - {file = "mapbox_earcut-1.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:60f8299b724b5ad1f171c2666a12591845536b0e9318ddc9649f75805096686c"}, - {file = "mapbox_earcut-1.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4af0911ed9d1920c36c54b500ea69fbcc948f409c66f632c75b15fee04c7544e"}, - {file = "mapbox_earcut-1.0.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:584fd2f7de878f14b3268257ec3c55bac146f1adc1887a64f0ecbf91ee39489f"}, - {file = "mapbox_earcut-1.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20929541c1c9f5fefde45c6c33e8ed3138c7bdd1034ced998877913878f3457c"}, - {file = "mapbox_earcut-1.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:48e8d8ebadd4e4d0dfd87374d43ca3caf8c8e692f1b6897588594d12527d5020"}, - {file = "mapbox_earcut-1.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:352f92997fd39024919a258db29df1642dd98632807ca96e737242adf64b5e96"}, - {file = "mapbox_earcut-1.0.1-cp310-cp310-win32.whl", hash = "sha256:5cf359c5ae1a5dcdd6d9c150ec43a820a289c28596ae7c52de09075543cc19ae"}, - {file = "mapbox_earcut-1.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f5cd49d6e13b3627c6cd6d3a945285e1ce7e9b193f3ce5ca53f0b7b86acd41e"}, - {file = "mapbox_earcut-1.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1e02d61d01aa1239ffbe1b8384cdc224d7c67db604eb7bfc34dd39fb1dc515c2"}, - {file = "mapbox_earcut-1.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d170d0a79b4ef3c9591ec6727a0ab35bae9e267b389122365343d6f55f9027a0"}, - {file = "mapbox_earcut-1.0.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78945356229992d7aa6da750059f401f329651adc76c000505a0e9e4f93be5df"}, - {file = "mapbox_earcut-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66cf29a2434d3366889c69fc50e6d2f9f1abf3a8a4154c7e03ef8f180d3bea40"}, - {file = "mapbox_earcut-1.0.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:a73f6f422932b2758b03f78e92aa5c4d5b5f7ce6456483f5993f4677b0bbde23"}, - {file = "mapbox_earcut-1.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9af9369266bf0ca32f4d401152217c46c699392513f22639c6b1be32bde9c1cc"}, - {file = "mapbox_earcut-1.0.1-cp311-cp311-win32.whl", hash = "sha256:ff9a13be4364625697b0e0e04ba6a0f77300148b871bba0a85bfa67e972e85c4"}, - {file = "mapbox_earcut-1.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:5e736557539c74fa969e866889c2b0149fc12668f35e3ae33667d837ff2880d3"}, - {file = "mapbox_earcut-1.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:aa6111a18efacb79c081f3d3cdd7d25d0585bb0e9f28896b207ebe1d56efa40e"}, - {file = "mapbox_earcut-1.0.1-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2911829d1e6e5e1282fbe2840fadf578f606580f02ed436346c2d51c92f810b"}, - {file = "mapbox_earcut-1.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01ff909a7b8405a923abedd701b53633c997cc2b5dc9d5b78462f51c25ec2c33"}, - {file = "mapbox_earcut-1.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:b7e73477b4ef3951ef5c32848126f047ac7fd2dd04dc033444a85261a346ed08"}, - {file = "mapbox_earcut-1.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:dae325af3553afa4d0ca0caa5afe57dc3d2e3a90a51dfbabc49a5ce1ea1009f7"}, - {file = "mapbox_earcut-1.0.1-cp36-cp36m-win32.whl", hash = "sha256:29f8f746a9c68f1509084b0c78227d4e142241a2e30aab6def872e53a46f7281"}, - {file = "mapbox_earcut-1.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:3c487b93b0e1059b404be4daea62c22cfc8054ffd88591377848c8e399d4abeb"}, - {file = "mapbox_earcut-1.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f85f8d95503dba4612a2dd5c076ed18845a46cea4ba38660e4929efccb5a594a"}, - {file = "mapbox_earcut-1.0.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8ade6c4822be1680c933bda32af0bb23a73e63e951db348ac1adef8de137239"}, - {file = "mapbox_earcut-1.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04431a498a836c62aba5d807572daf3c8b064b25ab83e79994498455524ce517"}, - {file = "mapbox_earcut-1.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:714d33603c59d7306650615d7b05d51da273f1aa5b41c3b462207271a2283fa7"}, - {file = "mapbox_earcut-1.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:065faa6b4a7525faa48e46e692176cbcf9587ade7a1abdb2c96cb6477ab0004d"}, - {file = "mapbox_earcut-1.0.1-cp37-cp37m-win32.whl", hash = "sha256:9f433276f54e302aa0c3ef0f8edb7a4092cdd677aafc623fab2b81e1db9f2729"}, - {file = "mapbox_earcut-1.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:2ac93a18a19acffaa7dc42646534f3850b545d6ad31469f3b7157efc9da113db"}, - {file = "mapbox_earcut-1.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b23d0b41d5d7e72fa197e981c3e317f234336b4594bb64252837a0558c9c505d"}, - {file = "mapbox_earcut-1.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:57337d9cf95a97b926eab57845525501df61abb0334ed59502a6485cf9216f64"}, - {file = "mapbox_earcut-1.0.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5447f35b1dda5f89a6d5c95e9a1831f1c5aaf1eeac853f0b2f3df97ec81c2c75"}, - {file = "mapbox_earcut-1.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dffb3e2a0253e3e2e1b7638df80a029d4d80f38db42a7736f92a8e8d4d1a3209"}, - {file = "mapbox_earcut-1.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:202761e67b0974b1618e638b83a1bb24d0a421a0c773435833a368b9b4f0ee2b"}, - {file = "mapbox_earcut-1.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9c37424997c46f45f16a8ec42fc892a011f9528257f207e2aae4bd14cfcd7c3d"}, - {file = "mapbox_earcut-1.0.1-cp38-cp38-win32.whl", hash = "sha256:ed5ec84c85a6e6cbfa294bdcbf567d3fa0abec9191acc8f362552946b8b7b398"}, - {file = "mapbox_earcut-1.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:da5eeb66f50b01e77340b00f29867fa89df4b9e28646f9a0b8f6b5c8827515fd"}, - {file = "mapbox_earcut-1.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:eb4aa9a7d1c5f92458d73f460d1f063fbcb38c50ff1f0b7e3485b8dc0f1f6635"}, - {file = "mapbox_earcut-1.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f7f779084b11bd74be374be69054803ac36095a68d1a0da1d499a47d3c7f7ccc"}, - {file = "mapbox_earcut-1.0.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5190425932e82e22e3e35dfb892f5eb441aef155c45fa055da027c72c124b3d1"}, - {file = "mapbox_earcut-1.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d68b47dc4ab2aaa9ec163c18bc6133c74739990b5013d17e13bac2d1b5c9afea"}, - {file = "mapbox_earcut-1.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e1b737d4b7b1c52c3915b898714e036990149a422343ec1481ac66b35df17f24"}, - {file = "mapbox_earcut-1.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3b77f444324a3b0e91ba2b4b2d533a66503f8fb7103e4901d0064ec2413bff8c"}, - {file = "mapbox_earcut-1.0.1-cp39-cp39-win32.whl", hash = "sha256:db61cec2374ff063e314c40b3a868237d2af1b0d98f3ec1217bc0f881e7cc40a"}, - {file = "mapbox_earcut-1.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:86b8c3732fb93f4e8ed8b1cc8388b93a72d0e9755a00f324e780b15a00fe5bc0"}, - {file = "mapbox_earcut-1.0.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0b5ad819f3fd57fc8a18c7b61a244e63b2a24475195f57e826a066e007a7a877"}, - {file = "mapbox_earcut-1.0.1-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:732e5c86037692f6c635dc4e139520be8366cde0fd39dbe122480f657b2cca90"}, - {file = "mapbox_earcut-1.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6cf7c0d0d862addc99fe0b33150c8f5c06baafa320b6dd6f67d17309512d1e9a"}, - {file = "mapbox_earcut-1.0.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:8416071bd3af616afab4513347b064274899f73e0ffe309c2a1be66600736c98"}, - {file = "mapbox_earcut-1.0.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1310c3e208e0bfd6da090ae65226ee49adba4078fe1ed2d95197c3b97ad513b9"}, - {file = "mapbox_earcut-1.0.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b657a30f677de4005f497c79ab3bb2827ba01e2642cb58ac30242f7cff48e40b"}, - {file = "mapbox_earcut-1.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34e3476d9af878887fd0d9cce759d6951fe0cc6c240e13afed1ff38fc23fc9d5"}, - {file = "mapbox_earcut-1.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e480ce4794b0c391f0b829362c78ec74b690104ef36866160a7e14232b2d3779"}, - {file = "mapbox_earcut-1.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c21271dd89263d037af5caeac425e54a8fba727ea30d1b42e3ce94cc675df15a"}, - {file = "mapbox_earcut-1.0.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11c784ba52c981dcf709bcc8de99d75a214a476f7c16369d219ca4751c7f6f6f"}, - {file = "mapbox_earcut-1.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be37a75c94017a2efaffc8763475867d4860fc4cb3262b6839d635690403d28f"}, - {file = "mapbox_earcut-1.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2ad50f947d44c8c1c0900c3e1869a4a550509450117b87b0368b06014f66590b"}, - {file = "mapbox_earcut-1.0.1.tar.gz", hash = "sha256:9f155e429a22e27387cfd7a6372c3a3865aafa609ad725e2c4465257f154a438"}, -] -markdown-it-py = [ - {file = "markdown-it-py-2.1.0.tar.gz", hash = "sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da"}, - {file = "markdown_it_py-2.1.0-py3-none-any.whl", hash = "sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27"}, -] -MarkupSafe = [ - {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, - {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, -] -matplotlib = [ - {file = "matplotlib-3.6.2-cp310-cp310-macosx_10_12_universal2.whl", hash = "sha256:8d0068e40837c1d0df6e3abf1cdc9a34a6d2611d90e29610fa1d2455aeb4e2e5"}, - {file = "matplotlib-3.6.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:252957e208c23db72ca9918cb33e160c7833faebf295aaedb43f5b083832a267"}, - {file = "matplotlib-3.6.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d50e8c1e571ee39b5dfbc295c11ad65988879f68009dd281a6e1edbc2ff6c18c"}, - {file = "matplotlib-3.6.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d840adcad7354be6f2ec28d0706528b0026e4c3934cc6566b84eac18633eab1b"}, - {file = "matplotlib-3.6.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78ec3c3412cf277e6252764ee4acbdbec6920cc87ad65862272aaa0e24381eee"}, - {file = "matplotlib-3.6.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9347cc6822f38db2b1d1ce992f375289670e595a2d1c15961aacbe0977407dfc"}, - {file = "matplotlib-3.6.2-cp310-cp310-win32.whl", hash = "sha256:e0bbee6c2a5bf2a0017a9b5e397babb88f230e6f07c3cdff4a4c4bc75ed7c617"}, - {file = "matplotlib-3.6.2-cp310-cp310-win_amd64.whl", hash = "sha256:8a0ae37576ed444fe853709bdceb2be4c7df6f7acae17b8378765bd28e61b3ae"}, - {file = "matplotlib-3.6.2-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:5ecfc6559132116dedfc482d0ad9df8a89dc5909eebffd22f3deb684132d002f"}, - {file = "matplotlib-3.6.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:9f335e5625feb90e323d7e3868ec337f7b9ad88b5d633f876e3b778813021dab"}, - {file = "matplotlib-3.6.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b2604c6450f9dd2c42e223b1f5dca9643a23cfecc9fde4a94bb38e0d2693b136"}, - {file = "matplotlib-3.6.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5afe0a7ea0e3a7a257907060bee6724a6002b7eec55d0db16fd32409795f3e1"}, - {file = "matplotlib-3.6.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca0e7a658fbafcddcaefaa07ba8dae9384be2343468a8e011061791588d839fa"}, - {file = "matplotlib-3.6.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32d29c8c26362169c80c5718ce367e8c64f4dd068a424e7110df1dd2ed7bd428"}, - {file = "matplotlib-3.6.2-cp311-cp311-win32.whl", hash = "sha256:5024b8ed83d7f8809982d095d8ab0b179bebc07616a9713f86d30cf4944acb73"}, - {file = "matplotlib-3.6.2-cp311-cp311-win_amd64.whl", hash = "sha256:52c2bdd7cd0bf9d5ccdf9c1816568fd4ccd51a4d82419cc5480f548981b47dd0"}, - {file = "matplotlib-3.6.2-cp38-cp38-macosx_10_12_universal2.whl", hash = "sha256:8a8dbe2cb7f33ff54b16bb5c500673502a35f18ac1ed48625e997d40c922f9cc"}, - {file = "matplotlib-3.6.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:380d48c15ec41102a2b70858ab1dedfa33eb77b2c0982cb65a200ae67a48e9cb"}, - {file = "matplotlib-3.6.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0844523dfaaff566e39dbfa74e6f6dc42e92f7a365ce80929c5030b84caa563a"}, - {file = "matplotlib-3.6.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7f716b6af94dc1b6b97c46401774472f0867e44595990fe80a8ba390f7a0a028"}, - {file = "matplotlib-3.6.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74153008bd24366cf099d1f1e83808d179d618c4e32edb0d489d526523a94d9f"}, - {file = "matplotlib-3.6.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f41e57ad63d336fe50d3a67bb8eaa26c09f6dda6a59f76777a99b8ccd8e26aec"}, - {file = "matplotlib-3.6.2-cp38-cp38-win32.whl", hash = "sha256:d0e9ac04065a814d4cf2c6791a2ad563f739ae3ae830d716d54245c2b96fead6"}, - {file = "matplotlib-3.6.2-cp38-cp38-win_amd64.whl", hash = "sha256:8a9d899953c722b9afd7e88dbefd8fb276c686c3116a43c577cfabf636180558"}, - {file = "matplotlib-3.6.2-cp39-cp39-macosx_10_12_universal2.whl", hash = "sha256:f04f97797df35e442ed09f529ad1235d1f1c0f30878e2fe09a2676b71a8801e0"}, - {file = "matplotlib-3.6.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:3964934731fd7a289a91d315919cf757f293969a4244941ab10513d2351b4e83"}, - {file = "matplotlib-3.6.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:168093410b99f647ba61361b208f7b0d64dde1172b5b1796d765cd243cadb501"}, - {file = "matplotlib-3.6.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e16dcaecffd55b955aa5e2b8a804379789c15987e8ebd2f32f01398a81e975b"}, - {file = "matplotlib-3.6.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83dc89c5fd728fdb03b76f122f43b4dcee8c61f1489e232d9ad0f58020523e1c"}, - {file = "matplotlib-3.6.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:795ad83940732b45d39b82571f87af0081c120feff2b12e748d96bb191169e33"}, - {file = "matplotlib-3.6.2-cp39-cp39-win32.whl", hash = "sha256:19d61ee6414c44a04addbe33005ab1f87539d9f395e25afcbe9a3c50ce77c65c"}, - {file = "matplotlib-3.6.2-cp39-cp39-win_amd64.whl", hash = "sha256:5ba73aa3aca35d2981e0b31230d58abb7b5d7ca104e543ae49709208d8ce706a"}, - {file = "matplotlib-3.6.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:1836f366272b1557a613f8265db220eb8dd883202bbbabe01bad5a4eadfd0c95"}, - {file = "matplotlib-3.6.2-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0eda9d1b43f265da91fb9ae10d6922b5a986e2234470a524e6b18f14095b20d2"}, - {file = "matplotlib-3.6.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec9be0f4826cdb3a3a517509dcc5f87f370251b76362051ab59e42b6b765f8c4"}, - {file = "matplotlib-3.6.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:3cef89888a466228fc4e4b2954e740ce8e9afde7c4315fdd18caa1b8de58ca17"}, - {file = "matplotlib-3.6.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:54fa9fe27f5466b86126ff38123261188bed568c1019e4716af01f97a12fe812"}, - {file = "matplotlib-3.6.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e68be81cd8c22b029924b6d0ee814c337c0e706b8d88495a617319e5dd5441c3"}, - {file = "matplotlib-3.6.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0ca2c60d3966dfd6608f5f8c49b8a0fcf76de6654f2eda55fc6ef038d5a6f27"}, - {file = "matplotlib-3.6.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4426c74761790bff46e3d906c14c7aab727543293eed5a924300a952e1a3a3c1"}, - {file = "matplotlib-3.6.2.tar.gz", hash = "sha256:b03fd10a1709d0101c054883b550f7c4c5e974f751e2680318759af005964990"}, -] -matplotlib-inline = [ - {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, - {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, -] -mccabe = [ - {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, - {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, -] -mdit-py-plugins = [ - {file = "mdit-py-plugins-0.3.3.tar.gz", hash = "sha256:5cfd7e7ac582a594e23ba6546a2f406e94e42eb33ae596d0734781261c251260"}, - {file = "mdit_py_plugins-0.3.3-py3-none-any.whl", hash = "sha256:36d08a29def19ec43acdcd8ba471d3ebab132e7879d442760d963f19913e04b9"}, -] -mdurl = [ - {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, - {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, -] -mistune = [ - {file = "mistune-2.0.4-py2.py3-none-any.whl", hash = "sha256:182cc5ee6f8ed1b807de6b7bb50155df7b66495412836b9a74c8fbdfc75fe36d"}, - {file = "mistune-2.0.4.tar.gz", hash = "sha256:9ee0a66053e2267aba772c71e06891fa8f1af6d4b01d5e84e267b4570d4d9808"}, -] -moderngl = [ - {file = "moderngl-5.7.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2612094ae2203073826e2854075db20c72a4df89bf079304a643a87ddb4720ab"}, - {file = "moderngl-5.7.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d30ccb6ac869629ea335b95b97868714b5b37ff59fbc2e82351d246584e49075"}, - {file = "moderngl-5.7.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22ad220ae8da8c55d3728f2167a80f2f859facba9f8a6e5bf64e8779b5056122"}, - {file = "moderngl-5.7.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db5e465515a21039fb23d6f44782575cc8ed15638d86b8199fc1a6baf3269867"}, - {file = "moderngl-5.7.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cc53c67a0ac3b10108d5cf84864804752a7b69623c4202aa806bedbc4d9306e2"}, - {file = "moderngl-5.7.3-cp310-cp310-win32.whl", hash = "sha256:7f848e64c3cf5b873a5e745c4c35f6f7f1fcb34006793e69f66c2a4326da0cc9"}, - {file = "moderngl-5.7.3-cp310-cp310-win_amd64.whl", hash = "sha256:5b29fb7ee79964c5a2b8ef5b5bea29f82aa4b97d3499bce49fbfce9f7c6ef4bb"}, - {file = "moderngl-5.7.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1e42b2d7d2f26b69b6cfab70c1977356beeaffcf18517eaece8795bd2861ca57"}, - {file = "moderngl-5.7.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7fa5109aae1dd94b8451b416ca1ecc6d87e7bd84b87ef0f4ef33c40545f68b34"}, - {file = "moderngl-5.7.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16096371f82b22f9d0ce38e5e1cbabf437b25bde9c862eb0904d9334e8a8bb67"}, - {file = "moderngl-5.7.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49bd994110a1dfca9b190c8a2bf157f7f418e99e2ea25a2338de86d5e96d12b3"}, - {file = "moderngl-5.7.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:761f581e1609cd4aaba01904c8b6914189187a6083e00416f902796168eb9f7e"}, - {file = "moderngl-5.7.3-cp311-cp311-win32.whl", hash = "sha256:c7656021c086cafbc20e158ab38d2a87fcbf53c321caa7c4843ddbb1b6974785"}, - {file = "moderngl-5.7.3-cp311-cp311-win_amd64.whl", hash = "sha256:87a85dc5e3db9f13f01df93e9718f26179eca4356e3c81bb782b639fe1f67ecc"}, - {file = "moderngl-5.7.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:75aae72055d69a26b4d1efdb04b9256eabf02df0dd3dcb1538ad6b918a8664ce"}, - {file = "moderngl-5.7.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4dba3fd61bbc5a216dac41c0b6d81428cbc5083555ed5bfa947d98d262f82545"}, - {file = "moderngl-5.7.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68a519a697b56a3de0b4c5b60d5ae4a0f30a3c1c7c51939c3be4384c62e63b97"}, - {file = "moderngl-5.7.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6b8fd9bb9d22d68072ea1ed39b3677ad0d11c2d8d8d9b3a5c284a8ddbe0481e"}, - {file = "moderngl-5.7.3-cp37-cp37m-win32.whl", hash = "sha256:e216e48ceafe9ccb229e74d88d7c79fa987ac1b3458465336b999634a6cfea94"}, - {file = "moderngl-5.7.3-cp37-cp37m-win_amd64.whl", hash = "sha256:619942dae1dffced9e4934b211f8d8c1ce3f264e0985552d3962ac82c8f8af38"}, - {file = "moderngl-5.7.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:1f3172d460fbbb34410b5fcd3aea111d2bbfdbd854dd486c0cdd925f23d76c4c"}, - {file = "moderngl-5.7.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8ecc6b643d609502755223b49c39e837fa4257a70c5d393c0b93eb2151d340ae"}, - {file = "moderngl-5.7.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0125a461d0fc1036011a2b11c5626323a399ce899a7a2191bbc2eac108f5361a"}, - {file = "moderngl-5.7.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85f8bc7216dd86b8f98f7a69df5b3d2212d9b6f1342fb1377116107f962af531"}, - {file = "moderngl-5.7.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7618e7fd3dc4d085bdc3401bd201578411ac895b7caad96902329a0ef150d534"}, - {file = "moderngl-5.7.3-cp38-cp38-win32.whl", hash = "sha256:e74676a2be42cf8b11dcf00591a6be3f747f182e54569f61111663354c25490e"}, - {file = "moderngl-5.7.3-cp38-cp38-win_amd64.whl", hash = "sha256:61df07c2556c8e45681e97646823d969c1533001cb06fb17b0feb6fc1b3c2113"}, - {file = "moderngl-5.7.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:243d2e7137673b272fc609060e9f836dcfd33b46683c10990f465908356da6e6"}, - {file = "moderngl-5.7.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fccb14f8bbebb158b677c359070cda463c8470b881712871e5ee1f72b9aeed0a"}, - {file = "moderngl-5.7.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:baf9e7e3c55ee1ae62619cf7cdc06fa59aadd9ccc127926df9b150f2740caae4"}, - {file = "moderngl-5.7.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aca62a9262f051cb02d73a537eb01b9f25109bfc3ff746100032b448a97f1e83"}, - {file = "moderngl-5.7.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:911be65770219f4960ed4dc475e3956a210a16365966258bc3ecc070ce144ab9"}, - {file = "moderngl-5.7.3-cp39-cp39-win32.whl", hash = "sha256:6c8d37e9f7b5db70e83e2f2a3940a26beaefb03e81b7ab8bf0caf03f88904ac9"}, - {file = "moderngl-5.7.3-cp39-cp39-win_amd64.whl", hash = "sha256:d899610377af67d36ebf8643a464a7992c73d332dc4b5eb811dcd4691e9e337e"}, - {file = "moderngl-5.7.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ef4f70f11dc1329b2f4e1daf497ca17149a1a59d424d29db2a12fce191dad627"}, - {file = "moderngl-5.7.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a5a6e0f64ec0021a0609fe94c0185a6d6e6556917e87d835db176884640c4cb"}, - {file = "moderngl-5.7.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3cf58b31e860dbbce27858e6b20d342194272b193ea61722aaec31a7ea29037"}, - {file = "moderngl-5.7.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0025ad579c1f4ce91f538810f0821342bf709fa79b73ac3a1e12ce34c7a5cf00"}, - {file = "moderngl-5.7.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:30f75ed2d6f7f9bdd94a646b9be3453df74579e5a089e66eeac0339598679825"}, - {file = "moderngl-5.7.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fd6ef314bf672fa3e648dd4ba7b8d40b2bf1a98dc2209542f0d1bdbaa02ecee4"}, - {file = "moderngl-5.7.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1cda98cf6bb318657fbfc9cd8e1647e705c78f90351c68aec689209eaa2df53"}, - {file = "moderngl-5.7.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:154bda4f87126856f6b6784e5fa7f2e37cd271aef932965fba1a871ac318fca0"}, - {file = "moderngl-5.7.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d93cfa70fe20aaab8238e0e0a4690264eb10842bf269569e69312116d8e03bfb"}, - {file = "moderngl-5.7.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:183aee60ebf81a5ef125acc2473324481d9c0f76ebd01558c7483190bd4e9335"}, - {file = "moderngl-5.7.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a24496b21ea5c59ab6822466f0f09deb7ae25939c7209d1bd7258e8b2482a1fe"}, - {file = "moderngl-5.7.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d31715dda2d917704035a3444232a5ce0a453b0f79fcbf55aa45a29bba091400"}, - {file = "moderngl-5.7.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67175c60690cd0059468c163242aaa2cbdd86ca50daeb334d813dbf8a3113085"}, - {file = "moderngl-5.7.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f12b9b48afdef4b1debb4b3777ea08eca5f809fe4120974fa045a2b726d9a934"}, - {file = "moderngl-5.7.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cb709f7141bf4bc5961d9b0e3be5e29ead728da39063ff87edc0a494d02f0435"}, - {file = "moderngl-5.7.3.tar.gz", hash = "sha256:7e2ee96ae3125121a4488da27cf83fab5322029c948358f638445cbaadb49dc4"}, -] -moderngl-window = [ - {file = "moderngl_window-2.4.2-py3-none-any.whl", hash = "sha256:19aca4048ca037bd9f2ca8b154ac15d07e90a05ad2d5fce32d746be8ffcc319d"}, -] -multipledispatch = [ - {file = "multipledispatch-0.6.0-py2-none-any.whl", hash = "sha256:407e6d8c5fa27075968ba07c4db3ef5f02bea4e871e959570eeb69ee39a6565b"}, - {file = "multipledispatch-0.6.0-py3-none-any.whl", hash = "sha256:a55c512128fb3f7c2efd2533f2550accb93c35f1045242ef74645fc92a2c3cba"}, - {file = "multipledispatch-0.6.0.tar.gz", hash = "sha256:a7ab1451fd0bf9b92cab3edbd7b205622fb767aeefb4fb536c2e3de9e0a38bea"}, -] -mypy = [ - {file = "mypy-0.931-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3c5b42d0815e15518b1f0990cff7a705805961613e701db60387e6fb663fe78a"}, - {file = "mypy-0.931-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c89702cac5b302f0c5d33b172d2b55b5df2bede3344a2fbed99ff96bddb2cf00"}, - {file = "mypy-0.931-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:300717a07ad09525401a508ef5d105e6b56646f7942eb92715a1c8d610149714"}, - {file = "mypy-0.931-cp310-cp310-win_amd64.whl", hash = "sha256:7b3f6f557ba4afc7f2ce6d3215d5db279bcf120b3cfd0add20a5d4f4abdae5bc"}, - {file = "mypy-0.931-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:1bf752559797c897cdd2c65f7b60c2b6969ffe458417b8d947b8340cc9cec08d"}, - {file = "mypy-0.931-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4365c60266b95a3f216a3047f1d8e3f895da6c7402e9e1ddfab96393122cc58d"}, - {file = "mypy-0.931-cp36-cp36m-win_amd64.whl", hash = "sha256:1b65714dc296a7991000b6ee59a35b3f550e0073411ac9d3202f6516621ba66c"}, - {file = "mypy-0.931-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e839191b8da5b4e5d805f940537efcaa13ea5dd98418f06dc585d2891d228cf0"}, - {file = "mypy-0.931-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:50c7346a46dc76a4ed88f3277d4959de8a2bd0a0fa47fa87a4cde36fe247ac05"}, - {file = "mypy-0.931-cp37-cp37m-win_amd64.whl", hash = "sha256:d8f1ff62f7a879c9fe5917b3f9eb93a79b78aad47b533911b853a757223f72e7"}, - {file = "mypy-0.931-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f9fe20d0872b26c4bba1c1be02c5340de1019530302cf2dcc85c7f9fc3252ae0"}, - {file = "mypy-0.931-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1b06268df7eb53a8feea99cbfff77a6e2b205e70bf31743e786678ef87ee8069"}, - {file = "mypy-0.931-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8c11003aaeaf7cc2d0f1bc101c1cc9454ec4cc9cb825aef3cafff8a5fdf4c799"}, - {file = "mypy-0.931-cp38-cp38-win_amd64.whl", hash = "sha256:d9d2b84b2007cea426e327d2483238f040c49405a6bf4074f605f0156c91a47a"}, - {file = "mypy-0.931-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ff3bf387c14c805ab1388185dd22d6b210824e164d4bb324b195ff34e322d166"}, - {file = "mypy-0.931-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5b56154f8c09427bae082b32275a21f500b24d93c88d69a5e82f3978018a0266"}, - {file = "mypy-0.931-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8ca7f8c4b1584d63c9a0f827c37ba7a47226c19a23a753d52e5b5eddb201afcd"}, - {file = "mypy-0.931-cp39-cp39-win_amd64.whl", hash = "sha256:74f7eccbfd436abe9c352ad9fb65872cc0f1f0a868e9d9c44db0893440f0c697"}, - {file = "mypy-0.931-py3-none-any.whl", hash = "sha256:1171f2e0859cfff2d366da2c7092b06130f232c636a3f7301e3feb8b41f6377d"}, - {file = "mypy-0.931.tar.gz", hash = "sha256:0038b21890867793581e4cb0d810829f5fd4441aa75796b53033af3aa30430ce"}, -] -mypy-extensions = [ - {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, - {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, -] -myst-parser = [ - {file = "myst-parser-0.17.2.tar.gz", hash = "sha256:4c076d649e066f9f5c7c661bae2658be1ca06e76b002bb97f02a09398707686c"}, - {file = "myst_parser-0.17.2-py3-none-any.whl", hash = "sha256:1635ce3c18965a528d6de980f989ff64d6a1effb482e1f611b1bfb79e38f3d98"}, -] -nbclassic = [ - {file = "nbclassic-0.4.8-py3-none-any.whl", hash = "sha256:cbf05df5842b420d5cece0143462380ea9d308ff57c2dc0eb4d6e035b18fbfb3"}, - {file = "nbclassic-0.4.8.tar.gz", hash = "sha256:c74d8a500f8e058d46b576a41e5bc640711e1032cf7541dde5f73ea49497e283"}, -] -nbclient = [ - {file = "nbclient-0.7.2-py3-none-any.whl", hash = "sha256:d97ac6257de2794f5397609df754fcbca1a603e94e924eb9b99787c031ae2e7c"}, - {file = "nbclient-0.7.2.tar.gz", hash = "sha256:884a3f4a8c4fc24bb9302f263e0af47d97f0d01fe11ba714171b320c8ac09547"}, -] -nbconvert = [ - {file = "nbconvert-7.2.6-py3-none-any.whl", hash = "sha256:f933e82fe48b9a421e4252249f6c0a9a9940dc555642b4729f3f1f526bb16779"}, - {file = "nbconvert-7.2.6.tar.gz", hash = "sha256:c9c0e4b26326f7658ebf4cda0acc591b9727c4e3ee3ede962f70c11833b71b40"}, -] -nbformat = [ - {file = "nbformat-5.7.0-py3-none-any.whl", hash = "sha256:1b05ec2c552c2f1adc745f4eddce1eac8ca9ffd59bb9fd859e827eaa031319f9"}, - {file = "nbformat-5.7.0.tar.gz", hash = "sha256:1d4760c15c1a04269ef5caf375be8b98dd2f696e5eb9e603ec2bf091f9b0d3f3"}, -] -nest-asyncio = [ - {file = "nest_asyncio-1.5.6-py3-none-any.whl", hash = "sha256:b9a953fb40dceaa587d109609098db21900182b16440652454a146cffb06e8b8"}, - {file = "nest_asyncio-1.5.6.tar.gz", hash = "sha256:d267cc1ff794403f7df692964d1d2a3fa9418ffea2a3f6859a439ff482fef290"}, -] -networkx = [ - {file = "networkx-2.8.8-py3-none-any.whl", hash = "sha256:e435dfa75b1d7195c7b8378c3859f0445cd88c6b0375c181ed66823a9ceb7524"}, - {file = "networkx-2.8.8.tar.gz", hash = "sha256:230d388117af870fce5647a3c52401fcf753e94720e6ea6b4197a5355648885e"}, -] -nodeenv = [ - {file = "nodeenv-1.7.0-py2.py3-none-any.whl", hash = "sha256:27083a7b96a25f2f5e1d8cb4b6317ee8aeda3bdd121394e5ac54e498028a042e"}, - {file = "nodeenv-1.7.0.tar.gz", hash = "sha256:e0e7f7dfb85fc5394c6fe1e8fa98131a2473e04311a45afb6508f7cf1836fa2b"}, -] -notebook = [ - {file = "notebook-6.5.2-py3-none-any.whl", hash = "sha256:e04f9018ceb86e4fa841e92ea8fb214f8d23c1cedfde530cc96f92446924f0e4"}, - {file = "notebook-6.5.2.tar.gz", hash = "sha256:c1897e5317e225fc78b45549a6ab4b668e4c996fd03a04e938fe5e7af2bfffd0"}, -] -notebook-shim = [ - {file = "notebook_shim-0.2.2-py3-none-any.whl", hash = "sha256:9c6c30f74c4fbea6fce55c1be58e7fd0409b1c681b075dcedceb005db5026949"}, - {file = "notebook_shim-0.2.2.tar.gz", hash = "sha256:090e0baf9a5582ff59b607af523ca2db68ff216da0c69956b62cab2ef4fc9c3f"}, -] -numpy = [ - {file = "numpy-1.23.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9c88793f78fca17da0145455f0d7826bcb9f37da4764af27ac945488116efe63"}, - {file = "numpy-1.23.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e9f4c4e51567b616be64e05d517c79a8a22f3606499941d97bb76f2ca59f982d"}, - {file = "numpy-1.23.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7903ba8ab592b82014713c491f6c5d3a1cde5b4a3bf116404e08f5b52f6daf43"}, - {file = "numpy-1.23.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e05b1c973a9f858c74367553e236f287e749465f773328c8ef31abe18f691e1"}, - {file = "numpy-1.23.5-cp310-cp310-win32.whl", hash = "sha256:522e26bbf6377e4d76403826ed689c295b0b238f46c28a7251ab94716da0b280"}, - {file = "numpy-1.23.5-cp310-cp310-win_amd64.whl", hash = "sha256:dbee87b469018961d1ad79b1a5d50c0ae850000b639bcb1b694e9981083243b6"}, - {file = "numpy-1.23.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ce571367b6dfe60af04e04a1834ca2dc5f46004ac1cc756fb95319f64c095a96"}, - {file = "numpy-1.23.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56e454c7833e94ec9769fa0f86e6ff8e42ee38ce0ce1fa4cbb747ea7e06d56aa"}, - {file = "numpy-1.23.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5039f55555e1eab31124a5768898c9e22c25a65c1e0037f4d7c495a45778c9f2"}, - {file = "numpy-1.23.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58f545efd1108e647604a1b5aa809591ccd2540f468a880bedb97247e72db387"}, - {file = "numpy-1.23.5-cp311-cp311-win32.whl", hash = "sha256:b2a9ab7c279c91974f756c84c365a669a887efa287365a8e2c418f8b3ba73fb0"}, - {file = "numpy-1.23.5-cp311-cp311-win_amd64.whl", hash = "sha256:0cbe9848fad08baf71de1a39e12d1b6310f1d5b2d0ea4de051058e6e1076852d"}, - {file = "numpy-1.23.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f063b69b090c9d918f9df0a12116029e274daf0181df392839661c4c7ec9018a"}, - {file = "numpy-1.23.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0aaee12d8883552fadfc41e96b4c82ee7d794949e2a7c3b3a7201e968c7ecab9"}, - {file = "numpy-1.23.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92c8c1e89a1f5028a4c6d9e3ccbe311b6ba53694811269b992c0b224269e2398"}, - {file = "numpy-1.23.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d208a0f8729f3fb790ed18a003f3a57895b989b40ea4dce4717e9cf4af62c6bb"}, - {file = "numpy-1.23.5-cp38-cp38-win32.whl", hash = "sha256:06005a2ef6014e9956c09ba07654f9837d9e26696a0470e42beedadb78c11b07"}, - {file = "numpy-1.23.5-cp38-cp38-win_amd64.whl", hash = "sha256:ca51fcfcc5f9354c45f400059e88bc09215fb71a48d3768fb80e357f3b457e1e"}, - {file = "numpy-1.23.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8969bfd28e85c81f3f94eb4a66bc2cf1dbdc5c18efc320af34bffc54d6b1e38f"}, - {file = "numpy-1.23.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a7ac231a08bb37f852849bbb387a20a57574a97cfc7b6cabb488a4fc8be176de"}, - {file = "numpy-1.23.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf837dc63ba5c06dc8797c398db1e223a466c7ece27a1f7b5232ba3466aafe3d"}, - {file = "numpy-1.23.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33161613d2269025873025b33e879825ec7b1d831317e68f4f2f0f84ed14c719"}, - {file = "numpy-1.23.5-cp39-cp39-win32.whl", hash = "sha256:af1da88f6bc3d2338ebbf0e22fe487821ea4d8e89053e25fa59d1d79786e7481"}, - {file = "numpy-1.23.5-cp39-cp39-win_amd64.whl", hash = "sha256:09b7847f7e83ca37c6e627682f145856de331049013853f344f37b0c9690e3df"}, - {file = "numpy-1.23.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:abdde9f795cf292fb9651ed48185503a2ff29be87770c3b8e2a14b0cd7aa16f8"}, - {file = "numpy-1.23.5-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9a909a8bae284d46bbfdefbdd4a262ba19d3bc9921b1e76126b1d21c3c34135"}, - {file = "numpy-1.23.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:01dd17cbb340bf0fc23981e52e1d18a9d4050792e8fb8363cecbf066a84b827d"}, - {file = "numpy-1.23.5.tar.gz", hash = "sha256:1b1766d6f397c18153d40015ddfc79ddb715cabadc04d2d228d4e5a8bc4ded1a"}, -] -packaging = [ - {file = "packaging-22.0-py3-none-any.whl", hash = "sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3"}, - {file = "packaging-22.0.tar.gz", hash = "sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3"}, -] -pandocfilters = [ - {file = "pandocfilters-1.5.0-py2.py3-none-any.whl", hash = "sha256:33aae3f25fd1a026079f5d27bdd52496f0e0803b3469282162bafdcbdf6ef14f"}, - {file = "pandocfilters-1.5.0.tar.gz", hash = "sha256:0b679503337d233b4339a817bfc8c50064e2eff681314376a47cb582305a7a38"}, -] -parso = [ - {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, - {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, -] -pathspec = [ - {file = "pathspec-0.10.2-py3-none-any.whl", hash = "sha256:88c2606f2c1e818b978540f73ecc908e13999c6c3a383daf3705652ae79807a5"}, - {file = "pathspec-0.10.2.tar.gz", hash = "sha256:8f6bf73e5758fd365ef5d58ce09ac7c27d2833a8d7da51712eac6e27e35141b0"}, -] -pexpect = [ - {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, - {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, -] -pickleshare = [ - {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, - {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, -] -Pillow = [ - {file = "Pillow-9.3.0-1-cp37-cp37m-win32.whl", hash = "sha256:e6ea6b856a74d560d9326c0f5895ef8050126acfdc7ca08ad703eb0081e82b74"}, - {file = "Pillow-9.3.0-1-cp37-cp37m-win_amd64.whl", hash = "sha256:32a44128c4bdca7f31de5be641187367fe2a450ad83b833ef78910397db491aa"}, - {file = "Pillow-9.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:0b7257127d646ff8676ec8a15520013a698d1fdc48bc2a79ba4e53df792526f2"}, - {file = "Pillow-9.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b90f7616ea170e92820775ed47e136208e04c967271c9ef615b6fbd08d9af0e3"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68943d632f1f9e3dce98908e873b3a090f6cba1cbb1b892a9e8d97c938871fbe"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be55f8457cd1eac957af0c3f5ece7bc3f033f89b114ef30f710882717670b2a8"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d77adcd56a42d00cc1be30843d3426aa4e660cab4a61021dc84467123f7a00c"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:829f97c8e258593b9daa80638aee3789b7df9da5cf1336035016d76f03b8860c"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:801ec82e4188e935c7f5e22e006d01611d6b41661bba9fe45b60e7ac1a8f84de"}, - {file = "Pillow-9.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:871b72c3643e516db4ecf20efe735deb27fe30ca17800e661d769faab45a18d7"}, - {file = "Pillow-9.3.0-cp310-cp310-win32.whl", hash = "sha256:655a83b0058ba47c7c52e4e2df5ecf484c1b0b0349805896dd350cbc416bdd91"}, - {file = "Pillow-9.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:9f47eabcd2ded7698106b05c2c338672d16a6f2a485e74481f524e2a23c2794b"}, - {file = "Pillow-9.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:57751894f6618fd4308ed8e0c36c333e2f5469744c34729a27532b3db106ee20"}, - {file = "Pillow-9.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7db8b751ad307d7cf238f02101e8e36a128a6cb199326e867d1398067381bff4"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3033fbe1feb1b59394615a1cafaee85e49d01b51d54de0cbf6aa8e64182518a1"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22b012ea2d065fd163ca096f4e37e47cd8b59cf4b0fd47bfca6abb93df70b34c"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9a65733d103311331875c1dca05cb4606997fd33d6acfed695b1232ba1df193"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:502526a2cbfa431d9fc2a079bdd9061a2397b842bb6bc4239bb176da00993812"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:90fb88843d3902fe7c9586d439d1e8c05258f41da473952aa8b328d8b907498c"}, - {file = "Pillow-9.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:89dca0ce00a2b49024df6325925555d406b14aa3efc2f752dbb5940c52c56b11"}, - {file = "Pillow-9.3.0-cp311-cp311-win32.whl", hash = "sha256:3168434d303babf495d4ba58fc22d6604f6e2afb97adc6a423e917dab828939c"}, - {file = "Pillow-9.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:18498994b29e1cf86d505edcb7edbe814d133d2232d256db8c7a8ceb34d18cef"}, - {file = "Pillow-9.3.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:772a91fc0e03eaf922c63badeca75e91baa80fe2f5f87bdaed4280662aad25c9"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa4107d1b306cdf8953edde0534562607fe8811b6c4d9a486298ad31de733b2"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4012d06c846dc2b80651b120e2cdd787b013deb39c09f407727ba90015c684f"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77ec3e7be99629898c9a6d24a09de089fa5356ee408cdffffe62d67bb75fdd72"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:6c738585d7a9961d8c2821a1eb3dcb978d14e238be3d70f0a706f7fa9316946b"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:828989c45c245518065a110434246c44a56a8b2b2f6347d1409c787e6e4651ee"}, - {file = "Pillow-9.3.0-cp37-cp37m-win32.whl", hash = "sha256:82409ffe29d70fd733ff3c1025a602abb3e67405d41b9403b00b01debc4c9a29"}, - {file = "Pillow-9.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:41e0051336807468be450d52b8edd12ac60bebaa97fe10c8b660f116e50b30e4"}, - {file = "Pillow-9.3.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:b03ae6f1a1878233ac620c98f3459f79fd77c7e3c2b20d460284e1fb370557d4"}, - {file = "Pillow-9.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4390e9ce199fc1951fcfa65795f239a8a4944117b5935a9317fb320e7767b40f"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40e1ce476a7804b0fb74bcfa80b0a2206ea6a882938eaba917f7a0f004b42502"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0a06a052c5f37b4ed81c613a455a81f9a3a69429b4fd7bb913c3fa98abefc20"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03150abd92771742d4a8cd6f2fa6246d847dcd2e332a18d0c15cc75bf6703040"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:15c42fb9dea42465dfd902fb0ecf584b8848ceb28b41ee2b58f866411be33f07"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:51e0e543a33ed92db9f5ef69a0356e0b1a7a6b6a71b80df99f1d181ae5875636"}, - {file = "Pillow-9.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3dd6caf940756101205dffc5367babf288a30043d35f80936f9bfb37f8355b32"}, - {file = "Pillow-9.3.0-cp38-cp38-win32.whl", hash = "sha256:f1ff2ee69f10f13a9596480335f406dd1f70c3650349e2be67ca3139280cade0"}, - {file = "Pillow-9.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:276a5ca930c913f714e372b2591a22c4bd3b81a418c0f6635ba832daec1cbcfc"}, - {file = "Pillow-9.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:73bd195e43f3fadecfc50c682f5055ec32ee2c933243cafbfdec69ab1aa87cad"}, - {file = "Pillow-9.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1c7c8ae3864846fc95f4611c78129301e203aaa2af813b703c55d10cc1628535"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e0918e03aa0c72ea56edbb00d4d664294815aa11291a11504a377ea018330d3"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0915e734b33a474d76c28e07292f196cdf2a590a0d25bcc06e64e545f2d146c"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af0372acb5d3598f36ec0914deed2a63f6bcdb7b606da04dc19a88d31bf0c05b"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:ad58d27a5b0262c0c19b47d54c5802db9b34d38bbf886665b626aff83c74bacd"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:97aabc5c50312afa5e0a2b07c17d4ac5e865b250986f8afe2b02d772567a380c"}, - {file = "Pillow-9.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9aaa107275d8527e9d6e7670b64aabaaa36e5b6bd71a1015ddd21da0d4e06448"}, - {file = "Pillow-9.3.0-cp39-cp39-win32.whl", hash = "sha256:bac18ab8d2d1e6b4ce25e3424f709aceef668347db8637c2296bcf41acb7cf48"}, - {file = "Pillow-9.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:b472b5ea442148d1c3e2209f20f1e0bb0eb556538690fa70b5e1f79fa0ba8dc2"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ab388aaa3f6ce52ac1cb8e122c4bd46657c15905904b3120a6248b5b8b0bc228"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbb8e7f2abee51cef77673be97760abff1674ed32847ce04b4af90f610144c7b"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca31dd6014cb8b0b2db1e46081b0ca7d936f856da3b39744aef499db5d84d02"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c7025dce65566eb6e89f56c9509d4f628fddcedb131d9465cacd3d8bac337e7e"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ebf2029c1f464c59b8bdbe5143c79fa2045a581ac53679733d3a91d400ff9efb"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b59430236b8e58840a0dfb4099a0e8717ffb779c952426a69ae435ca1f57210c"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12ce4932caf2ddf3e41d17fc9c02d67126935a44b86df6a206cf0d7161548627"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae5331c23ce118c53b172fa64a4c037eb83c9165aba3a7ba9ddd3ec9fa64a699"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:0b07fffc13f474264c336298d1b4ce01d9c5a011415b79d4ee5527bb69ae6f65"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:073adb2ae23431d3b9bcbcff3fe698b62ed47211d0716b067385538a1b0f28b8"}, - {file = "Pillow-9.3.0.tar.gz", hash = "sha256:c935a22a557a560108d780f9a0fc426dd7459940dc54faa49d83249c8d3e760f"}, -] -pkgutil_resolve_name = [ - {file = "pkgutil_resolve_name-1.3.10-py3-none-any.whl", hash = "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e"}, - {file = "pkgutil_resolve_name-1.3.10.tar.gz", hash = "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174"}, -] -platformdirs = [ - {file = "platformdirs-2.6.0-py3-none-any.whl", hash = "sha256:1a89a12377800c81983db6be069ec068eee989748799b946cce2a6e80dcc54ca"}, - {file = "platformdirs-2.6.0.tar.gz", hash = "sha256:b46ffafa316e6b83b47489d240ce17173f123a9b9c83282141c3daf26ad9ac2e"}, -] -pluggy = [ - {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, - {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, -] -pre-commit = [ - {file = "pre_commit-2.20.0-py2.py3-none-any.whl", hash = "sha256:51a5ba7c480ae8072ecdb6933df22d2f812dc897d5fe848778116129a681aac7"}, - {file = "pre_commit-2.20.0.tar.gz", hash = "sha256:a978dac7bc9ec0bcee55c18a277d553b0f419d259dadb4b9418ff2d00eb43959"}, -] -prometheus-client = [ - {file = "prometheus_client-0.15.0-py3-none-any.whl", hash = "sha256:db7c05cbd13a0f79975592d112320f2605a325969b270a94b71dcabc47b931d2"}, - {file = "prometheus_client-0.15.0.tar.gz", hash = "sha256:be26aa452490cfcf6da953f9436e95a9f2b4d578ca80094b4458930e5f584ab1"}, -] -prompt-toolkit = [ - {file = "prompt_toolkit-3.0.36-py3-none-any.whl", hash = "sha256:aa64ad242a462c5ff0363a7b9cfe696c20d55d9fc60c11fd8e632d064804d305"}, - {file = "prompt_toolkit-3.0.36.tar.gz", hash = "sha256:3e163f254bef5a03b146397d7c1963bd3e2812f0964bb9a24e6ec761fd28db63"}, -] -psutil = [ - {file = "psutil-5.9.4-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c1ca331af862803a42677c120aff8a814a804e09832f166f226bfd22b56feee8"}, - {file = "psutil-5.9.4-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:68908971daf802203f3d37e78d3f8831b6d1014864d7a85937941bb35f09aefe"}, - {file = "psutil-5.9.4-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:3ff89f9b835100a825b14c2808a106b6fdcc4b15483141482a12c725e7f78549"}, - {file = "psutil-5.9.4-cp27-cp27m-win32.whl", hash = "sha256:852dd5d9f8a47169fe62fd4a971aa07859476c2ba22c2254d4a1baa4e10b95ad"}, - {file = "psutil-5.9.4-cp27-cp27m-win_amd64.whl", hash = "sha256:9120cd39dca5c5e1c54b59a41d205023d436799b1c8c4d3ff71af18535728e94"}, - {file = "psutil-5.9.4-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:6b92c532979bafc2df23ddc785ed116fced1f492ad90a6830cf24f4d1ea27d24"}, - {file = "psutil-5.9.4-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:efeae04f9516907be44904cc7ce08defb6b665128992a56957abc9b61dca94b7"}, - {file = "psutil-5.9.4-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:54d5b184728298f2ca8567bf83c422b706200bcbbfafdc06718264f9393cfeb7"}, - {file = "psutil-5.9.4-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16653106f3b59386ffe10e0bad3bb6299e169d5327d3f187614b1cb8f24cf2e1"}, - {file = "psutil-5.9.4-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54c0d3d8e0078b7666984e11b12b88af2db11d11249a8ac8920dd5ef68a66e08"}, - {file = "psutil-5.9.4-cp36-abi3-win32.whl", hash = "sha256:149555f59a69b33f056ba1c4eb22bb7bf24332ce631c44a319cec09f876aaeff"}, - {file = "psutil-5.9.4-cp36-abi3-win_amd64.whl", hash = "sha256:fd8522436a6ada7b4aad6638662966de0d61d241cb821239b2ae7013d41a43d4"}, - {file = "psutil-5.9.4-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:6001c809253a29599bc0dfd5179d9f8a5779f9dffea1da0f13c53ee568115e1e"}, - {file = "psutil-5.9.4.tar.gz", hash = "sha256:3d7f9739eb435d4b1338944abe23f49584bde5395f27487d2ee25ad9a8774a62"}, -] -psutil-wheels = [ - {file = "psutil-wheels-5.8.0.tar.gz", hash = "sha256:9fb80725195402a66e5db947f239d032500cde75ca5d8625326d797a65341d6f"}, - {file = "psutil_wheels-5.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2cfbb317f3ee0c8ac9dd5d82e6913b0216222d2b22ea65cbc2f8072dabb167d4"}, - {file = "psutil_wheels-5.8.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ea1f7f6bcc536669a22c07429dde993bc707f45339137b085394faada25fc813"}, - {file = "psutil_wheels-5.8.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d13d705fb5026d3ae476c7988601430dfaa6143e695058a3182146adc0457b7f"}, - {file = "psutil_wheels-5.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:3f0ca7c4c9031e04b18e52cd4c6f17e196bb7896071dd1eacaeb352948b47517"}, - {file = "psutil_wheels-5.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:902ab2a221529cd7c0d9fa2f865fdd22bc45df87db825437aeee0dcaeed9b787"}, - {file = "psutil_wheels-5.8.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:96838ad949609621e369d327834ade3b3e1b0fa3f450e0a7460855a3cf41a6d6"}, - {file = "psutil_wheels-5.8.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:933c4079c8121f8f0d3d1525671e3b6182d804d54c7819b6a7dddeac5605ba69"}, - {file = "psutil_wheels-5.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:5dd57fb06b081bf2e3cebe89ca92f6ef606ecc5e50ac7ecb2dc7a68262d6cd91"}, - {file = "psutil_wheels-5.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:05a4b136c395273066ecd63d64200868fc57561c65f6dda988b28d08f4a60f69"}, - {file = "psutil_wheels-5.8.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c7c13e8264fa26f0bde4ddc15f2959d04c2a8f7537c41541d1503dd159b01a86"}, - {file = "psutil_wheels-5.8.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b07890d22db82a135b8d5149ba1736e0fde998605cfa73c4d030bbfc77e890b6"}, - {file = "psutil_wheels-5.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:84bb63b669aa918b4a62226276b1c1f952e57a461debfb7b9eed848c41e7cbda"}, -] -ptyprocess = [ - {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, - {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, -] -pure-eval = [ - {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"}, - {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"}, -] -py = [ - {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, - {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, -] -pycairo = [ - {file = "pycairo-1.23.0-cp310-cp310-win32.whl", hash = "sha256:564601e5f528531c6caec1c0177c3d0709081e1a2a5cccc13561f715080ae535"}, - {file = "pycairo-1.23.0-cp310-cp310-win_amd64.whl", hash = "sha256:e7cde633986435d87a86b6118b7b6109c384266fd719ef959883e2729f6eafae"}, - {file = "pycairo-1.23.0-cp311-cp311-win32.whl", hash = "sha256:3a71f758e461180d241e62ef52e85499c843bd2660fd6d87cec99c9833792bfa"}, - {file = "pycairo-1.23.0-cp311-cp311-win_amd64.whl", hash = "sha256:2dec5378133778961993fb59d66df16070e03f4d491b67eb695ca9ad7a696008"}, - {file = "pycairo-1.23.0-cp37-cp37m-win32.whl", hash = "sha256:d6bacff15d688ed135b4567965a4b664d9fb8de7417a7865bb138ad612043c9f"}, - {file = "pycairo-1.23.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ec305fc7f2f0299df78aadec0eaf6eb9accb90eda242b5d3492544d3f2b28027"}, - {file = "pycairo-1.23.0-cp38-cp38-win32.whl", hash = "sha256:1a6d8e0f353062ad92954784e33dbbaf66c880c9c30e947996c542ed9748aaaf"}, - {file = "pycairo-1.23.0-cp38-cp38-win_amd64.whl", hash = "sha256:82e335774a17870bc038e0c2fb106c1e5e7ad0c764662023886dfcfce5bb5a52"}, - {file = "pycairo-1.23.0-cp39-cp39-win32.whl", hash = "sha256:a4b1f525bbdf637c40f4d91378de36c01ec2b7f8ecc585b700a079b9ff83298e"}, - {file = "pycairo-1.23.0-cp39-cp39-win_amd64.whl", hash = "sha256:87efd62a7b7afad9a0a420f05b6008742a6cfc59077697be65afe8dc73ae15ad"}, - {file = "pycairo-1.23.0.tar.gz", hash = "sha256:9b61ac818723adc04367301317eb2e814a83522f07bbd1f409af0dada463c44c"}, -] -pycodestyle = [ - {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"}, - {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"}, -] -pycparser = [ - {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, - {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, -] -pydocstyle = [ - {file = "pydocstyle-6.1.1-py3-none-any.whl", hash = "sha256:6987826d6775056839940041beef5c08cc7e3d71d63149b48e36727f70144dc4"}, - {file = "pydocstyle-6.1.1.tar.gz", hash = "sha256:1d41b7c459ba0ee6c345f2eb9ae827cab14a7533a88c5c6f7e94923f72df92dc"}, -] -pydub = [ - {file = "pydub-0.25.1-py2.py3-none-any.whl", hash = "sha256:65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6"}, - {file = "pydub-0.25.1.tar.gz", hash = "sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f"}, -] -pyflakes = [ - {file = "pyflakes-2.3.1-py2.py3-none-any.whl", hash = "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3"}, - {file = "pyflakes-2.3.1.tar.gz", hash = "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"}, -] -PyGithub = [ - {file = "PyGithub-1.57-py3-none-any.whl", hash = "sha256:5822febeac2391f1306c55a99af2bc8f86c8bf82ded000030cd02c18f31b731f"}, - {file = "PyGithub-1.57.tar.gz", hash = "sha256:c273f252b278fb81f1769505cc6921bdb6791e1cebd6ac850cc97dad13c31ff3"}, -] -pyglet = [ - {file = "pyglet-2.0.1-py3-none-any.whl", hash = "sha256:6c0c0fe95fbc3b26c2f008e83bcc3dcbda1609dca6da7c3954bc4d1b529f2303"}, - {file = "pyglet-2.0.1.zip", hash = "sha256:ec36eba0c769bac25c5347acf14f8a7ac8f64fe469458a0a998ed1d507975e47"}, -] -Pygments = [ - {file = "Pygments-2.13.0-py3-none-any.whl", hash = "sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42"}, - {file = "Pygments-2.13.0.tar.gz", hash = "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1"}, -] -PyJWT = [ - {file = "PyJWT-2.6.0-py3-none-any.whl", hash = "sha256:d83c3d892a77bbb74d3e1a2cfa90afaadb60945205d1095d9221f04466f64c14"}, - {file = "PyJWT-2.6.0.tar.gz", hash = "sha256:69285c7e31fc44f68a1feb309e948e0df53259d579295e6cfe2b1792329f05fd"}, -] -pylint = [ - {file = "pylint-2.15.8-py3-none-any.whl", hash = "sha256:ea82cd6a1e11062dc86d555d07c021b0fb65afe39becbe6fe692efd6c4a67443"}, - {file = "pylint-2.15.8.tar.gz", hash = "sha256:ec4a87c33da054ab86a6c79afa6771dc8765cb5631620053e727fcf3ef8cbed7"}, -] -PyNaCl = [ - {file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"}, - {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92"}, - {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394"}, - {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d"}, - {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858"}, - {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b"}, - {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff"}, - {file = "PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543"}, - {file = "PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93"}, - {file = "PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"}, -] -pyobjc-core = [ - {file = "pyobjc-core-9.0.tar.gz", hash = "sha256:3e7010c648eb94b16dd37a55f7719ed3bef6559edf4cf8fd741f46869dc223b1"}, - {file = "pyobjc_core-9.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:548a069666ac07686ac3d987f7d006abd3e713738ec1b9dbcc9195c74cb60eae"}, - {file = "pyobjc_core-9.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b1eee6099b5b480cedee3803f1be75131d12509f8e0228758954df150ab15dcd"}, - {file = "pyobjc_core-9.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:886050e8e1ff00e5502e5180df00a463b4f869d902c861ca3283b896f47d35f0"}, - {file = "pyobjc_core-9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a36752bc8fcf839694e6eff85ef54f8bc3c0ba71f0f42c9aa7a47b23f3cbd137"}, - {file = "pyobjc_core-9.0-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:1640dd25122a146162bdd1c1f46a4564606325788c5d13f1047182bb4f02cd0e"}, - {file = "pyobjc_core-9.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4296f7b11912709e5aa3d60e1cce6e1731abb7cda47fce72619804c7892b22c3"}, -] -pyobjc-framework-Cocoa = [ - {file = "pyobjc-framework-Cocoa-9.0.tar.gz", hash = "sha256:1a511c620e9b7ef22f2f4fa68572902cb614e66d3dbfa9e46a1a05f000f30084"}, - {file = "pyobjc_framework_Cocoa-9.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c36e357641f7a6ee44fd4c21bf8b72882b74c64f9489858fa35b6edfde49b6bf"}, - {file = "pyobjc_framework_Cocoa-9.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b1dd493665319e526a269f57052ae7acd331efb5e5f1b854ae8e1f10ad446698"}, - {file = "pyobjc_framework_Cocoa-9.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a4cd119626f5e8c41e790325902eed4c8d9f9d73aa9dfa90b0870d61f0c84862"}, - {file = "pyobjc_framework_Cocoa-9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25d287d9fc1ed98becdcb80926e05a71b22e195d7552f504791e1200334de2ae"}, - {file = "pyobjc_framework_Cocoa-9.0-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:6fa8e0d34e2786d7f80fd70ac4f6d9575e665e326afc4b5fffb60590344b0f98"}, - {file = "pyobjc_framework_Cocoa-9.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:dc801d2a5d25bf834a78438446a9c9bd0baee6006a540fdd2f4efb5b8536ed41"}, -] -pyparsing = [ - {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, - {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, -] -pyrr = [ - {file = "pyrr-0.10.3-py3-none-any.whl", hash = "sha256:d8af23fb9bb29262405845e1c98f7339fbba5e49323b98528bd01160a75c65ac"}, - {file = "pyrr-0.10.3.tar.gz", hash = "sha256:3c0f7b20326e71f706a610d58f2190fff73af01eef60c19cb188b186f0ec7e1d"}, -] -pyrsistent = [ - {file = "pyrsistent-0.19.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d6982b5a0237e1b7d876b60265564648a69b14017f3b5f908c5be2de3f9abb7a"}, - {file = "pyrsistent-0.19.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:187d5730b0507d9285a96fca9716310d572e5464cadd19f22b63a6976254d77a"}, - {file = "pyrsistent-0.19.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:055ab45d5911d7cae397dc418808d8802fb95262751872c841c170b0dbf51eed"}, - {file = "pyrsistent-0.19.2-cp310-cp310-win32.whl", hash = "sha256:456cb30ca8bff00596519f2c53e42c245c09e1a4543945703acd4312949bfd41"}, - {file = "pyrsistent-0.19.2-cp310-cp310-win_amd64.whl", hash = "sha256:b39725209e06759217d1ac5fcdb510e98670af9e37223985f330b611f62e7425"}, - {file = "pyrsistent-0.19.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2aede922a488861de0ad00c7630a6e2d57e8023e4be72d9d7147a9fcd2d30712"}, - {file = "pyrsistent-0.19.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:879b4c2f4d41585c42df4d7654ddffff1239dc4065bc88b745f0341828b83e78"}, - {file = "pyrsistent-0.19.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c43bec251bbd10e3cb58ced80609c5c1eb238da9ca78b964aea410fb820d00d6"}, - {file = "pyrsistent-0.19.2-cp37-cp37m-win32.whl", hash = "sha256:d690b18ac4b3e3cab73b0b7aa7dbe65978a172ff94970ff98d82f2031f8971c2"}, - {file = "pyrsistent-0.19.2-cp37-cp37m-win_amd64.whl", hash = "sha256:3ba4134a3ff0fc7ad225b6b457d1309f4698108fb6b35532d015dca8f5abed73"}, - {file = "pyrsistent-0.19.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a178209e2df710e3f142cbd05313ba0c5ebed0a55d78d9945ac7a4e09d923308"}, - {file = "pyrsistent-0.19.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e371b844cec09d8dc424d940e54bba8f67a03ebea20ff7b7b0d56f526c71d584"}, - {file = "pyrsistent-0.19.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:111156137b2e71f3a9936baf27cb322e8024dac3dc54ec7fb9f0bcf3249e68bb"}, - {file = "pyrsistent-0.19.2-cp38-cp38-win32.whl", hash = "sha256:e5d8f84d81e3729c3b506657dddfe46e8ba9c330bf1858ee33108f8bb2adb38a"}, - {file = "pyrsistent-0.19.2-cp38-cp38-win_amd64.whl", hash = "sha256:9cd3e9978d12b5d99cbdc727a3022da0430ad007dacf33d0bf554b96427f33ab"}, - {file = "pyrsistent-0.19.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f1258f4e6c42ad0b20f9cfcc3ada5bd6b83374516cd01c0960e3cb75fdca6770"}, - {file = "pyrsistent-0.19.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21455e2b16000440e896ab99e8304617151981ed40c29e9507ef1c2e4314ee95"}, - {file = "pyrsistent-0.19.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bfd880614c6237243ff53a0539f1cb26987a6dc8ac6e66e0c5a40617296a045e"}, - {file = "pyrsistent-0.19.2-cp39-cp39-win32.whl", hash = "sha256:71d332b0320642b3261e9fee47ab9e65872c2bd90260e5d225dabeed93cbd42b"}, - {file = "pyrsistent-0.19.2-cp39-cp39-win_amd64.whl", hash = "sha256:dec3eac7549869365fe263831f576c8457f6c833937c68542d08fde73457d291"}, - {file = "pyrsistent-0.19.2-py3-none-any.whl", hash = "sha256:ea6b79a02a28550c98b6ca9c35b9f492beaa54d7c5c9e9949555893c8a9234d0"}, - {file = "pyrsistent-0.19.2.tar.gz", hash = "sha256:bfa0351be89c9fcbcb8c9879b826f4353be10f58f8a677efab0c017bf7137ec2"}, -] -pytest = [ - {file = "pytest-7.2.0-py3-none-any.whl", hash = "sha256:892f933d339f068883b6fd5a459f03d85bfcb355e4981e146d2c7616c21fef71"}, - {file = "pytest-7.2.0.tar.gz", hash = "sha256:c4014eb40e10f11f355ad4e3c2fb2c6c6d1919c73f3b5a433de4708202cade59"}, -] -pytest-cov = [ - {file = "pytest-cov-3.0.0.tar.gz", hash = "sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470"}, - {file = "pytest_cov-3.0.0-py3-none-any.whl", hash = "sha256:578d5d15ac4a25e5f961c938b85a05b09fdaae9deef3bb6de9a6e766622ca7a6"}, -] -pytest-forked = [ - {file = "pytest-forked-1.4.0.tar.gz", hash = "sha256:8b67587c8f98cbbadfdd804539ed5455b6ed03802203485dd2f53c1422d7440e"}, - {file = "pytest_forked-1.4.0-py3-none-any.whl", hash = "sha256:bbbb6717efc886b9d64537b41fb1497cfaf3c9601276be8da2cccfea5a3c8ad8"}, -] -pytest-xdist = [ - {file = "pytest-xdist-2.5.0.tar.gz", hash = "sha256:4580deca3ff04ddb2ac53eba39d76cb5dd5edeac050cb6fbc768b0dd712b4edf"}, - {file = "pytest_xdist-2.5.0-py3-none-any.whl", hash = "sha256:6fe5c74fec98906deb8f2d2b616b5c782022744978e7bd4695d39c8f42d0ce65"}, -] -python-dateutil = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, -] -python-json-logger = [ - {file = "python-json-logger-2.0.4.tar.gz", hash = "sha256:764d762175f99fcc4630bd4853b09632acb60a6224acb27ce08cd70f0b1b81bd"}, - {file = "python_json_logger-2.0.4-py3-none-any.whl", hash = "sha256:3b03487b14eb9e4f77e4fc2a023358b5394b82fd89cecf5586259baed57d8c6f"}, -] -pytz = [ - {file = "pytz-2022.6-py2.py3-none-any.whl", hash = "sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427"}, - {file = "pytz-2022.6.tar.gz", hash = "sha256:e89512406b793ca39f5971bc999cc538ce125c0e51c27941bef4568b460095e2"}, -] -pywin32 = [ - {file = "pywin32-305-cp310-cp310-win32.whl", hash = "sha256:421f6cd86e84bbb696d54563c48014b12a23ef95a14e0bdba526be756d89f116"}, - {file = "pywin32-305-cp310-cp310-win_amd64.whl", hash = "sha256:73e819c6bed89f44ff1d690498c0a811948f73777e5f97c494c152b850fad478"}, - {file = "pywin32-305-cp310-cp310-win_arm64.whl", hash = "sha256:742eb905ce2187133a29365b428e6c3b9001d79accdc30aa8969afba1d8470f4"}, - {file = "pywin32-305-cp311-cp311-win32.whl", hash = "sha256:19ca459cd2e66c0e2cc9a09d589f71d827f26d47fe4a9d09175f6aa0256b51c2"}, - {file = "pywin32-305-cp311-cp311-win_amd64.whl", hash = "sha256:326f42ab4cfff56e77e3e595aeaf6c216712bbdd91e464d167c6434b28d65990"}, - {file = "pywin32-305-cp311-cp311-win_arm64.whl", hash = "sha256:4ecd404b2c6eceaca52f8b2e3e91b2187850a1ad3f8b746d0796a98b4cea04db"}, - {file = "pywin32-305-cp36-cp36m-win32.whl", hash = "sha256:48d8b1659284f3c17b68587af047d110d8c44837736b8932c034091683e05863"}, - {file = "pywin32-305-cp36-cp36m-win_amd64.whl", hash = "sha256:13362cc5aa93c2beaf489c9c9017c793722aeb56d3e5166dadd5ef82da021fe1"}, - {file = "pywin32-305-cp37-cp37m-win32.whl", hash = "sha256:a55db448124d1c1484df22fa8bbcbc45c64da5e6eae74ab095b9ea62e6d00496"}, - {file = "pywin32-305-cp37-cp37m-win_amd64.whl", hash = "sha256:109f98980bfb27e78f4df8a51a8198e10b0f347257d1e265bb1a32993d0c973d"}, - {file = "pywin32-305-cp38-cp38-win32.whl", hash = "sha256:9dd98384da775afa009bc04863426cb30596fd78c6f8e4e2e5bbf4edf8029504"}, - {file = "pywin32-305-cp38-cp38-win_amd64.whl", hash = "sha256:56d7a9c6e1a6835f521788f53b5af7912090674bb84ef5611663ee1595860fc7"}, - {file = "pywin32-305-cp39-cp39-win32.whl", hash = "sha256:9d968c677ac4d5cbdaa62fd3014ab241718e619d8e36ef8e11fb930515a1e918"}, - {file = "pywin32-305-cp39-cp39-win_amd64.whl", hash = "sha256:50768c6b7c3f0b38b7fb14dd4104da93ebced5f1a50dc0e834594bff6fbe1271"}, -] -pywinpty = [ - {file = "pywinpty-2.0.9-cp310-none-win_amd64.whl", hash = "sha256:30a7b371446a694a6ce5ef906d70ac04e569de5308c42a2bdc9c3bc9275ec51f"}, - {file = "pywinpty-2.0.9-cp311-none-win_amd64.whl", hash = "sha256:d78ef6f4bd7a6c6f94dc1a39ba8fb028540cc39f5cb593e756506db17843125f"}, - {file = "pywinpty-2.0.9-cp37-none-win_amd64.whl", hash = "sha256:5ed36aa087e35a3a183f833631b3e4c1ae92fe2faabfce0fa91b77ed3f0f1382"}, - {file = "pywinpty-2.0.9-cp38-none-win_amd64.whl", hash = "sha256:2352f44ee913faaec0a02d3c112595e56b8af7feeb8100efc6dc1a8685044199"}, - {file = "pywinpty-2.0.9-cp39-none-win_amd64.whl", hash = "sha256:ba75ec55f46c9e17db961d26485b033deb20758b1731e8e208e1e8a387fcf70c"}, - {file = "pywinpty-2.0.9.tar.gz", hash = "sha256:01b6400dd79212f50a2f01af1c65b781290ff39610853db99bf03962eb9a615f"}, -] -PyYAML = [ - {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, - {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, - {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, - {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, - {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, - {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, - {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, - {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, - {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, - {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, - {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, - {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, - {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, - {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, - {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, - {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, - {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, - {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, -] -pyzmq = [ - {file = "pyzmq-24.0.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:28b119ba97129d3001673a697b7cce47fe6de1f7255d104c2f01108a5179a066"}, - {file = "pyzmq-24.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bcbebd369493d68162cddb74a9c1fcebd139dfbb7ddb23d8f8e43e6c87bac3a6"}, - {file = "pyzmq-24.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae61446166983c663cee42c852ed63899e43e484abf080089f771df4b9d272ef"}, - {file = "pyzmq-24.0.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:87f7ac99b15270db8d53f28c3c7b968612993a90a5cf359da354efe96f5372b4"}, - {file = "pyzmq-24.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9dca7c3956b03b7663fac4d150f5e6d4f6f38b2462c1e9afd83bcf7019f17913"}, - {file = "pyzmq-24.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8c78bfe20d4c890cb5580a3b9290f700c570e167d4cdcc55feec07030297a5e3"}, - {file = "pyzmq-24.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:48f721f070726cd2a6e44f3c33f8ee4b24188e4b816e6dd8ba542c8c3bb5b246"}, - {file = "pyzmq-24.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:afe1f3bc486d0ce40abb0a0c9adb39aed3bbac36ebdc596487b0cceba55c21c1"}, - {file = "pyzmq-24.0.1-cp310-cp310-win32.whl", hash = "sha256:3e6192dbcefaaa52ed81be88525a54a445f4b4fe2fffcae7fe40ebb58bd06bfd"}, - {file = "pyzmq-24.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:86de64468cad9c6d269f32a6390e210ca5ada568c7a55de8e681ca3b897bb340"}, - {file = "pyzmq-24.0.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:838812c65ed5f7c2bd11f7b098d2e5d01685a3f6d1f82849423b570bae698c00"}, - {file = "pyzmq-24.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dfb992dbcd88d8254471760879d48fb20836d91baa90f181c957122f9592b3dc"}, - {file = "pyzmq-24.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7abddb2bd5489d30ffeb4b93a428130886c171b4d355ccd226e83254fcb6b9ef"}, - {file = "pyzmq-24.0.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:94010bd61bc168c103a5b3b0f56ed3b616688192db7cd5b1d626e49f28ff51b3"}, - {file = "pyzmq-24.0.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:8242543c522d84d033fe79be04cb559b80d7eb98ad81b137ff7e0a9020f00ace"}, - {file = "pyzmq-24.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ccb94342d13e3bf3ffa6e62f95b5e3f0bc6bfa94558cb37f4b3d09d6feb536ff"}, - {file = "pyzmq-24.0.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6640f83df0ae4ae1104d4c62b77e9ef39be85ebe53f636388707d532bee2b7b8"}, - {file = "pyzmq-24.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a180dbd5ea5d47c2d3b716d5c19cc3fb162d1c8db93b21a1295d69585bfddac1"}, - {file = "pyzmq-24.0.1-cp311-cp311-win32.whl", hash = "sha256:624321120f7e60336be8ec74a172ae7fba5c3ed5bf787cc85f7e9986c9e0ebc2"}, - {file = "pyzmq-24.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:1724117bae69e091309ffb8255412c4651d3f6355560d9af312d547f6c5bc8b8"}, - {file = "pyzmq-24.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:15975747462ec49fdc863af906bab87c43b2491403ab37a6d88410635786b0f4"}, - {file = "pyzmq-24.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b947e264f0e77d30dcbccbb00f49f900b204b922eb0c3a9f0afd61aaa1cedc3d"}, - {file = "pyzmq-24.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0ec91f1bad66f3ee8c6deb65fa1fe418e8ad803efedd69c35f3b5502f43bd1dc"}, - {file = "pyzmq-24.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:db03704b3506455d86ec72c3358a779e9b1d07b61220dfb43702b7b668edcd0d"}, - {file = "pyzmq-24.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:e7e66b4e403c2836ac74f26c4b65d8ac0ca1eef41dfcac2d013b7482befaad83"}, - {file = "pyzmq-24.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:7a23ccc1083c260fa9685c93e3b170baba45aeed4b524deb3f426b0c40c11639"}, - {file = "pyzmq-24.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:fa0ae3275ef706c0309556061185dd0e4c4cd3b7d6f67ae617e4e677c7a41e2e"}, - {file = "pyzmq-24.0.1-cp36-cp36m-win32.whl", hash = "sha256:f01de4ec083daebf210531e2cca3bdb1608dbbbe00a9723e261d92087a1f6ebc"}, - {file = "pyzmq-24.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:de4217b9eb8b541cf2b7fde4401ce9d9a411cc0af85d410f9d6f4333f43640be"}, - {file = "pyzmq-24.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:78068e8678ca023594e4a0ab558905c1033b2d3e806a0ad9e3094e231e115a33"}, - {file = "pyzmq-24.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77c2713faf25a953c69cf0f723d1b7dd83827b0834e6c41e3fb3bbc6765914a1"}, - {file = "pyzmq-24.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8bb4af15f305056e95ca1bd086239b9ebc6ad55e9f49076d27d80027f72752f6"}, - {file = "pyzmq-24.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0f14cffd32e9c4c73da66db97853a6aeceaac34acdc0fae9e5bbc9370281864c"}, - {file = "pyzmq-24.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0108358dab8c6b27ff6b985c2af4b12665c1bc659648284153ee501000f5c107"}, - {file = "pyzmq-24.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:d66689e840e75221b0b290b0befa86f059fb35e1ee6443bce51516d4d61b6b99"}, - {file = "pyzmq-24.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ae08ac90aa8fa14caafc7a6251bd218bf6dac518b7bff09caaa5e781119ba3f2"}, - {file = "pyzmq-24.0.1-cp37-cp37m-win32.whl", hash = "sha256:8421aa8c9b45ea608c205db9e1c0c855c7e54d0e9c2c2f337ce024f6843cab3b"}, - {file = "pyzmq-24.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:54d8b9c5e288362ec8595c1d98666d36f2070fd0c2f76e2b3c60fbad9bd76227"}, - {file = "pyzmq-24.0.1-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:acbd0a6d61cc954b9f535daaa9ec26b0a60a0d4353c5f7c1438ebc88a359a47e"}, - {file = "pyzmq-24.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:47b11a729d61a47df56346283a4a800fa379ae6a85870d5a2e1e4956c828eedc"}, - {file = "pyzmq-24.0.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:abe6eb10122f0d746a0d510c2039ae8edb27bc9af29f6d1b05a66cc2401353ff"}, - {file = "pyzmq-24.0.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:07bec1a1b22dacf718f2c0e71b49600bb6a31a88f06527dfd0b5aababe3fa3f7"}, - {file = "pyzmq-24.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0d945a85b70da97ae86113faf9f1b9294efe66bd4a5d6f82f2676d567338b66"}, - {file = "pyzmq-24.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1b7928bb7580736ffac5baf814097be342ba08d3cfdfb48e52773ec959572287"}, - {file = "pyzmq-24.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b946da90dc2799bcafa682692c1d2139b2a96ec3c24fa9fc6f5b0da782675330"}, - {file = "pyzmq-24.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c8840f064b1fb377cffd3efeaad2b190c14d4c8da02316dae07571252d20b31f"}, - {file = "pyzmq-24.0.1-cp38-cp38-win32.whl", hash = "sha256:4854f9edc5208f63f0841c0c667260ae8d6846cfa233c479e29fdc85d42ebd58"}, - {file = "pyzmq-24.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:42d4f97b9795a7aafa152a36fe2ad44549b83a743fd3e77011136def512e6c2a"}, - {file = "pyzmq-24.0.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:52afb0ac962963fff30cf1be775bc51ae083ef4c1e354266ab20e5382057dd62"}, - {file = "pyzmq-24.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bad8210ad4df68c44ff3685cca3cda448ee46e20d13edcff8909eba6ec01ca4"}, - {file = "pyzmq-24.0.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:dabf1a05318d95b1537fd61d9330ef4313ea1216eea128a17615038859da3b3b"}, - {file = "pyzmq-24.0.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5bd3d7dfd9cd058eb68d9a905dec854f86649f64d4ddf21f3ec289341386c44b"}, - {file = "pyzmq-24.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8012bce6836d3f20a6c9599f81dfa945f433dab4dbd0c4917a6fb1f998ab33d"}, - {file = "pyzmq-24.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c31805d2c8ade9b11feca4674eee2b9cce1fec3e8ddb7bbdd961a09dc76a80ea"}, - {file = "pyzmq-24.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:3104f4b084ad5d9c0cb87445cc8cfd96bba710bef4a66c2674910127044df209"}, - {file = "pyzmq-24.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:df0841f94928f8af9c7a1f0aaaffba1fb74607af023a152f59379c01c53aee58"}, - {file = "pyzmq-24.0.1-cp39-cp39-win32.whl", hash = "sha256:a435ef8a3bd95c8a2d316d6e0ff70d0db524f6037411652803e118871d703333"}, - {file = "pyzmq-24.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:2032d9cb994ce3b4cba2b8dfae08c7e25bc14ba484c770d4d3be33c27de8c45b"}, - {file = "pyzmq-24.0.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bb5635c851eef3a7a54becde6da99485eecf7d068bd885ac8e6d173c4ecd68b0"}, - {file = "pyzmq-24.0.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:83ea1a398f192957cb986d9206ce229efe0ee75e3c6635baff53ddf39bd718d5"}, - {file = "pyzmq-24.0.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:941fab0073f0a54dc33d1a0460cb04e0d85893cb0c5e1476c785000f8b359409"}, - {file = "pyzmq-24.0.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e8f482c44ccb5884bf3f638f29bea0f8dc68c97e38b2061769c4cb697f6140d"}, - {file = "pyzmq-24.0.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:613010b5d17906c4367609e6f52e9a2595e35d5cc27d36ff3f1b6fa6e954d944"}, - {file = "pyzmq-24.0.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:65c94410b5a8355cfcf12fd600a313efee46ce96a09e911ea92cf2acf6708804"}, - {file = "pyzmq-24.0.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:20e7eeb1166087db636c06cae04a1ef59298627f56fb17da10528ab52a14c87f"}, - {file = "pyzmq-24.0.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a2712aee7b3834ace51738c15d9ee152cc5a98dc7d57dd93300461b792ab7b43"}, - {file = "pyzmq-24.0.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a7c280185c4da99e0cc06c63bdf91f5b0b71deb70d8717f0ab870a43e376db8"}, - {file = "pyzmq-24.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:858375573c9225cc8e5b49bfac846a77b696b8d5e815711b8d4ba3141e6e8879"}, - {file = "pyzmq-24.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:80093b595921eed1a2cead546a683b9e2ae7f4a4592bb2ab22f70d30174f003a"}, - {file = "pyzmq-24.0.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f3f3154fde2b1ff3aa7b4f9326347ebc89c8ef425ca1db8f665175e6d3bd42f"}, - {file = "pyzmq-24.0.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abb756147314430bee5d10919b8493c0ccb109ddb7f5dfd2fcd7441266a25b75"}, - {file = "pyzmq-24.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44e706bac34e9f50779cb8c39f10b53a4d15aebb97235643d3112ac20bd577b4"}, - {file = "pyzmq-24.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:687700f8371643916a1d2c61f3fdaa630407dd205c38afff936545d7b7466066"}, - {file = "pyzmq-24.0.1.tar.gz", hash = "sha256:216f5d7dbb67166759e59b0479bca82b8acf9bed6015b526b8eb10143fb08e77"}, -] -recommonmark = [ - {file = "recommonmark-0.7.1-py2.py3-none-any.whl", hash = "sha256:1b1db69af0231efce3fa21b94ff627ea33dee7079a01dd0a7f8482c3da148b3f"}, - {file = "recommonmark-0.7.1.tar.gz", hash = "sha256:bdb4db649f2222dcd8d2d844f0006b958d627f732415d399791ee436a3686d67"}, -] -requests = [ - {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"}, - {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"}, -] -restructuredtext-lint = [ - {file = "restructuredtext_lint-1.4.0.tar.gz", hash = "sha256:1b235c0c922341ab6c530390892eb9e92f90b9b75046063e047cacfb0f050c45"}, -] -rfc3339-validator = [ - {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, - {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, -] -rfc3986-validator = [ - {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"}, - {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"}, -] -rich = [ - {file = "rich-12.6.0-py3-none-any.whl", hash = "sha256:a4eb26484f2c82589bd9a17c73d32a010b1e29d89f1604cd9bf3a2097b81bb5e"}, - {file = "rich-12.6.0.tar.gz", hash = "sha256:ba3a3775974105c221d31141f2c116f4fd65c5ceb0698657a11e9f295ec93fd0"}, -] -scipy = [ - {file = "scipy-1.9.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1884b66a54887e21addf9c16fb588720a8309a57b2e258ae1c7986d4444d3bc0"}, - {file = "scipy-1.9.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:83b89e9586c62e787f5012e8475fbb12185bafb996a03257e9675cd73d3736dd"}, - {file = "scipy-1.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a72d885fa44247f92743fc20732ae55564ff2a519e8302fb7e18717c5355a8b"}, - {file = "scipy-1.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d01e1dd7b15bd2449c8bfc6b7cc67d630700ed655654f0dfcf121600bad205c9"}, - {file = "scipy-1.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:68239b6aa6f9c593da8be1509a05cb7f9efe98b80f43a5861cd24c7557e98523"}, - {file = "scipy-1.9.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b41bc822679ad1c9a5f023bc93f6d0543129ca0f37c1ce294dd9d386f0a21096"}, - {file = "scipy-1.9.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:90453d2b93ea82a9f434e4e1cba043e779ff67b92f7a0e85d05d286a3625df3c"}, - {file = "scipy-1.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83c06e62a390a9167da60bedd4575a14c1f58ca9dfde59830fc42e5197283dab"}, - {file = "scipy-1.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abaf921531b5aeaafced90157db505e10345e45038c39e5d9b6c7922d68085cb"}, - {file = "scipy-1.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:06d2e1b4c491dc7d8eacea139a1b0b295f74e1a1a0f704c375028f8320d16e31"}, - {file = "scipy-1.9.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5a04cd7d0d3eff6ea4719371cbc44df31411862b9646db617c99718ff68d4840"}, - {file = "scipy-1.9.3-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:545c83ffb518094d8c9d83cce216c0c32f8c04aaf28b92cc8283eda0685162d5"}, - {file = "scipy-1.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d54222d7a3ba6022fdf5773931b5d7c56efe41ede7f7128c7b1637700409108"}, - {file = "scipy-1.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cff3a5295234037e39500d35316a4c5794739433528310e117b8a9a0c76d20fc"}, - {file = "scipy-1.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:2318bef588acc7a574f5bfdff9c172d0b1bf2c8143d9582e05f878e580a3781e"}, - {file = "scipy-1.9.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d644a64e174c16cb4b2e41dfea6af722053e83d066da7343f333a54dae9bc31c"}, - {file = "scipy-1.9.3-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:da8245491d73ed0a994ed9c2e380fd058ce2fa8a18da204681f2fe1f57f98f95"}, - {file = "scipy-1.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4db5b30849606a95dcf519763dd3ab6fe9bd91df49eba517359e450a7d80ce2e"}, - {file = "scipy-1.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c68db6b290cbd4049012990d7fe71a2abd9ffbe82c0056ebe0f01df8be5436b0"}, - {file = "scipy-1.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:5b88e6d91ad9d59478fafe92a7c757d00c59e3bdc3331be8ada76a4f8d683f58"}, - {file = "scipy-1.9.3.tar.gz", hash = "sha256:fbc5c05c85c1a02be77b1ff591087c83bc44579c6d2bd9fb798bb64ea5e1a027"}, -] -screeninfo = [ - {file = "screeninfo-0.8.1-py3-none-any.whl", hash = "sha256:e97d6b173856edcfa3bd282f81deb528188aff14b11ec3e195584e7641be733c"}, - {file = "screeninfo-0.8.1.tar.gz", hash = "sha256:9983076bcc7e34402a1a9e4d7dabf3729411fd2abb3f3b4be7eba73519cd2ed1"}, -] -Send2Trash = [ - {file = "Send2Trash-1.8.0-py3-none-any.whl", hash = "sha256:f20eaadfdb517eaca5ce077640cb261c7d2698385a6a0f072a4a5447fd49fa08"}, - {file = "Send2Trash-1.8.0.tar.gz", hash = "sha256:d2c24762fd3759860a0aff155e45871447ea58d2be6bdd39b5c8f966a0c99c2d"}, -] -setuptools = [ - {file = "setuptools-65.6.3-py3-none-any.whl", hash = "sha256:57f6f22bde4e042978bcd50176fdb381d7c21a9efa4041202288d3737a0c6a54"}, - {file = "setuptools-65.6.3.tar.gz", hash = "sha256:a7620757bf984b58deaf32fc8a4577a9bbc0850cf92c20e1ce41c38c19e5fb75"}, -] -setuptools-scm = [ - {file = "setuptools_scm-7.0.5-py3-none-any.whl", hash = "sha256:7930f720905e03ccd1e1d821db521bff7ec2ac9cf0ceb6552dd73d24a45d3b02"}, - {file = "setuptools_scm-7.0.5.tar.gz", hash = "sha256:031e13af771d6f892b941adb6ea04545bbf91ebc5ce68c78aaf3fff6e1fb4844"}, -] -six = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] -skia-pathops = [ - {file = "skia-pathops-0.7.4.zip", hash = "sha256:0a2fdee87b7adb018cbfa6e95ef9e4299ed63b0080be27677a30ffefbca91350"}, - {file = "skia_pathops-0.7.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1301f3c0d7656a38208098bd37a7365a5325e09d59f1875fc99738116b0bc924"}, - {file = "skia_pathops-0.7.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:19288f9128d46be2960739242aedb1be618a618350c6d8e006b3c619449e6464"}, - {file = "skia_pathops-0.7.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a4d324b4d3c3863536f0922a18d61d7c3567acd88c69109b5fb79f60f532de5"}, - {file = "skia_pathops-0.7.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f35e2ea1a43f44ccaab75dd5c782510f79f3bd478fa404a4907597ab9d5d379"}, - {file = "skia_pathops-0.7.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3a7107d11947249fa6af3996e123442bfc6893dd81565fadca023f0d9f977694"}, - {file = "skia_pathops-0.7.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a5fa30b7bc525db188672f0360e633fbc14be8f1b975b2f9a105173b212c0794"}, - {file = "skia_pathops-0.7.4-cp310-cp310-win32.whl", hash = "sha256:2367a8179d823d3c3c5ccf9e889d8a96890245f31f2bbfdc16824263f7e4d2e2"}, - {file = "skia_pathops-0.7.4-cp310-cp310-win_amd64.whl", hash = "sha256:487a3d8289a31f565fb34988155797150dabe7434cfea0006ce99337f4422666"}, - {file = "skia_pathops-0.7.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6b3e4c5aa986ece9f9c89f55c4c2c43b60859697602993055ac3ef75784bf996"}, - {file = "skia_pathops-0.7.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c1e55be8e0de805751515fb5d707c5fe3daab73c218b30134e8c05ba104746ef"}, - {file = "skia_pathops-0.7.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c823bf270c0869ee712647a0cf03b6aeb39669211dcc44a5a3c039075fc04f3"}, - {file = "skia_pathops-0.7.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:003119e9a5f24395f134c8223c5fbc9baddecd1002ee0814287cd78a52477655"}, - {file = "skia_pathops-0.7.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ab0fbbd008d586cfbc98fc2b5ce45f70dab6090a787f65292d40acd43644f6d0"}, - {file = "skia_pathops-0.7.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5aa500bd39e28cdd043f8c9edcbc793a86f557c26dc3698f0981080bfec0dd67"}, - {file = "skia_pathops-0.7.4-cp311-cp311-win32.whl", hash = "sha256:5c18a6e749389885cd6a18bd06a29bd945ad8b962f81ce3761bf0b85127ffa1a"}, - {file = "skia_pathops-0.7.4-cp311-cp311-win_amd64.whl", hash = "sha256:82fbef52409db9ccad07c0504ba692f9bc0e58095f4aeb7cd35ce1d06205781a"}, - {file = "skia_pathops-0.7.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f901bf5e43caa16a783abf3cd2d595dfdfbb9a93348a452a5d9c1e143885d09a"}, - {file = "skia_pathops-0.7.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:308cdf420138a7f34680e3c6e07314d335bf1796365dbbfc807c73b503d39b0e"}, - {file = "skia_pathops-0.7.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a8097c2ce9d7ea4fc0586466e62ae5bc106f7d929b61b70ad8246e104cdba67"}, - {file = "skia_pathops-0.7.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f2601a831638fe511f67ee25ef25c43724f7b3abbb2cae50d0d86d4546176c41"}, - {file = "skia_pathops-0.7.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e05be6fc8937972beb071e7d5651ed7108aa6761b02d4ae4baaefdeb4b8d3649"}, - {file = "skia_pathops-0.7.4-cp37-cp37m-win32.whl", hash = "sha256:48b6f55117c56de80cb3d986497f1556a56823cebc9be648f2bcccfa0b869a99"}, - {file = "skia_pathops-0.7.4-cp37-cp37m-win_amd64.whl", hash = "sha256:486cb9e5bcd7801450af4188d84c12a7fa8a37f6f0a05c71f917bd429deafda5"}, - {file = "skia_pathops-0.7.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:74bda285e6fb4d891f24d8937479a57d29b38e69dcb735d515c63cd911cafb24"}, - {file = "skia_pathops-0.7.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ee23c6f3db16f5b2b5fc8e805d57570613fa75febe3d21fb819897fa54f82081"}, - {file = "skia_pathops-0.7.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88eeaa7b4d1d86364bc63c5d88522c40113df24f1abc7be34edd22d7b137d4c6"}, - {file = "skia_pathops-0.7.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c09c8af59ae8a7bc883342c29c062a6032a7558fd31f7b852db5a4fb0d5c0545"}, - {file = "skia_pathops-0.7.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:fe58f22bc1f37af1829e38f4867bc81346272953f764bac68c05efc88bd2fbef"}, - {file = "skia_pathops-0.7.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2f0fbccd30d6778bfec3d69d28947d80432eed55a45fcbc1584331b00da4caf1"}, - {file = "skia_pathops-0.7.4-cp38-cp38-win32.whl", hash = "sha256:84f8006a3049ba4ff17d44b4bcd8b050ac8fc6630a36d56435c1ce9e8e5500a2"}, - {file = "skia_pathops-0.7.4-cp38-cp38-win_amd64.whl", hash = "sha256:be2b601133a1e7346c9ecc791ca06e37d05ed89a425d0388a5dab04863689a5b"}, - {file = "skia_pathops-0.7.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8b1e0683ab485ed9ab42dd264f30c137efa3c308727b1931dc52073a77cd1029"}, - {file = "skia_pathops-0.7.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e8fde29c64cae35d3c44586cadfae0c09f4eeb2d428ebc45de2fe5c3de3a4f07"}, - {file = "skia_pathops-0.7.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b555157958a785f63744f77b7a3cd6a99a2df8bfcc43bc80fa6332d777eff84a"}, - {file = "skia_pathops-0.7.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9aa3dfb7349f78cef20cf7b1eb0ab2393aab26d403a958f5821c18d9357f3938"}, - {file = "skia_pathops-0.7.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a868cb5e943fc90e8de4f987f890004e01de238dafaec265daa684eae0af42b6"}, - {file = "skia_pathops-0.7.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:608408ac31c5eb187dae10ad29986be16a1d179ca734264b454aca1d46c2cc4b"}, - {file = "skia_pathops-0.7.4-cp39-cp39-win32.whl", hash = "sha256:4da2d43512b07ba913ab2f3f0f64f80590b366c3aca3a3f35605568c9997a9ad"}, - {file = "skia_pathops-0.7.4-cp39-cp39-win_amd64.whl", hash = "sha256:8e701fa2c0535d428e93b145c7be0a0c41b8ec9a203256c378e66d8052d0e29d"}, - {file = "skia_pathops-0.7.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36f8eaa534d6e38e788fec9157efb11093d5de2c1cfec0d350c3e1af097a043d"}, - {file = "skia_pathops-0.7.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f63cfc73dc1f20e5ef5bdd766022c70491e2ab73c8d6b3cc1f8ca2c28c9114d7"}, - {file = "skia_pathops-0.7.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d47d48192241688609f2194273d89266bcd18c45426af417991634fc811bf37"}, -] -smmap = [ - {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"}, - {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, -] -sniffio = [ - {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, - {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, -] -snowballstemmer = [ - {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, - {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, -] -soupsieve = [ - {file = "soupsieve-2.3.2.post1-py3-none-any.whl", hash = "sha256:3b2503d3c7084a42b1ebd08116e5f81aadfaea95863628c80a3b774a11b7c759"}, - {file = "soupsieve-2.3.2.post1.tar.gz", hash = "sha256:fc53893b3da2c33de295667a0e19f078c14bf86544af307354de5fcf12a3f30d"}, -] -Sphinx = [ - {file = "Sphinx-4.5.0-py3-none-any.whl", hash = "sha256:ebf612653238bcc8f4359627a9b7ce44ede6fdd75d9d30f68255c7383d3a6226"}, - {file = "Sphinx-4.5.0.tar.gz", hash = "sha256:7bf8ca9637a4ee15af412d1a1d9689fec70523a68ca9bb9127c2f3eeb344e2e6"}, -] -sphinx-basic-ng = [ - {file = "sphinx_basic_ng-1.0.0b1-py3-none-any.whl", hash = "sha256:ade597a3029c7865b24ad0eda88318766bcc2f9f4cef60df7e28126fde94db2a"}, - {file = "sphinx_basic_ng-1.0.0b1.tar.gz", hash = "sha256:89374bd3ccd9452a301786781e28c8718e99960f2d4f411845ea75fc7bb5a9b0"}, -] -sphinx-copybutton = [ - {file = "sphinx-copybutton-0.4.0.tar.gz", hash = "sha256:8daed13a87afd5013c3a9af3575cc4d5bec052075ccd3db243f895c07a689386"}, - {file = "sphinx_copybutton-0.4.0-py3-none-any.whl", hash = "sha256:4340d33c169dac6dd82dce2c83333412aa786a42dd01a81a8decac3b130dc8b0"}, -] -sphinxcontrib-applehelp = [ - {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, - {file = "sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a"}, -] -sphinxcontrib-devhelp = [ - {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, - {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, -] -sphinxcontrib-htmlhelp = [ - {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, - {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, -] -sphinxcontrib-jsmath = [ - {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, - {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, -] -sphinxcontrib-programoutput = [ - {file = "sphinxcontrib-programoutput-0.17.tar.gz", hash = "sha256:300ee9b8caee8355d25cc74b4d1c7efd12e608d2ad165e3141d31e6fbc152b7f"}, - {file = "sphinxcontrib_programoutput-0.17-py2.py3-none-any.whl", hash = "sha256:0ef1c1d9159dbe7103077748214305eb4e0138e861feb71c0c346afc5fe97f84"}, -] -sphinxcontrib-qthelp = [ - {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, - {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, -] -sphinxcontrib-serializinghtml = [ - {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, - {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, -] -sphinxext-opengraph = [ - {file = "sphinxext-opengraph-0.5.1.tar.gz", hash = "sha256:78675a8a490c749a881892abc4f28ac3a2e8e65b066fe346fa7da882290906a5"}, - {file = "sphinxext_opengraph-0.5.1-py3-none-any.whl", hash = "sha256:3fd0df576ae11e55c710653413edd7c05db65a4fbf985d536127c5ac06f5d2cb"}, -] -srt = [ - {file = "srt-3.5.2.tar.gz", hash = "sha256:7aa4ad5ce4126d3f53b3e7bc4edaa86653d0378bf1c0b1ab8c59f5ab41384450"}, -] -stack-data = [ - {file = "stack_data-0.6.2-py3-none-any.whl", hash = "sha256:cbb2a53eb64e5785878201a97ed7c7b94883f48b87bfb0bbe8b623c74679e4a8"}, - {file = "stack_data-0.6.2.tar.gz", hash = "sha256:32d2dd0376772d01b6cb9fc996f3c8b57a357089dec328ed4b6553d037eaf815"}, -] -svgelements = [ - {file = "svgelements-1.8.4-py2.py3-none-any.whl", hash = "sha256:dc43ef603c650a2bf6380910bb9a28968e2474eb229295b9a36443f825c3a4f4"}, - {file = "svgelements-1.8.4.tar.gz", hash = "sha256:af0fa36d8d239c4df205e110cf531256359c6c4c93aa3cd13ae9599912f1335d"}, -] -terminado = [ - {file = "terminado-0.17.1-py3-none-any.whl", hash = "sha256:8650d44334eba354dd591129ca3124a6ba42c3d5b70df5051b6921d506fdaeae"}, - {file = "terminado-0.17.1.tar.gz", hash = "sha256:6ccbbcd3a4f8a25a5ec04991f39a0b8db52dfcd487ea0e578d977e6752380333"}, -] -tinycss2 = [ - {file = "tinycss2-1.2.1-py3-none-any.whl", hash = "sha256:2b80a96d41e7c3914b8cda8bc7f705a4d9c49275616e886103dd839dfc847847"}, - {file = "tinycss2-1.2.1.tar.gz", hash = "sha256:8cff3a8f066c2ec677c06dbc7b45619804a6938478d9d73c284b29d14ecb0627"}, -] -toml = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, -] -tomli = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] -tomlkit = [ - {file = "tomlkit-0.11.6-py3-none-any.whl", hash = "sha256:07de26b0d8cfc18f871aec595fda24d95b08fef89d147caa861939f37230bf4b"}, - {file = "tomlkit-0.11.6.tar.gz", hash = "sha256:71b952e5721688937fb02cf9d354dbcf0785066149d2855e44531ebdd2b65d73"}, -] -tornado = [ - {file = "tornado-6.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:20f638fd8cc85f3cbae3c732326e96addff0a15e22d80f049e00121651e82e72"}, - {file = "tornado-6.2-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:87dcafae3e884462f90c90ecc200defe5e580a7fbbb4365eda7c7c1eb809ebc9"}, - {file = "tornado-6.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba09ef14ca9893954244fd872798b4ccb2367c165946ce2dd7376aebdde8e3ac"}, - {file = "tornado-6.2-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8150f721c101abdef99073bf66d3903e292d851bee51910839831caba341a75"}, - {file = "tornado-6.2-cp37-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3a2f5999215a3a06a4fc218026cd84c61b8b2b40ac5296a6db1f1451ef04c1e"}, - {file = "tornado-6.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5f8c52d219d4995388119af7ccaa0bcec289535747620116a58d830e7c25d8a8"}, - {file = "tornado-6.2-cp37-abi3-musllinux_1_1_i686.whl", hash = "sha256:6fdfabffd8dfcb6cf887428849d30cf19a3ea34c2c248461e1f7d718ad30b66b"}, - {file = "tornado-6.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:1d54d13ab8414ed44de07efecb97d4ef7c39f7438cf5e976ccd356bebb1b5fca"}, - {file = "tornado-6.2-cp37-abi3-win32.whl", hash = "sha256:5c87076709343557ef8032934ce5f637dbb552efa7b21d08e89ae7619ed0eb23"}, - {file = "tornado-6.2-cp37-abi3-win_amd64.whl", hash = "sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b"}, - {file = "tornado-6.2.tar.gz", hash = "sha256:9b630419bde84ec666bfd7ea0a4cb2a8a651c2d5cccdbdd1972a0c859dfc3c13"}, -] -tqdm = [ - {file = "tqdm-4.64.1-py2.py3-none-any.whl", hash = "sha256:6fee160d6ffcd1b1c68c65f14c829c22832bc401726335ce92c52d395944a6a1"}, - {file = "tqdm-4.64.1.tar.gz", hash = "sha256:5f4f682a004951c1b450bc753c710e9280c5746ce6ffedee253ddbcbf54cf1e4"}, -] -traitlets = [ - {file = "traitlets-5.6.0-py3-none-any.whl", hash = "sha256:1410755385d778aed847d68deb99b3ba30fbbf489e17a1e8cbb753060d5cce73"}, - {file = "traitlets-5.6.0.tar.gz", hash = "sha256:10b6ed1c9cedee83e795db70a8b9c2db157bb3778ec4587a349ecb7ef3b1033b"}, -] -types-decorator = [ - {file = "types-decorator-0.1.7.tar.gz", hash = "sha256:1772c7a83d2846a09c90ae0549058baffb10d0dd01f9494e2032567d3b62ac5e"}, - {file = "types_decorator-0.1.7-py3-none-any.whl", hash = "sha256:b55f4c8c59bdd25bd1ecf835f0bc21d88b99be0f5bb51b1c0d73090be90f62db"}, -] -types-docutils = [ - {file = "types-docutils-0.19.1.1.tar.gz", hash = "sha256:be0a51ba1c7dd215d9d2df66d6845e63c1009b4bbf4c5beb87a0d9745cdba962"}, - {file = "types_docutils-0.19.1.1-py3-none-any.whl", hash = "sha256:a024cada35f0c13cc45eb0b68a102719018a634013690b7fef723bcbfadbd1f1"}, -] -types-Pillow = [ - {file = "types-Pillow-8.3.11.tar.gz", hash = "sha256:aa96a739184f48f69e6f30218400623fc5a95f5fec199c447663a32538440405"}, - {file = "types_Pillow-8.3.11-py3-none-any.whl", hash = "sha256:998189334e616b1dd42c9634669efbf726184039e96e9a23ec95246e0ecff3fc"}, -] -types-protobuf = [ - {file = "types-protobuf-3.20.4.6.tar.gz", hash = "sha256:ba27443c592bbec1629dd69494a24c84461c63f0d3b7d648ce258aaae9680965"}, - {file = "types_protobuf-3.20.4.6-py3-none-any.whl", hash = "sha256:ab2d315ba82246b83d28f8797c98dc0fe1dd5cfd187909e56faf87239aedaae3"}, -] -types-Pygments = [ - {file = "types-Pygments-2.13.1.1.tar.gz", hash = "sha256:bcc24601e698b1393744f77901376d55b7a9a6a23d4f4ba80c84347c1f7939b1"}, - {file = "types_Pygments-2.13.1.1-py3-none-any.whl", hash = "sha256:9c789be357e21f611d215af3ae9dfcc24469dc4be96e96ea9b4e5e0c783afba5"}, -] -types-requests = [ - {file = "types-requests-2.28.11.5.tar.gz", hash = "sha256:a7df37cc6fb6187a84097da951f8e21d335448aa2501a6b0a39cbd1d7ca9ee2a"}, - {file = "types_requests-2.28.11.5-py3-none-any.whl", hash = "sha256:091d4a5a33c1b4f20d8b1b952aa8fa27a6e767c44c3cf65e56580df0b05fd8a9"}, -] -types-setuptools = [ - {file = "types-setuptools-57.4.18.tar.gz", hash = "sha256:8ee03d823fe7fda0bd35faeae33d35cb5c25b497263e6a58b34c4cfd05f40bcf"}, - {file = "types_setuptools-57.4.18-py3-none-any.whl", hash = "sha256:9660b8774b12cd61b448e2fd87a667c02e7ec13ce9f15171f1d49a4654c4df6a"}, -] -types-urllib3 = [ - {file = "types-urllib3-1.26.25.4.tar.gz", hash = "sha256:eec5556428eec862b1ac578fb69aab3877995a99ffec9e5a12cf7fbd0cc9daee"}, - {file = "types_urllib3-1.26.25.4-py3-none-any.whl", hash = "sha256:ed6b9e8a8be488796f72306889a06a3fc3cb1aa99af02ab8afb50144d7317e49"}, -] -typing-extensions = [ - {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, - {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, -] -uri-template = [ - {file = "uri_template-1.2.0-py3-none-any.whl", hash = "sha256:f1699c77b73b925cf4937eae31ab282a86dc885c333f2e942513f08f691fc7db"}, - {file = "uri_template-1.2.0.tar.gz", hash = "sha256:934e4d09d108b70eb8a24410af8615294d09d279ce0e7cbcdaef1bd21f932b06"}, -] -urllib3 = [ - {file = "urllib3-1.26.13-py2.py3-none-any.whl", hash = "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc"}, - {file = "urllib3-1.26.13.tar.gz", hash = "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8"}, -] -virtualenv = [ - {file = "virtualenv-20.17.1-py3-none-any.whl", hash = "sha256:ce3b1684d6e1a20a3e5ed36795a97dfc6af29bc3970ca8dab93e11ac6094b3c4"}, - {file = "virtualenv-20.17.1.tar.gz", hash = "sha256:f8b927684efc6f1cc206c9db297a570ab9ad0e51c16fa9e45487d36d1905c058"}, -] -watchdog = [ +files = [ {file = "watchdog-2.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ed91c3ccfc23398e7aa9715abf679d5c163394b8cad994f34f156d57a7c163dc"}, {file = "watchdog-2.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:76a2743402b794629a955d96ea2e240bd0e903aa26e02e93cd2d57b33900962b"}, {file = "watchdog-2.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:920a4bda7daa47545c3201a3292e99300ba81ca26b7569575bd086c865889090"}, @@ -4555,23 +4481,71 @@ watchdog = [ {file = "watchdog-2.2.0-py3-none-win_ia64.whl", hash = "sha256:ad0150536469fa4b693531e497ffe220d5b6cd76ad2eda474a5e641ee204bbb6"}, {file = "watchdog-2.2.0.tar.gz", hash = "sha256:83cf8bc60d9c613b66a4c018051873d6273d9e45d040eed06d6a96241bd8ec01"}, ] -wcwidth = [ + +[package.extras] +watchmedo = ["PyYAML (>=3.10)"] + +[[package]] +name = "wcwidth" +version = "0.2.5" +description = "Measures the displayed width of unicode strings in a terminal" +category = "main" +optional = true +python-versions = "*" +files = [ {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, ] -webcolors = [ + +[[package]] +name = "webcolors" +version = "1.12" +description = "A library for working with color names and color values formats defined by HTML and CSS." +category = "main" +optional = true +python-versions = ">=3.7" +files = [ {file = "webcolors-1.12-py3-none-any.whl", hash = "sha256:d98743d81d498a2d3eaf165196e65481f0d2ea85281463d856b1e51b09f62dce"}, {file = "webcolors-1.12.tar.gz", hash = "sha256:16d043d3a08fd6a1b1b7e3e9e62640d09790dce80d2bdd4792a175b35fe794a9"}, ] -webencodings = [ + +[[package]] +name = "webencodings" +version = "0.5.1" +description = "Character encoding aliases for legacy web content" +category = "main" +optional = true +python-versions = "*" +files = [ {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, ] -websocket-client = [ + +[[package]] +name = "websocket-client" +version = "1.4.2" +description = "WebSocket client for Python with low level API options" +category = "main" +optional = true +python-versions = ">=3.7" +files = [ {file = "websocket-client-1.4.2.tar.gz", hash = "sha256:d6e8f90ca8e2dd4e8027c4561adeb9456b54044312dba655e7cae652ceb9ae59"}, {file = "websocket_client-1.4.2-py3-none-any.whl", hash = "sha256:d6b06432f184438d99ac1f456eaf22fe1ade524c3dd16e661142dc54e9cba574"}, ] -wrapt = [ + +[package.extras] +docs = ["Sphinx (>=3.4)", "sphinx-rtd-theme (>=0.5)"] +optional = ["python-socks", "wsaccel"] +test = ["websockets"] + +[[package]] +name = "wrapt" +version = "1.14.1" +description = "Module for decorators, wrappers and monkey patching." +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +files = [ {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"}, {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef"}, {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28"}, @@ -4637,7 +4611,28 @@ wrapt = [ {file = "wrapt-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb"}, {file = "wrapt-1.14.1.tar.gz", hash = "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d"}, ] -zipp = [ + +[[package]] +name = "zipp" +version = "3.11.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "zipp-3.11.0-py3-none-any.whl", hash = "sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa"}, {file = "zipp-3.11.0.tar.gz", hash = "sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766"}, ] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"] +testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] + +[extras] +gui = ["dearpygui"] +jupyterlab = ["jupyterlab", "notebook"] + +[metadata] +lock-version = "2.0" +python-versions = ">=3.8,<3.12" +content-hash = "fa43d226383fac685507d8fd9638236b5f67ad5fa3dcd58fe39633d81721d4ef" diff --git a/pyproject.toml b/pyproject.toml index c327c8f061..4e60fc2804 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -78,12 +78,12 @@ pygithub = "^1" flake8 = "^3.9.0" isort = "^5.8.0" pytest-xdist = "^2.2" -mypy = "^0.931" +mypy = "^0.991" types-requests = "^2.25.6" types-protobuf = "^3.17.4" types-decorator = "^0.1.7" types-setuptools = "^57.0.2" -types-Pillow = "^8.3.3" +types-Pillow = "^9.3.0.4" types-Pygments = "^2.9.2" flake8-builtins = "^1.5.3" flake8-bugbear = "^21.4.3" @@ -111,6 +111,11 @@ allow-prereleases = false python = "^3.6" markers = "platform_python_implementation == 'CPython'" + +[tool.poetry.group.dev.dependencies] +mypy = "^0.991" +types-tqdm = "^4.64.7.9" + [tool.pytest.ini_options] markers = "slow: Mark the test as slow. Can be skipped with --skip_slow" addopts = "--no-cov-on-fail --cov=manim --cov-report xml --cov-report term -n auto --dist=loadfile --durations=0" From 47e16b62819f1887ace5106e260d4ed597f7c047 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 25 Dec 2022 02:28:50 +0000 Subject: [PATCH 24/91] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- .mypy.ini | 12 ++++++------ manim/typing.py | 5 +++-- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/.mypy.ini b/.mypy.ini index 41ca07bdbf..657e649bc7 100644 --- a/.mypy.ini +++ b/.mypy.ini @@ -13,30 +13,30 @@ use_fine_grained_cache = True # disallow_any_explicit = True # disallow_any_generics = True # disallow_subclassing_any = True -# +# # # Disallow Untyped Defs and Calls disallow_untyped_calls = True disallow_untyped_defs = True disallow_incomplete_defs = True # check_untyped_defs = False # disallow_untyped_decorators = True -# +# # # None and Optional Handling # implicit_optional = False # strict_optional = True -# +# # # Configuring Warnings # warn_redundant_casts = True # warn_unused_ignores = True warn_return_any = True # warn_unreachable = True -# +# # # Strictness Flags # allow_untyped_globals = False # allow_redefinition = False # local_partial_types = False # strict_equality = True -# +# # # Configuring Error Messages # show_error_context = True # show_column_numbers = True @@ -44,7 +44,7 @@ warn_return_any = True # pretty = True # color_output = True # error_summary = True -# +# # disable_recursive_aliases = True [mypy-manim.typing] diff --git a/manim/typing.py b/manim/typing.py index d5342e1d94..ee3f14a253 100644 --- a/manim/typing.py +++ b/manim/typing.py @@ -1,7 +1,8 @@ -from typing import Tuple, Protocol -from typing_extensions import TypeAlias, Annotated, Literal, TypeVar +from typing import Protocol, Tuple + import numpy as np import numpy.typing as npt +from typing_extensions import Annotated, Literal, TypeAlias, TypeVar # Color Types From 3193597830feff51645f761dbcd2503aa0a46a29 Mon Sep 17 00:00:00 2001 From: MrDiver Date: Sun, 25 Dec 2022 12:45:03 +0100 Subject: [PATCH 25/91] fixed codeql complaints --- .flake8 | 10 +++-- .mypy.ini | 2 +- manim/animation/changing.py | 11 +++-- manim/animation/creation.py | 5 +-- manim/animation/indication.py | 5 ++- manim/camera/camera.py | 3 +- manim/mobject/geometry/arc.py | 2 +- manim/mobject/geometry/line.py | 2 +- manim/mobject/geometry/polygram.py | 2 +- manim/mobject/geometry/shape_matchers.py | 4 +- manim/mobject/opengl/opengl_mobject.py | 10 ++++- .../opengl/opengl_vectorized_mobject.py | 5 +-- manim/mobject/text/tex_mobject.py | 6 +-- manim/mobject/three_d/three_dimensions.py | 11 ++++- manim/mobject/types/vectorized_mobject.py | 43 ++++++++----------- manim/typing.py | 4 +- manim/utils/bezier.py | 9 +--- manim/utils/space_ops.py | 2 +- 18 files changed, 72 insertions(+), 64 deletions(-) diff --git a/.flake8 b/.flake8 index 8d4f3309b0..51a0f864db 100644 --- a/.flake8 +++ b/.flake8 @@ -1,6 +1,7 @@ [flake8] # Exclude the grpc generated code -exclude = ./manim/grpc/gen/* +exclude = ./manim/grpc/gen/*, __pycache__,.git, +per-file-ignores = __init__.py:F401 max-complexity = 15 max-line-length = 88 statistics = True @@ -9,13 +10,14 @@ rst-roles = attr,class,func,meth,mod,obj,ref,doc,exc rst-directives = manim, SEEALSO, seealso docstring-convention=numpy -select = A,A00,B,B9,C4,C90,D,E,F,F,PT,RST,SIM,W +select = A,A00,B,B9,C4,C90,D,E,F,F,PT,RST,SIM,W,F401 # General Compatibility extend-ignore = E203, W503, D202, D212, D213, D404 # Misc - F401, F403, F405, F841, E501, E731, E402, F811, F821, + ; F401, + F403, F405, F841, E501, E731, E402, F811, F821, # Plug-in: flake8-builtins A001, A002, A003, @@ -40,4 +42,4 @@ extend-ignore = E203, W503, D202, D212, D213, D404 # Plug-in: flake8-rst-docstrings RST201, RST203, RST210, RST212, RST213, RST215, - RST301, RST303, + RST301, RST303, RST499 diff --git a/.mypy.ini b/.mypy.ini index 657e649bc7..67630c4d9f 100644 --- a/.mypy.ini +++ b/.mypy.ini @@ -1,7 +1,7 @@ [mypy] strict = False python_version = 3.10 -plugins = numpy.typing.mypy_plugin +; plugins = numpy.typing.mypy_plugin ignore_errors = True cache_fine_grained = True use_fine_grained_cache = True diff --git a/manim/animation/changing.py b/manim/animation/changing.py index eff3587101..bb11cfc0a4 100644 --- a/manim/animation/changing.py +++ b/manim/animation/changing.py @@ -6,11 +6,16 @@ from typing import Callable -from manim._config import config from manim.mobject.opengl.opengl_compatibility import ConvertToOpenGL from manim.mobject.types.vectorized_mobject import VGroup, VMobject -from manim.utils.color import * -from manim.utils.color import BLUE_B, BLUE_D, BLUE_E, GREY_BROWN, WHITE +from manim.utils.color import ( + BLUE_B, + BLUE_D, + BLUE_E, + GREY_BROWN, + WHITE, + ParsableManimColor, +) from manim.utils.rate_functions import smooth diff --git a/manim/animation/creation.py b/manim/animation/creation.py index ff35819e7f..a313b16153 100644 --- a/manim/animation/creation.py +++ b/manim/animation/creation.py @@ -83,7 +83,7 @@ def construct(self): from manim.mobject.opengl.opengl_surface import OpenGLSurface from manim.mobject.opengl.opengl_vectorized_mobject import OpenGLVMobject -from manim.utils.color import * +from manim.utils.color import ManimColor from .. import config from ..animation.animation import Animation @@ -92,7 +92,7 @@ def construct(self): from ..mobject.mobject import Group, Mobject from ..mobject.types.vectorized_mobject import VMobject from ..utils.bezier import integer_interpolate -from ..utils.rate_functions import double_smooth, linear, smooth +from ..utils.rate_functions import double_smooth, linear class ShowPartial(Animation): @@ -404,7 +404,6 @@ def __init__( reverse: bool = True, **kwargs, ) -> None: - run_time: float | None = kwargs.pop("run_time", None) lag_ratio: float | None = kwargs.pop("lag_ratio", None) run_time, lag_ratio = self._set_default_config_from_length( diff --git a/manim/animation/indication.py b/manim/animation/indication.py index 5a38196e43..e0ba47430e 100644 --- a/manim/animation/indication.py +++ b/manim/animation/indication.py @@ -45,6 +45,7 @@ def construct(self): from manim.mobject.geometry.line import Line from manim.mobject.geometry.polygram import Rectangle from manim.mobject.geometry.shape_matchers import SurroundingRectangle +from manim.scene.scene import Scene from .. import config from ..animation.animation import Animation @@ -57,7 +58,7 @@ def construct(self): from ..mobject.mobject import Mobject from ..mobject.types.vectorized_mobject import VGroup, VMobject from ..utils.bezier import interpolate, inverse_interpolate -from ..utils.color import GREY, YELLOW, ManimColor, ParsableManimColor +from ..utils.color import GREY, YELLOW, ParsableManimColor from ..utils.deprecation import deprecated from ..utils.rate_functions import smooth, there_and_back, wiggle from ..utils.space_ops import normalize @@ -313,7 +314,7 @@ def _get_bounds(self, alpha: float) -> Tuple[float]: lower = max(lower, 0) return (lower, upper) - def clean_up_from_scene(self, scene: "Scene") -> None: + def clean_up_from_scene(self, scene: Scene) -> None: super().clean_up_from_scene(scene) for submob, start in self.get_all_families_zipped(): submob.pointwise_become_partial(start, 0, 1) diff --git a/manim/camera/camera.py b/manim/camera/camera.py index c9559a66f1..cf2599e85f 100644 --- a/manim/camera/camera.py +++ b/manim/camera/camera.py @@ -9,7 +9,6 @@ import itertools as it import operator as op import pathlib -import time from functools import reduce from typing import Any, Callable, Iterable @@ -24,7 +23,7 @@ from ..mobject.types.image_mobject import AbstractImageMobject from ..mobject.types.point_cloud_mobject import PMobject from ..mobject.types.vectorized_mobject import VMobject -from ..utils.color import BLACK, ManimColor, ParsableManimColor, color_to_int_rgba +from ..utils.color import ManimColor, ParsableManimColor, color_to_int_rgba from ..utils.family import extract_mobject_family_members from ..utils.images import get_full_raster_image_path from ..utils.iterables import list_difference_update diff --git a/manim/mobject/geometry/arc.py b/manim/mobject/geometry/arc.py index 318dd528b1..dbb23d508d 100644 --- a/manim/mobject/geometry/arc.py +++ b/manim/mobject/geometry/arc.py @@ -52,7 +52,7 @@ def construct(self): from manim.constants import * from manim.mobject.opengl.opengl_compatibility import ConvertToOpenGL from manim.mobject.types.vectorized_mobject import VMobject -from manim.utils.color import * +from manim.utils.color import BLACK, BLUE, RED, WHITE, ParsableManimColor from manim.utils.iterables import adjacent_pairs from manim.utils.space_ops import ( angle_of_vector, diff --git a/manim/mobject/geometry/line.py b/manim/mobject/geometry/line.py index ce556081f4..c31ff363ed 100644 --- a/manim/mobject/geometry/line.py +++ b/manim/mobject/geometry/line.py @@ -26,7 +26,7 @@ from manim.mobject.opengl.opengl_compatibility import ConvertToOpenGL from manim.mobject.opengl.opengl_mobject import OpenGLMobject from manim.mobject.types.vectorized_mobject import DashedVMobject, VGroup, VMobject -from manim.utils.color import * +from manim.utils.color import WHITE, ParsableManimColor from manim.utils.space_ops import angle_of_vector, line_intersection, normalize diff --git a/manim/mobject/geometry/polygram.py b/manim/mobject/geometry/polygram.py index 2c83883116..3c230133ea 100644 --- a/manim/mobject/geometry/polygram.py +++ b/manim/mobject/geometry/polygram.py @@ -23,7 +23,7 @@ from manim.mobject.geometry.arc import ArcBetweenPoints from manim.mobject.opengl.opengl_compatibility import ConvertToOpenGL from manim.mobject.types.vectorized_mobject import VGroup, VMobject -from manim.utils.color import * +from manim.utils.color import BLUE, WHITE, ParsableManimColor from manim.utils.iterables import adjacent_n_tuples, adjacent_pairs from manim.utils.space_ops import angle_between_vectors, normalize, regular_vertices diff --git a/manim/mobject/geometry/shape_matchers.py b/manim/mobject/geometry/shape_matchers.py index a3981d52c7..9462b3c113 100644 --- a/manim/mobject/geometry/shape_matchers.py +++ b/manim/mobject/geometry/shape_matchers.py @@ -10,7 +10,7 @@ from manim.mobject.geometry.polygram import RoundedRectangle from manim.mobject.mobject import Mobject from manim.mobject.types.vectorized_mobject import VGroup -from manim.utils.color import BLACK, RED, YELLOW, ManimColor, ParsableManimColor +from manim.utils.color import BLACK, RED, YELLOW, ParsableManimColor class SurroundingRectangle(RoundedRectangle): @@ -152,7 +152,7 @@ def construct(self): def __init__( self, mobject: Mobject | None = None, - stroke_color: Color = RED, + stroke_color: ParsableManimColor = RED, stroke_width: float = 6, scale_factor: float = 1, **kwargs, diff --git a/manim/mobject/opengl/opengl_mobject.py b/manim/mobject/opengl/opengl_mobject.py index 2b78e3fe35..f09015b76b 100644 --- a/manim/mobject/opengl/opengl_mobject.py +++ b/manim/mobject/opengl/opengl_mobject.py @@ -13,8 +13,16 @@ from manim import config, logger from manim.constants import * +from manim.renderer.shader_wrapper import get_colormap_code from manim.utils.bezier import integer_interpolate, interpolate -from manim.utils.color import * +from manim.utils.color import ( + WHITE, + ManimColor, + ParsableManimColor, + color_gradient, + color_to_rgb, + rgb_to_hex, +) from manim.utils.config_ops import _Data, _Uniforms # from ..utils.iterables import batch_by_property diff --git a/manim/mobject/opengl/opengl_vectorized_mobject.py b/manim/mobject/opengl/opengl_vectorized_mobject.py index ee6f7a8bf8..1335d5bd39 100644 --- a/manim/mobject/opengl/opengl_vectorized_mobject.py +++ b/manim/mobject/opengl/opengl_vectorized_mobject.py @@ -3,13 +3,12 @@ import itertools as it import operator as op from functools import reduce, wraps -from typing import Callable, Iterable, Optional, Sequence +from typing import Callable, Iterable, Sequence import moderngl import numpy as np from manim import config -from manim._config import logger from manim.constants import * from manim.mobject.opengl.opengl_mobject import OpenGLMobject, OpenGLPoint from manim.renderer.shader_wrapper import ShaderWrapper @@ -23,7 +22,7 @@ proportions_along_bezier_curve_for_point, quadratic_bezier_remap, ) -from manim.utils.color import * +from manim.utils.color import BLACK, WHITE, ManimColor, ParsableManimColor from manim.utils.config_ops import _Data from manim.utils.iterables import listify, make_even, resize_with_interpolation from manim.utils.space_ops import ( diff --git a/manim/mobject/text/tex_mobject.py b/manim/mobject/text/tex_mobject.py index cf3a215550..efe4cf71c5 100644 --- a/manim/mobject/text/tex_mobject.py +++ b/manim/mobject/text/tex_mobject.py @@ -28,7 +28,7 @@ import re from functools import reduce from textwrap import dedent -from typing import Dict, Iterable, Optional +from typing import Iterable from manim import config, logger from manim.constants import * @@ -66,7 +66,6 @@ def __init__( font_size: float = DEFAULT_FONT_SIZE, **kwargs, ): - if kwargs.get("color") is None: # makes it so that color isn't explicitly passed for these mobs, # and can instead inherit from the parent @@ -433,7 +432,7 @@ def __init__( class BulletedList(Tex): - """ + """A bulleted list. Examples -------- @@ -510,7 +509,6 @@ def __init__( underline_buff=MED_SMALL_BUFF, **kwargs, ): - self.include_underline = include_underline self.match_underline_width_to_text = match_underline_width_to_text self.underline_buff = underline_buff diff --git a/manim/mobject/three_d/three_dimensions.py b/manim/mobject/three_d/three_dimensions.py index f872d63f2e..ee6042c71b 100644 --- a/manim/mobject/three_d/three_dimensions.py +++ b/manim/mobject/three_d/three_dimensions.py @@ -2,6 +2,15 @@ from __future__ import annotations +from manim.utils.color.core import ( + BLUE, + BLUE_D, + BLUE_E, + LIGHT_GREY, + WHITE, + interpolate_color, +) + __all__ = [ "ThreeDVMobject", "Surface", @@ -29,7 +38,7 @@ from manim.mobject.opengl.opengl_compatibility import ConvertToOpenGL from manim.mobject.opengl.opengl_mobject import OpenGLMobject from manim.mobject.types.vectorized_mobject import VGroup, VMobject -from manim.utils.color import * +from manim.utils.color import ManimColor, ParsableManimColor from manim.utils.deprecation import deprecated_params from manim.utils.iterables import tuplify from manim.utils.space_ops import normalize, perpendicular_bisector, z_to_vector diff --git a/manim/mobject/types/vectorized_mobject.py b/manim/mobject/types/vectorized_mobject.py index 2e2adfe506..d9a7244256 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -14,8 +14,7 @@ import itertools as it import sys -import typing -from typing import Callable, Optional, Sequence, Union +from typing import Callable, Hashable, Iterable, Mapping, Sequence import numpy as np from PIL.Image import Image @@ -37,8 +36,7 @@ partial_bezier_points, proportions_along_bezier_curve_for_point, ) -from ...utils.color import BLACK, WHITE, ManimColor, ParsableManimColor, color_to_rgba -from ...utils.deprecation import deprecated +from ...utils.color import BLACK, WHITE, ManimColor, ParsableManimColor from ...utils.iterables import make_even, resize_array, stretch_array_to_length, tuplify from ...utils.space_ops import rotate_vector, shoelace_direction @@ -301,7 +299,7 @@ def set_stroke( setattr(self, opacity_name, opacity) if color is not None and background: if isinstance(color, (list, tuple)): - self.background_stroke_color = color = color + self.background_stroke_color = color else: self.background_stroke_color = ManimColor(color) return self @@ -1055,7 +1053,7 @@ def get_cubic_bezier_tuples(self): def _gen_subpaths_from_points( self, points: np.ndarray, - filter_func: typing.Callable[[int], bool], + filter_func: Callable[[int], bool], ) -> tuple: """Given an array of points defining the bezier curves of the vmobject, return subpaths formed by these points. Here, Two bezier curves form a path if at least two of their anchors are evaluated True by the relation defined by filter_func. @@ -1129,7 +1127,7 @@ def get_nth_curve_points(self, n: int) -> np.ndarray: nppcc = self.n_points_per_cubic_curve return self.points[nppcc * n : nppcc * (n + 1)] - def get_nth_curve_function(self, n: int) -> typing.Callable[[float], np.ndarray]: + def get_nth_curve_function(self, n: int) -> Callable[[float], np.ndarray]: """Returns the expression of the nth curve. Parameters @@ -1201,7 +1199,7 @@ def get_nth_curve_function_with_length( self, n: int, sample_points: int | None = None, - ) -> tuple[typing.Callable[[float], np.ndarray], float]: + ) -> tuple[Callable[[float], np.ndarray], float]: """Returns the expression of the nth curve along with its (approximate) length. Parameters @@ -1238,7 +1236,7 @@ def get_num_curves(self) -> int: def get_curve_functions( self, - ) -> typing.Iterable[typing.Callable[[float], np.ndarray]]: + ) -> Iterable[Callable[[float], np.ndarray]]: """Gets the functions for the curves of the mobject. Returns @@ -1254,7 +1252,7 @@ def get_curve_functions( def get_curve_functions_with_lengths( self, **kwargs - ) -> typing.Iterable[tuple[typing.Callable[[float], np.ndarray], float]]: + ) -> Iterable[tuple[Callable[[float], np.ndarray], float]]: """Gets the functions and lengths of the curves for the mobject. Parameters @@ -1319,7 +1317,7 @@ def point_from_proportion(self, alpha: float) -> np.ndarray: def proportion_from_point( self, - point: typing.Iterable[float | int], + point: Iterable[float | int], ) -> float: """Returns the proportion along the path of the :class:`VMobject` a particular given point is at. @@ -1373,7 +1371,7 @@ def proportion_from_point( return alpha - def get_anchors_and_handles(self) -> typing.Iterable[np.ndarray]: + def get_anchors_and_handles(self) -> Iterable[np.ndarray]: """Returns anchors1, handles1, handles2, anchors2, where (anchors1[i], handles1[i], handles2[i], anchors2[i]) will be four points defining a cubic bezier curve @@ -1931,7 +1929,7 @@ def __sub__(self, vmobject): def __isub__(self, vmobject): return self.remove(vmobject) - def __setitem__(self, key: int, value: VMobject | typing.Sequence[VMobject]): + def __setitem__(self, key: int, value: VMobject | Sequence[VMobject]): """Override the [] operator for item assignment. Parameters @@ -2058,8 +2056,7 @@ def construct(self): def __init__( self, mapping_or_iterable: ( - typing.Mapping[typing.Hashable, VMobject] - | typing.Iterable[tuple[typing.Hashable, VMobject]] + Mapping[Hashable, VMobject] | Iterable[tuple[Hashable, VMobject]] ) = {}, show_keys: bool = False, **kwargs, @@ -2075,8 +2072,7 @@ def __repr__(self): def add( self, mapping_or_iterable: ( - typing.Mapping[typing.Hashable, VMobject] - | typing.Iterable[tuple[typing.Hashable, VMobject]] + Mapping[Hashable, VMobject] | Iterable[tuple[Hashable, VMobject]] ), ): """Adds the key-value pairs to the :class:`VDict` object. @@ -2106,7 +2102,7 @@ def add( return self - def remove(self, key: typing.Hashable): + def remove(self, key: Hashable): """Removes the mobject from the :class:`VDict` object having the key `key` Also, it internally removes the mobject from the `submobjects` :class:`list` @@ -2134,7 +2130,7 @@ def remove(self, key: typing.Hashable): del self.submob_dict[key] return self - def __getitem__(self, key: typing.Hashable): + def __getitem__(self, key: Hashable): """Override the [] operator for item retrieval. Parameters @@ -2156,7 +2152,7 @@ def __getitem__(self, key: typing.Hashable): submob = self.submob_dict[key] return submob - def __setitem__(self, key: typing.Hashable, value: VMobject): + def __setitem__(self, key: Hashable, value: VMobject): """Override the [] operator for item assignment. Parameters @@ -2181,7 +2177,7 @@ def __setitem__(self, key: typing.Hashable, value: VMobject): self.remove(key) self.add([(key, value)]) - def __delitem__(self, key: typing.Hashable): + def __delitem__(self, key: Hashable): """Override the del operator for deleting an item. Parameters @@ -2213,7 +2209,7 @@ def __delitem__(self, key: typing.Hashable): """ del self.submob_dict[key] - def __contains__(self, key: typing.Hashable): + def __contains__(self, key: Hashable): """Override the in operator. Parameters @@ -2255,7 +2251,7 @@ def get_all_submobjects(self): submobjects = self.submob_dict.values() return submobjects - def add_key_value_pair(self, key: typing.Hashable, value: VMobject): + def add_key_value_pair(self, key: Hashable, value: VMobject): """A utility function used by :meth:`add` to add the key-value pair to :attr:`submob_dict`. Not really meant to be used externally. @@ -2426,7 +2422,6 @@ def __init__( equal_lengths=True, **kwargs, ): - self.dashed_ratio = dashed_ratio self.num_dashes = num_dashes super().__init__(color=color, **kwargs) diff --git a/manim/typing.py b/manim/typing.py index ee3f14a253..d6b289b598 100644 --- a/manim/typing.py +++ b/manim/typing.py @@ -1,8 +1,8 @@ -from typing import Protocol, Tuple +from typing import Tuple import numpy as np import numpy.typing as npt -from typing_extensions import Annotated, Literal, TypeAlias, TypeVar +from typing_extensions import TypeAlias # Color Types diff --git a/manim/utils/bezier.py b/manim/utils/bezier.py index bcd20361cc..50d17e65e7 100644 --- a/manim/utils/bezier.py +++ b/manim/utils/bezier.py @@ -2,21 +2,15 @@ from __future__ import annotations -from cairo import Matrix - from manim.typing import ( BezierPoints, - BezierPoints_Array, ColVector, - CubicBezierPoints, MatrixMN, Point3D, Point3D_Array, PointDType, QuadraticBezierPoints, QuadraticBezierPoints_Array, - RowVector, - Vector, ) __all__ = [ @@ -37,9 +31,8 @@ ] -import typing from functools import reduce -from typing import Callable, Iterable, List, Sequence, Tuple, overload +from typing import Callable, Sequence, overload import numpy as np from scipy import linalg diff --git a/manim/utils/space_ops.py b/manim/utils/space_ops.py index 882759cc66..3f0441ec4b 100644 --- a/manim/utils/space_ops.py +++ b/manim/utils/space_ops.py @@ -2,7 +2,7 @@ from __future__ import annotations -from manim.typing import ColVector, Point3D_Array, RowVector, Vector +from manim.typing import Point3D_Array, Vector __all__ = [ "quaternion_mult", From bd3bf0c0bcfb88da5c87aee17e7c8567e8608699 Mon Sep 17 00:00:00 2001 From: MrDiver Date: Sun, 25 Dec 2022 12:45:37 +0100 Subject: [PATCH 26/91] add type ignore for np.allclose --- manim/utils/bezier.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/utils/bezier.py b/manim/utils/bezier.py index 50d17e65e7..e0b95020e1 100644 --- a/manim/utils/bezier.py +++ b/manim/utils/bezier.py @@ -654,7 +654,7 @@ def get_quadratic_approximation_of_cubic( def is_closed(points: Point3D_Array) -> bool: - return np.allclose(points[0], points[-1]) + return np.allclose(points[0], points[-1]) # type: ignore def proportions_along_bezier_curve_for_point( From 8c1b871a888fcf198d126ae826eb25a2386b01b9 Mon Sep 17 00:00:00 2001 From: MrDiver Date: Sun, 25 Dec 2022 12:48:30 +0100 Subject: [PATCH 27/91] fixed import in three_dimensions --- manim/mobject/three_d/three_dimensions.py | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/manim/mobject/three_d/three_dimensions.py b/manim/mobject/three_d/three_dimensions.py index ee6042c71b..5714e21365 100644 --- a/manim/mobject/three_d/three_dimensions.py +++ b/manim/mobject/three_d/three_dimensions.py @@ -2,14 +2,7 @@ from __future__ import annotations -from manim.utils.color.core import ( - BLUE, - BLUE_D, - BLUE_E, - LIGHT_GREY, - WHITE, - interpolate_color, -) +from manim.utils.color import BLUE, BLUE_D, BLUE_E, LIGHT_GREY, WHITE, interpolate_color __all__ = [ "ThreeDVMobject", From 2433c1d0bd81723c0f6d6ec00a41f753063c8a9e Mon Sep 17 00:00:00 2001 From: MrDiver Date: Sun, 25 Dec 2022 12:51:31 +0100 Subject: [PATCH 28/91] added ignore for F401 back again in flake --- .flake8 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.flake8 b/.flake8 index 51a0f864db..15e385901c 100644 --- a/.flake8 +++ b/.flake8 @@ -16,8 +16,7 @@ select = A,A00,B,B9,C4,C90,D,E,F,F,PT,RST,SIM,W,F401 extend-ignore = E203, W503, D202, D212, D213, D404 # Misc - ; F401, - F403, F405, F841, E501, E731, E402, F811, F821, + F401, F403, F405, F841, E501, E731, E402, F811, F821, # Plug-in: flake8-builtins A001, A002, A003, From d32b2678005e4e33b051e0d7211a262db337a109 Mon Sep 17 00:00:00 2001 From: Alex Lembcke Date: Sat, 7 Jan 2023 16:12:25 -0500 Subject: [PATCH 29/91] added typings to coordinate_systems.py --- manim/mobject/graphing/coordinate_systems.py | 46 ++++++++++---------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/manim/mobject/graphing/coordinate_systems.py b/manim/mobject/graphing/coordinate_systems.py index 1e34291ef6..48c9ceef6d 100644 --- a/manim/mobject/graphing/coordinate_systems.py +++ b/manim/mobject/graphing/coordinate_systems.py @@ -108,11 +108,11 @@ def construct(self): def __init__( self, - x_range=None, - y_range=None, - x_length=None, - y_length=None, - dimension=2, + x_range: Sequence[float] | None = None, + y_range: Sequence[float] | None = None, + x_length: float | None = None, + y_length: float | None = None, + dimension: int = 2, ): self.dimension = dimension @@ -194,11 +194,13 @@ def point_to_polar(self, point: np.ndarray) -> tuple[float, float]: x, y = self.point_to_coords(point) return np.sqrt(x**2 + y**2), np.arctan2(y, x) - def c2p(self, *coords): + def c2p( + self, *coords: float | Sequence[float] | Sequence[Sequence[float]] | np.ndarray + ) -> np.ndarray: """Abbreviation for :meth:`coords_to_point`""" return self.coords_to_point(*coords) - def p2c(self, point): + def p2c(self, point: np.ndarray): """Abbreviation for :meth:`point_to_coords`""" return self.point_to_coords(point) @@ -213,7 +215,7 @@ def pt2pr(self, point: np.ndarray) -> tuple[float, float]: def get_axes(self): raise NotImplementedError() - def get_axis(self, index): + def get_axis(self, index: int) -> Mobject: return self.get_axes()[index] def get_origin(self) -> np.ndarray: @@ -226,19 +228,19 @@ def get_origin(self) -> np.ndarray: """ return self.coords_to_point(0, 0) - def get_x_axis(self): + def get_x_axis(self) -> Mobject: return self.get_axis(0) - def get_y_axis(self): + def get_y_axis(self) -> Mobject: return self.get_axis(1) - def get_z_axis(self): + def get_z_axis(self) -> Mobject: return self.get_axis(2) - def get_x_unit_size(self): + def get_x_unit_size(self) -> float: return self.get_x_axis().get_unit_size() - def get_y_unit_size(self): + def get_y_unit_size(self) -> float: return self.get_y_axis().get_unit_size() def get_x_axis_label( @@ -291,7 +293,7 @@ def get_y_axis_label( direction: Sequence[float] = UP * 0.5 + RIGHT, buff: float = SMALL_BUFF, **kwargs, - ): + ) -> Mobject: """Generate a y-axis label. Parameters @@ -634,7 +636,7 @@ def plot( x_range: Sequence[float] | None = None, use_vectorized: bool = False, **kwargs, - ): + ) -> ParametricFunction: """Generates a curve based on a function. Parameters @@ -1285,7 +1287,7 @@ def get_area( opacity: float = 0.3, bounded_graph: ParametricFunction = None, **kwargs, - ): + ) -> Polygon: """Returns a :class:`~.Polygon` representing the area under the graph passed. Parameters @@ -2372,8 +2374,8 @@ def get_z_axis_label( edge: Sequence[float] = OUT, direction: Sequence[float] = RIGHT, buff: float = SMALL_BUFF, - rotation=PI / 2, - rotation_axis=RIGHT, + rotation: float = PI / 2, + rotation_axis: Sequence[float] = RIGHT, **kwargs, ) -> Mobject: """Generate a z-axis label. @@ -2672,7 +2674,7 @@ def _get_lines_parallel_to_axis( lines2.add(new_line) return lines1, lines2 - def get_vector(self, coords: Sequence[float], **kwargs): + def get_vector(self, coords: Sequence[float], **kwargs) -> Arrow: kwargs["buff"] = 0 return Arrow( self.coords_to_point(0, 0), self.coords_to_point(*coords), **kwargs @@ -2929,13 +2931,13 @@ def get_axes(self) -> VGroup: """ return self.axes - def get_vector(self, coords, **kwargs): + def get_vector(self, coords: Sequence[float], **kwargs) -> Arrow: kwargs["buff"] = 0 return Arrow( self.coords_to_point(0, 0), self.coords_to_point(*coords), **kwargs ) - def prepare_for_nonlinear_transform(self, num_inserted_curves=50): + def prepare_for_nonlinear_transform(self, num_inserted_curves: int = 50): for mob in self.family_members_with_points(): num_curves = mob.get_num_curves() if num_inserted_curves > num_curves: @@ -3061,7 +3063,7 @@ def add_coordinates( self.add(self.get_coordinate_labels(r_values, a_values)) return self - def get_radian_label(self, number, font_size=24, **kwargs): + def get_radian_label(self, number, font_size: float = 24, **kwargs) -> MathTex: constant_label = {"PI radians": r"\pi", "TAU radians": r"\tau"}[ self.azimuth_units ] From 03565919bb115694501c8633be1affaea5717576 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Fri, 20 Jan 2023 22:53:38 +0100 Subject: [PATCH 30/91] Few improvements to `graphing/coordinate_systems.py` --- manim/mobject/graphing/coordinate_systems.py | 140 +++++++++++-------- 1 file changed, 84 insertions(+), 56 deletions(-) diff --git a/manim/mobject/graphing/coordinate_systems.py b/manim/mobject/graphing/coordinate_systems.py index 48c9ceef6d..8868e57451 100644 --- a/manim/mobject/graphing/coordinate_systems.py +++ b/manim/mobject/graphing/coordinate_systems.py @@ -14,7 +14,7 @@ import fractions as fr import numbers -from typing import TYPE_CHECKING, Any, Callable, Iterable, Sequence +from typing import TYPE_CHECKING, Any, Callable, Iterable, overload, Sequence, TypeVar import numpy as np @@ -54,6 +54,9 @@ if TYPE_CHECKING: from manim.mobject.mobject import Mobject + from manim.typing import Point2D + + LineType = TypeVar("LineType", bound=Line) class CoordinateSystem: @@ -113,7 +116,7 @@ def __init__( x_length: float | None = None, y_length: float | None = None, dimension: int = 2, - ): + ) -> None: self.dimension = dimension default_step = 1 @@ -147,7 +150,7 @@ def coords_to_point(self, *coords): def point_to_coords(self, point): raise NotImplementedError() - def polar_to_point(self, radius: float, azimuth: float) -> np.ndarray: + def polar_to_point(self, radius: float, azimuth: float) -> Point2D: r"""Gets a point from polar coordinates. Parameters @@ -178,7 +181,7 @@ def construct(self): """ return self.coords_to_point(radius * np.cos(azimuth), radius * np.sin(azimuth)) - def point_to_polar(self, point: np.ndarray) -> tuple[float, float]: + def point_to_polar(self, point: np.ndarray) -> Point2D: r"""Gets polar coordinates from a point. Parameters @@ -416,8 +419,8 @@ def construct(self): def add_coordinates( self, - *axes_numbers: (Iterable[float] | None | dict[float, str | float | Mobject]), - **kwargs, + *axes_numbers: Iterable[float] | None | dict[float, str | float | Mobject], + **kwargs: Any, ): """Adds labels to the axes. Use ``Axes.coordinate_labels`` to access the coordinates after creation. @@ -472,15 +475,39 @@ def add_coordinates( return self + # overload necessary until https://github.com/python/mypy/issues/3737 is supported + @overload def get_line_from_axis_to_point( self, index: int, point: Sequence[float], - line_func: Line = DashedLine, - line_config: dict | None = None, - color: ParsableManimColor | None = None, - stroke_width: float = 2, - ) -> Line: + line_config: dict | None = ..., + color: ParsableManimColor | None = ..., + stroke_width: float = ..., + ) -> DashedLine: + ... + + @overload + def get_line_from_axis_to_point( + self, + index: int, + point: Sequence[float], + line_func: type[LineType], + line_config: dict | None = ..., + color: ParsableManimColor | None = ..., + stroke_width: float = ..., + ) -> LineType: + ... + + def get_line_from_axis_to_point( # type: ignore[no-untyped-def] + self, + index, + point, + line_func=DashedLine, + line_config=None, + color=None, + stroke_width=2, + ): """Returns a straight line from a given axis to a point in the scene. Parameters @@ -521,7 +548,7 @@ def get_line_from_axis_to_point( line = line_func(axis.get_projection(point), point, **line_config) return line - def get_vertical_line(self, point: Sequence[float], **kwargs) -> Line: + def get_vertical_line(self, point: Sequence[float], **kwargs: Any) -> Line: """A vertical line from the x-axis to a given point in the scene. Parameters @@ -635,7 +662,7 @@ def plot( function: Callable[[float], float], x_range: Sequence[float] | None = None, use_vectorized: bool = False, - **kwargs, + **kwargs: Any, ) -> ParametricFunction: """Generates a curve based on a function. @@ -731,10 +758,10 @@ def log_func(x): def plot_implicit_curve( self, - func: Callable, + func: Callable[[float, float], float], min_depth: int = 5, max_quads: int = 1500, - **kwargs, + **kwargs: Any, ) -> ImplicitFunction: """Creates the curves of an implicit function. @@ -781,7 +808,7 @@ def plot_parametric_curve( self, function: Callable[[float], np.ndarray], use_vectorized: bool = False, - **kwargs, + **kwargs: Any, ) -> ParametricFunction: """A parametric curve. @@ -828,8 +855,8 @@ def construct(self): def plot_polar_graph( self, r_func: Callable[[float], float], - theta_range: Sequence[float] = [0, 2 * PI], - **kwargs, + theta_range: Sequence[float] | None = None, + **kwargs: Any, ) -> ParametricFunction: """A polar graph. @@ -855,6 +882,7 @@ def construct(self): graph = plane.plot_polar_graph(r, [0, 2 * PI], color=ORANGE) self.add(plane, graph) """ + theta_range = theta_range if theta_range is not None else [0, 2 * PI] graph = ParametricFunction( function=lambda th: self.pr2pt(r_func(th), th), t_range=theta_range, @@ -872,7 +900,7 @@ def plot_surface( | Sequence[tuple[ParsableManimColor, float]] | None = None, colorscale_axis: int = 2, - **kwargs, + **kwargs: Any, ): """Generates a surface based on a function. @@ -1008,7 +1036,7 @@ def construct(self): f"x={x} not located in the range of the graph ([{self.p2c(graph.get_start())[0]}, {self.p2c(graph.get_end())[0]}])", ) - def input_to_graph_coords(self, x: float, graph: ParametricFunction) -> tuple: + def input_to_graph_coords(self, x: float, graph: ParametricFunction) -> tuple[float, float]: """Returns a tuple of the axis relative coordinates of the point on the graph based on the x-value given. @@ -1024,7 +1052,7 @@ def input_to_graph_coords(self, x: float, graph: ParametricFunction) -> tuple: """ return x, graph.underlying_function(x) - def i2gc(self, x: float, graph: ParametricFunction) -> tuple: + def i2gc(self, x: float, graph: ParametricFunction) -> tuple[float, float]: """Alias for :meth:`input_to_graph_coords`.""" return self.input_to_graph_coords(x, graph) @@ -1041,7 +1069,7 @@ def get_graph_label( buff: float = MED_SMALL_BUFF, color: ParsableManimColor | None = None, dot: bool = False, - dot_config: dict | None = None, + dot_config: dict[str, Any] | None = None, ) -> Mobject: """Creates a properly positioned label for the passed graph, with an optional dot. @@ -1286,7 +1314,7 @@ def get_area( color: ParsableManimColor | Iterable[ParsableManimColor] = (BLUE, GREEN), opacity: float = 0.3, bounded_graph: ParametricFunction = None, - **kwargs, + **kwargs: Any, ) -> Polygon: """Returns a :class:`~.Polygon` representing the area under the graph passed. @@ -1403,7 +1431,7 @@ def angle_of_tangent( p1 = np.array([*self.input_to_graph_coords(x + dx, graph)]) return angle_of_vector(p1 - p0) - def slope_of_tangent(self, x: float, graph: ParametricFunction, **kwargs) -> float: + def slope_of_tangent(self, x: float, graph: ParametricFunction, **kwargs: Any) -> float: """Returns the slope of the tangent to the plotted curve at a particular x-value. @@ -1481,7 +1509,7 @@ def plot_antiderivative_graph( y_intercept: float = 0, samples: int = 50, use_vectorized: bool = False, - **kwargs, + **kwargs: Any, ): """Plots an antiderivative graph. @@ -1663,7 +1691,7 @@ def get_vertical_lines_to_graph( graph: ParametricFunction, x_range: Sequence[float] | None = None, num_lines: int = 20, - **kwargs, + **kwargs: Any, ) -> VGroup: """Obtains multiple lines from the x-axis to the curve. @@ -1722,7 +1750,7 @@ def get_T_label( label_color: ParsableManimColor | None = None, triangle_size: float = MED_SMALL_BUFF, triangle_color: ParsableManimColor | None = WHITE, - line_func: Line = Line, + line_func: type[Line] = Line, line_color: ParsableManimColor = YELLOW, ) -> VGroup: """Creates a labelled triangle marker with a vertical line from the x-axis @@ -1844,8 +1872,8 @@ def __init__( x_axis_config: dict | None = None, y_axis_config: dict | None = None, tips: bool = True, - **kwargs, - ): + **kwargs: Any, + ) -> None: VGroup.__init__(self, **kwargs) CoordinateSystem.__init__(self, x_range, y_range, x_length, y_length) @@ -1912,7 +1940,7 @@ def __init__( @staticmethod def _update_default_configs( default_configs: tuple[dict[Any, Any]], passed_configs: tuple[dict[Any, Any]] - ): + ) -> None: """Takes in two tuples of dicts and return modifies the first such that values from ``passed_configs`` overwrite values in ``default_configs``. If a key does not exist in default_configs, it is added to the dict. @@ -1945,7 +1973,7 @@ def _update_default_configs( def _create_axis( self, range_terms: Sequence[float], - axis_config: dict, + axis_config: dict[str, Any], length: float, ) -> NumberLine: """Creates an axis and dynamically adjusts its position depending on where 0 is located on the line. @@ -2139,8 +2167,8 @@ def plot_line_graph( line_color: ParsableManimColor = YELLOW, add_vertex_dots: bool = True, vertex_dot_radius: float = DEFAULT_DOT_RADIUS, - vertex_dot_style: dict | None = None, - **kwargs, + vertex_dot_style: dict[str, Any] | None = None, + **kwargs: Any, ) -> VDict: """Draws a line graph. @@ -2282,14 +2310,14 @@ def __init__( x_length: float | None = config.frame_height + 2.5, y_length: float | None = config.frame_height + 2.5, z_length: float | None = config.frame_height - 1.5, - z_axis_config: dict | None = None, + z_axis_config: dict[str, Any] | None = None, z_normal: Sequence[float] = DOWN, num_axis_pieces: int = 20, light_source: Sequence[float] = 9 * DOWN + 7 * LEFT + 10 * OUT, # opengl stuff (?) depth=None, gloss=0.5, - **kwargs, + **kwargs: Any, ): super().__init__( @@ -2347,14 +2375,14 @@ def __init__( self._add_3d_pieces() self._set_axis_shading() - def _add_3d_pieces(self): + def _add_3d_pieces(self) -> None: for axis in self.axes: axis.pieces = VGroup(*axis.get_pieces(self.num_axis_pieces)) axis.add(axis.pieces) axis.set_stroke(width=0, family=False) axis.set_shade_in_3d(True) - def _set_axis_shading(self): + def _set_axis_shading(self) -> None: def make_func(axis): vect = self.light_source return lambda: ( @@ -2376,7 +2404,7 @@ def get_z_axis_label( buff: float = SMALL_BUFF, rotation: float = PI / 2, rotation_axis: Sequence[float] = RIGHT, - **kwargs, + **kwargs: Any, ) -> Mobject: """Generate a z-axis label. @@ -2503,12 +2531,12 @@ def __init__( ), x_length: float | None = None, y_length: float | None = None, - background_line_style: dict | None = None, - faded_line_style: dict | None = None, + background_line_style: dict[str, Any] | None = None, + faded_line_style: dict[str, Any] | None = None, faded_line_ratio: int = 1, make_smooth_after_applying_functions: bool = True, - **kwargs, - ): + **kwargs: Any, + ) -> None: # configs self.axis_config = { @@ -2553,7 +2581,7 @@ def __init__( self._init_background_lines() - def _init_background_lines(self): + def _init_background_lines(self) -> None: """Will init all the lines of NumberPlanes (faded or not)""" if self.faded_line_style is None: style = dict(self.background_line_style) @@ -2674,7 +2702,7 @@ def _get_lines_parallel_to_axis( lines2.add(new_line) return lines1, lines2 - def get_vector(self, coords: Sequence[float], **kwargs) -> Arrow: + def get_vector(self, coords: Sequence[float], **kwargs: Any) -> Arrow: kwargs["buff"] = 0 return Arrow( self.coords_to_point(0, 0), self.coords_to_point(*coords), **kwargs @@ -2774,13 +2802,13 @@ def __init__( azimuth_direction: str = "CCW", azimuth_label_buff: float = SMALL_BUFF, azimuth_label_font_size: float = 24, - radius_config: dict | None = None, - background_line_style: dict | None = None, - faded_line_style: dict | None = None, + radius_config: dict[str, Any] | None = None, + background_line_style: dict[str, Any] | None = None, + faded_line_style: dict[str, Any] | None = None, faded_line_ratio: int = 1, make_smooth_after_applying_functions: bool = True, - **kwargs, - ): + **kwargs: Any, + ) -> None: # error catching if azimuth_units in ["PI radians", "TAU radians", "degrees", "gradians", None]: self.azimuth_units = azimuth_units @@ -2851,7 +2879,7 @@ def __init__( self._init_background_lines() - def _init_background_lines(self): + def _init_background_lines(self) -> None: """Will init all the lines of NumberPlanes (faded or not)""" if self.faded_line_style is None: style = dict(self.background_line_style) @@ -2931,7 +2959,7 @@ def get_axes(self) -> VGroup: """ return self.axes - def get_vector(self, coords: Sequence[float], **kwargs) -> Arrow: + def get_vector(self, coords: Sequence[float], **kwargs: Any) -> Arrow: kwargs["buff"] = 0 return Arrow( self.coords_to_point(0, 0), self.coords_to_point(*coords), **kwargs @@ -2948,7 +2976,7 @@ def get_coordinate_labels( self, r_values: Iterable[float] | None = None, a_values: Iterable[float] | None = None, - **kwargs, + **kwargs: Any, ) -> VDict: """Gets labels for the coordinates @@ -3063,7 +3091,7 @@ def add_coordinates( self.add(self.get_coordinate_labels(r_values, a_values)) return self - def get_radian_label(self, number, font_size: float = 24, **kwargs) -> MathTex: + def get_radian_label(self, number, font_size: float = 24, **kwargs: Any) -> MathTex: constant_label = {"PI radians": r"\pi", "TAU radians": r"\tau"}[ self.azimuth_units ] @@ -3132,7 +3160,7 @@ def construct(self): """ - def __init__(self, **kwargs): + def __init__(self, **kwargs: Any) -> None: super().__init__( **kwargs, ) @@ -3193,7 +3221,7 @@ def _get_default_coordinate_values(self) -> list[float | complex]: return [*x_numbers, *y_numbers] def get_coordinate_labels( - self, *numbers: Iterable[float | complex], **kwargs + self, *numbers: Iterable[float | complex], **kwargs: Any ) -> VGroup: """Generates the :class:`~.DecimalNumber` mobjects for the coordinates of the plane. @@ -3228,7 +3256,7 @@ def get_coordinate_labels( self.coordinate_labels.add(number_mob) return self.coordinate_labels - def add_coordinates(self, *numbers: Iterable[float | complex], **kwargs): + def add_coordinates(self, *numbers: Iterable[float | complex], **kwargs: Any): """Adds the labels produced from :meth:`~.NumberPlane.get_coordinate_labels` to the plane. Parameters From b08e4a69e15957ef84c6e16a45471a888fd322de Mon Sep 17 00:00:00 2001 From: Alex Lembcke Date: Fri, 20 Jan 2023 18:14:23 -0500 Subject: [PATCH 31/91] added some typings to mobject/geometry/line.py --- manim/mobject/geometry/line.py | 39 ++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/manim/mobject/geometry/line.py b/manim/mobject/geometry/line.py index c31ff363ed..ed08d33670 100644 --- a/manim/mobject/geometry/line.py +++ b/manim/mobject/geometry/line.py @@ -31,7 +31,14 @@ class Line(TipableVMobject): - def __init__(self, start=LEFT, end=RIGHT, buff=0, path_arc=None, **kwargs): + def __init__( + self, + start: Sequence[float] = LEFT, + end: Sequence[float] = RIGHT, + buff: float = 0, + path_arc: float | None = None, + **kwargs, + ): self.dim = 3 self.buff = buff self.path_arc = path_arc @@ -46,7 +53,13 @@ def generate_points(self): path_arc=self.path_arc, ) - def set_points_by_ends(self, start, end, buff=0, path_arc=0): + def set_points_by_ends( + self, + start: Sequence[float], + end: Sequence[float], + buff: float = 0, + path_arc: float = 0, + ): if path_arc: arc = ArcBetweenPoints(self.start, self.end, angle=self.path_arc) self.set_points(arc.points) @@ -57,7 +70,7 @@ def set_points_by_ends(self, start, end, buff=0, path_arc=0): init_points = generate_points - def _account_for_buff(self, buff): + def _account_for_buff(self, buff: float): if buff == 0: return # @@ -72,7 +85,7 @@ def _account_for_buff(self, buff): self.pointwise_become_partial(self, buff_proportion, 1 - buff_proportion) return self - def _set_start_and_end_attrs(self, start, end): + def _set_start_and_end_attrs(self, start: Sequence[float], end: Sequence[float]): # If either start or end are Mobjects, this # gives their centers rough_start = self._pointify(start) @@ -108,7 +121,7 @@ def _pointify( return mob.get_boundary_point(direction) return np.array(mob_or_point) - def set_path_arc(self, new_value): + def set_path_arc(self, new_value: float): self.path_arc = new_value self.init_points() @@ -143,16 +156,16 @@ def construct(self): self.generate_points() return super().put_start_and_end_on(start, end) - def get_vector(self): + def get_vector(self) -> np.ndarray: return self.get_end() - self.get_start() - def get_unit_vector(self): + def get_unit_vector(self) -> np.ndarray: return normalize(self.get_vector()) - def get_angle(self): + def get_angle(self) -> float: return angle_of_vector(self.get_vector()) - def get_projection(self, point: Sequence[float]) -> Sequence[float]: + def get_projection(self, point: Sequence[float]) -> np.ndarray: """Returns the projection of a point onto a line. Parameters @@ -166,10 +179,10 @@ def get_projection(self, point: Sequence[float]) -> Sequence[float]: unit_vect = normalize(end - start) return start + np.dot(point - start, unit_vect) * unit_vect - def get_slope(self): + def get_slope(self) -> float: return np.tan(self.get_angle()) - def set_angle(self, angle, about_point=None): + def set_angle(self, angle: float, about_point: Sequence[float] | None = None): if about_point is None: about_point = self.get_start() @@ -509,7 +522,7 @@ def __init__( self.add_tip(tip_shape=tip_shape) self._set_stroke_width_from_length() - def scale(self, factor, scale_tips=False, **kwargs): + def scale(self, factor: float, scale_tips: bool = False, **kwargs): r"""Scale an arrow, but keep stroke width and arrow tip size fixed. @@ -871,7 +884,7 @@ def __init__( self, line1: Line, line2: Line, - radius: float = None, + radius: float | None = None, quadrant: Sequence[int] = (1, 1), other_angle: bool = False, dot: bool = False, From ee865ff59495f2e153af523d5b1befd144683cea Mon Sep 17 00:00:00 2001 From: Alex Lembcke Date: Sat, 21 Jan 2023 10:43:28 -0500 Subject: [PATCH 32/91] updated typings for mobject/geometry/line.py --- manim/mobject/geometry/line.py | 64 ++++++++++++++++++++-------------- 1 file changed, 37 insertions(+), 27 deletions(-) diff --git a/manim/mobject/geometry/line.py b/manim/mobject/geometry/line.py index ed08d33670..4d7c004f6c 100644 --- a/manim/mobject/geometry/line.py +++ b/manim/mobject/geometry/line.py @@ -38,14 +38,14 @@ def __init__( buff: float = 0, path_arc: float | None = None, **kwargs, - ): + ) -> None: self.dim = 3 self.buff = buff self.path_arc = path_arc self._set_start_and_end_attrs(start, end) super().__init__(**kwargs) - def generate_points(self): + def generate_points(self) -> None: self.set_points_by_ends( start=self.start, end=self.end, @@ -59,7 +59,7 @@ def set_points_by_ends( end: Sequence[float], buff: float = 0, path_arc: float = 0, - ): + ) -> None: if path_arc: arc = ArcBetweenPoints(self.start, self.end, angle=self.path_arc) self.set_points(arc.points) @@ -70,7 +70,7 @@ def set_points_by_ends( init_points = generate_points - def _account_for_buff(self, buff: float): + def _account_for_buff(self, buff: float) -> Self: if buff == 0: return # @@ -85,7 +85,9 @@ def _account_for_buff(self, buff: float): self.pointwise_become_partial(self, buff_proportion, 1 - buff_proportion) return self - def _set_start_and_end_attrs(self, start: Sequence[float], end: Sequence[float]): + def _set_start_and_end_attrs( + self, start: Sequence[float], end: Sequence[float] + ) -> None: # If either start or end are Mobjects, this # gives their centers rough_start = self._pointify(start) @@ -121,11 +123,13 @@ def _pointify( return mob.get_boundary_point(direction) return np.array(mob_or_point) - def set_path_arc(self, new_value: float): + def set_path_arc(self, new_value: float) -> None: self.path_arc = new_value self.init_points() - def put_start_and_end_on(self, start: Sequence[float], end: Sequence[float]): + def put_start_and_end_on( + self, start: Sequence[float], end: Sequence[float] + ) -> Self: """Sets starts and end coordinates of a line. Examples @@ -182,7 +186,9 @@ def get_projection(self, point: Sequence[float]) -> np.ndarray: def get_slope(self) -> float: return np.tan(self.get_angle()) - def set_angle(self, angle: float, about_point: Sequence[float] | None = None): + def set_angle( + self, angle: float, about_point: Sequence[float] | None = None + ) -> Self: if about_point is None: about_point = self.get_start() @@ -193,7 +199,7 @@ def set_angle(self, angle: float, about_point: Sequence[float] | None = None): return self - def set_length(self, length): + def set_length(self, length: float) -> Self: return self.scale(length / self.get_length()) @@ -236,8 +242,8 @@ def __init__( *args: Any, dash_length: float = DEFAULT_DASH_LENGTH, dashed_ratio: float = 0.5, - **kwargs, - ): + **kwargs: Any, + ) -> None: self.dash_length = dash_length self.dashed_ratio = dashed_ratio super().__init__(*args, **kwargs) @@ -364,8 +370,8 @@ def __init__( alpha: float, length: float = 1, d_alpha: float = 1e-6, - **kwargs, - ): + **kwargs: Any, + ) -> None: self.length = length self.d_alpha = d_alpha da = self.d_alpha @@ -407,7 +413,7 @@ def construct(self): self.add(elbow_group) """ - def __init__(self, width: float = 0.2, angle: float = 0, **kwargs): + def __init__(self, width: float = 0.2, angle: float = 0, **kwargs: Any) -> None: self.angle = angle super().__init__(**kwargs) self.set_points_as_corners([UP, UP + RIGHT, RIGHT]) @@ -510,8 +516,8 @@ def __init__( buff: float = MED_SMALL_BUFF, max_tip_length_to_length_ratio: float = 0.25, max_stroke_width_to_length_ratio: float = 5, - **kwargs, - ): + **kwargs: Any, + ) -> None: self.max_tip_length_to_length_ratio = max_tip_length_to_length_ratio self.max_stroke_width_to_length_ratio = max_stroke_width_to_length_ratio tip_shape = kwargs.pop("tip_shape", ArrowTriangleFilledTip) @@ -522,7 +528,7 @@ def __init__( self.add_tip(tip_shape=tip_shape) self._set_stroke_width_from_length() - def scale(self, factor: float, scale_tips: bool = False, **kwargs): + def scale(self, factor: float, scale_tips: bool = False, **kwargs: Any) -> Self: r"""Scale an arrow, but keep stroke width and arrow tip size fixed. @@ -586,7 +592,7 @@ def get_normal_vector(self) -> np.ndarray: p0, p1, p2 = self.tip.get_start_anchors()[:3] return normalize(np.cross(p2 - p1, p1 - p0)) - def reset_normal_vector(self): + def reset_normal_vector(self) -> Self: """Resets the normal of a vector""" self.normal_vector = self.get_normal_vector() return self @@ -606,7 +612,7 @@ def get_default_tip_length(self) -> float: max_ratio = self.max_tip_length_to_length_ratio return min(self.tip_length, max_ratio * self.get_length()) - def _set_stroke_width_from_length(self): + def _set_stroke_width_from_length(self) -> Self: """Sets stroke width based on length.""" max_ratio = self.max_stroke_width_to_length_ratio if config.renderer == RendererType.OPENGL: @@ -647,7 +653,9 @@ def construct(self): self.add(plane, vector_1, vector_2) """ - def __init__(self, direction: list | np.ndarray = RIGHT, buff: float = 0, **kwargs): + def __init__( + self, direction: list | np.ndarray = RIGHT, buff: float = 0, **kwargs: Any + ) -> None: self.buff = buff if len(direction) == 2: direction = np.hstack([direction, 0]) @@ -659,8 +667,8 @@ def coordinate_label( integer_labels: bool = True, n_dim: int = 2, color: ParsableManimColor | None = None, - **kwargs, - ): + **kwargs: Any, + ) -> Matrix: """Creates a label based on the coordinates of the vector. Parameters @@ -763,7 +771,7 @@ def construct(self): self.add(box, d1, d2, d3) """ - def __init__(self, *args: Any, **kwargs): + def __init__(self, *args: Any, **kwargs: Any) -> None: if "tip_shape_end" in kwargs: kwargs["tip_shape"] = kwargs.pop("tip_shape_end") tip_shape_start = kwargs.pop("tip_shape_start", ArrowTriangleFilledTip) @@ -892,8 +900,8 @@ def __init__( dot_distance: float = 0.55, dot_color: ParsableManimColor = WHITE, elbow: bool = False, - **kwargs, - ): + **kwargs: Any, + ) -> None: super().__init__(**kwargs) self.lines = (line1, line2) self.quadrant = quadrant @@ -1036,7 +1044,7 @@ def construct(self): @staticmethod def from_three_points( - A: np.ndarray, B: np.ndarray, C: np.ndarray, **kwargs + A: np.ndarray, B: np.ndarray, C: np.ndarray, **kwargs: Any ) -> Angle: """The angle between the lines AB and BC. @@ -1112,5 +1120,7 @@ def construct(self): self.add(plots) """ - def __init__(self, line1: Line, line2: Line, length: float | None = None, **kwargs): + def __init__( + self, line1: Line, line2: Line, length: float | None = None, **kwargs: Any + ) -> None: super().__init__(line1, line2, radius=length, elbow=True, **kwargs) From 9eb6ed305fe9b98c46ba90dce4af03550105b8a7 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Sat, 21 Jan 2023 21:07:06 +0100 Subject: [PATCH 33/91] Add missing imports to `line.py` --- manim/mobject/geometry/line.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/manim/mobject/geometry/line.py b/manim/mobject/geometry/line.py index 4d7c004f6c..585f1a262a 100644 --- a/manim/mobject/geometry/line.py +++ b/manim/mobject/geometry/line.py @@ -14,9 +14,10 @@ "RightAngle", ] -from typing import Any, Sequence +from typing import TYPE_CHECKING, Any, Sequence import numpy as np +from typing_extensions import Self from manim import config from manim.constants import * @@ -29,6 +30,9 @@ from manim.utils.color import WHITE, ParsableManimColor from manim.utils.space_ops import angle_of_vector, line_intersection, normalize +if TYPE_CHECKING: + from ..matrix import Matrix # Avoid circular import + class Line(TipableVMobject): def __init__( @@ -37,7 +41,7 @@ def __init__( end: Sequence[float] = RIGHT, buff: float = 0, path_arc: float | None = None, - **kwargs, + **kwargs: Any, ) -> None: self.dim = 3 self.buff = buff From 561ef5208d53eea780728bff58d50a4e93f4f45a Mon Sep 17 00:00:00 2001 From: Alex Lembcke Date: Sun, 5 Feb 2023 20:22:12 -0500 Subject: [PATCH 34/91] added typings to three_dimensions.py --- manim/mobject/three_d/three_dimensions.py | 140 ++++++++++++---------- 1 file changed, 79 insertions(+), 61 deletions(-) diff --git a/manim/mobject/three_d/three_dimensions.py b/manim/mobject/three_d/three_dimensions.py index 5714e21365..d581992d6f 100644 --- a/manim/mobject/three_d/three_dimensions.py +++ b/manim/mobject/three_d/three_dimensions.py @@ -38,7 +38,7 @@ class ThreeDVMobject(VMobject, metaclass=ConvertToOpenGL): - def __init__(self, shade_in_3d=True, **kwargs): + def __init__(self, shade_in_3d: bool = True, **kwargs: Any) -> None: super().__init__(shade_in_3d=shade_in_3d, **kwargs) @@ -108,7 +108,7 @@ def __init__( stroke_width: float = 0.5, should_make_jagged: bool = False, pre_function_handle_to_anchor_scale_factor: float = 0.00001, - **kwargs, + **kwargs: Any, ) -> None: self.u_range = u_range self.v_range = v_range @@ -135,10 +135,10 @@ def __init__( if self.should_make_jagged: self.make_jagged() - def func(self, u: float, v: float): + def func(self, u: float, v: float) -> Callable[[float, float], np.ndarray]: return self._func(u, v) - def _get_u_values_and_v_values(self): + def _get_u_values_and_v_values(self) -> tuple[np.ndarray, np.ndarray]: res = tuplify(self.resolution) if len(res) == 1: u_res = v_res = res[0] @@ -150,7 +150,7 @@ def _get_u_values_and_v_values(self): return u_values, v_values - def _setup_in_uv_space(self): + def _setup_in_uv_space(self) -> None: u_values, v_values = self._get_u_values_and_v_values() faces = VGroup() for i in range(len(u_values) - 1): @@ -184,7 +184,9 @@ def _setup_in_uv_space(self): if self.checkerboard_colors: self.set_fill_by_checkerboard(*self.checkerboard_colors) - def set_fill_by_checkerboard(self, *colors, opacity=None): + def set_fill_by_checkerboard( + self, *colors: Iterable[ParsableManimColor], opacity: float | None = None + ) -> Self: """Sets the fill_color of each face of :class:`Surface` in an alternating pattern. @@ -214,7 +216,7 @@ def set_fill_by_value( colorscale: list[ParsableManimColor] | ParsableManimColor | None = None, axis: int = 2, **kwargs, - ): + ) -> Self: """Sets the color of each mobject of a parametric surface to a color relative to its axis-value. @@ -368,13 +370,13 @@ def construct(self): def __init__( self, - center=ORIGIN, - radius=1, - resolution=None, - u_range=(0, TAU), - v_range=(0, PI), - **kwargs, - ): + center: list | np.ndarray = ORIGIN, + radius: float = 1, + resolution: Sequence[int] | None = None, + u_range: Sequence[float] = (0, TAU), + v_range: Sequence[float] = (0, PI), + **kwargs: Any, + ) -> None: if config.renderer == RendererType.OPENGL: res_value = (101, 51) elif config.renderer == RendererType.CAIRO: @@ -396,7 +398,7 @@ def __init__( self.shift(center) - def func(self, u, v): + def func(self, u: float, v: float) -> np.ndarray: return self.radius * np.array( [np.cos(u) * np.sin(v), np.sin(u) * np.sin(v), -np.cos(v)], ) @@ -439,9 +441,9 @@ def __init__( point: list | np.ndarray = ORIGIN, radius: float = DEFAULT_DOT_RADIUS, color: ParsableManimColor = WHITE, - resolution=(8, 8), - **kwargs, - ): + resolution: Sequence[int] = (8, 8), + **kwargs: Any, + ) -> None: super().__init__(center=point, radius=radius, resolution=resolution, **kwargs) self.set_color(color) @@ -478,12 +480,12 @@ def construct(self): def __init__( self, - side_length=2, - fill_opacity=0.75, - fill_color=BLUE, - stroke_width=0, - **kwargs, - ): + side_length: float = 2, + fill_opacity: float = 0.75, + fill_color: ParsableManimColor = BLUE, + stroke_width: float = 0, + **kwargs: Any, + ) -> None: self.side_length = side_length super().__init__( fill_color=fill_color, @@ -492,7 +494,7 @@ def __init__( **kwargs, ) - def generate_points(self): + def generate_points(self) -> None: for vect in IN, OUT, LEFT, RIGHT, UP, DOWN: face = Square( side_length=self.side_length, @@ -530,11 +532,13 @@ def construct(self): self.add(prismSmall, prismLarge) """ - def __init__(self, dimensions=[3, 2, 1], **kwargs): + def __init__( + self, dimensions: Sequence[float] | np.ndarray = [3, 2, 1], **kwargs: Any + ) -> None: self.dimensions = dimensions super().__init__(**kwargs) - def generate_points(self): + def generate_points(self) -> None: super().generate_points() for dim, value in enumerate(self.dimensions): self.rescale_to_fit(value, dim, stretch=True) @@ -587,8 +591,8 @@ def __init__( v_range: Sequence[float] = [0, TAU], u_min: float = 0, checkerboard_colors: bool = False, - **kwargs, - ): + **kwargs: Any, + ) -> None: self.direction = direction self.theta = PI - np.arctan(base_radius / height) @@ -615,7 +619,7 @@ def __init__( self._rotate_to_direction() - def func(self, u: float, v: float): + def func(self, u: float, v: float) -> np.ndarray: """Converts from spherical coordinates to cartesian. Parameters @@ -635,7 +639,7 @@ def func(self, u: float, v: float): ], ) - def _rotate_to_direction(self): + def _rotate_to_direction(self) -> None: x, y, z = self.direction r = np.sqrt(x**2 + y**2 + z**2) @@ -668,7 +672,7 @@ def _rotate_to_direction(self): self._current_theta = theta self._current_phi = phi - def set_direction(self, direction): + def set_direction(self, direction: np.ndarray) -> None: """Changes the direction of the apex of the :class:`Cone`. Parameters @@ -679,7 +683,7 @@ def set_direction(self, direction): self.direction = direction self._rotate_to_direction() - def get_direction(self): + def get_direction(self) -> np.ndarray: """Returns the current direction of the apex of the :class:`Cone`. Returns @@ -729,9 +733,9 @@ def __init__( direction: np.ndarray = Z_AXIS, v_range: Sequence[float] = [0, TAU], show_ends: bool = True, - resolution=(24, 24), - **kwargs, - ): + resolution: Sequence[int] = (24, 24), + **kwargs: Any, + ) -> None: self._height = height self.radius = radius super().__init__( @@ -747,7 +751,7 @@ def __init__( self._current_theta = 0 self.set_direction(direction) - def func(self, u: float, v: float): + def func(self, u: float, v: float) -> np.ndarray: """Converts from cylindrical coordinates to cartesian. Parameters @@ -762,7 +766,7 @@ def func(self, u: float, v: float): r = self.radius return np.array([r * np.cos(phi), r * np.sin(phi), height]) - def add_bases(self): + def add_bases(self) -> None: """Adds the end caps of the cylinder.""" if config.renderer == RendererType.OPENGL: color = self.color @@ -789,7 +793,7 @@ def add_bases(self): self.base_bottom.shift(self.u_range[0] * IN) self.add(self.base_top, self.base_bottom) - def _rotate_to_direction(self): + def _rotate_to_direction(self) -> None: x, y, z = self.direction r = np.sqrt(x**2 + y**2 + z**2) @@ -822,7 +826,7 @@ def _rotate_to_direction(self): self._current_theta = theta self._current_phi = phi - def set_direction(self, direction): + def set_direction(self, direction: np.ndarray) -> None: """Sets the direction of the central axis of the :class:`Cylinder`. Parameters @@ -835,7 +839,7 @@ def set_direction(self, direction): self.direction = direction self._rotate_to_direction() - def get_direction(self): + def get_direction(self) -> np.ndarray: """Returns the direction of the central axis of the :class:`Cylinder`. Returns @@ -878,15 +882,17 @@ def __init__( start: np.ndarray = LEFT, end: np.ndarray = RIGHT, thickness: float = 0.02, - color=None, - **kwargs, - ): + color: ParsableManimColor | None = None, + **kwargs: Any, + ) -> None: self.thickness = thickness self.set_start_and_end_attrs(start, end, **kwargs) if color is not None: self.set_color(color) - def set_start_and_end_attrs(self, start, end, **kwargs): + def set_start_and_end_attrs( + self, start: np.ndarray, end: np.ndarray, **kwargs: Any + ) -> None: """Sets the start and end points of the line. If either ``start`` or ``end`` are :class:`Mobjects <.Mobject>`, @@ -917,7 +923,11 @@ def set_start_and_end_attrs(self, start, end, **kwargs): ) self.shift((self.start + self.end) / 2) - def pointify(self, mob_or_point, direction=None): + def pointify( + self, + mob_or_point: Mobject | Sequence[float] | np.ndarray, + direction: np.ndarray | None = None, + ) -> np.ndarray: if isinstance(mob_or_point, (Mobject, OpenGLMobject)): mob = mob_or_point if direction is None: @@ -926,7 +936,7 @@ def pointify(self, mob_or_point, direction=None): return mob.get_boundary_point(direction) return np.array(mob_or_point) - def get_start(self): + def get_start(self) -> np.ndarray: """Returns the starting point of the :class:`Line3D`. Returns @@ -936,7 +946,7 @@ def get_start(self): """ return self.start - def get_end(self): + def get_end(self) -> np.ndarray: """Returns the ending point of the :class:`Line3D`. Returns @@ -948,8 +958,12 @@ def get_end(self): @classmethod def parallel_to( - cls, line: Line3D, point: Sequence[float] = ORIGIN, length: float = 5, **kwargs - ): + cls, + line: Line3D, + point: Sequence[float] | np.ndarray = ORIGIN, + length: float = 5, + **kwargs: Any, + ) -> Line3D: """Returns a line parallel to another line going through a given point. @@ -985,8 +999,12 @@ def construct(self): @classmethod def perpendicular_to( - cls, line: Line3D, point: Sequence[float] = ORIGIN, length: float = 5, **kwargs - ): + cls, + line: Line3D, + point: Sequence[float] | np.ndarray = ORIGIN, + length: float = 5, + **kwargs: Any, + ) -> Line3D: """Returns a line perpendicular to another line going through a given point. @@ -1069,9 +1087,9 @@ def __init__( thickness: float = 0.02, height: float = 0.3, base_radius: float = 0.08, - color=WHITE, - **kwargs, - ): + color: ParsableManimColor = WHITE, + **kwargs: Any, + ) -> None: super().__init__( start=start, end=end, thickness=thickness, color=color, **kwargs ) @@ -1125,11 +1143,11 @@ def __init__( self, major_radius: float = 3, minor_radius: float = 1, - u_range=(0, TAU), - v_range=(0, TAU), - resolution=None, - **kwargs, - ): + u_range: Sequence[float] = (0, TAU), + v_range: Sequence[float] = (0, TAU), + resolution: Sequence[int] | None = None, + **kwargs: Any, + ) -> None: if config.renderer == RendererType.OPENGL: res_value = (101, 101) elif config.renderer == RendererType.CAIRO: @@ -1147,6 +1165,6 @@ def __init__( **kwargs, ) - def func(self, u, v): + def func(self, u: float, v: float) -> np.ndarray: P = np.array([np.cos(u), np.sin(u), 0]) return (self.R - self.r * np.cos(v)) * P - self.r * np.sin(v) * OUT From bf2bcbfc69ffa8f3015e72a99aa72292e3bdb5f5 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Sat, 18 Feb 2023 21:39:44 +0100 Subject: [PATCH 35/91] Use `FunctionOverride` for animation overrides Fix type signature of `set_color_by_gradient` --- manim/mobject/mobject.py | 16 ++++++---------- manim/typing.py | 9 ++++++++- manim/utils/color/core.py | 2 +- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index b6e38def9e..5f71cba204 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -18,13 +18,8 @@ from typing import ( TYPE_CHECKING, Callable, - Dict, Iterable, - List, - Optional, Sequence, - Tuple, - Type, TypeVar, Union, ) @@ -57,6 +52,7 @@ if TYPE_CHECKING: from ..animation.animation import Animation + from manim.typing import FunctionOverride class Mobject: @@ -87,7 +83,7 @@ def __init_subclass__(cls, **kwargs): cls.animation_overrides: dict[ type[Animation], - Callable[[Mobject], Animation], + FunctionOverride, ] = {} cls._add_intrinsic_animation_overrides() cls._original__init__ = cls.__init__ @@ -118,7 +114,7 @@ def __init__( def animation_override_for( cls, animation_class: type[Animation], - ) -> Callable[[Mobject, ...], Animation] | None: + ) -> FunctionOverride | None: """Returns the function defining a specific animation override for this class. Parameters @@ -156,8 +152,8 @@ def _add_intrinsic_animation_overrides(cls): def add_animation_override( cls, animation_class: type[Animation], - override_func: Callable[[Mobject, ...], Animation], - ): + override_func: FunctionOverride, + ) -> None: """Add an animation override. This does not apply to subclasses. @@ -1756,7 +1752,7 @@ def set_color( self.color = ManimColor.parse(color) return self - def set_color_by_gradient(self, *colors: Iterable[ParsableManimColor]): + def set_color_by_gradient(self, *colors: ParsableManimColor): """ Parameters ---------- diff --git a/manim/typing.py b/manim/typing.py index d6b289b598..159895abf7 100644 --- a/manim/typing.py +++ b/manim/typing.py @@ -1,9 +1,12 @@ -from typing import Tuple +from typing import Callable, Tuple, TYPE_CHECKING import numpy as np import numpy.typing as npt from typing_extensions import TypeAlias +if TYPE_CHECKING: + from .animation.animation import Animation + # Color Types ManimFloat: TypeAlias = np.float64 @@ -76,3 +79,7 @@ MatrixMN: TypeAlias = npt.NDArray[PointDType] """ `shape: (M,N)` A Matrix `[[float,...],[float,...],...]`. """ + +# Due to current limitations (see https://github.com/python/mypy/issues/14656 / 8263), we don't specify the first argument type (Mobject). +FunctionOverride: TypeAlias = Callable[..., Animation] +"""Function type returning an animation for the specified Mobject.""" \ No newline at end of file diff --git a/manim/utils/color/core.py b/manim/utils/color/core.py index 2809c9f8f5..e42140eb23 100644 --- a/manim/utils/color/core.py +++ b/manim/utils/color/core.py @@ -7,7 +7,7 @@ from typing import Any, Sequence, Union import numpy as np -from typing_extensions import Literal, TypeAlias +from typing_extensions import TypeAlias from manim.typing import ( ManimColorDType, From 1f56200d96e95b7d51effd5475ec74c522772819 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Sat, 18 Feb 2023 21:48:51 +0100 Subject: [PATCH 36/91] Remove `TYPE_CHECKING` check Doc is failing --- manim/typing.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/manim/typing.py b/manim/typing.py index 159895abf7..452b49894b 100644 --- a/manim/typing.py +++ b/manim/typing.py @@ -1,11 +1,10 @@ -from typing import Callable, Tuple, TYPE_CHECKING +from typing import Callable, Tuple import numpy as np import numpy.typing as npt from typing_extensions import TypeAlias -if TYPE_CHECKING: - from .animation.animation import Animation +from .animation.animation import Animation # Color Types From 802ab715b415e69e970c95c07b1cbc7b6c0163cb Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Sat, 18 Feb 2023 22:01:29 +0100 Subject: [PATCH 37/91] Revert "Remove `TYPE_CHECKING` check" Fails due to circular import --- manim/typing.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/manim/typing.py b/manim/typing.py index 452b49894b..159895abf7 100644 --- a/manim/typing.py +++ b/manim/typing.py @@ -1,10 +1,11 @@ -from typing import Callable, Tuple +from typing import Callable, Tuple, TYPE_CHECKING import numpy as np import numpy.typing as npt from typing_extensions import TypeAlias -from .animation.animation import Animation +if TYPE_CHECKING: + from .animation.animation import Animation # Color Types From b11ffe213c27c102c3db8ed354c765bfb508f530 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Sat, 18 Feb 2023 22:43:13 +0100 Subject: [PATCH 38/91] Use `Self` in `coordinate_systems.py` --- manim/mobject/graphing/coordinate_systems.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/manim/mobject/graphing/coordinate_systems.py b/manim/mobject/graphing/coordinate_systems.py index 8868e57451..4deafd4f6b 100644 --- a/manim/mobject/graphing/coordinate_systems.py +++ b/manim/mobject/graphing/coordinate_systems.py @@ -17,6 +17,7 @@ from typing import TYPE_CHECKING, Any, Callable, Iterable, overload, Sequence, TypeVar import numpy as np +from typing_extensions import Self from manim import config from manim.constants import * @@ -421,7 +422,7 @@ def add_coordinates( self, *axes_numbers: Iterable[float] | None | dict[float, str | float | Mobject], **kwargs: Any, - ): + ) -> Self: """Adds labels to the axes. Use ``Axes.coordinate_labels`` to access the coordinates after creation. @@ -901,7 +902,7 @@ def plot_surface( | None = None, colorscale_axis: int = 2, **kwargs: Any, - ): + ) -> Surface | OpenGLSurface: """Generates a surface based on a function. Parameters @@ -1510,7 +1511,7 @@ def plot_antiderivative_graph( samples: int = 50, use_vectorized: bool = False, **kwargs: Any, - ): + ) -> ParametricFunction: """Plots an antiderivative graph. Parameters @@ -2318,7 +2319,7 @@ def __init__( depth=None, gloss=0.5, **kwargs: Any, - ): + ) -> None: super().__init__( x_range=x_range, @@ -2708,7 +2709,7 @@ def get_vector(self, coords: Sequence[float], **kwargs: Any) -> Arrow: self.coords_to_point(0, 0), self.coords_to_point(*coords), **kwargs ) - def prepare_for_nonlinear_transform(self, num_inserted_curves: int = 50): + def prepare_for_nonlinear_transform(self, num_inserted_curves: int = 50) -> Self: for mob in self.family_members_with_points(): num_curves = mob.get_num_curves() if num_inserted_curves > num_curves: @@ -2965,7 +2966,7 @@ def get_vector(self, coords: Sequence[float], **kwargs: Any) -> Arrow: self.coords_to_point(0, 0), self.coords_to_point(*coords), **kwargs ) - def prepare_for_nonlinear_transform(self, num_inserted_curves: int = 50): + def prepare_for_nonlinear_transform(self, num_inserted_curves: int = 50) -> Self: for mob in self.family_members_with_points(): num_curves = mob.get_num_curves() if num_inserted_curves > num_curves: @@ -3078,7 +3079,7 @@ def add_coordinates( self, r_values: Iterable[float] | None = None, a_values: Iterable[float] | None = None, - ): + ) -> Self: """Adds the coordinates. Parameters @@ -3256,7 +3257,7 @@ def get_coordinate_labels( self.coordinate_labels.add(number_mob) return self.coordinate_labels - def add_coordinates(self, *numbers: Iterable[float | complex], **kwargs: Any): + def add_coordinates(self, *numbers: Iterable[float | complex], **kwargs: Any) -> Self: """Adds the labels produced from :meth:`~.NumberPlane.get_coordinate_labels` to the plane. Parameters From a41900c913a8ef5fcdd38c098c8c0abd8b2e6f28 Mon Sep 17 00:00:00 2001 From: JasonGrace2282 Date: Sun, 6 Aug 2023 14:44:47 -0400 Subject: [PATCH 39/91] Typehinted mobject.py and updated manim.typing.py --- manim/mobject/mobject.py | 464 ++++++++++++++++++++------------------- manim/typing.py | 13 +- 2 files changed, 252 insertions(+), 225 deletions(-) diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index 5f71cba204..cc0a223345 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -19,9 +19,9 @@ TYPE_CHECKING, Callable, Iterable, - Sequence, TypeVar, - Union, + Literal, + Self ) import numpy as np @@ -47,12 +47,25 @@ # TODO: Explain array_attrs -Updater = Union[Callable[["Mobject"], None], Callable[["Mobject", float], None]] +TimeBasedUpdater = Callable[["Mobject", float], None] +NonTimeBasedUpdater = Callable[["Mobject"], None] +Updater = NonTimeBasedUpdater | TimeBasedUpdater T = TypeVar("T", bound="Mobject") if TYPE_CHECKING: from ..animation.animation import Animation - from manim.typing import FunctionOverride + from manim.mobject.types.vectorized_mobject import VMobject + from manim.typing import ( + FunctionOverride, + ManimFloat, + ManimInt, + Point3D, + Vector, + Point3D_Array, + PathFuncType, + MappingFunction, + Image + ) class Mobject: @@ -78,7 +91,7 @@ class Mobject: animation_overrides = {} @classmethod - def __init_subclass__(cls, **kwargs): + def __init_subclass__(cls, **kwargs) -> None: super().__init_subclass__(**kwargs) cls.animation_overrides: dict[ @@ -91,18 +104,18 @@ def __init_subclass__(cls, **kwargs): def __init__( self, color: ParsableManimColor | list[ParsableManimColor] = WHITE, - name=None, - dim=3, + name: str | None = None, + dim: int = 3, target=None, - z_index=0, - ): + z_index: float = 0, + ) -> None: self.name = self.__class__.__name__ if name is None else name self.dim = dim self.target = target self.z_index = z_index self.point_hash = None self.submobjects = [] - self.updaters = [] + self.updaters: list[Updater] = [] self.updating_suspended = False self.color: ManimColor = ManimColor.parse(color) @@ -134,7 +147,7 @@ def animation_override_for( return None @classmethod - def _add_intrinsic_animation_overrides(cls): + def _add_intrinsic_animation_overrides(cls) -> None: """Initializes animation overrides marked with the :func:`~.override_animation` decorator. """ @@ -182,7 +195,7 @@ def add_animation_override( ) @classmethod - def set_default(cls, **kwargs): + def set_default(cls, **kwargs) -> None: """Sets the default values of keyword arguments. If this method is called without any additional keyword @@ -327,7 +340,7 @@ def construct(self): """ return _AnimationBuilder(self) - def __deepcopy__(self, clone_from_id): + def __deepcopy__(self, clone_from_id) -> Self: cls = self.__class__ result = cls.__new__(cls) clone_from_id[id(self)] = result @@ -336,30 +349,28 @@ def __deepcopy__(self, clone_from_id): result.original_id = str(id(self)) return result - def __repr__(self): + def __repr__(self) -> str: return str(self.name) - def reset_points(self): + def reset_points(self) -> None: """Sets :attr:`points` to be an empty array.""" self.points = np.zeros((0, self.dim)) - def init_colors(self): + def init_colors(self) -> None: """Initializes the colors. Gets called upon creation. This is an empty method that can be implemented by subclasses. """ - pass - def generate_points(self): + def generate_points(self) -> None: """Initializes :attr:`points` and therefore the shape. Gets called upon creation. This is an empty method that can be implemented by subclasses. """ - pass - def add(self, *mobjects: Mobject): + def add(self, *mobjects: Mobject) -> Self: """Add mobjects as submobjects. The mobjects are added to :attr:`submobjects`. @@ -443,7 +454,7 @@ def add(self, *mobjects: Mobject): self.submobjects = list_update(self.submobjects, mobjects) return self - def insert(self, index: int, mobject: Mobject): + def insert(self, index: int, mobject: Mobject) -> None: """Inserts a mobject at a specific position into self.submobjects Effectively just calls ``self.submobjects.insert(index, mobject)``, @@ -464,13 +475,13 @@ def insert(self, index: int, mobject: Mobject): raise ValueError("Mobject cannot contain self") self.submobjects.insert(index, mobject) - def __add__(self, mobject): + def __add__(self, mobject: Mobject): raise NotImplementedError - def __iadd__(self, mobject): + def __iadd__(self, mobject: Mobject): raise NotImplementedError - def add_to_back(self, *mobjects: Mobject): + def add_to_back(self, *mobjects: Mobject) -> Self: """Add all passed mobjects to the back of the submobjects. If :attr:`submobjects` already contains the given mobjects, they just get moved @@ -526,7 +537,7 @@ def add_to_back(self, *mobjects: Mobject): self.submobjects = list(dict.fromkeys(mobjects)) + self.submobjects return self - def remove(self, *mobjects: Mobject): + def remove(self, *mobjects: Mobject) -> Self: """Remove :attr:`submobjects`. The mobjects are removed from :attr:`submobjects`, if they exist. @@ -559,7 +570,7 @@ def __sub__(self, other): def __isub__(self, other): raise NotImplementedError - def set(self, **kwargs): + def set(self, **kwargs) -> Self: """Sets attributes. I.e. ``my_mobject.set(foo=1)`` applies ``my_mobject.foo = 1``. @@ -616,7 +627,7 @@ def set(self, **kwargs): return self - def __getattr__(self, attr): + def __getattr__(self, attr: str) -> types.MethodType: # Add automatic compatibility layer # between properties and get_* and set_* # methods. @@ -664,7 +675,7 @@ def setter(self, value): raise AttributeError(f"{type(self).__name__} object has no attribute '{attr}'") @property - def width(self): + def width(self) -> float: """The width of the mobject. Returns @@ -697,11 +708,11 @@ def construct(self): return self.length_over_dim(0) @width.setter - def width(self, value): + def width(self, value: float): self.scale_to_fit_width(value) @property - def height(self): + def height(self) -> float: """The height of the mobject. Returns @@ -734,11 +745,11 @@ def construct(self): return self.length_over_dim(1) @height.setter - def height(self, value): + def height(self, value: float): self.scale_to_fit_height(value) @property - def depth(self): + def depth(self) -> float: """The depth of the mobject. Returns @@ -755,20 +766,21 @@ def depth(self): return self.length_over_dim(2) @depth.setter - def depth(self, value): + def depth(self, value: float): self.scale_to_fit_depth(value) - def get_array_attrs(self): + # Can't be staticmethod because of point_cloud_mobject.py + def get_array_attrs(self) -> list[Literal["points"]]: return ["points"] - def apply_over_attr_arrays(self, func): + def apply_over_attr_arrays(self, func: MappingFunction) -> Self: for attr in self.get_array_attrs(): setattr(self, attr, func(getattr(self, attr))) return self # Displaying - def get_image(self, camera=None): + def get_image(self, camera=None) -> Image: if camera is None: from ..camera.camera import Camera @@ -776,17 +788,17 @@ def get_image(self, camera=None): camera.capture_mobject(self) return camera.get_image() - def show(self, camera=None): + def show(self, camera=None) -> None: self.get_image(camera=camera).show() - def save_image(self, name=None): + def save_image(self, name: str | None = None) -> None: """Saves an image of only this :class:`Mobject` at its position to a png file.""" self.get_image().save( Path(config.get_dir("video_dir")).joinpath((name or str(self)) + ".png"), ) - def copy(self: T) -> T: + def copy(self) -> Self: """Create and return an identical copy of the :class:`Mobject` including all :attr:`submobjects`. @@ -801,7 +813,7 @@ def copy(self: T) -> T: """ return copy.deepcopy(self) - def generate_target(self, use_deepcopy=False): + def generate_target(self, use_deepcopy: bool = False) -> Self: self.target = None # Prevent unbounded linear recursion if use_deepcopy: self.target = copy.deepcopy(self) @@ -811,7 +823,7 @@ def generate_target(self, use_deepcopy=False): # Updating - def update(self, dt: float = 0, recursive: bool = True): + def update(self, dt: float = 0, recursive: bool = True) -> Self: """Apply all updaters. Does nothing if updating is suspended. @@ -848,7 +860,7 @@ def update(self, dt: float = 0, recursive: bool = True): submob.update(dt, recursive) return self - def get_time_based_updaters(self) -> list[Updater]: + def get_time_based_updaters(self) -> list[TimeBasedUpdater]: """Return all updaters using the ``dt`` parameter. The updaters use this parameter as the input for difference in time. @@ -898,7 +910,7 @@ def get_updaters(self) -> list[Updater]: """ return self.updaters - def get_family_updaters(self): + def get_family_updaters(self) -> list[Updater]: return list(it.chain(*(sm.get_updaters() for sm in self.get_family()))) def add_updater( @@ -906,7 +918,7 @@ def add_updater( update_function: Updater, index: int | None = None, call_updater: bool = False, - ): + ) -> Self: """Add an update function to this mobject. Update functions, or updaters in short, are functions that are applied to the @@ -976,7 +988,7 @@ def construct(self): update_function(self, 0) return self - def remove_updater(self, update_function: Updater): + def remove_updater(self, update_function: Updater) -> Self: """Remove an updater. If the same updater is applied multiple times, every instance gets removed. @@ -1003,7 +1015,7 @@ def remove_updater(self, update_function: Updater): self.updaters.remove(update_function) return self - def clear_updaters(self, recursive: bool = True): + def clear_updaters(self, recursive: bool = True) -> Self: """Remove every updater. Parameters @@ -1029,7 +1041,7 @@ def clear_updaters(self, recursive: bool = True): submob.clear_updaters() return self - def match_updaters(self, mobject: Mobject): + def match_updaters(self, mobject: Mobject) -> Self: """Match the updaters of the given mobject. Parameters @@ -1059,7 +1071,7 @@ def match_updaters(self, mobject: Mobject): self.add_updater(updater) return self - def suspend_updating(self, recursive: bool = True): + def suspend_updating(self, recursive: bool = True) -> Self: """Disable updating from updaters and animations. @@ -1086,7 +1098,7 @@ def suspend_updating(self, recursive: bool = True): submob.suspend_updating(recursive) return self - def resume_updating(self, recursive: bool = True): + def resume_updating(self, recursive: bool = True) -> Self: """Enable updating from updaters and animations. Parameters @@ -1114,7 +1126,7 @@ def resume_updating(self, recursive: bool = True): # Transforming operations - def apply_to_family(self, func: Callable[[Mobject], None]): + def apply_to_family(self, func: Callable[[Mobject], None]) -> None: """Apply a function to ``self`` and every submobject with points recursively. Parameters @@ -1136,7 +1148,7 @@ def apply_to_family(self, func: Callable[[Mobject], None]): for mob in self.family_members_with_points(): func(mob) - def shift(self, *vectors: np.ndarray): + def shift(self, *vectors: Vector) -> Self: """Shift by the given vectors. Parameters @@ -1162,7 +1174,7 @@ def shift(self, *vectors: np.ndarray): return self - def scale(self, scale_factor: float, **kwargs): + def scale(self, scale_factor: float, **kwargs) -> Self: r"""Scale the size by a factor. Default behavior is to scale about the center of the mobject. @@ -1208,17 +1220,17 @@ def construct(self): ) return self - def rotate_about_origin(self, angle, axis=OUT, axes=[]): + def rotate_about_origin(self, angle: float, axis: Vector = OUT, axes=[]) -> Self: """Rotates the :class:`~.Mobject` about the ORIGIN, which is at [0,0,0].""" return self.rotate(angle, axis, about_point=ORIGIN) def rotate( self, - angle, - axis=OUT, - about_point: Sequence[float] | None = None, + angle: float, + axis: Vector = OUT, + about_point: Point3D | None = None, **kwargs, - ): + ) -> Self: """Rotates the :class:`~.Mobject` about a certain point.""" rot_matrix = rotation_matrix(angle, axis) self.apply_points_function_about_point( @@ -1226,7 +1238,7 @@ def rotate( ) return self - def flip(self, axis=UP, **kwargs): + def flip(self, axis: Vector = UP, **kwargs) -> Self: """Flips/Mirrors an mobject about its center. Examples @@ -1245,7 +1257,7 @@ def construct(self): """ return self.rotate(TAU / 2, axis, **kwargs) - def stretch(self, factor, dim, **kwargs): + def stretch(self, factor: float, dim: int, **kwargs) -> Self: def func(points): points[:, dim] *= factor return points @@ -1253,7 +1265,7 @@ def func(points): self.apply_points_function_about_point(func, **kwargs) return self - def apply_function(self, function, **kwargs): + def apply_function(self, function: MappingFunction, **kwargs) -> Self: # Default to applying matrix about the origin, not mobjects center if len(kwargs) == 0: kwargs["about_point"] = ORIGIN @@ -1262,16 +1274,16 @@ def apply_function(self, function, **kwargs): ) return self - def apply_function_to_position(self, function): + def apply_function_to_position(self, function: MappingFunction) -> Self: self.move_to(function(self.get_center())) return self - def apply_function_to_submobject_positions(self, function): + def apply_function_to_submobject_positions(self, function: MappingFunction) -> Self: for submob in self.submobjects: submob.apply_function_to_position(function) return self - def apply_matrix(self, matrix, **kwargs): + def apply_matrix(self, matrix, **kwargs) -> Self: # Default to applying matrix about the origin, not mobjects center if ("about_point" not in kwargs) and ("about_edge" not in kwargs): kwargs["about_point"] = ORIGIN @@ -1283,9 +1295,9 @@ def apply_matrix(self, matrix, **kwargs): ) return self - def apply_complex_function(self, function, **kwargs): + def apply_complex_function(self, function: Callable[[complex], complex], **kwargs) -> Self: """Applies a complex function to a :class:`Mobject`. - The x and y coordinates correspond to the real and imaginary parts respectively. + The x and y Point3Ds correspond to the real and imaginary parts respectively. Example ------- @@ -1317,7 +1329,7 @@ def R3_func(point): return self.apply_function(R3_func) - def wag(self, direction=RIGHT, axis=DOWN, wag_factor=1.0): + def wag(self, direction: Vector = RIGHT, axis: Vector = DOWN, wag_factor: float = 1.0) -> Self: for mob in self.family_members_with_points(): alphas = np.dot(mob.points, np.transpose(axis)) alphas -= min(alphas) @@ -1329,12 +1341,12 @@ def wag(self, direction=RIGHT, axis=DOWN, wag_factor=1.0): ) return self - def reverse_points(self): + def reverse_points(self) -> Self: for mob in self.family_members_with_points(): mob.apply_over_attr_arrays(lambda arr: np.array(list(reversed(arr)))) return self - def repeat(self, count: int): + def repeat(self, count: int) -> Self: """This can make transition animations nicer""" def repeat_array(array): @@ -1350,10 +1362,10 @@ def repeat_array(array): def apply_points_function_about_point( self, - func, - about_point=None, + func: MappingFunction, + about_point: Point3D =None, about_edge=None, - ): + ) -> Self: if about_point is None: if about_edge is None: about_edge = ORIGIN @@ -1370,11 +1382,11 @@ def pose_at_angle(self, **kwargs): # Positioning methods - def center(self): + def center(self) -> Self: self.shift(-self.get_center()) return self - def align_on_border(self, direction, buff=DEFAULT_MOBJECT_TO_EDGE_BUFFER): + def align_on_border(self, direction: Vector, buff: float = DEFAULT_MOBJECT_TO_EDGE_BUFFER) -> Self: """Direction just needs to be a vector pointing towards side or corner in the 2d plane. """ @@ -1389,23 +1401,23 @@ def align_on_border(self, direction, buff=DEFAULT_MOBJECT_TO_EDGE_BUFFER): self.shift(shift_val) return self - def to_corner(self, corner=LEFT + DOWN, buff=DEFAULT_MOBJECT_TO_EDGE_BUFFER): + def to_corner(self, corner: Vector = DL, buff: float = DEFAULT_MOBJECT_TO_EDGE_BUFFER) -> Self: return self.align_on_border(corner, buff) - def to_edge(self, edge=LEFT, buff=DEFAULT_MOBJECT_TO_EDGE_BUFFER): + def to_edge(self, edge: Vector = LEFT, buff: float = DEFAULT_MOBJECT_TO_EDGE_BUFFER) -> Self: return self.align_on_border(edge, buff) def next_to( self, - mobject_or_point, - direction=RIGHT, - buff=DEFAULT_MOBJECT_TO_MOBJECT_BUFFER, - aligned_edge=ORIGIN, - submobject_to_align=None, - index_of_submobject_to_align=None, - coor_mask=np.array([1, 1, 1]), - ): - """Move this :class:`~.Mobject` next to another's :class:`~.Mobject` or coordinate. + mobject_or_point: Mobject | Point3D, + direction: Vector = RIGHT, + buff: float = DEFAULT_MOBJECT_TO_MOBJECT_BUFFER, + aligned_edge: Vector = ORIGIN, + submobject_to_align: Mobject | None = None, + index_of_submobject_to_align: int | None = None, + coor_mask: Vector = np.array([1, 1, 1]), + ) -> Self: + """Move this :class:`~.Mobject` next to another's :class:`~.Mobject` or Point3D. Examples -------- @@ -1444,7 +1456,7 @@ def construct(self): self.shift((target_point - point_to_align + buff * direction) * coor_mask) return self - def shift_onto_screen(self, **kwargs): + def shift_onto_screen(self, **kwargs) -> Self: space_lengths = [config["frame_x_radius"], config["frame_y_radius"]] for vect in UP, DOWN, LEFT, RIGHT: dim = np.argmax(np.abs(vect)) @@ -1466,10 +1478,10 @@ def is_off_screen(self): return True return False - def stretch_about_point(self, factor, dim, point): + def stretch_about_point(self, factor: float, dim: int, point: Point3D) -> Self: return self.stretch(factor, dim, about_point=point) - def rescale_to_fit(self, length, dim, stretch=False, **kwargs): + def rescale_to_fit(self, length: float, dim: int, stretch: bool = False, **kwargs) -> Self: old_length = self.length_over_dim(dim) if old_length == 0: return self @@ -1479,7 +1491,7 @@ def rescale_to_fit(self, length, dim, stretch=False, **kwargs): self.scale(length / old_length, **kwargs) return self - def scale_to_fit_width(self, width, **kwargs): + def scale_to_fit_width(self, width: float, **kwargs) -> Self: """Scales the :class:`~.Mobject` to fit a width while keeping height/depth proportional. Returns @@ -1505,7 +1517,7 @@ def scale_to_fit_width(self, width, **kwargs): return self.rescale_to_fit(width, 0, stretch=False, **kwargs) - def stretch_to_fit_width(self, width, **kwargs): + def stretch_to_fit_width(self, width: float, **kwargs) -> Self: """Stretches the :class:`~.Mobject` to fit a width, not keeping height/depth proportional. Returns @@ -1531,7 +1543,7 @@ def stretch_to_fit_width(self, width, **kwargs): return self.rescale_to_fit(width, 0, stretch=True, **kwargs) - def scale_to_fit_height(self, height, **kwargs): + def scale_to_fit_height(self, height: float, **kwargs) -> Self: """Scales the :class:`~.Mobject` to fit a height while keeping width/depth proportional. Returns @@ -1557,7 +1569,7 @@ def scale_to_fit_height(self, height, **kwargs): return self.rescale_to_fit(height, 1, stretch=False, **kwargs) - def stretch_to_fit_height(self, height, **kwargs): + def stretch_to_fit_height(self, height: float, **kwargs) -> Self: """Stretches the :class:`~.Mobject` to fit a height, not keeping width/depth proportional. Returns @@ -1583,36 +1595,36 @@ def stretch_to_fit_height(self, height, **kwargs): return self.rescale_to_fit(height, 1, stretch=True, **kwargs) - def scale_to_fit_depth(self, depth, **kwargs): + def scale_to_fit_depth(self, depth: float, **kwargs) -> Self: """Scales the :class:`~.Mobject` to fit a depth while keeping width/height proportional.""" return self.rescale_to_fit(depth, 2, stretch=False, **kwargs) - def stretch_to_fit_depth(self, depth, **kwargs): + def stretch_to_fit_depth(self, depth: float, **kwargs) -> Self: """Stretches the :class:`~.Mobject` to fit a depth, not keeping width/height proportional.""" return self.rescale_to_fit(depth, 2, stretch=True, **kwargs) - def set_coord(self, value, dim, direction=ORIGIN): + def set_coord(self, value, dim: int, direction: Vector = ORIGIN) -> Self: curr = self.get_coord(dim, direction) shift_vect = np.zeros(self.dim) shift_vect[dim] = value - curr self.shift(shift_vect) return self - def set_x(self, x, direction=ORIGIN): + def set_x(self, x: float, direction: Vector = ORIGIN) -> Self: """Set x value of the center of the :class:`~.Mobject` (``int`` or ``float``)""" return self.set_coord(x, 0, direction) - def set_y(self, y, direction=ORIGIN): + def set_y(self, y: float, direction: Vector = ORIGIN) -> Self: """Set y value of the center of the :class:`~.Mobject` (``int`` or ``float``)""" return self.set_coord(y, 1, direction) - def set_z(self, z, direction=ORIGIN): + def set_z(self, z: float, direction: Vector = ORIGIN) -> Self: """Set z value of the center of the :class:`~.Mobject` (``int`` or ``float``)""" return self.set_coord(z, 2, direction) - def space_out_submobjects(self, factor=1.5, **kwargs): + def space_out_submobjects(self, factor: float = 1.5, **kwargs) -> Self: self.scale(factor, **kwargs) for submob in self.submobjects: submob.scale(1.0 / factor) @@ -1620,11 +1632,11 @@ def space_out_submobjects(self, factor=1.5, **kwargs): def move_to( self, - point_or_mobject, - aligned_edge=ORIGIN, - coor_mask=np.array([1, 1, 1]), - ): - """Move center of the :class:`~.Mobject` to certain coordinate.""" + point_or_mobject: Point3D | Mobject, + aligned_edge: Vector = ORIGIN, + coor_mask: Vector = np.array([1, 1, 1]), + ) -> Self: + """Move center of the :class:`~.Mobject` to certain Point3D.""" if isinstance(point_or_mobject, Mobject): target = point_or_mobject.get_critical_point(aligned_edge) else: @@ -1633,7 +1645,7 @@ def move_to( self.shift((target - point_to_align) * coor_mask) return self - def replace(self, mobject, dim_to_match=0, stretch=False): + def replace(self, mobject: Mobject, dim_to_match: int = 0, stretch: bool = False) -> Self: if not mobject.get_num_points() and not mobject.submobjects: raise Warning("Attempting to replace mobject with no points") if stretch: @@ -1651,16 +1663,16 @@ def replace(self, mobject, dim_to_match=0, stretch=False): def surround( self, mobject: Mobject, - dim_to_match=0, - stretch=False, - buff=MED_SMALL_BUFF, - ): + dim_to_match: int = 0, + stretch: bool = False, + buff: float = MED_SMALL_BUFF, + ) -> Self: self.replace(mobject, dim_to_match, stretch) length = mobject.length_over_dim(dim_to_match) self.scale((length + buff) / length) return self - def put_start_and_end_on(self, start, end): + def put_start_and_end_on(self, start: Point3D, end: Point3D) -> Self: curr_start, curr_end = self.get_start_and_end() curr_vect = curr_end - curr_start if np.all(curr_vect == 0): @@ -1686,7 +1698,7 @@ def put_start_and_end_on(self, start, end): # Background rectangle def add_background_rectangle( self, color: ParsableManimColor | None = None, opacity: float = 0.75, **kwargs - ): + ) -> Self: """Add a BackgroundRectangle as submobject. The BackgroundRectangle is added behind other submobjects. @@ -1725,12 +1737,12 @@ def add_background_rectangle( self.add_to_back(self.background_rectangle) return self - def add_background_rectangle_to_submobjects(self, **kwargs): + def add_background_rectangle_to_submobjects(self, **kwargs) -> Self: for submobject in self.submobjects: submobject.add_background_rectangle(**kwargs) return self - def add_background_rectangle_to_family_members_with_points(self, **kwargs): + def add_background_rectangle_to_family_members_with_points(self, **kwargs) -> Self: for mob in self.family_members_with_points(): mob.add_background_rectangle(**kwargs) return self @@ -1739,7 +1751,7 @@ def add_background_rectangle_to_family_members_with_points(self, **kwargs): def set_color( self, color: ParsableManimColor = YELLOW_C, family: bool = True - ) -> Mobject: + ) -> Self: """Condition is function which takes in one arguments, (x, y, z). Here it just recurses to submobjects, but in subclasses this should be further implemented based on the the inner workings @@ -1752,7 +1764,7 @@ def set_color( self.color = ManimColor.parse(color) return self - def set_color_by_gradient(self, *colors: ParsableManimColor): + def set_color_by_gradient(self, *colors: ParsableManimColor) -> Self: """ Parameters ---------- @@ -1765,11 +1777,11 @@ def set_color_by_gradient(self, *colors: ParsableManimColor): def set_colors_by_radial_gradient( self, - center=None, + center: Point3D | None = None, radius: float = 1, inner_color: ParsableManimColor = WHITE, outer_color: ParsableManimColor = BLACK, - ): + ) -> Self: self.set_submobject_colors_by_radial_gradient( center, radius, @@ -1778,7 +1790,7 @@ def set_colors_by_radial_gradient( ) return self - def set_submobject_colors_by_gradient(self, *colors: Iterable[ParsableManimColor]): + def set_submobject_colors_by_gradient(self, *colors: ParsableManimColor) -> Self: if len(colors) == 0: raise ValueError("Need at least one color") elif len(colors) == 1: @@ -1793,11 +1805,11 @@ def set_submobject_colors_by_gradient(self, *colors: Iterable[ParsableManimColor def set_submobject_colors_by_radial_gradient( self, - center=None, + center: Point3D | None = None, radius: float = 1, inner_color: ParsableManimColor = WHITE, outer_color: ParsableManimColor = BLACK, - ): + ) -> Self: if center is None: center = self.get_center() @@ -1809,11 +1821,11 @@ def set_submobject_colors_by_radial_gradient( return self - def to_original_color(self): + def to_original_color(self) -> Self: self.set_color(self.color) return self - def fade_to(self, color: ParsableManimColor, alpha: float, family: bool = True): + def fade_to(self, color: ParsableManimColor, alpha: float, family: bool = True) -> Self: if self.get_num_points() > 0: new_color = interpolate_color(self.get_color(), color, alpha) self.set_color(new_color, family=False) @@ -1822,7 +1834,7 @@ def fade_to(self, color: ParsableManimColor, alpha: float, family: bool = True): submob.fade_to(color, alpha) return self - def fade(self, darkness: float = 0.5, family: bool = True): + def fade(self, darkness: float = 0.5, family: bool = True) -> Self: if family: for submob in self.submobjects: submob.fade(darkness, family) @@ -1834,7 +1846,7 @@ def get_color(self) -> ManimColor: ## - def save_state(self): + def save_state(self) -> Self: """Save the current state (position, color & size). Can be restored with :meth:`~.Mobject.restore`.""" if hasattr(self, "saved_state"): # Prevent exponential growth of data @@ -1843,7 +1855,7 @@ def save_state(self): return self - def restore(self): + def restore(self) -> Self: """Restores the state that was previously saved with :meth:`~.Mobject.save_state`.""" if not hasattr(self, "saved_state") or self.save_state is None: raise Exception("Trying to restore without having saved") @@ -1852,7 +1864,7 @@ def restore(self): ## - def reduce_across_dimension(self, points_func, reduce_func, dim): + def reduce_across_dimension(self, points_func: Callable, reduce_func: Callable, dim: int): points = self.get_all_points() if points is None or len(points) == 0: # Note, this default means things like empty VGroups @@ -1861,31 +1873,31 @@ def reduce_across_dimension(self, points_func, reduce_func, dim): values = points_func(points[:, dim]) return reduce_func(values) - def nonempty_submobjects(self): + def nonempty_submobjects(self) -> list[Self]: return [ submob for submob in self.submobjects if len(submob.submobjects) != 0 or len(submob.points) != 0 ] - def get_merged_array(self, array_attr): + def get_merged_array(self, array_attr: str) -> np.ndarray: result = getattr(self, array_attr) for submob in self.submobjects: result = np.append(result, submob.get_merged_array(array_attr), axis=0) return result - def get_all_points(self): + def get_all_points(self) -> Point3D_Array: return self.get_merged_array("points") # Getters - def get_points_defining_boundary(self): + def get_points_defining_boundary(self) -> Point3D_Array: return self.get_all_points() - def get_num_points(self): + def get_num_points(self) -> int: return len(self.points) - def get_extremum_along_dim(self, points=None, dim=0, key=0): + def get_extremum_along_dim(self, points: Point3D_Array | None = None, dim: int = 0, key: int = 0) -> np.ndarray | float: if points is None: points = self.get_points_defining_boundary() values = points[:, dim] @@ -1896,7 +1908,7 @@ def get_extremum_along_dim(self, points=None, dim=0, key=0): else: return np.max(values) - def get_critical_point(self, direction): + def get_critical_point(self, direction: Vector) -> Point3D: """Picture a box bounding the :class:`~.Mobject`. Such a box has 9 'critical points': 4 corners, 4 edge center, the center. This returns one of them, along the given direction. @@ -1925,28 +1937,28 @@ def get_critical_point(self, direction): # Pseudonyms for more general get_critical_point method - def get_edge_center(self, direction) -> np.ndarray: - """Get edge coordinates for certain direction.""" + def get_edge_center(self, direction: Vector) -> Point3D: + """Get edge Point3Ds for certain direction.""" return self.get_critical_point(direction) - def get_corner(self, direction) -> np.ndarray: - """Get corner coordinates for certain direction.""" + def get_corner(self, direction: Vector) -> Point3D: + """Get corner Point3Ds for certain direction.""" return self.get_critical_point(direction) - def get_center(self) -> np.ndarray: - """Get center coordinates""" + def get_center(self) -> Point3D: + """Get center Point3Ds""" return self.get_critical_point(np.zeros(self.dim)) - def get_center_of_mass(self): + def get_center_of_mass(self) -> Point3D: return np.apply_along_axis(np.mean, 0, self.get_all_points()) - def get_boundary_point(self, direction): + def get_boundary_point(self, direction: Vector) -> Point3D: all_points = self.get_points_defining_boundary() index = np.argmax(np.dot(all_points, np.array(direction).T)) return all_points[index] - def get_midpoint(self) -> np.ndarray: - """Get coordinates of the middle of the path that forms the :class:`~.Mobject`. + def get_midpoint(self) -> Point3D: + """Get Point3Ds of the middle of the path that forms the :class:`~.Mobject`. Examples -------- @@ -1968,31 +1980,31 @@ def construct(self): """ return self.point_from_proportion(0.5) - def get_top(self) -> np.ndarray: - """Get top coordinates of a box bounding the :class:`~.Mobject`""" + def get_top(self) -> Point3D: + """Get top Point3Ds of a box bounding the :class:`~.Mobject`""" return self.get_edge_center(UP) - def get_bottom(self) -> np.ndarray: - """Get bottom coordinates of a box bounding the :class:`~.Mobject`""" + def get_bottom(self) -> Point3D: + """Get bottom Point3Ds of a box bounding the :class:`~.Mobject`""" return self.get_edge_center(DOWN) - def get_right(self) -> np.ndarray: - """Get right coordinates of a box bounding the :class:`~.Mobject`""" + def get_right(self) -> Point3D: + """Get right Point3Ds of a box bounding the :class:`~.Mobject`""" return self.get_edge_center(RIGHT) - def get_left(self) -> np.ndarray: - """Get left coordinates of a box bounding the :class:`~.Mobject`""" + def get_left(self) -> Point3D: + """Get left Point3Ds of a box bounding the :class:`~.Mobject`""" return self.get_edge_center(LEFT) - def get_zenith(self) -> np.ndarray: - """Get zenith coordinates of a box bounding a 3D :class:`~.Mobject`.""" + def get_zenith(self) -> Point3D: + """Get zenith Point3Ds of a box bounding a 3D :class:`~.Mobject`.""" return self.get_edge_center(OUT) - def get_nadir(self) -> np.ndarray: - """Get nadir (opposite the zenith) coordinates of a box bounding a 3D :class:`~.Mobject`.""" + def get_nadir(self) -> Point3D: + """Get nadir (opposite the zenith) Point3Ds of a box bounding a 3D :class:`~.Mobject`.""" return self.get_edge_center(IN) - def length_over_dim(self, dim): + def length_over_dim(self, dim: int) -> float: """Measure the length of an :class:`~.Mobject` in a certain direction.""" return self.reduce_across_dimension( np.max, @@ -2000,43 +2012,43 @@ def length_over_dim(self, dim): dim, ) - self.reduce_across_dimension(np.min, np.min, dim) - def get_coord(self, dim, direction=ORIGIN): + def get_coord(self, dim: int, direction: Vector = ORIGIN): """Meant to generalize ``get_x``, ``get_y`` and ``get_z``""" return self.get_extremum_along_dim(dim=dim, key=direction[dim]) - def get_x(self, direction=ORIGIN) -> np.float64: - """Returns x coordinate of the center of the :class:`~.Mobject` as ``float``""" + def get_x(self, direction: Vector = ORIGIN) -> ManimFloat: + """Returns x Point3D of the center of the :class:`~.Mobject` as ``float``""" return self.get_coord(0, direction) - def get_y(self, direction=ORIGIN) -> np.float64: - """Returns y coordinate of the center of the :class:`~.Mobject` as ``float``""" + def get_y(self, direction: Vector = ORIGIN) -> ManimFloat: + """Returns y Point3D of the center of the :class:`~.Mobject` as ``float``""" return self.get_coord(1, direction) - def get_z(self, direction=ORIGIN) -> np.float64: - """Returns z coordinate of the center of the :class:`~.Mobject` as ``float``""" + def get_z(self, direction: Vector = ORIGIN) -> ManimFloat: + """Returns z Point3D of the center of the :class:`~.Mobject` as ``float``""" return self.get_coord(2, direction) - def get_start(self): + def get_start(self) -> Point3D: """Returns the point, where the stroke that surrounds the :class:`~.Mobject` starts.""" self.throw_error_if_no_points() return np.array(self.points[0]) - def get_end(self): + def get_end(self) -> Point3D: """Returns the point, where the stroke that surrounds the :class:`~.Mobject` ends.""" self.throw_error_if_no_points() return np.array(self.points[-1]) - def get_start_and_end(self): + def get_start_and_end(self) -> tuple[Point3D, Point3D]: """Returns starting and ending point of a stroke as a ``tuple``.""" return self.get_start(), self.get_end() - def point_from_proportion(self, alpha): + def point_from_proportion(self, alpha: float) -> Point3D: raise NotImplementedError("Please override in a child class.") - def proportion_from_point(self, point): + def proportion_from_point(self, point: Point3D) -> float: raise NotImplementedError("Please override in a child class.") - def get_pieces(self, n_pieces): + def get_pieces(self, n_pieces: float) -> Group: template = self.copy() template.submobjects = [] alphas = np.linspace(0, 1, n_pieces + 1) @@ -2047,7 +2059,7 @@ def get_pieces(self, n_pieces): ) ) - def get_z_index_reference_point(self): + def get_z_index_reference_point(self) -> Point3D: # TODO, better place to define default z_index_group? z_index_group = getattr(self, "z_index_group", self) return z_index_group.get_center() @@ -2062,52 +2074,52 @@ def has_no_points(self) -> bool: # Match other mobject properties - def match_color(self, mobject: Mobject): + def match_color(self, mobject: Mobject) -> Self: """Match the color with the color of another :class:`~.Mobject`.""" return self.set_color(mobject.get_color()) - def match_dim_size(self, mobject: Mobject, dim, **kwargs): + def match_dim_size(self, mobject: Mobject, dim: int, **kwargs) -> Self: """Match the specified dimension with the dimension of another :class:`~.Mobject`.""" return self.rescale_to_fit(mobject.length_over_dim(dim), dim, **kwargs) - def match_width(self, mobject: Mobject, **kwargs): + def match_width(self, mobject: Mobject, **kwargs) -> Self: """Match the width with the width of another :class:`~.Mobject`.""" return self.match_dim_size(mobject, 0, **kwargs) - def match_height(self, mobject: Mobject, **kwargs): + def match_height(self, mobject: Mobject, **kwargs) -> Self: """Match the height with the height of another :class:`~.Mobject`.""" return self.match_dim_size(mobject, 1, **kwargs) - def match_depth(self, mobject: Mobject, **kwargs): + def match_depth(self, mobject: Mobject, **kwargs) -> Self: """Match the depth with the depth of another :class:`~.Mobject`.""" return self.match_dim_size(mobject, 2, **kwargs) - def match_coord(self, mobject: Mobject, dim, direction=ORIGIN): - """Match the coordinates with the coordinates of another :class:`~.Mobject`.""" + def match_coord(self, mobject: Mobject, dim: int, direction: Vector = ORIGIN) -> Self: + """Match the Point3Ds with the Point3Ds of another :class:`~.Mobject`.""" return self.set_coord( mobject.get_coord(dim, direction), dim=dim, direction=direction, ) - def match_x(self, mobject: Mobject, direction=ORIGIN): + def match_x(self, mobject: Mobject, direction=ORIGIN) -> Self: """Match x coord. to the x coord. of another :class:`~.Mobject`.""" return self.match_coord(mobject, 0, direction) - def match_y(self, mobject: Mobject, direction=ORIGIN): + def match_y(self, mobject: Mobject, direction=ORIGIN) -> Self: """Match y coord. to the x coord. of another :class:`~.Mobject`.""" return self.match_coord(mobject, 1, direction) - def match_z(self, mobject: Mobject, direction=ORIGIN): + def match_z(self, mobject: Mobject, direction=ORIGIN) -> Self: """Match z coord. to the x coord. of another :class:`~.Mobject`.""" return self.match_coord(mobject, 2, direction) def align_to( self, - mobject_or_point: Mobject | np.ndarray | list, - direction=ORIGIN, - alignment_vect=UP, - ): + mobject_or_point: Mobject | Point3D, + direction: Vector = ORIGIN, + alignment_vect: Vector = UP, + ) -> Self: """Aligns mobject to another :class:`~.Mobject` in a certain direction. Examples: @@ -2143,33 +2155,33 @@ def __iter__(self): def __len__(self): return len(self.split()) - def get_group_class(self): + def get_group_class(self) -> type[Group]: return Group @staticmethod - def get_mobject_type_class(): + def get_mobject_type_class() -> type[Mobject]: """Return the base class of this mobject type.""" return Mobject - def split(self): + def split(self) -> list[Self]: result = [self] if len(self.points) > 0 else [] return result + self.submobjects - def get_family(self, recurse=True): - sub_families = list(map(Mobject.get_family, self.submobjects)) + def get_family(self, recurse: bool = True) -> list[Self]: + sub_families = [x.get_family() for x in self.submobjects] all_mobjects = [self] + list(it.chain(*sub_families)) return remove_list_redundancies(all_mobjects) - def family_members_with_points(self) -> Mobject: + def family_members_with_points(self) -> list[Self]: return [m for m in self.get_family() if m.get_num_points() > 0] def arrange( self, - direction: Sequence[float] = RIGHT, - buff=DEFAULT_MOBJECT_TO_MOBJECT_BUFFER, - center=True, + direction: Vector = RIGHT, + buff: float = DEFAULT_MOBJECT_TO_MOBJECT_BUFFER, + center: bool = True, **kwargs, - ): + ) -> Self: """Sorts :class:`~.Mobject` next to each other on screen. Examples @@ -2198,14 +2210,14 @@ def arrange_in_grid( rows: int | None = None, cols: int | None = None, buff: float | tuple[float, float] = MED_SMALL_BUFF, - cell_alignment: np.ndarray = ORIGIN, + cell_alignment: Vector = ORIGIN, row_alignments: str | None = None, # "ucd" col_alignments: str | None = None, # "lcr" row_heights: Iterable[float | None] | None = None, col_widths: Iterable[float | None] | None = None, flow_order: str = "rd", **kwargs, - ): + ) -> Self: """Arrange submobjects in a grid. Parameters @@ -2434,24 +2446,28 @@ def init_sizes(sizes, num, measures, name): self.move_to(start_pos) return self - def sort(self, point_to_num_func=lambda p: p[0], submob_func=None): + def sort( + self, + point_to_num_func: Callable[[Point3D], ManimInt] = lambda p: p[0], + submob_func: Callable[[Mobject], ManimInt] | None = None + ) -> Self: """Sorts the list of :attr:`submobjects` by a function defined by ``submob_func``.""" if submob_func is None: - def submob_func(m): + def submob_func(m: Mobject): return point_to_num_func(m.get_center()) self.submobjects.sort(key=submob_func) return self - def shuffle(self, recursive=False): + def shuffle(self, recursive: bool = False) -> None: """Shuffles the list of :attr:`submobjects`.""" if recursive: for submob in self.submobjects: submob.shuffle(recursive=True) random.shuffle(self.submobjects) - def invert(self, recursive=False): + def invert(self, recursive: bool = False) -> None: """Inverts the list of :attr:`submobjects`. Parameters @@ -2475,10 +2491,10 @@ def construct(self): if recursive: for submob in self.submobjects: submob.invert(recursive=True) - list.reverse(self.submobjects) + self.submobjects.reverse() # Just here to keep from breaking old scenes. - def arrange_submobjects(self, *args, **kwargs): + def arrange_submobjects(self, *args, **kwargs) -> Self: """Arrange the position of :attr:`submobjects` with a small buffer. Examples @@ -2499,11 +2515,11 @@ def construct(self): """ return self.arrange(*args, **kwargs) - def sort_submobjects(self, *args, **kwargs): + def sort_submobjects(self, *args, **kwargs) -> Self: """Sort the :attr:`submobjects`""" return self.sort(*args, **kwargs) - def shuffle_submobjects(self, *args, **kwargs): + def shuffle_submobjects(self, *args, **kwargs) -> None: """Shuffles the order of :attr:`submobjects` Examples @@ -2522,7 +2538,7 @@ def construct(self): return self.shuffle(*args, **kwargs) # Alignment - def align_data(self, mobject: Mobject, skip_point_alignment: bool = False): + def align_data(self, mobject: Mobject, skip_point_alignment: bool = False) -> None: """Aligns the data of this mobject with another mobject. Afterwards, the two mobjects will have the same number of submobjects @@ -2553,7 +2569,7 @@ def get_point_mobject(self, center=None): msg = f"get_point_mobject not implemented for {self.__class__.__name__}" raise NotImplementedError(msg) - def align_points(self, mobject): + def align_points(self, mobject: Mobject) -> Self: count1 = self.get_num_points() count2 = mobject.get_num_points() if count1 < count2: @@ -2562,10 +2578,10 @@ def align_points(self, mobject): mobject.align_points_with_larger(self) return self - def align_points_with_larger(self, larger_mobject): + def align_points_with_larger(self, larger_mobject: Mobject): raise NotImplementedError("Please override in a child class.") - def align_submobjects(self, mobject): + def align_submobjects(self, mobject: Mobject) -> Self: mob1 = self mob2 = mobject n1 = len(mob1.submobjects) @@ -2590,14 +2606,14 @@ def null_point_align(self, mobject: Mobject): m2.push_self_into_submobjects() return self - def push_self_into_submobjects(self): + def push_self_into_submobjects(self) -> Self: copy = self.copy() copy.submobjects = [] self.reset_points() self.add(copy) return self - def add_n_more_submobjects(self, n): + def add_n_more_submobjects(self, n: int) -> Self: if n == 0: return @@ -2620,10 +2636,10 @@ def add_n_more_submobjects(self, n): self.submobjects = new_submobs return self - def repeat_submobject(self, submob): + def repeat_submobject(self, submob: Mobject) -> Self: return submob.copy() - def interpolate(self, mobject1, mobject2, alpha, path_func=straight_path()): + def interpolate(self, mobject1: Mobject, mobject2: Mobject, alpha: float, path_func: PathFuncType = straight_path()) -> Self: """Turns this :class:`~.Mobject` into an interpolation between ``mobject1`` and ``mobject2``. @@ -2648,7 +2664,7 @@ def construct(self): self.interpolate_color(mobject1, mobject2, alpha) return self - def interpolate_color(self, mobject1, mobject2, alpha): + def interpolate_color(self, mobject1: Mobject, mobject2: Mobject, alpha: float): raise NotImplementedError("Please override in a child class.") def become( @@ -2660,7 +2676,7 @@ def become( match_depth: bool = False, match_center: bool = False, stretch: bool = False, - ): + ) -> Self: """Edit points, colors and submobjects to be identical to another :class:`~.Mobject` @@ -2717,7 +2733,7 @@ def construct(self): sm1.interpolate_color(sm1, sm2, 1) return self - def match_points(self, mobject: Mobject, copy_submobjects: bool = True): + def match_points(self, mobject: Mobject, copy_submobjects: bool = True) -> Self: """Edit points, positions, and submobjects to be identical to another :class:`~.Mobject`, while keeping the style unchanged. @@ -2739,7 +2755,7 @@ def construct(self): return self # Errors - def throw_error_if_no_points(self): + def throw_error_if_no_points(self) -> None: if self.has_no_points(): caller_name = sys._getframe(1).f_code.co_name raise Exception( @@ -2790,8 +2806,8 @@ def construct(self): self.z_index = z_index_value return self - def set_z_index_by_z_coordinate(self): - """Sets the :class:`~.Mobject`'s z coordinate to the value of :attr:`z_index`. + def set_z_index_by_z_Point3D(self) -> Self: + """Sets the :class:`~.Mobject`'s z Point3D to the value of :attr:`z_index`. Returns ------- @@ -2813,13 +2829,13 @@ class Group(Mobject, metaclass=ConvertToOpenGL): be added to the group. """ - def __init__(self, *mobjects, **kwargs): + def __init__(self, *mobjects, **kwargs) -> None: super().__init__(**kwargs) self.add(*mobjects) class _AnimationBuilder: - def __init__(self, mobject): + def __init__(self, mobject) -> None: self.mobject = mobject self.mobject.generate_target() @@ -2831,7 +2847,7 @@ def __init__(self, mobject): self.cannot_pass_args = False self.anim_args = {} - def __call__(self, **kwargs): + def __call__(self, **kwargs) -> Self: if self.cannot_pass_args: raise ValueError( "Animation arguments must be passed before accessing methods and can only be passed once", @@ -2842,7 +2858,7 @@ def __call__(self, **kwargs): return self - def __getattr__(self, method_name): + def __getattr__(self, method_name) -> types.MethodType: method = getattr(self.mobject.target, method_name) has_overridden_animation = hasattr(method, "_override_animate") @@ -2870,8 +2886,8 @@ def update_target(*method_args, **method_kwargs): return update_target - def build(self): - from ..animation.transform import _MethodAnimation + def build(self) -> Animation: + from ..animation.transform import _MethodAnimation # is this to prevent circular import? if self.overridden_animation: anim = self.overridden_animation @@ -2884,7 +2900,7 @@ def build(self): return anim -def override_animate(method): +def override_animate(method) -> types.FunctionType: r"""Decorator for overriding method animations. This allows to specify a method (returning an :class:`~.Animation`) diff --git a/manim/typing.py b/manim/typing.py index 159895abf7..0030d7085e 100644 --- a/manim/typing.py +++ b/manim/typing.py @@ -82,4 +82,15 @@ # Due to current limitations (see https://github.com/python/mypy/issues/14656 / 8263), we don't specify the first argument type (Mobject). FunctionOverride: TypeAlias = Callable[..., Animation] -"""Function type returning an animation for the specified Mobject.""" \ No newline at end of file +"""Function type returning an animation for the specified Mobject.""" + + +# Misc +PathFuncType = Callable[[Point3D, Point3D, float], Point3D] +"""Function type taking two points and an alpha value, and returning a new `Point3D`""" + +MappingFunction = Callable[[Point3D], Point3D] +"""A function taking mapping a Point3D to another Point3D""" + +Image = np.ndarray +"""An Image""" From c0f121c520720787313cdf15500bd96700ad8511 Mon Sep 17 00:00:00 2001 From: JasonGrace2282 Date: Thu, 10 Aug 2023 10:08:11 -0400 Subject: [PATCH 40/91] Typed VMobject --- manim/mobject/mobject.py | 5 +- manim/mobject/three_d/three_d_utils.py | 20 +- manim/mobject/types/vectorized_mobject.py | 479 ++++++++++++---------- manim/typing.py | 18 +- 4 files changed, 278 insertions(+), 244 deletions(-) diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index cc0a223345..cb83e3783d 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -21,7 +21,8 @@ Iterable, TypeVar, Literal, - Self + Self, + Never ) import numpy as np @@ -2755,7 +2756,7 @@ def construct(self): return self # Errors - def throw_error_if_no_points(self) -> None: + def throw_error_if_no_points(self) -> None | Never: if self.has_no_points(): caller_name = sys._getframe(1).f_code.co_name raise Exception( diff --git a/manim/mobject/three_d/three_d_utils.py b/manim/mobject/three_d/three_d_utils.py index 397e304af1..04dc1e6033 100644 --- a/manim/mobject/three_d/three_d_utils.py +++ b/manim/mobject/three_d/three_d_utils.py @@ -15,39 +15,43 @@ import numpy as np +from typing import Literal, TYPE_CHECKING from manim.constants import ORIGIN, UP from manim.utils.space_ops import get_unit_normal +if TYPE_CHECKING: + from manim.typing import Point3D, Vector -def get_3d_vmob_gradient_start_and_end_points(vmob): + +def get_3d_vmob_gradient_start_and_end_points(vmob) -> tuple[Point3D, Point3D]: return ( get_3d_vmob_start_corner(vmob), get_3d_vmob_end_corner(vmob), ) -def get_3d_vmob_start_corner_index(vmob): +def get_3d_vmob_start_corner_index(vmob) -> Literal[0]: return 0 -def get_3d_vmob_end_corner_index(vmob): +def get_3d_vmob_end_corner_index(vmob) -> int: return ((len(vmob.points) - 1) // 6) * 3 -def get_3d_vmob_start_corner(vmob): +def get_3d_vmob_start_corner(vmob) -> Point3D: if vmob.get_num_points() == 0: return np.array(ORIGIN) return vmob.points[get_3d_vmob_start_corner_index(vmob)] -def get_3d_vmob_end_corner(vmob): +def get_3d_vmob_end_corner(vmob) -> Point3D: if vmob.get_num_points() == 0: return np.array(ORIGIN) return vmob.points[get_3d_vmob_end_corner_index(vmob)] -def get_3d_vmob_unit_normal(vmob, point_index): +def get_3d_vmob_unit_normal(vmob, point_index: int) -> Vector: n_points = vmob.get_num_points() if len(vmob.get_anchors()) <= 2: return np.array(UP) @@ -63,9 +67,9 @@ def get_3d_vmob_unit_normal(vmob, point_index): return unit_normal -def get_3d_vmob_start_corner_unit_normal(vmob): +def get_3d_vmob_start_corner_unit_normal(vmob) -> Vector: return get_3d_vmob_unit_normal(vmob, get_3d_vmob_start_corner_index(vmob)) -def get_3d_vmob_end_corner_unit_normal(vmob): +def get_3d_vmob_end_corner_unit_normal(vmob) -> Vector: return get_3d_vmob_unit_normal(vmob, get_3d_vmob_end_corner_index(vmob)) diff --git a/manim/mobject/types/vectorized_mobject.py b/manim/mobject/types/vectorized_mobject.py index d9a7244256..e74a8a43b3 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -14,7 +14,17 @@ import itertools as it import sys -from typing import Callable, Hashable, Iterable, Mapping, Sequence +from typing import ( + Callable, + Hashable, + Iterable, + Mapping, + Sequence, + Self, + TYPE_CHECKING, + Generator, + Literal +) import numpy as np from PIL.Image import Image @@ -40,6 +50,21 @@ from ...utils.iterables import make_even, resize_array, stretch_array_to_length, tuplify from ...utils.space_ops import rotate_vector, shoelace_direction +if TYPE_CHECKING: + from manim.typing import ( + ManimFloat, + Point2D, + Point3D, + Point3D_Array, + Vector, + RGBA_Array_Float, + Zeros, + CubicBezierPoints, + QuadraticBezierPoints, + BezierPoints, + MappingFunction + ) + # TODO # - Change cubic curve groups to have 4 points instead of 3 # - Change sub_path idea accordingly @@ -79,49 +104,47 @@ class VMobject(Mobject): def __init__( self, fill_color: ParsableManimColor | None = None, - fill_opacity=0.0, + fill_opacity: float = 0.0, stroke_color: ParsableManimColor | None = None, - stroke_opacity=1.0, - stroke_width=DEFAULT_STROKE_WIDTH, + stroke_opacity: float = 1.0, + stroke_width: float = DEFAULT_STROKE_WIDTH, background_stroke_color: ParsableManimColor | None = BLACK, - background_stroke_opacity=1.0, - background_stroke_width=0, - sheen_factor=0.0, + background_stroke_opacity: float = 1.0, + background_stroke_width: float = 0, + sheen_factor: float = 0.0, joint_type: LineJointType | None = None, - sheen_direction=UL, - close_new_points=False, - pre_function_handle_to_anchor_scale_factor=0.01, - make_smooth_after_applying_functions=False, - background_image=None, - shade_in_3d=False, + sheen_direction: Vector = UL, + close_new_points: bool = False, + pre_function_handle_to_anchor_scale_factor: float = 0.01, + make_smooth_after_applying_functions: bool = False, + background_image: Image | str | None = None, + shade_in_3d: bool = False, # TODO, do we care about accounting for varying zoom levels? - tolerance_for_point_equality=1e-6, - n_points_per_cubic_curve=4, + tolerance_for_point_equality: float = 1e-6, + n_points_per_cubic_curve: int = 4, **kwargs, ): - self.fill_opacity = fill_opacity - self.stroke_opacity = stroke_opacity - self.stroke_width = stroke_width + self.fill_opacity: float = fill_opacity + self.stroke_opacity: float = stroke_opacity + self.stroke_width: float = stroke_width if background_stroke_color is not None: self.background_stroke_color: ManimColor = ManimColor( background_stroke_color ) - self.background_stroke_opacity = background_stroke_opacity - self.background_stroke_width = background_stroke_width - self.sheen_factor = sheen_factor - if joint_type is None: - joint_type = LineJointType.AUTO - self.joint_type = joint_type - self.sheen_direction = sheen_direction - self.close_new_points = close_new_points - self.pre_function_handle_to_anchor_scale_factor = ( + self.background_stroke_opacity: float = background_stroke_opacity + self.background_stroke_width: float = background_stroke_width + self.sheen_factor: float = sheen_factor + self.joint_type: LineJointType = LineJointType.AUTO if joint_type is None else joint_type + self.sheen_direction: Vector = sheen_direction + self.close_new_points: bool = close_new_points + self.pre_function_handle_to_anchor_scale_factor: float = ( pre_function_handle_to_anchor_scale_factor ) - self.make_smooth_after_applying_functions = make_smooth_after_applying_functions - self.background_image = background_image - self.shade_in_3d = shade_in_3d - self.tolerance_for_point_equality = tolerance_for_point_equality - self.n_points_per_cubic_curve = n_points_per_cubic_curve + self.make_smooth_after_applying_functions: bool = make_smooth_after_applying_functions + self.background_image: Image | str | None = background_image + self.shade_in_3d: bool = shade_in_3d + self.tolerance_for_point_equality: float = tolerance_for_point_equality + self.n_points_per_cubic_curve: int = n_points_per_cubic_curve super().__init__(**kwargs) self.submobjects: list[VMobject] @@ -136,18 +159,18 @@ def __init__( # OpenGL compatibility @property - def n_points_per_curve(self): + def n_points_per_curve(self) -> int: return self.n_points_per_cubic_curve - def get_group_class(self): + def get_group_class(self) -> type[VGroup]: return VGroup @staticmethod - def get_mobject_type_class(): + def get_mobject_type_class() -> type[VMobject]: return VMobject # Colors - def init_colors(self, propagate_colors=True): + def init_colors(self, propagate_colors: bool = True) -> Self: self.set_fill( color=self.fill_color, opacity=self.fill_opacity, @@ -177,7 +200,7 @@ def init_colors(self, propagate_colors=True): return self - def generate_rgbas_array(self, color: ManimColor | list[ManimColor], opacity): + def generate_rgbas_array(self, color: ManimColor | list[ManimColor], opacity: float | tuple[float]) -> RGBA_Array_Float: """ First arg can be either a color, or a tuple/list of colors. Likewise, opacity can either be a float, or a tuple of floats. @@ -188,8 +211,8 @@ def generate_rgbas_array(self, color: ManimColor | list[ManimColor], opacity): colors: list[ManimColor] = [ ManimColor(c) if (c is not None) else BLACK for c in tuplify(color) ] - opacities: list[float] = [o if (o is not None) else 0 for o in tuplify(opacity)] - rgbas = np.array( + opacities: list[float] = [o if (o is not None) else 0.0 for o in tuplify(opacity)] + rgbas: np.ndarray[RGBA_Array_Float] = np.array( [c.to_rgba_with_alpha(o) for c, o in zip(*make_even(colors, opacities))], ) @@ -202,8 +225,11 @@ def generate_rgbas_array(self, color: ManimColor | list[ManimColor], opacity): return rgbas def update_rgbas_array( - self, array_name, color: ManimColor | None = None, opacity=None - ): + self, + array_name: str, + color: ManimColor | None = None, + opacity: float | None =None + ) -> Self: rgbas = self.generate_rgbas_array(color, opacity) if not hasattr(self, array_name): setattr(self, array_name, rgbas) @@ -229,7 +255,7 @@ def set_fill( color: ParsableManimColor | None = None, opacity: float | None = None, family: bool = True, - ): + ) -> Self: """Set the fill color and fill opacity of a :class:`VMobject`. Parameters @@ -269,6 +295,7 @@ def construct(self): for submobject in self.submobjects: submobject.set_fill(color, opacity, family) self.update_rgbas_array("fill_rgbas", color, opacity) + self.fill_rgbas: RGBA_Array_Float if opacity is not None: self.fill_opacity = opacity return self @@ -276,11 +303,11 @@ def construct(self): def set_stroke( self, color: ParsableManimColor = None, - width=None, - opacity=None, + width: float | None = None, + opacity: float | None = None, background=False, - family=True, - ): + family: bool = True, + ) -> Self: if family: for submobject in self.submobjects: submobject.set_stroke(color, width, opacity, background, family) @@ -304,7 +331,7 @@ def set_stroke( self.background_stroke_color = ManimColor(color) return self - def set_background_stroke(self, **kwargs): + def set_background_stroke(self, **kwargs) -> Self: kwargs["background"] = True self.set_stroke(**kwargs) return self @@ -314,16 +341,16 @@ def set_style( fill_color: ParsableManimColor | None = None, fill_opacity: float | None = None, stroke_color: ParsableManimColor | None = None, - stroke_width=None, - stroke_opacity=None, - background_stroke_color: ParsableManimColor = None, - background_stroke_width=None, - background_stroke_opacity=None, - sheen_factor=None, - sheen_direction=None, - background_image=None, - family=True, - ): + stroke_width: float | None = None, + stroke_opacity: float | None = None, + background_stroke_color: ParsableManimColor | None = None, + background_stroke_width: float | None = None, + background_stroke_opacity: float | None = None, + sheen_factor: float | None = None, + sheen_direction: Vector | None = None, + background_image: Image | str | None = None, + family: bool = True, + ) -> Self: self.set_fill(color=fill_color, opacity=fill_opacity, family=family) self.set_stroke( color=stroke_color, @@ -347,7 +374,7 @@ def set_style( self.color_using_background_image(background_image) return self - def get_style(self, simple=False): + def get_style(self, simple: bool = False) -> dict: ret = { "stroke_opacity": self.get_stroke_opacity(), "stroke_width": self.get_stroke_width(), @@ -371,7 +398,7 @@ def get_style(self, simple=False): return ret - def match_style(self, vmobject, family=True): + def match_style(self, vmobject: VMobject, family: bool = True) -> Self: self.set_style(**vmobject.get_style(), family=False) if family: @@ -386,18 +413,18 @@ def match_style(self, vmobject, family=True): sm1.match_style(sm2) return self - def set_color(self, color: ParsableManimColor, family=True): + def set_color(self, color: ParsableManimColor, family: bool = True) -> Self: self.set_fill(color, family=family) self.set_stroke(color, family=family) return self - def set_opacity(self, opacity, family=True): + def set_opacity(self, opacity: float, family: bool = True) -> Self: self.set_fill(opacity=opacity, family=family) self.set_stroke(opacity=opacity, family=family) self.set_stroke(opacity=opacity, family=family, background=True) return self - def fade(self, darkness=0.5, family=True): + def fade(self, darkness: float = 0.5, family: bool = True) -> Self: factor = 1.0 - darkness self.set_fill(opacity=factor * self.get_fill_opacity(), family=False) self.set_stroke(opacity=factor * self.get_stroke_opacity(), family=False) @@ -408,13 +435,13 @@ def fade(self, darkness=0.5, family=True): super().fade(darkness, family) return self - def get_fill_rgbas(self): + def get_fill_rgbas(self) -> RGBA_Array_Float | Zeros: try: return self.fill_rgbas except AttributeError: return np.zeros((1, 4)) - def get_fill_color(self): + def get_fill_color(self) -> ManimColor: """ If there are multiple colors (for gradient) this returns the first one @@ -423,7 +450,7 @@ def get_fill_color(self): fill_color = property(get_fill_color, set_fill) - def get_fill_opacity(self): + def get_fill_opacity(self) -> ManimFloat: """ If there are multiple opacities, this returns the first @@ -431,59 +458,62 @@ def get_fill_opacity(self): return self.get_fill_opacities()[0] # TODO: Does this just do a copy? - def get_fill_colors(self): + def get_fill_colors(self) -> list[ManimColor | None]: return [ ManimColor(rgba[:3]) if rgba.any() else None for rgba in self.get_fill_rgbas() ] - def get_fill_opacities(self): + def get_fill_opacities(self) -> np.ndarray[ManimFloat]: return self.get_fill_rgbas()[:, 3] - def get_stroke_rgbas(self, background=False): + def get_stroke_rgbas(self, background: bool = False) -> RGBA_Array_float | Zeros: try: if background: + self.background_stroke_rgbas: RGBA_Array_Float rgbas = self.background_stroke_rgbas else: + self.stroke_rgbas: RGBA_Array_Float rgbas = self.stroke_rgbas return rgbas except AttributeError: return np.zeros((1, 4)) - def get_stroke_color(self, background=False): + def get_stroke_color(self, background: bool = False) -> ManimColor | None: return self.get_stroke_colors(background)[0] stroke_color = property(get_stroke_color, set_stroke) - def get_stroke_width(self, background=False): + def get_stroke_width(self, background: bool = False) -> float: if background: + self.background_stroke_width: float width = self.background_stroke_width else: width = self.stroke_width if isinstance(width, str): width = int(width) - return max(0, width) + return max(0.0, width) - def get_stroke_opacity(self, background=False): + def get_stroke_opacity(self, background: bool = False) -> ManimFloat: return self.get_stroke_opacities(background)[0] - def get_stroke_colors(self, background=False): + def get_stroke_colors(self, background: bool = False) -> list[ManimColor | None]: return [ ManimColor(rgba[:3]) if rgba.any() else None for rgba in self.get_stroke_rgbas(background) ] - def get_stroke_opacities(self, background=False): + def get_stroke_opacities(self, background: bool = False) -> np.ndarray[ManimFloat]: return self.get_stroke_rgbas(background)[:, 3] - def get_color(self): + def get_color(self) -> ManimColor: if np.all(self.get_fill_opacities() == 0): return self.get_stroke_color() return self.get_fill_color() color = property(get_color, set_color) - def set_sheen_direction(self, direction: np.ndarray, family=True): + def set_sheen_direction(self, direction: Vector, family: bool = True) -> Self: """Sets the direction of the applied sheen. Parameters @@ -508,10 +538,10 @@ def set_sheen_direction(self, direction: np.ndarray, family=True): for submob in self.get_family(): submob.sheen_direction = direction else: - self.sheen_direction = direction + self.sheen_direction: Vector = direction return self - def rotate_sheen_direction(self, angle: float, axis: np.ndarray = OUT, family=True): + def rotate_sheen_direction(self, angle: float, axis: Vector = OUT, family: bool = True) -> Self: """Rotates the direction of the applied sheen. Parameters @@ -542,7 +572,7 @@ def rotate_sheen_direction(self, angle: float, axis: np.ndarray = OUT, family=Tr self.sheen_direction = rotate_vector(self.sheen_direction, angle, axis) return self - def set_sheen(self, factor: float, direction: np.ndarray = None, family=True): + def set_sheen(self, factor: float, direction: Vector | None = None, family: bool = True) -> Self: """Applies a color gradient from a direction. Parameters @@ -568,7 +598,7 @@ def construct(self): if family: for submob in self.submobjects: submob.set_sheen(factor, direction, family) - self.sheen_factor = factor + self.sheen_factor: float = factor if direction is not None: # family set to false because recursion will # already be handled above @@ -579,13 +609,13 @@ def construct(self): self.set_fill(self.get_fill_color(), family=family) return self - def get_sheen_direction(self): + def get_sheen_direction(self) -> Vector: return np.array(self.sheen_direction) - def get_sheen_factor(self): + def get_sheen_factor(self) -> float: return self.sheen_factor - def get_gradient_start_and_end_points(self): + def get_gradient_start_and_end_points(self) -> tuple[Point3D, Point3D]: if self.shade_in_3d: return get_3d_vmob_gradient_start_and_end_points(self) else: @@ -597,8 +627,8 @@ def get_gradient_start_and_end_points(self): offset = np.dot(bases, direction) return (c - offset, c + offset) - def color_using_background_image(self, background_image: Image | str): - self.background_image = background_image + def color_using_background_image(self, background_image: Image | str) -> Self: + self.background_image: Image | str = background_image self.set_color(WHITE) for submob in self.submobjects: submob.color_using_background_image(background_image) @@ -607,18 +637,18 @@ def color_using_background_image(self, background_image: Image | str): def get_background_image(self) -> Image | str: return self.background_image - def match_background_image(self, vmobject): + def match_background_image(self, vmobject: VMobject) -> Self: self.color_using_background_image(vmobject.get_background_image()) return self - def set_shade_in_3d(self, value=True, z_index_as_group=False): + def set_shade_in_3d(self, value: bool = True, z_index_as_group: bool = False) -> Self: for submob in self.get_family(): submob.shade_in_3d = value if z_index_as_group: submob.z_index_group = self return self - def set_points(self, points): + def set_points(self, points: Iterable[Point3D]) -> Self: self.points = np.array(points) return self @@ -626,7 +656,7 @@ def resize_points( self, new_length: int, resize_func: Callable[[np.ndarray, int], np.ndarray] = resize_array, - ): + ) -> Self: """Resize the array of anchor points and handles to have the specified size. @@ -645,11 +675,11 @@ def resize_points( def set_anchors_and_handles( self, - anchors1: Sequence[float], - handles1: Sequence[float], - handles2: Sequence[float], - anchors2: Sequence[float], - ): + anchors1: CubicBezierPoints, + handles1: CubicBezierPoints, + handles2: CubicBezierPoints, + anchors2: CubicBezierPoints, + ) -> Self: """Given two sets of anchors and handles, process them to set them as anchors and handles of the VMobject. @@ -677,17 +707,17 @@ def set_anchors_and_handles( self.points[index::nppcc] = array return self - def clear_points(self): + def clear_points(self) -> None: self.points = np.zeros((0, self.dim)) - def append_points(self, new_points): + def append_points(self, new_points: Point3D_Array) -> Self: # TODO, check that number new points is a multiple of 4? # or else that if len(self.points) % 4 == 1, then # len(new_points) % 4 == 3? self.points = np.append(self.points, new_points, axis=0) return self - def start_new_path(self, point): + def start_new_path(self, point: Point3D) -> Self: if len(self.points) % 4 != 0: # close the open path by appending the last # start anchor sufficiently often @@ -699,23 +729,24 @@ def start_new_path(self, point): def add_cubic_bezier_curve( self, - anchor1: np.ndarray, - handle1: np.ndarray, - handle2: np.ndarray, - anchor2, + anchor1: CubicBezierPoints, + handle1: CubicBezierPoints, + handle2: CubicBezierPoints, + anchor2: CubicBezierPoints, ) -> None: # TODO, check the len(self.points) % 4 == 0? self.append_points([anchor1, handle1, handle2, anchor2]) - def add_cubic_bezier_curves(self, curves): + # what type is curves? + def add_cubic_bezier_curves(self, curves) -> None: self.append_points(curves.flatten()) def add_cubic_bezier_curve_to( self, - handle1: np.ndarray, - handle2: np.ndarray, - anchor: np.ndarray, - ): + handle1: CubicBezierPoints, + handle2: CubicBezierPoints, + anchor: CubicBezierPoints, + ) -> Self: """Add cubic bezier curve to the path. NOTE : the first anchor is not a parameter as by default the end of the last sub-path! @@ -744,9 +775,9 @@ def add_cubic_bezier_curve_to( def add_quadratic_bezier_curve_to( self, - handle: np.ndarray, - anchor: np.ndarray, - ): + handle: QuadraticBezierPoints, + anchor: QuadraticBezierPoints, + ) -> Self: """Add Quadratic bezier curve to the path. Returns @@ -768,7 +799,7 @@ def add_quadratic_bezier_curve_to( ) return self - def add_line_to(self, point: np.ndarray): + def add_line_to(self, point: Point3D) -> Self: """Add a straight line from the last point of VMobject to the given point. Parameters @@ -791,7 +822,7 @@ def add_line_to(self, point: np.ndarray): ) return self - def add_smooth_curve_to(self, *points: np.array): + def add_smooth_curve_to(self, *points: Point3D) -> Self: """Creates a smooth curve from given points and add it to the VMobject. If two points are passed in, the first is interpreted as a handle, the second as an anchor. @@ -834,28 +865,28 @@ def add_smooth_curve_to(self, *points: np.array): self.append_points([last_a2, handle1, handle2, new_anchor]) return self - def has_new_path_started(self): + def has_new_path_started(self) -> bool: nppcc = self.n_points_per_cubic_curve # 4 # A new path starting is defined by a control point which is not part of a bezier subcurve. return len(self.points) % nppcc == 1 - def get_last_point(self): + def get_last_point(self) -> Point3D: return self.points[-1] - def is_closed(self): + def is_closed(self) -> bool: # TODO use consider_points_equals_2d ? return self.consider_points_equals(self.points[0], self.points[-1]) - def close_path(self): + def close_path(self) -> None: if not self.is_closed(): self.add_line_to(self.get_subpaths()[-1][0]) - def add_points_as_corners(self, points: np.ndarray) -> VMobject: + def add_points_as_corners(self, points: Iterable[Point3D]) -> Iterable[Point3D]: for point in points: self.add_line_to(point) return points - def set_points_as_corners(self, points: Sequence[float]): + def set_points_as_corners(self, points: Point3D_Array) -> Self: """Given an array of points, set them as corner of the vmobject. To achieve that, this algorithm sets handles aligned with the anchors such that the resultant bezier curve will be the segment @@ -880,12 +911,12 @@ def set_points_as_corners(self, points: Sequence[float]): ) return self - def set_points_smoothly(self, points): + def set_points_smoothly(self, points: Point3D_Array) -> Self: self.set_points_as_corners(points) self.make_smooth() return self - def change_anchor_mode(self, mode: str): + def change_anchor_mode(self, mode: Literal["jagged", "smooth"]) -> Self: """Changes the anchor mode of the bezier curves. This will modify the handles. There can be only two modes, "jagged", and "smooth". @@ -895,7 +926,7 @@ def change_anchor_mode(self, mode: str): :class:`VMobject` ``self`` """ - assert mode in ["jagged", "smooth"] + assert mode in ["jagged", "smooth"], "mode must be either \"jagged\" or \"smooth\"" nppcc = self.n_points_per_cubic_curve for submob in self.family_members_with_points(): subpaths = submob.get_subpaths() @@ -907,7 +938,7 @@ def change_anchor_mode(self, mode: str): anchors = np.append(subpath[::nppcc], subpath[-1:], 0) if mode == "smooth": h1, h2 = get_smooth_handle_points(anchors) - elif mode == "jagged": + else: # mode == "jagged" # The following will make the handles aligned with the anchors, thus making the bezier curve a segment a1 = anchors[:-1] a2 = anchors[1:] @@ -919,18 +950,18 @@ def change_anchor_mode(self, mode: str): submob.append_points(new_subpath) return self - def make_smooth(self): + def make_smooth(self) -> Self: return self.change_anchor_mode("smooth") - def make_jagged(self): + def make_jagged(self) -> Self: return self.change_anchor_mode("jagged") - def add_subpath(self, points: np.ndarray): + def add_subpath(self, points: Point3D_Array) -> Self: assert len(points) % 4 == 0 - self.points = np.append(self.points, points, axis=0) + self.points: Point3D_Array = np.append(self.points, points, axis=0) return self - def append_vectorized_mobject(self, vectorized_mobject): + def append_vectorized_mobject(self, vectorized_mobject: VMobject) -> None: new_points = list(vectorized_mobject.points) if self.has_new_path_started(): @@ -939,7 +970,7 @@ def append_vectorized_mobject(self, vectorized_mobject): self.points = self.points[:-1] self.append_points(new_points) - def apply_function(self, function): + def apply_function(self, function: MappingFunction) -> Self: factor = self.pre_function_handle_to_anchor_scale_factor self.scale_handle_to_anchor_distances(factor) super().apply_function(function) @@ -951,15 +982,15 @@ def apply_function(self, function): def rotate( self, angle: float, - axis: np.ndarray = OUT, - about_point: Sequence[float] | None = None, + axis: Vector = OUT, + about_point: Point3D | None = None, **kwargs, - ): + ) -> Self: self.rotate_sheen_direction(angle, axis) super().rotate(angle, axis, about_point, **kwargs) return self - def scale_handle_to_anchor_distances(self, factor: float): + def scale_handle_to_anchor_distances(self, factor: float) -> Self: """If the distance between a given handle point H and its associated anchor point A is d, then it changes H to be a distances factor*d away from A, but so that the line from A to H doesn't change. @@ -991,10 +1022,10 @@ def scale_handle_to_anchor_distances(self, factor: float): return self # - def consider_points_equals(self, p0, p1): + def consider_points_equals(self, p0: Point3D, p1: Point3D) -> bool: return np.allclose(p0, p1, atol=self.tolerance_for_point_equality) - def consider_points_equals_2d(self, p0: np.ndarray, p1: np.ndarray) -> bool: + def consider_points_equals_2d(self, p0: Point2D, p1: Point2D) -> bool: """Determine if two points are close enough to be considered equal. This uses the algorithm from np.isclose(), but expanded here for the @@ -1020,10 +1051,10 @@ def consider_points_equals_2d(self, p0: np.ndarray, p1: np.ndarray) -> bool: return True # Information about line - def get_cubic_bezier_tuples_from_points(self, points): - return np.array(list(self.gen_cubic_bezier_tuples_from_points(points))) + def get_cubic_bezier_tuples_from_points(self, points: Point3D_Array) -> np.ndarray[Point3D_Array]: + return np.array(self.gen_cubic_bezier_tuples_from_points(points)) - def gen_cubic_bezier_tuples_from_points(self, points: np.ndarray) -> tuple: + def gen_cubic_bezier_tuples_from_points(self, points: Point3D_Array) -> tuple[Point3D_Array]: """Returns the bezier tuples from an array of points. self.points is a list of the anchors and handles of the bezier curves of the mobject (ie [anchor1, handle1, handle2, anchor2, anchor3 ..]) @@ -1038,23 +1069,23 @@ def gen_cubic_bezier_tuples_from_points(self, points: np.ndarray) -> tuple: Returns ------- - typing.Tuple + tuple Bezier control points. """ nppcc = self.n_points_per_cubic_curve remainder = len(points) % nppcc points = points[: len(points) - remainder] # Basically take every nppcc element. - return (points[i : i + nppcc] for i in range(0, len(points), nppcc)) + return tuple(points[i : i + nppcc] for i in range(0, len(points), nppcc)) - def get_cubic_bezier_tuples(self): + def get_cubic_bezier_tuples(self) -> np.ndarray[Point3D_Array]: return self.get_cubic_bezier_tuples_from_points(self.points) def _gen_subpaths_from_points( self, - points: np.ndarray, + points: Point3D_Array, filter_func: Callable[[int], bool], - ) -> tuple: + ) -> Generator[Point3D_Array]: """Given an array of points defining the bezier curves of the vmobject, return subpaths formed by these points. Here, Two bezier curves form a path if at least two of their anchors are evaluated True by the relation defined by filter_func. @@ -1072,7 +1103,7 @@ def _gen_subpaths_from_points( Returns ------- - typing.Tuple + Generator[Point3D_Array] subpaths formed by the points. """ nppcc = self.n_points_per_cubic_curve @@ -1084,7 +1115,7 @@ def _gen_subpaths_from_points( if (i2 - i1) >= nppcc ) - def get_subpaths_from_points(self, points): + def get_subpaths_from_points(self, points: Point3D_Array) -> list[Point3D_Array]: return list( self._gen_subpaths_from_points( points, @@ -1092,25 +1123,25 @@ def get_subpaths_from_points(self, points): ), ) - def gen_subpaths_from_points_2d(self, points): + def gen_subpaths_from_points_2d(self, points: Point3D_Array) -> Generator[Point3D_Array]: return self._gen_subpaths_from_points( points, lambda n: not self.consider_points_equals_2d(points[n - 1], points[n]), ) - def get_subpaths(self) -> tuple: + def get_subpaths(self) -> list[Point3D_Array]: """Returns subpaths formed by the curves of the VMobject. Subpaths are ranges of curves with each pair of consecutive curves having their end/start points coincident. Returns ------- - typing.Tuple + list[Point3D_Array] subpaths. """ return self.get_subpaths_from_points(self.points) - def get_nth_curve_points(self, n: int) -> np.ndarray: + def get_nth_curve_points(self, n: int) -> Point3D_Array: """Returns the points defining the nth curve of the vmobject. Parameters @@ -1120,14 +1151,14 @@ def get_nth_curve_points(self, n: int) -> np.ndarray: Returns ------- - np.ndarray - points defininf the nth bezier curve (anchors, handles) + Point3D_Array + points defining the nth bezier curve (anchors, handles) """ assert n < self.get_num_curves() nppcc = self.n_points_per_cubic_curve return self.points[nppcc * n : nppcc * (n + 1)] - def get_nth_curve_function(self, n: int) -> Callable[[float], np.ndarray]: + def get_nth_curve_function(self, n: int) -> Callable[[float], Point3D]: """Returns the expression of the nth curve. Parameters @@ -1137,7 +1168,7 @@ def get_nth_curve_function(self, n: int) -> Callable[[float], np.ndarray]: Returns ------- - typing.Callable[float] + Callable[float, Point3D] expression of the nth bezier curve. """ return bezier(self.get_nth_curve_points(n)) @@ -1146,7 +1177,7 @@ def get_nth_curve_length_pieces( self, n: int, sample_points: int | None = None, - ) -> np.ndarray: + ) -> np.ndarray[ManimFloat]: """Returns the array of short line lengths used for length approximation. Parameters @@ -1158,7 +1189,7 @@ def get_nth_curve_length_pieces( Returns ------- - np.ndarray + np.ndarray[ManimFloat] The short length-pieces of the nth curve. """ if sample_points is None: @@ -1199,7 +1230,7 @@ def get_nth_curve_function_with_length( self, n: int, sample_points: int | None = None, - ) -> tuple[Callable[[float], np.ndarray], float]: + ) -> tuple[Callable[[float], Point3D], float]: """Returns the expression of the nth curve along with its (approximate) length. Parameters @@ -1211,7 +1242,7 @@ def get_nth_curve_function_with_length( Returns ------- - curve : typing.Callable[[float], np.ndarray] + curve : Callable[[float], Point3D] The function for the nth curve. length : :class:`float` The length of the nth curve. @@ -1229,19 +1260,19 @@ def get_num_curves(self) -> int: Returns ------- int - number of curves. of the vmobject. + number of curves of the vmobject. """ nppcc = self.n_points_per_cubic_curve return len(self.points) // nppcc def get_curve_functions( self, - ) -> Iterable[Callable[[float], np.ndarray]]: + ) -> Generator[Callable[[float], Point3D]]: """Gets the functions for the curves of the mobject. Returns ------- - typing.Iterable[typing.Callable[[float], np.ndarray]] + Generator[Callable[[float], Point3D]] The functions for the curves. """ @@ -1251,8 +1282,9 @@ def get_curve_functions( yield self.get_nth_curve_function(n) def get_curve_functions_with_lengths( - self, **kwargs - ) -> Iterable[tuple[Callable[[float], np.ndarray], float]]: + self, + **kwargs + ) -> Generator[tuple[Callable[[float], Point3D], float]]: """Gets the functions and lengths of the curves for the mobject. Parameters @@ -1262,7 +1294,7 @@ def get_curve_functions_with_lengths( Returns ------- - typing.Iterable[typing.Tuple[typing.Callable[[float], np.ndarray], float]] + Generator[tuple[Callable[[float], Point3D], float]] The functions and lengths of the curves. """ @@ -1271,7 +1303,7 @@ def get_curve_functions_with_lengths( for n in range(num_curves): yield self.get_nth_curve_function_with_length(n, **kwargs) - def point_from_proportion(self, alpha: float) -> np.ndarray: + def point_from_proportion(self, alpha: float) -> Point3D: """Gets the point at a proportion along the path of the :class:`VMobject`. Parameters @@ -1371,7 +1403,7 @@ def proportion_from_point( return alpha - def get_anchors_and_handles(self) -> Iterable[np.ndarray]: + def get_anchors_and_handles(self) -> list[Point3D_Array]: """Returns anchors1, handles1, handles2, anchors2, where (anchors1[i], handles1[i], handles2[i], anchors2[i]) will be four points defining a cubic bezier curve @@ -1379,50 +1411,50 @@ def get_anchors_and_handles(self) -> Iterable[np.ndarray]: Returns ------- - typing.Iterable[np.ndarray] + `list[Point3D_Array]` Iterable of the anchors and handles. """ nppcc = self.n_points_per_cubic_curve return [self.points[i::nppcc] for i in range(nppcc)] - def get_start_anchors(self) -> np.ndarray: + def get_start_anchors(self) -> Point3D_Array: """Returns the start anchors of the bezier curves. Returns ------- - np.ndarray + Point3D_Array Starting anchors """ - return self.points[0 :: self.n_points_per_cubic_curve] + return self.points[::self.n_points_per_cubic_curve] - def get_end_anchors(self) -> np.ndarray: + def get_end_anchors(self) -> Point3D_Array: """Return the end anchors of the bezier curves. Returns ------- - np.ndarray + Point3D_Array Starting anchors """ nppcc = self.n_points_per_cubic_curve return self.points[nppcc - 1 :: nppcc] - def get_anchors(self) -> np.ndarray: + def get_anchors(self) -> Point3D_Array: """Returns the anchors of the curves forming the VMobject. Returns ------- - np.ndarray + Point3D_Array The anchors. """ if self.points.shape[0] == 1: return self.points return np.array( - list(it.chain(*zip(self.get_start_anchors(), self.get_end_anchors()))), + tuple(it.chain(*zip(self.get_start_anchors(), self.get_end_anchors()))), ) - def get_points_defining_boundary(self): + def get_points_defining_boundary(self) -> Point3D_Array: # Probably returns all anchors, but this is weird regarding the name of the method. - return np.array(list(it.chain(*(sm.get_anchors() for sm in self.get_family())))) + return np.array(tuple(it.chain(*(sm.get_anchors() for sm in self.get_family())))) def get_arc_length(self, sample_points_per_curve: int | None = None) -> float: """Return the approximated length of the whole curve. @@ -1446,7 +1478,7 @@ def get_arc_length(self, sample_points_per_curve: int | None = None) -> float: ) # Alignment - def align_points(self, vmobject: VMobject): + def align_points(self, vmobject: VMobject) -> Self: """Adds points to self and vmobject so that they both have the same number of subpaths, with corresponding subpaths each containing the same number of points. @@ -1517,7 +1549,7 @@ def get_nth_subpath(path_list, n): vmobject.set_points(new_path2) return self - def insert_n_curves(self, n: int): + def insert_n_curves(self, n: int) -> Self: """Inserts n curves to the bezier curves of the vmobject. Parameters @@ -1541,7 +1573,7 @@ def insert_n_curves(self, n: int): self.append_points([new_path_point]) return self - def insert_n_curves_to_point_list(self, n: int, points: np.ndarray) -> np.ndarray: + def insert_n_curves_to_point_list(self, n: int, points: Point3D_Array) -> np.ndarray[BezierPoints]: """Given an array of k points defining a bezier curves (anchors and handles), returns points defining exactly k + n bezier curves. Parameters @@ -1596,7 +1628,7 @@ def insert_n_curves_to_point_list(self, n: int, points: np.ndarray) -> np.ndarra ) return new_points - def align_rgbas(self, vmobject): + def align_rgbas(self, vmobject: VMobject) -> Self: attrs = ["fill_rgbas", "stroke_rgbas", "background_stroke_rgbas"] for attr in attrs: a1 = getattr(self, attr) @@ -1609,14 +1641,14 @@ def align_rgbas(self, vmobject): setattr(self, attr, new_a1) return self - def get_point_mobject(self, center=None): + def get_point_mobject(self, center: Vector | None = None) -> "VectorizedPoint": if center is None: center = self.get_center() point = VectorizedPoint(center) point.match_style(self) return point - def interpolate_color(self, mobject1, mobject2, alpha): + def interpolate_color(self, mobject1: VMobject, mobject2: VMobject, alpha: float) -> None: attrs = [ "fill_rgbas", "stroke_rgbas", @@ -1640,7 +1672,7 @@ def pointwise_become_partial( vmobject: VMobject, a: float, b: float, - ): + ) -> Self: """Given two bounds a and b, transforms the points of the self vmobject into the points of the vmobject passed as parameter with respect to the bounds. Points here stand for control points of the bezier curves (anchors and handles) @@ -1697,7 +1729,7 @@ def pointwise_become_partial( ) return self - def get_subcurve(self, a: float, b: float) -> VMobject: + def get_subcurve(self, a: float, b: float) -> Self: """Returns the subcurve of the VMobject between the interval [a, b]. The curve is a VMobject itself. @@ -1725,7 +1757,7 @@ def get_subcurve(self, a: float, b: float) -> VMobject: vmob.pointwise_become_partial(self, a, b) return vmob - def get_direction(self): + def get_direction(self) -> Literal["CW", "CCW"]: """Uses :func:`~.space_ops.shoelace_direction` to calculate the direction. The direction of points determines in which direction the object is drawn, clockwise or counterclockwise. @@ -1745,7 +1777,7 @@ def get_direction(self): """ return shoelace_direction(self.get_start_anchors()) - def reverse_direction(self): + def reverse_direction(self) -> Self: """Reverts the point direction by inverting the point order. Returns @@ -1770,7 +1802,7 @@ def construct(self): self.points = self.points[::-1] return self - def force_direction(self, target_direction: str): + def force_direction(self, target_direction: Literal["CW", "CCW"]) -> Self: """Makes sure that points are either directed clockwise or counterclockwise. @@ -1849,21 +1881,16 @@ def __init__(self, *vmobjects, **kwargs): super().__init__(**kwargs) self.add(*vmobjects) - def __repr__(self): - return ( - self.__class__.__name__ - + "(" - + ", ".join(str(mob) for mob in self.submobjects) - + ")" - ) + def __repr__(self) -> str: + return f'{self.__class__.__name__}({", ".join(str(mob) for mob in self.submobjects)})' - def __str__(self): + def __str__(self) -> str: return ( f"{self.__class__.__name__} of {len(self.submobjects)} " f"submobject{'s' if len(self.submobjects) > 0 else ''}" ) - def add(self, *vmobjects: VMobject): + def add(self, *vmobjects: VMobject) -> Self: """Checks if all passed elements are an instance of VMobject and then add them to submobjects Parameters @@ -1915,21 +1942,21 @@ def construct(self): raise TypeError("All submobjects must be of type VMobject") return super().add(*vmobjects) - def __add__(self, vmobject): + def __add__(self, vmobject: VMobject) -> Self: return VGroup(*self.submobjects, vmobject) - def __iadd__(self, vmobject): + def __iadd__(self, vmobject: VMobject) -> Self: return self.add(vmobject) - def __sub__(self, vmobject): + def __sub__(self, vmobject: VMobject) -> Self: copy = VGroup(*self.submobjects) copy.remove(vmobject) return copy - def __isub__(self, vmobject): + def __isub__(self, vmobject: VMobject) -> Self: return self.remove(vmobject) - def __setitem__(self, key: int, value: VMobject | Sequence[VMobject]): + def __setitem__(self, key: int, value: VMobject | Sequence[VMobject]) -> None: """Override the [] operator for item assignment. Parameters @@ -2060,21 +2087,21 @@ def __init__( ) = {}, show_keys: bool = False, **kwargs, - ): + ) -> None: super().__init__(**kwargs) self.show_keys = show_keys self.submob_dict = {} self.add(mapping_or_iterable) - def __repr__(self): - return __class__.__name__ + "(" + repr(self.submob_dict) + ")" + def __repr__(self) -> str: + return f"{self.__class__.__name__}({repr(self.submob_dict)})" def add( self, mapping_or_iterable: ( Mapping[Hashable, VMobject] | Iterable[tuple[Hashable, VMobject]] ), - ): + ) -> Self: """Adds the key-value pairs to the :class:`VDict` object. Also, it internally adds the value to the `submobjects` :class:`list` @@ -2102,7 +2129,7 @@ def add( return self - def remove(self, key: Hashable): + def remove(self, key: Hashable) -> Self: """Removes the mobject from the :class:`VDict` object having the key `key` Also, it internally removes the mobject from the `submobjects` :class:`list` @@ -2152,7 +2179,7 @@ def __getitem__(self, key: Hashable): submob = self.submob_dict[key] return submob - def __setitem__(self, key: Hashable, value: VMobject): + def __setitem__(self, key: Hashable, value: VMobject) -> None: """Override the [] operator for item assignment. Parameters @@ -2233,7 +2260,7 @@ def __contains__(self, key: Hashable): """ return key in self.submob_dict - def get_all_submobjects(self): + def get_all_submobjects(self) -> list[list]: """To get all the submobjects associated with a particular :class:`VDict` object Returns @@ -2251,7 +2278,7 @@ def get_all_submobjects(self): submobjects = self.submob_dict.values() return submobjects - def add_key_value_pair(self, key: Hashable, value: VMobject): + def add_key_value_pair(self, key: Hashable, value: VMobject) -> None: """A utility function used by :meth:`add` to add the key-value pair to :attr:`submob_dict`. Not really meant to be used externally. @@ -2296,14 +2323,14 @@ def add_key_value_pair(self, key: Hashable, value: VMobject): class VectorizedPoint(VMobject, metaclass=ConvertToOpenGL): def __init__( self, - location=ORIGIN, - color=BLACK, - fill_opacity=0, - stroke_width=0, - artificial_width=0.01, - artificial_height=0.01, + location: Point3D = ORIGIN, + color: ManimColor = BLACK, + fill_opacity: float = 0, + stroke_width: float = 0, + artificial_width: float = 0.01, + artificial_height: float = 0.01, **kwargs, - ): + ) -> None: self.artificial_width = artificial_width self.artificial_height = artificial_height super().__init__( @@ -2317,17 +2344,17 @@ def __init__( basecls = OpenGLVMobject if config.renderer == RendererType.OPENGL else VMobject @basecls.width.getter - def width(self): + def width(self) -> float: return self.artificial_width @basecls.height.getter - def height(self): + def height(self) -> float: return self.artificial_height - def get_location(self): + def get_location(self) -> Point3D: return np.array(self.points[0]) - def set_location(self, new_loc): + def set_location(self, new_loc: Point3D): self.set_points(np.array([new_loc])) @@ -2348,7 +2375,7 @@ def construct(self): """ - def __init__(self, vmobject, **kwargs): + def __init__(self, vmobject: VMobject, **kwargs) -> None: super().__init__(**kwargs) tuples = vmobject.get_cubic_bezier_tuples() for tup in tuples: @@ -2414,14 +2441,14 @@ def construct(self): def __init__( self, - vmobject, - num_dashes=15, - dashed_ratio=0.5, - dash_offset=0, - color=WHITE, - equal_lengths=True, + vmobject: VMobject, + num_dashes: int = 15, + dashed_ratio: float = 0.5, + dash_offset: float = 0, + color: ManimColor = WHITE, + equal_lengths: bool = True, **kwargs, - ): + ) -> None: self.dashed_ratio = dashed_ratio self.num_dashes = num_dashes super().__init__(color=color, **kwargs) diff --git a/manim/typing.py b/manim/typing.py index 0030d7085e..d9d583b245 100644 --- a/manim/typing.py +++ b/manim/typing.py @@ -1,8 +1,7 @@ -from typing import Callable, Tuple, TYPE_CHECKING +from typing import Callable, Tuple, TYPE_CHECKING, TypeAlias import numpy as np import numpy.typing as npt -from typing_extensions import TypeAlias if TYPE_CHECKING: from .animation.animation import Animation @@ -80,17 +79,20 @@ MatrixMN: TypeAlias = npt.NDArray[PointDType] """ `shape: (M,N)` A Matrix `[[float,...],[float,...],...]`. """ +Zeros: TypeAlias = npt.NDArray[ManimFloat] +"""A Matrix of Zeros. Typically created with `numpy.zeros((M,N))`""" + # Due to current limitations (see https://github.com/python/mypy/issues/14656 / 8263), we don't specify the first argument type (Mobject). -FunctionOverride: TypeAlias = Callable[..., Animation] +FunctionOverride: TypeAlias = Callable[..., None] """Function type returning an animation for the specified Mobject.""" # Misc -PathFuncType = Callable[[Point3D, Point3D, float], Point3D] -"""Function type taking two points and an alpha value, and returning a new `Point3D`""" +PathFuncType: TypeAlias = Callable[[Point3D, Point3D, float], Point3D] +"""Function mapping two points and an alpha value to a new point""" -MappingFunction = Callable[[Point3D], Point3D] -"""A function taking mapping a Point3D to another Point3D""" +MappingFunction: TypeAlias = Callable[[Point3D], Point3D] +"""A function mapping a Point3D to another Point3D""" -Image = np.ndarray +Image: TypeAlias = np.ndarray """An Image""" From 88f9b2d745539a0e72ce6b919d05ad12d67a8355 Mon Sep 17 00:00:00 2001 From: JasonGrace2282 Date: Thu, 10 Aug 2023 16:22:49 -0400 Subject: [PATCH 41/91] Type-hinted manim.mobject.geometry --- manim/mobject/geometry/arc.py | 204 +++++++++++++---------- manim/mobject/geometry/boolean_ops.py | 14 +- manim/mobject/geometry/line.py | 90 +++++----- manim/mobject/geometry/polygram.py | 29 ++-- manim/mobject/geometry/shape_matchers.py | 31 ++-- manim/mobject/geometry/tips.py | 54 +++--- manim/typing.py | 10 +- 7 files changed, 250 insertions(+), 182 deletions(-) diff --git a/manim/mobject/geometry/arc.py b/manim/mobject/geometry/arc.py index dbb23d508d..eebde2dad5 100644 --- a/manim/mobject/geometry/arc.py +++ b/manim/mobject/geometry/arc.py @@ -43,15 +43,14 @@ def construct(self): ] import itertools -import math import warnings -from typing import TYPE_CHECKING, Sequence +from typing import TYPE_CHECKING, Self, TypeAlias import numpy as np from manim.constants import * from manim.mobject.opengl.opengl_compatibility import ConvertToOpenGL -from manim.mobject.types.vectorized_mobject import VMobject +from manim.mobject.types.vectorized_mobject import VMobject, VGroup from manim.utils.color import BLACK, BLUE, RED, WHITE, ParsableManimColor from manim.utils.iterables import adjacent_pairs from manim.utils.space_ops import ( @@ -66,6 +65,10 @@ def construct(self): from manim.mobject.mobject import Mobject from manim.mobject.text.tex_mobject import SingleStringMathTex, Tex from manim.mobject.text.text_mobject import Text + from manim.typing import Vector, Point3D, QuadraticBezierPoints, CubicBezierPoints + + +Angle: TypeAlias = float | np.float64 class TipableVMobject(VMobject, metaclass=ConvertToOpenGL): @@ -88,21 +91,26 @@ class TipableVMobject(VMobject, metaclass=ConvertToOpenGL): def __init__( self, - tip_length=DEFAULT_ARROW_TIP_LENGTH, - normal_vector=OUT, - tip_style={}, + tip_length: float = DEFAULT_ARROW_TIP_LENGTH, + normal_vector: Vector = OUT, + tip_style: dict = {}, **kwargs, - ): - self.tip_length = tip_length - self.normal_vector = normal_vector - self.tip_style = tip_style + ) -> None: + self.tip_length: float = tip_length + self.normal_vector: Vector = normal_vector + self.tip_style: dict = tip_style super().__init__(**kwargs) # Adding, Creating, Modifying tips def add_tip( - self, tip=None, tip_shape=None, tip_length=None, tip_width=None, at_start=False - ): + self, + tip=None, + tip_shape=None, + tip_length: float = None, + tip_width: float = None, + at_start: bool = False + ) -> Self: """Adds a tip to the TipableVMobject instance, recognising that the endpoints might need to be switched if it's a 'starting tip' or not. @@ -117,7 +125,11 @@ def add_tip( return self def create_tip( - self, tip_shape=None, tip_length=None, tip_width=None, at_start=False + self, + tip_shape=None, + tip_length: float = None, + tip_width: float = None, + at_start: bool = False ): """Stylises the tip, positions it spatially, and returns the newly instantiated tip to the caller. @@ -126,7 +138,12 @@ def create_tip( self.position_tip(tip, at_start) return tip - def get_unpositioned_tip(self, tip_shape=None, tip_length=None, tip_width=None): + def get_unpositioned_tip( + self, + tip_shape=None, + tip_length: float = None, + tip_width: float = None + ): """Returns a tip that has been stylistically configured, but has not yet been given a position in space. """ @@ -150,7 +167,7 @@ def get_unpositioned_tip(self, tip_shape=None, tip_length=None, tip_width=None): tip = tip_shape(length=tip_length, **style) return tip - def position_tip(self, tip, at_start=False): + def position_tip(self, tip, at_start: bool = False): # Last two control points, defining both # the end, and the tangency direction if at_start: @@ -177,7 +194,7 @@ def position_tip(self, tip, at_start=False): tip.shift(anchor - tip.tip_point) return tip - def reset_endpoints_based_on_tip(self, tip, at_start): + def reset_endpoints_based_on_tip(self, tip, at_start: bool) -> Self: if self.get_length() == 0: # Zero length, put_start_and_end_on wouldn't work return self @@ -188,7 +205,7 @@ def reset_endpoints_based_on_tip(self, tip, at_start): self.put_start_and_end_on(self.get_start(), tip.base) return self - def asign_tip_attr(self, tip, at_start): + def asign_tip_attr(self, tip, at_start: bool) -> Self: if at_start: self.start_tip = tip else: @@ -197,15 +214,15 @@ def asign_tip_attr(self, tip, at_start): # Checking for tips - def has_tip(self): + def has_tip(self) -> bool: return hasattr(self, "tip") and self.tip in self - def has_start_tip(self): + def has_start_tip(self) -> bool: return hasattr(self, "start_tip") and self.start_tip in self # Getters - def pop_tips(self): + def pop_tips(self) -> VGroup: start, end = self.get_start_and_end() result = self.get_group_class()() if self.has_tip(): @@ -217,7 +234,7 @@ def pop_tips(self): self.put_start_and_end_on(start, end) return result - def get_tips(self): + def get_tips(self) -> VGroup: """Returns a VGroup (collection of VMobjects) containing the TipableVMObject instance's tips. """ @@ -237,28 +254,28 @@ def get_tip(self): else: return tips[0] - def get_default_tip_length(self): + def get_default_tip_length(self) -> float: return self.tip_length - def get_first_handle(self): + def get_first_handle(self) -> Point3D: return self.points[1] - def get_last_handle(self): + def get_last_handle(self) -> Point3D: return self.points[-2] - def get_end(self): + def get_end(self) -> Point3D: if self.has_tip(): return self.tip.get_start() else: return super().get_end() - def get_start(self): + def get_start(self) -> Point3D: if self.has_start_tip(): return self.start_tip.get_start() else: return super().get_start() - def get_length(self): + def get_length(self) -> np.floating: start, end = self.get_start_and_end() return np.linalg.norm(start - end) @@ -281,23 +298,23 @@ def construct(self): def __init__( self, radius: float = 1.0, - start_angle=0, - angle=TAU / 4, - num_components=9, - arc_center=ORIGIN, + start_angle: float = 0, + angle: float = TAU / 4, + num_components: int = 9, + arc_center: Point3D = ORIGIN, **kwargs, ): if radius is None: # apparently None is passed by ArcBetweenPoints radius = 1.0 - self.radius = radius - self.num_components = num_components - self.arc_center = arc_center - self.start_angle = start_angle - self.angle = angle - self._failed_to_get_center = False + self.radius: float = radius + self.num_components: int = num_components + self.arc_center: Point3D = arc_center + self.start_angle: float = start_angle + self.angle: float = angle + self._failed_to_get_center: bool = False super().__init__(**kwargs) - def generate_points(self): + def generate_points(self) -> None: self._set_pre_positioned_points() self.scale(self.radius, about_point=ORIGIN) self.shift(self.arc_center) @@ -305,7 +322,7 @@ def generate_points(self): # Points are set a bit differently when rendering via OpenGL. # TODO: refactor Arc so that only one strategy for setting points # has to be used. - def init_points(self): + def init_points(self) -> None: self.set_points( Arc._create_quadratic_bezier_points( angle=self.angle, @@ -317,7 +334,7 @@ def init_points(self): self.shift(self.arc_center) @staticmethod - def _create_quadratic_bezier_points(angle, start_angle=0, n_components=8): + def _create_quadratic_bezier_points(angle: float, start_angle: float = 0, n_components: int = 8) -> QuadraticBezierPoints: samples = np.array( [ [np.cos(a), np.sin(a), 0] @@ -337,7 +354,7 @@ def _create_quadratic_bezier_points(angle, start_angle=0, n_components=8): points[2::3] = samples[2::2] return points - def _set_pre_positioned_points(self): + def _set_pre_positioned_points(self) -> None: anchors = np.array( [ np.cos(a) * RIGHT + np.sin(a) * UP @@ -360,7 +377,7 @@ def _set_pre_positioned_points(self): handles2 = anchors[1:] - (d_theta / 3) * tangent_vectors[1:] self.set_anchors_and_handles(anchors[:-1], handles1, handles2, anchors[1:]) - def get_arc_center(self, warning=True): + def get_arc_center(self, warning: bool = True) -> Point3D: """Looks at the normals to the first two anchors, and finds their intersection points """ @@ -386,11 +403,11 @@ def get_arc_center(self, warning=True): self._failed_to_get_center = True return np.array(ORIGIN) - def move_arc_center_to(self, point): + def move_arc_center_to(self, point: Point3D) -> Self: self.shift(point - self.get_arc_center()) return self - def stop_angle(self): + def stop_angle(self) -> float: return angle_of_vector(self.points[-1] - self.get_arc_center()) % TAU @@ -413,7 +430,14 @@ def construct(self): self.play(Create(arc)) """ - def __init__(self, start, end, angle=TAU / 4, radius=None, **kwargs): + def __init__( + self, + start: Point3D, + end: Point3D, + angle: float = TAU / 4, + radius: float = None, + **kwargs + ) -> None: if radius is not None: self.radius = radius if radius < 0: @@ -427,8 +451,8 @@ def __init__(self, start, end, angle=TAU / 4, radius=None, **kwargs): """ArcBetweenPoints called with a radius that is smaller than half the distance between the points.""", ) - arc_height = radius - math.sqrt(radius**2 - halfdist**2) - angle = math.acos((radius - arc_height) / radius) * sign + arc_height = radius - np.sqrt(radius**2 - halfdist**2) + angle = np.arccos((radius - arc_height) / radius) * sign super().__init__(radius=radius, angle=angle, **kwargs) if angle == 0: @@ -440,11 +464,11 @@ def __init__(self, start, end, angle=TAU / 4, radius=None, **kwargs): if not self._failed_to_get_center: self.radius = np.linalg.norm(np.array(start) - np.array(center)) else: - self.radius = math.inf + self.radius = np.inf class CurvedArrow(ArcBetweenPoints): - def __init__(self, start_point, end_point, **kwargs): + def __init__(self, start_point: Point3D, end_point: Point3D, **kwargs) -> None: from manim.mobject.geometry.tips import ArrowTriangleFilledTip tip_shape = kwargs.pop("tip_shape", ArrowTriangleFilledTip) @@ -453,7 +477,7 @@ def __init__(self, start_point, end_point, **kwargs): class CurvedDoubleArrow(CurvedArrow): - def __init__(self, start_point, end_point, **kwargs): + def __init__(self, start_point: Point3D, end_point: Point3D, **kwargs) -> None: if "tip_shape_end" in kwargs: kwargs["tip_shape"] = kwargs.pop("tip_shape_end") from manim.mobject.geometry.tips import ArrowTriangleFilledTip @@ -493,7 +517,7 @@ def __init__( radius: float | None = None, color: ParsableManimColor = RED, **kwargs, - ): + ) -> None: super().__init__( radius=radius, start_angle=0, @@ -508,7 +532,7 @@ def surround( dim_to_match: int = 0, stretch: bool = False, buffer_factor: float = 1.2, - ): + ) -> Self: """Modifies a circle so that it surrounds a given mobject. Parameters @@ -555,7 +579,7 @@ def construct(self): self.width = np.sqrt(mobject.width**2 + mobject.height**2) return self.scale(buffer_factor) - def point_at_angle(self, angle: float): + def point_at_angle(self, angle: float) -> Point3D: """Returns the position of a point on the circle. Parameters @@ -587,13 +611,16 @@ def construct(self): start_angle = angle_of_vector(self.points[0] - self.get_center()) proportion = (angle - start_angle) / TAU - proportion -= math.floor(proportion) + proportion -= np.floor(proportion) return self.point_from_proportion(proportion) @staticmethod def from_three_points( - p1: Sequence[float], p2: Sequence[float], p3: Sequence[float], **kwargs - ): + p1: Point3D, + p2: Point3D, + p3: Point3D, + **kwargs + ) -> Self: """Returns a circle passing through the specified three points. @@ -653,13 +680,13 @@ def construct(self): def __init__( self, - point: list | np.ndarray = ORIGIN, + point: Point3D = ORIGIN, radius: float = DEFAULT_DOT_RADIUS, stroke_width: float = 0, fill_opacity: float = 1.0, color: ParsableManimColor = WHITE, **kwargs, - ): + ) -> None: super().__init__( arc_center=point, radius=radius, @@ -676,11 +703,11 @@ class AnnotationDot(Dot): def __init__( self, radius: float = DEFAULT_DOT_RADIUS * 1.3, - stroke_width=5, - stroke_color=WHITE, - fill_color=BLUE, + stroke_width: float = 5, + stroke_color: ParsableManimColor = WHITE, + fill_color: ParsableManimColor = BLUE, **kwargs, - ): + ) -> None: super().__init__( radius=radius, stroke_width=stroke_width, @@ -769,7 +796,7 @@ def construct(self): self.add(ellipse_group) """ - def __init__(self, width: float = 2, height: float = 1, **kwargs): + def __init__(self, width: float = 2, height: float = 1, **kwargs) -> None: super().__init__(**kwargs) self.stretch_to_fit_width(width) self.stretch_to_fit_height(height) @@ -821,15 +848,15 @@ def construct(self): def __init__( self, - inner_radius=1, - outer_radius=2, - angle=TAU / 4, - start_angle=0, - fill_opacity=1, - stroke_width=0, - color=WHITE, + inner_radius: float = 1, + outer_radius: float = 2, + angle: float = TAU / 4, + start_angle: float = 0, + fill_opacity: float = 1, + stroke_width: float = 0, + color: ParsableManimColor = WHITE, **kwargs, - ): + ) -> None: self.inner_radius = inner_radius self.outer_radius = outer_radius super().__init__( @@ -841,7 +868,7 @@ def __init__( **kwargs, ) - def generate_points(self): + def generate_points(self) -> None: inner_arc, outer_arc = ( Arc( start_angle=self.start_angle, @@ -876,7 +903,7 @@ def construct(self): self.add(sector, sector2) """ - def __init__(self, outer_radius=1, inner_radius=0, **kwargs): + def __init__(self, outer_radius: float = 1, inner_radius: float = 0, **kwargs) -> None: super().__init__(inner_radius=inner_radius, outer_radius=outer_radius, **kwargs) @@ -908,12 +935,12 @@ def __init__( self, inner_radius: float | None = 1, outer_radius: float | None = 2, - fill_opacity=1, - stroke_width=0, - color=WHITE, - mark_paths_closed=False, + fill_opacity: float = 1, + stroke_width: float = 0, + color: ParsableManimColor = WHITE, + mark_paths_closed: bool = False, **kwargs, - ): + ) -> None: self.mark_paths_closed = mark_paths_closed # is this even used? self.inner_radius = inner_radius self.outer_radius = outer_radius @@ -921,7 +948,7 @@ def __init__( fill_opacity=fill_opacity, stroke_width=stroke_width, color=color, **kwargs ) - def generate_points(self): + def generate_points(self) -> None: self.radius = self.outer_radius outer_circle = Circle(radius=self.outer_radius) inner_circle = Circle(radius=self.inner_radius) @@ -955,7 +982,14 @@ def construct(self): """ - def __init__(self, start_anchor, start_handle, end_handle, end_anchor, **kwargs): + def __init__( + self, + start_anchor: CubicBezierPoints, + start_handle: CubicBezierPoints, + end_handle: CubicBezierPoints, + end_anchor: CubicBezierPoints, + **kwargs + ) -> None: super().__init__(**kwargs) self.add_cubic_bezier_curve(start_anchor, start_handle, end_handle, end_anchor) @@ -1041,12 +1075,12 @@ def construct(self): def __init__( self, - *vertices: list | np.ndarray, + *vertices: Point3D, angle: float = PI / 4, radius: float | None = None, arc_config: list[dict] | None = None, **kwargs, - ): + ) -> None: n = len(vertices) point_pairs = [(vertices[k], vertices[(k + 1) % n]) for k in range(n)] @@ -1054,7 +1088,7 @@ def __init__( if radius: all_arc_configs = itertools.repeat({"radius": radius}, len(point_pairs)) else: - all_arc_configs = itertools.repeat({"angle": angle}, len(point_pairs)) + all_arc_configs = itertools.repeat({"angle": float}, len(point_pairs)) elif isinstance(arc_config, dict): all_arc_configs = itertools.repeat(arc_config, len(point_pairs)) else: @@ -1184,7 +1218,7 @@ def construct(self): self.wait(2) """ - def __init__(self, *arcs: Arc | ArcBetweenPoints, **kwargs): + def __init__(self, *arcs: Arc | ArcBetweenPoints, **kwargs) -> None: if not all(isinstance(m, (Arc, ArcBetweenPoints)) for m in arcs): raise ValueError( "All ArcPolygon submobjects must be of type Arc/ArcBetweenPoints", @@ -1203,7 +1237,7 @@ def __init__(self, *arcs: Arc | ArcBetweenPoints, **kwargs): self.append_points(arc1.points) line = Line(arc1.get_end(), arc2.get_start()) len_ratio = line.get_length() / arc1.get_arc_length() - if math.isnan(len_ratio) or math.isinf(len_ratio): + if np.isnan(len_ratio) or np.isinf(len_ratio): continue line.insert_n_curves(int(arc1.get_num_curves() * len_ratio)) self.append_points(line.points) diff --git a/manim/mobject/geometry/boolean_ops.py b/manim/mobject/geometry/boolean_ops.py index 9d3ccf034c..e9845f5f11 100644 --- a/manim/mobject/geometry/boolean_ops.py +++ b/manim/mobject/geometry/boolean_ops.py @@ -2,8 +2,6 @@ from __future__ import annotations -import typing - import numpy as np from pathops import Path as SkiaPath from pathops import PathVerb, difference, intersection, union, xor @@ -11,6 +9,7 @@ from manim import config from manim.mobject.opengl.opengl_compatibility import ConvertToOpenGL from manim.mobject.types.vectorized_mobject import VMobject +from manim.typing import Point2D_Array from ...constants import RendererType @@ -23,12 +22,13 @@ class _BooleanOps(VMobject, metaclass=ConvertToOpenGL): objects (:class:`~.VMobject`). """ + # Can this be deleted? def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) def _convert_2d_to_3d_array( self, - points: typing.Iterable, + points: Point2D_Array, z_dim: float = 0.0, ) -> list[np.ndarray]: """Converts an iterable with coordinates in 2d to 3d by adding @@ -43,7 +43,7 @@ def _convert_2d_to_3d_array( Returns ------- - typing.List[np.ndarray] + Point2D_Array A list of array converted to 3d. Example @@ -216,7 +216,7 @@ def construct(self): """ - def __init__(self, subject, clip, **kwargs) -> None: + def __init__(self, subject: VMobject, clip: VMobject, **kwargs) -> None: super().__init__(**kwargs) outpen = SkiaPath() difference( @@ -258,7 +258,7 @@ def construct(self): """ - def __init__(self, *vmobjects, **kwargs) -> None: + def __init__(self, *vmobjects: VMobject, **kwargs) -> None: if len(vmobjects) < 2: raise ValueError("At least 2 mobjects needed for Intersection.") @@ -311,7 +311,7 @@ def construct(self): """ - def __init__(self, subject, clip, **kwargs) -> None: + def __init__(self, subject: VMobject, clip: VMobject, **kwargs) -> None: super().__init__(**kwargs) outpen = SkiaPath() xor( diff --git a/manim/mobject/geometry/line.py b/manim/mobject/geometry/line.py index 585f1a262a..7638019633 100644 --- a/manim/mobject/geometry/line.py +++ b/manim/mobject/geometry/line.py @@ -14,10 +14,9 @@ "RightAngle", ] -from typing import TYPE_CHECKING, Any, Sequence +from typing import TYPE_CHECKING, Sequence, Self import numpy as np -from typing_extensions import Self from manim import config from manim.constants import * @@ -32,16 +31,17 @@ if TYPE_CHECKING: from ..matrix import Matrix # Avoid circular import + from manim.typing import Point2D, Point3D, Vector class Line(TipableVMobject): def __init__( self, - start: Sequence[float] = LEFT, - end: Sequence[float] = RIGHT, + start: Point3D = LEFT, + end: Point3D = RIGHT, buff: float = 0, path_arc: float | None = None, - **kwargs: Any, + **kwargs, ) -> None: self.dim = 3 self.buff = buff @@ -59,8 +59,8 @@ def generate_points(self) -> None: def set_points_by_ends( self, - start: Sequence[float], - end: Sequence[float], + start: Point3D, + end: Point3D, buff: float = 0, path_arc: float = 0, ) -> None: @@ -90,7 +90,9 @@ def _account_for_buff(self, buff: float) -> Self: return self def _set_start_and_end_attrs( - self, start: Sequence[float], end: Sequence[float] + self, + start: Point3D, + end: Point3D ) -> None: # If either start or end are Mobjects, this # gives their centers @@ -105,9 +107,9 @@ def _set_start_and_end_attrs( def _pointify( self, - mob_or_point: Mobject | Sequence[float], - direction: Sequence[float] | None = None, - ) -> np.ndarray: + mob_or_point: Mobject | Point3D, + direction: Vector | None = None, + ) -> Point3D: """Transforms a mobject into its corresponding point. Does nothing if a point is passed. ``direction`` determines the location of the point along its bounding box in that direction. @@ -132,7 +134,9 @@ def set_path_arc(self, new_value: float) -> None: self.init_points() def put_start_and_end_on( - self, start: Sequence[float], end: Sequence[float] + self, + start: Point3D, + end: Point3D ) -> Self: """Sets starts and end coordinates of a line. @@ -164,16 +168,16 @@ def construct(self): self.generate_points() return super().put_start_and_end_on(start, end) - def get_vector(self) -> np.ndarray: + def get_vector(self) -> Vector: return self.get_end() - self.get_start() - def get_unit_vector(self) -> np.ndarray: + def get_unit_vector(self) -> Vector: return normalize(self.get_vector()) def get_angle(self) -> float: return angle_of_vector(self.get_vector()) - def get_projection(self, point: Sequence[float]) -> np.ndarray: + def get_projection(self, point: Point3D) -> Vector: """Returns the projection of a point onto a line. Parameters @@ -191,7 +195,9 @@ def get_slope(self) -> float: return np.tan(self.get_angle()) def set_angle( - self, angle: float, about_point: Sequence[float] | None = None + self, + angle: float, + about_point: Point3D | None = None ) -> Self: if about_point is None: about_point = self.get_start() @@ -243,10 +249,10 @@ def construct(self): def __init__( self, - *args: Any, + *args, dash_length: float = DEFAULT_DASH_LENGTH, dashed_ratio: float = 0.5, - **kwargs: Any, + **kwargs, ) -> None: self.dash_length = dash_length self.dashed_ratio = dashed_ratio @@ -276,7 +282,7 @@ def _calculate_num_dashes(self) -> int: int(np.ceil((self.get_length() / self.dash_length) * self.dashed_ratio)), ) - def get_start(self) -> np.ndarray: + def get_start(self) -> Point3D: """Returns the start point of the line. Examples @@ -292,7 +298,7 @@ def get_start(self) -> np.ndarray: else: return super().get_start() - def get_end(self) -> np.ndarray: + def get_end(self) -> Point3D: """Returns the end point of the line. Examples @@ -308,7 +314,7 @@ def get_end(self) -> np.ndarray: else: return super().get_end() - def get_first_handle(self) -> np.ndarray: + def get_first_handle(self) -> Point3D: """Returns the point of the first handle. Examples @@ -321,7 +327,7 @@ def get_first_handle(self) -> np.ndarray: return self.submobjects[0].points[1] - def get_last_handle(self) -> np.ndarray: + def get_last_handle(self) -> Point3D: """Returns the point of the last handle. Examples @@ -374,7 +380,7 @@ def __init__( alpha: float, length: float = 1, d_alpha: float = 1e-6, - **kwargs: Any, + **kwargs, ) -> None: self.length = length self.d_alpha = d_alpha @@ -417,7 +423,7 @@ def construct(self): self.add(elbow_group) """ - def __init__(self, width: float = 0.2, angle: float = 0, **kwargs: Any) -> None: + def __init__(self, width: float = 0.2, angle: float = 0, **kwargs) -> None: self.angle = angle super().__init__(**kwargs) self.set_points_as_corners([UP, UP + RIGHT, RIGHT]) @@ -515,12 +521,12 @@ def construct(self): def __init__( self, - *args: Any, + *args, stroke_width: float = 6, buff: float = MED_SMALL_BUFF, max_tip_length_to_length_ratio: float = 0.25, max_stroke_width_to_length_ratio: float = 5, - **kwargs: Any, + **kwargs, ) -> None: self.max_tip_length_to_length_ratio = max_tip_length_to_length_ratio self.max_stroke_width_to_length_ratio = max_stroke_width_to_length_ratio @@ -532,7 +538,7 @@ def __init__( self.add_tip(tip_shape=tip_shape) self._set_stroke_width_from_length() - def scale(self, factor: float, scale_tips: bool = False, **kwargs: Any) -> Self: + def scale(self, factor: float, scale_tips: bool = False, **kwargs) -> Self: r"""Scale an arrow, but keep stroke width and arrow tip size fixed. @@ -582,7 +588,7 @@ def scale(self, factor: float, scale_tips: bool = False, **kwargs: Any) -> Self: self.add_tip(tip=old_tips[1], at_start=True) return self - def get_normal_vector(self) -> np.ndarray: + def get_normal_vector(self) -> Vector: """Returns the normal of a vector. Examples @@ -658,7 +664,10 @@ def construct(self): """ def __init__( - self, direction: list | np.ndarray = RIGHT, buff: float = 0, **kwargs: Any + self, + direction: Vector = RIGHT, + buff: float = 0, + **kwargs ) -> None: self.buff = buff if len(direction) == 2: @@ -671,7 +680,7 @@ def coordinate_label( integer_labels: bool = True, n_dim: int = 2, color: ParsableManimColor | None = None, - **kwargs: Any, + **kwargs, ) -> Matrix: """Creates a label based on the coordinates of the vector. @@ -775,7 +784,7 @@ def construct(self): self.add(box, d1, d2, d3) """ - def __init__(self, *args: Any, **kwargs: Any) -> None: + def __init__(self, *args, **kwargs) -> None: if "tip_shape_end" in kwargs: kwargs["tip_shape"] = kwargs.pop("tip_shape_end") tip_shape_start = kwargs.pop("tip_shape_start", ArrowTriangleFilledTip) @@ -897,14 +906,14 @@ def __init__( line1: Line, line2: Line, radius: float | None = None, - quadrant: Sequence[int] = (1, 1), + quadrant: Point2D = (1, 1), other_angle: bool = False, dot: bool = False, dot_radius: float | None = None, dot_distance: float = 0.55, dot_color: ParsableManimColor = WHITE, elbow: bool = False, - **kwargs: Any, + **kwargs, ) -> None: super().__init__(**kwargs) self.lines = (line1, line2) @@ -1042,13 +1051,14 @@ def construct(self): self.add(line1, line2, angle, value) """ - if degrees: - return self.angle_value / DEGREES - return self.angle_value + return self.angle_value / DEGREES if degrees else self.angle_value @staticmethod def from_three_points( - A: np.ndarray, B: np.ndarray, C: np.ndarray, **kwargs: Any + A: Point3D, + B: Point3D, + C: Point3D, + **kwargs ) -> Angle: """The angle between the lines AB and BC. @@ -1125,6 +1135,10 @@ def construct(self): """ def __init__( - self, line1: Line, line2: Line, length: float | None = None, **kwargs: Any + self, + line1: Line, + line2: Line, + length: float | None = None, + **kwargs ) -> None: super().__init__(line1, line2, radius=length, elbow=True, **kwargs) diff --git a/manim/mobject/geometry/polygram.py b/manim/mobject/geometry/polygram.py index 3c230133ea..8b9df5cfa9 100644 --- a/manim/mobject/geometry/polygram.py +++ b/manim/mobject/geometry/polygram.py @@ -15,7 +15,7 @@ "Cutout", ] -from typing import Iterable, Sequence +from typing import Iterable, Sequence, TYPE_CHECKING import numpy as np @@ -27,6 +27,9 @@ from manim.utils.iterables import adjacent_n_tuples, adjacent_pairs from manim.utils.space_ops import angle_between_vectors, normalize, regular_vertices +if TYPE_CHECKING: + from manim.utils.color import ParsableManimColor + from manim.typing import Point3D, Point3D_Array class Polygram(VMobject, metaclass=ConvertToOpenGL): """A generalized :class:`Polygon`, allowing for disconnected sets of edges. @@ -63,7 +66,7 @@ def construct(self): self.wait() """ - def __init__(self, *vertex_groups: Iterable[Sequence[float]], color=BLUE, **kwargs): + def __init__(self, *vertex_groups: Point3D, color: ParsableManimColor = BLUE, **kwargs): super().__init__(color=color, **kwargs) for vertices in vertex_groups: @@ -75,7 +78,7 @@ def __init__(self, *vertex_groups: Iterable[Sequence[float]], color=BLUE, **kwar [*(np.array(vertex) for vertex in vertices), first_vertex], ) - def get_vertices(self) -> np.ndarray: + def get_vertices(self) -> Point3D_Array: """Gets the vertices of the :class:`Polygram`. Returns @@ -97,7 +100,7 @@ def get_vertices(self) -> np.ndarray: return self.get_start_anchors() - def get_vertex_groups(self) -> np.ndarray: + def get_vertex_groups(self) -> np.ndarray[Point3D_Array]: """Gets the vertex groups of the :class:`Polygram`. Returns @@ -132,7 +135,7 @@ def get_vertex_groups(self) -> np.ndarray: return np.array(vertex_groups) - def round_corners(self, radius: float = 0.5): + def round_corners(self, radius: float = 0.5) -> Self: """Rounds off the corners of the :class:`Polygram`. Parameters @@ -242,7 +245,7 @@ def construct(self): self.add(isosceles, square_and_triangles) """ - def __init__(self, *vertices: Sequence[float], **kwargs): + def __init__(self, *vertices: Point3D, **kwargs) -> None: super().__init__(vertices, **kwargs) @@ -286,7 +289,7 @@ def __init__( radius: float = 1, start_angle: float | None = None, **kwargs, - ): + ) -> None: # Regular polygrams can be expressed by the number of their vertices # and their density. This relation can be expressed as its Schläfli # symbol: {num_vertices/density}. @@ -362,7 +365,7 @@ def construct(self): self.add(poly_group) """ - def __init__(self, n: int = 6, **kwargs): + def __init__(self, n: int = 6, **kwargs) -> None: super().__init__(n, density=1, **kwargs) @@ -434,7 +437,7 @@ def __init__( density: int = 2, start_angle: float | None = TAU / 4, **kwargs, - ): + ) -> None: inner_angle = TAU / (2 * n) if inner_radius is None: @@ -493,7 +496,7 @@ def construct(self): self.add(tri_group) """ - def __init__(self, **kwargs): + def __init__(self, **kwargs) -> None: super().__init__(n=3, **kwargs) @@ -603,7 +606,7 @@ def construct(self): self.add(square_1, square_2, square_3) """ - def __init__(self, side_length: float = 2.0, **kwargs): + def __init__(self, side_length: float = 2.0, **kwargs) -> None: self.side_length = side_length super().__init__(height=side_length, width=side_length, **kwargs) @@ -632,7 +635,7 @@ def construct(self): self.add(rect_group) """ - def __init__(self, corner_radius: float = 0.5, **kwargs): + def __init__(self, corner_radius: float = 0.5, **kwargs) -> None: super().__init__(**kwargs) self.corner_radius = corner_radius self.round_corners(self.corner_radius) @@ -673,7 +676,7 @@ def construct(self): self.wait() """ - def __init__(self, main_shape: VMobject, *mobjects: VMobject, **kwargs): + def __init__(self, main_shape: VMobject, *mobjects: VMobject, **kwargs) -> None: super().__init__(**kwargs) self.append_points(main_shape.points) if main_shape.get_direction() == "CW": diff --git a/manim/mobject/geometry/shape_matchers.py b/manim/mobject/geometry/shape_matchers.py index 9462b3c113..fd7cc85f86 100644 --- a/manim/mobject/geometry/shape_matchers.py +++ b/manim/mobject/geometry/shape_matchers.py @@ -4,13 +4,15 @@ __all__ = ["SurroundingRectangle", "BackgroundRectangle", "Cross", "Underline"] +from typing import Self, Any + from manim import config, logger from manim.constants import * from manim.mobject.geometry.line import Line from manim.mobject.geometry.polygram import RoundedRectangle from manim.mobject.mobject import Mobject from manim.mobject.types.vectorized_mobject import VGroup -from manim.utils.color import BLACK, RED, YELLOW, ParsableManimColor +from manim.utils.color import BLACK, RED, YELLOW, ParsableManimColor, ManimColor class SurroundingRectangle(RoundedRectangle): @@ -38,8 +40,13 @@ def construct(self): """ def __init__( - self, mobject, color=YELLOW, buff=SMALL_BUFF, corner_radius=0.0, **kwargs - ): + self, + mobject: Mobject, + color: ParsableManimColor = YELLOW, + buff: float = SMALL_BUFF, + corner_radius: float = 0.0, + **kwargs + ) -> None: super().__init__( color=color, width=mobject.width + 2 * buff, @@ -78,7 +85,7 @@ def construct(self): def __init__( self, - mobject, + mobject: Mobject, color: ParsableManimColor | None = None, stroke_width: float = 0, stroke_opacity: float = 0, @@ -98,13 +105,13 @@ def __init__( buff=buff, **kwargs, ) - self.original_fill_opacity = self.fill_opacity + self.original_fill_opacity: float = self.fill_opacity - def pointwise_become_partial(self, mobject, a, b): + def pointwise_become_partial(self, mobject: Mobject, a: Any, b: float) -> Self: self.set_fill(opacity=b * self.original_fill_opacity) return self - def set_style(self, fill_opacity, **kwargs): + def set_style(self, fill_opacity: float, **kwargs) -> Self: # Unchangeable style, except for fill_opacity # All other style arguments are ignored super().set_style( @@ -120,7 +127,7 @@ def set_style(self, fill_opacity, **kwargs): ) return self - def get_fill_color(self): + def get_fill_color(self) -> ManimColor: return self.color @@ -153,10 +160,10 @@ def __init__( self, mobject: Mobject | None = None, stroke_color: ParsableManimColor = RED, - stroke_width: float = 6, - scale_factor: float = 1, + stroke_width: float = 6.0, + scale_factor: float = 1.0, **kwargs, - ): + ) -> None: super().__init__( Line(UP + LEFT, DOWN + RIGHT), Line(UP + RIGHT, DOWN + LEFT), **kwargs ) @@ -181,7 +188,7 @@ def construct(self): self.add(man, ul) """ - def __init__(self, mobject, buff=SMALL_BUFF, **kwargs): + def __init__(self, mobject: Mobject, buff: float = SMALL_BUFF, **kwargs) -> None: super().__init__(LEFT, RIGHT, buff=buff, **kwargs) self.match_width(mobject) self.next_to(mobject, DOWN, buff=self.buff) diff --git a/manim/mobject/geometry/tips.py b/manim/mobject/geometry/tips.py index b25a5a5380..7a2f48393f 100644 --- a/manim/mobject/geometry/tips.py +++ b/manim/mobject/geometry/tips.py @@ -12,6 +12,8 @@ import numpy as np +from typing import TYPE_CHECKING + from manim.constants import * from manim.mobject.geometry.arc import Circle from manim.mobject.geometry.polygram import Square, Triangle @@ -19,6 +21,8 @@ from manim.mobject.types.vectorized_mobject import VMobject from manim.utils.space_ops import angle_of_vector +if TYPE_CHECKING: + from manim.typing import Point3D, Vector class ArrowTip(VMobject, metaclass=ConvertToOpenGL): r"""Base class for arrow tips. @@ -91,11 +95,11 @@ def construct(self): """ - def __init__(self, *args, **kwargs): + def __init__(self, *args, **kwargs) -> None: raise NotImplementedError("Has to be implemented in inheriting subclasses.") @property - def base(self): + def base(self) -> Point3D: r"""The base point of the arrow tip. This is the point connecting to the arrow line. @@ -113,7 +117,7 @@ def base(self): return self.point_from_proportion(0.5) @property - def tip_point(self): + def tip_point(self) -> Point3D: r"""The tip point of the arrow tip. Examples @@ -129,7 +133,7 @@ def tip_point(self): return self.points[0] @property - def vector(self): + def vector(self) -> Vector: r"""The vector pointing from the base point to the tip point. Examples @@ -145,7 +149,7 @@ def vector(self): return self.tip_point - self.base @property - def tip_angle(self): + def tip_angle(self) -> float: r"""The angle of the arrow tip. Examples @@ -161,7 +165,7 @@ def tip_angle(self): return angle_of_vector(self.vector) @property - def length(self): + def length(self) -> np.floating: r"""The length of the arrow tip. Examples @@ -182,13 +186,13 @@ class ArrowTriangleTip(ArrowTip, Triangle): def __init__( self, - fill_opacity=0, - stroke_width=3, - length=DEFAULT_ARROW_TIP_LENGTH, - width=DEFAULT_ARROW_TIP_LENGTH, - start_angle=PI, + fill_opacity: float = 0, + stroke_width: float = 3, + length: float = DEFAULT_ARROW_TIP_LENGTH, + width: float = DEFAULT_ARROW_TIP_LENGTH, + start_angle: float = PI, **kwargs, - ): + ) -> None: Triangle.__init__( self, fill_opacity=fill_opacity, @@ -208,7 +212,7 @@ class ArrowTriangleFilledTip(ArrowTriangleTip): This is the default arrow tip shape. """ - def __init__(self, fill_opacity=1, stroke_width=0, **kwargs): + def __init__(self, fill_opacity: float = 1, stroke_width: float = 0, **kwargs) -> None: super().__init__(fill_opacity=fill_opacity, stroke_width=stroke_width, **kwargs) @@ -217,12 +221,12 @@ class ArrowCircleTip(ArrowTip, Circle): def __init__( self, - fill_opacity=0, - stroke_width=3, - length=DEFAULT_ARROW_TIP_LENGTH, - start_angle=PI, + fill_opacity: float = 0, + stroke_width: float = 3, + length: float = DEFAULT_ARROW_TIP_LENGTH, + start_angle: float = PI, **kwargs, - ): + ) -> None: self.start_angle = start_angle Circle.__init__( self, fill_opacity=fill_opacity, stroke_width=stroke_width, **kwargs @@ -234,7 +238,7 @@ def __init__( class ArrowCircleFilledTip(ArrowCircleTip): r"""Circular arrow tip with filled tip.""" - def __init__(self, fill_opacity=1, stroke_width=0, **kwargs): + def __init__(self, fill_opacity: float = 1, stroke_width: float = 0, **kwargs) -> None: super().__init__(fill_opacity=fill_opacity, stroke_width=stroke_width, **kwargs) @@ -243,12 +247,12 @@ class ArrowSquareTip(ArrowTip, Square): def __init__( self, - fill_opacity=0, - stroke_width=3, - length=DEFAULT_ARROW_TIP_LENGTH, - start_angle=PI, + fill_opacity: float = 0, + stroke_width: float = 3, + length: float = DEFAULT_ARROW_TIP_LENGTH, + start_angle: float = PI, **kwargs, - ): + ) -> None: self.start_angle = start_angle Square.__init__( self, @@ -264,5 +268,5 @@ def __init__( class ArrowSquareFilledTip(ArrowSquareTip): r"""Square arrow tip with filled tip.""" - def __init__(self, fill_opacity=1, stroke_width=0, **kwargs): + def __init__(self, fill_opacity: float = 1, stroke_width: float = 0, **kwargs) -> None: super().__init__(fill_opacity=fill_opacity, stroke_width=stroke_width, **kwargs) diff --git a/manim/typing.py b/manim/typing.py index d9d583b245..ed107aa263 100644 --- a/manim/typing.py +++ b/manim/typing.py @@ -1,4 +1,4 @@ -from typing import Callable, Tuple, TYPE_CHECKING, TypeAlias +from typing import Callable, Tuple, TYPE_CHECKING, TypeAlias, Union import numpy as np import numpy.typing as npt @@ -54,8 +54,14 @@ FlatBezierPoints: TypeAlias = npt.NDArray[PointDType] """ `shape: (N)` An Array of Bezier Handles but flattened `[float,...]`.""" +Point2D_Array: TypeAlias = npt.NDArray[PointDType] +""" `shape: (N,2)` An Array of Points in 2D Space `[[float,float],...]`. + +(Please refer to the documentation of the function you are using for further type Information) +""" + Point3D_Array: TypeAlias = npt.NDArray[PointDType] -""" `shape: (N,3)` An Array Points in 3D Space `[[float,float,float],...]`. +""" `shape: (N,3)` An Array of Points in 3D Space `[[float,float,float],...]`. (Please refer to the documentation of the function you are using for further type Information) """ From 17ce6472cf55f4295e852fec228737d752067301 Mon Sep 17 00:00:00 2001 From: JasonGrace2282 Date: Thu, 10 Aug 2023 16:24:41 -0400 Subject: [PATCH 42/91] math.cos->np.cos, etc & fixed incorrect typehints --- manim/mobject/mobject.py | 12 +++++------- manim/mobject/types/vectorized_mobject.py | 4 ++-- manim/utils/space_ops.py | 5 ++--- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index cb83e3783d..e05a44ee56 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -13,7 +13,6 @@ import types import warnings from functools import partialmethod, reduce -from math import ceil from pathlib import Path from typing import ( TYPE_CHECKING, @@ -21,8 +20,7 @@ Iterable, TypeVar, Literal, - Self, - Never + Self ) import numpy as np @@ -2324,15 +2322,15 @@ def init_size(num, alignments, sizes): # calculate rows cols if rows is None and cols is None: - cols = ceil(np.sqrt(len(mobs))) + cols = np.ceil(np.sqrt(len(mobs))) # make the grid as close to quadratic as possible. # choosing cols first can results in cols>rows. # This is favored over rows>cols since in general # the sceene is wider than high. if rows is None: - rows = ceil(len(mobs) / cols) + rows = np.ceil(len(mobs) / cols) if cols is None: - cols = ceil(len(mobs) / rows) + cols = np.ceil(len(mobs) / rows) if rows * cols < len(mobs): raise ValueError("Too few rows and columns to fit all submobjetcs.") # rows and cols are now finally valid. @@ -2756,7 +2754,7 @@ def construct(self): return self # Errors - def throw_error_if_no_points(self) -> None | Never: + def throw_error_if_no_points(self) -> None: if self.has_no_points(): caller_name = sys._getframe(1).f_code.co_name raise Exception( diff --git a/manim/mobject/types/vectorized_mobject.py b/manim/mobject/types/vectorized_mobject.py index e74a8a43b3..97027af1d0 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -648,8 +648,8 @@ def set_shade_in_3d(self, value: bool = True, z_index_as_group: bool = False) -> submob.z_index_group = self return self - def set_points(self, points: Iterable[Point3D]) -> Self: - self.points = np.array(points) + def set_points(self, points: Point3D_Array) -> Self: + self.points: Point3D_Array = np.array(points) return self def resize_points( diff --git a/manim/utils/space_ops.py b/manim/utils/space_ops.py index 3f0441ec4b..bfd89c2bb7 100644 --- a/manim/utils/space_ops.py +++ b/manim/utils/space_ops.py @@ -39,7 +39,6 @@ import itertools as it -import math from typing import Sequence import numpy as np @@ -127,7 +126,7 @@ def quaternion_from_angle_axis( if config.renderer == RendererType.OPENGL: if not axis_normalized: axis = normalize(axis) - return [math.cos(angle / 2), *(math.sin(angle / 2) * axis)] + return [np.cos(angle / 2), *(np.sin(angle / 2) * axis)] elif config.renderer == RendererType.CAIRO: return np.append(np.cos(angle / 2), np.sin(angle / 2) * normalize(axis)) @@ -277,7 +276,7 @@ def rotation_about_z(angle: float) -> np.ndarray: np.ndarray Gives back the rotated matrix. """ - c, s = math.cos(angle), math.sin(angle) + c, s = np.cos(angle), np.sin(angle) return np.array( [ [c, -s, 0], From 2a71462f63f1eb8b91af3c1b1fbf252622bb8353 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 11 Aug 2023 01:15:49 +0000 Subject: [PATCH 43/91] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- manim/mobject/three_d/three_d_utils.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/manim/mobject/three_d/three_d_utils.py b/manim/mobject/three_d/three_d_utils.py index 04dc1e6033..ec3af9ac05 100644 --- a/manim/mobject/three_d/three_d_utils.py +++ b/manim/mobject/three_d/three_d_utils.py @@ -14,8 +14,9 @@ ] +from typing import TYPE_CHECKING, Literal + import numpy as np -from typing import Literal, TYPE_CHECKING from manim.constants import ORIGIN, UP from manim.utils.space_ops import get_unit_normal From 8a149ca801325c00fb68bb704c71c44199f8331c Mon Sep 17 00:00:00 2001 From: MrDiver Date: Fri, 11 Aug 2023 03:22:07 +0200 Subject: [PATCH 44/91] fix missing annotations import --- manim/typing.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/manim/typing.py b/manim/typing.py index d4f0c92a2a..5169a1e4a9 100644 --- a/manim/typing.py +++ b/manim/typing.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from typing import TYPE_CHECKING, Callable, Tuple, TypeAlias, Union import numpy as np From 6987498d503e9a84e881b78a98de1dd57a7570bb Mon Sep 17 00:00:00 2001 From: MrDiver Date: Fri, 11 Aug 2023 03:27:09 +0200 Subject: [PATCH 45/91] TypeAlias fix in typing.py --- manim/typing.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/manim/typing.py b/manim/typing.py index 5169a1e4a9..18d8f00817 100644 --- a/manim/typing.py +++ b/manim/typing.py @@ -1,6 +1,7 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Callable, Tuple, TypeAlias, Union +from typing import TYPE_CHECKING, Callable, Tuple, Union +from typing_extensions import TypeAlias import numpy as np import numpy.typing as npt From 90260152f5ed768a86bddf2fa5eda946bcbea576 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 11 Aug 2023 01:27:52 +0000 Subject: [PATCH 46/91] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- manim/typing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/typing.py b/manim/typing.py index 18d8f00817..1126b9fc52 100644 --- a/manim/typing.py +++ b/manim/typing.py @@ -1,10 +1,10 @@ from __future__ import annotations from typing import TYPE_CHECKING, Callable, Tuple, Union -from typing_extensions import TypeAlias import numpy as np import numpy.typing as npt +from typing_extensions import TypeAlias if TYPE_CHECKING: from .animation.animation import Animation From 51922d17a151c37f2e3e26594168d65017eb36de Mon Sep 17 00:00:00 2001 From: MrDiver Date: Fri, 11 Aug 2023 03:31:26 +0200 Subject: [PATCH 47/91] Add ignore errors again to mypy because commits are not possible like this --- .mypy.ini | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.mypy.ini b/.mypy.ini index 8e57ddf1b5..410af35905 100644 --- a/.mypy.ini +++ b/.mypy.ini @@ -56,8 +56,11 @@ ignore_errors = False [mypy-manim.utils.color] ignore_errors = False -[mypy-manim.utils] -ignore_errors = False +[mypy-manim.utils.*] +ignore_errors = True + +[mypy-manim._config.*] +ignore_errors = True [mypy-manim.utils.bezier] ignore_errors = False From 106774df05e5ef8540065956c578617d1a4816ae Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Fri, 22 Sep 2023 18:55:18 +0200 Subject: [PATCH 48/91] Fix last typing issues --- .mypy.ini | 39 +- .pre-commit-config.yaml | 2 +- manim/typing.py | 17 +- manim/utils/color/core.py | 34 +- manim/utils/color/manim_colors.py | 162 +-- poetry.lock | 1832 +++++++++++++---------------- pyproject.toml | 5 - 7 files changed, 978 insertions(+), 1113 deletions(-) diff --git a/.mypy.ini b/.mypy.ini index 410af35905..6d058cac42 100644 --- a/.mypy.ini +++ b/.mypy.ini @@ -2,7 +2,7 @@ strict = False python_version = 3.10 ; plugins = numpy.typing.mypy_plugin -ignore_errors = True +ignore_errors = False cache_fine_grained = True use_fine_grained_cache = True @@ -47,45 +47,43 @@ warn_return_any = True # # disable_recursive_aliases = True -[mypy-manim.typing] -ignore_errors = False +[mypy-manim._config.*] +ignore_errors = True -[mypy-manim.constants] -ignore_errors = False +[mypy-manim.animation.*] +ignore_errors = True -[mypy-manim.utils.color] -ignore_errors = False +[mypy-manim.camera.*] +ignore_errors = True -[mypy-manim.utils.*] +[mypy-manim.cli.*] ignore_errors = True -[mypy-manim._config.*] +[mypy-manim.cli.cfg.*] ignore_errors = True -[mypy-manim.utils.bezier] -ignore_errors = False +[mypy-manim.gui.*] +ignore_errors = True -[mypy-manim.scene.*] +[mypy-manim.mobject.*] ignore_errors = True -[mypy-manim.cli.cfg.*] +[mypy-manim.plugins.*] ignore_errors = True -[mypy-manim.mobject.*] +[mypy-manim.renderer.*] ignore_errors = True -[mypy-manim._config.*] +[mypy-manim.scene.*] ignore_errors = True [mypy-manim.utils.*] ignore_errors = True -[mypy-manim.utils.color] -ignore_errors = False - -[mypy-manim.animation.*] +[mypy-manim.__main__] ignore_errors = True + # ---------------- We can't properly type this ------------------------ [mypy-manim.grpc.*] @@ -119,9 +117,6 @@ ignore_missing_imports = True [mypy-moderngl_window.*] ignore_missing_imports = True -[mypy-colour] -ignore_missing_imports = True - [mypy-dearpygui.*] ignore_missing_imports = True diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 225996766b..9b25dc9e72 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -58,7 +58,7 @@ repos: flake8-simplify==0.14.1, ] - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.4.1 + rev: v1.5.1 hooks: - id: mypy additional_dependencies: diff --git a/manim/typing.py b/manim/typing.py index 1126b9fc52..efa53568d1 100644 --- a/manim/typing.py +++ b/manim/typing.py @@ -1,14 +1,12 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Callable, Tuple, Union +from typing import Callable +from os import PathLike import numpy as np import numpy.typing as npt from typing_extensions import TypeAlias -if TYPE_CHECKING: - from .animation.animation import Animation - # Color Types ManimFloat: TypeAlias = np.float64 @@ -16,16 +14,16 @@ ManimColorDType: TypeAlias = ManimFloat RGB_Array_Float: TypeAlias = npt.NDArray[ManimFloat] -RGB_Tuple_Float: TypeAlias = Tuple[float, float, float] +RGB_Tuple_Float: TypeAlias = tuple[float, float, float] RGB_Array_Int: TypeAlias = npt.NDArray[ManimInt] -RGB_Tuple_Int: TypeAlias = Tuple[int, int, int] +RGB_Tuple_Int: TypeAlias = tuple[int, int, int] RGBA_Array_Float: TypeAlias = npt.NDArray[ManimFloat] -RGBA_Tuple_Float: TypeAlias = Tuple[float, float, float, float] +RGBA_Tuple_Float: TypeAlias = tuple[float, float, float, float] RGBA_Array_Int: TypeAlias = npt.NDArray[ManimInt] -RGBA_Tuple_Int: TypeAlias = Tuple[int, int, int, int] +RGBA_Tuple_Int: TypeAlias = tuple[int, int, int, int] HSV_Array_Float: TypeAlias = RGB_Array_Float HSV_Tuple_Float: TypeAlias = RGB_Tuple_Float @@ -111,3 +109,6 @@ Image: TypeAlias = np.ndarray """An Image""" + +StrPath: TypeAlias = str | PathLike[str] +StrOrBytesPath: TypeAlias = str | bytes | PathLike[str] | PathLike[bytes] diff --git a/manim/utils/color/core.py b/manim/utils/color/core.py index de3a3eb6bf..6265a609fc 100644 --- a/manim/utils/color/core.py +++ b/manim/utils/color/core.py @@ -156,10 +156,10 @@ def named_lines_group(length, colors, names, text_colors, align_to_block): # logger = _config.logger import random import re -from typing import Any, Sequence, Union +from typing import Any, Sequence, Union, overload import numpy as np -from typing_extensions import TypeAlias +from typing_extensions import Self, TypeAlias from manim.typing import ( HSV_Array_Float, @@ -223,7 +223,7 @@ class ManimColor: def __init__( self, - value: ParsableManimColor, + value: ParsableManimColor | None, alpha: float = 1.0, ) -> None: if value is None: @@ -654,7 +654,7 @@ def from_rgb( cls, rgb: RGB_Array_Float | RGB_Tuple_Float | RGB_Array_Int | RGB_Tuple_Int, alpha: float = 1.0, - ) -> ManimColor: + ) -> Self: """Creates a ManimColor from an RGB Array. Automagically decides which type it is int/float .. warning:: @@ -679,7 +679,7 @@ def from_rgb( @classmethod def from_rgba( cls, rgba: RGBA_Array_Float | RGBA_Tuple_Float | RGBA_Array_Int | RGBA_Tuple_Int - ) -> ManimColor: + ) -> Self: """Creates a ManimColor from an RGBA Array. Automagically decides which type it is int/float .. warning:: @@ -699,7 +699,7 @@ def from_rgba( return cls(rgba) @classmethod - def from_hex(cls, hex: str, alpha: float = 1.0) -> ManimColor: + def from_hex(cls, hex: str, alpha: float = 1.0) -> Self: """Creates a Manim Color from a hex string, prefixes allowed # and 0x Parameters @@ -719,7 +719,7 @@ def from_hex(cls, hex: str, alpha: float = 1.0) -> ManimColor: @classmethod def from_hsv( cls, hsv: HSV_Array_Float | HSV_Tuple_Float, alpha: float = 1.0 - ) -> ManimColor: + ) -> Self: """Creates a ManimColor from an HSV Array Parameters @@ -737,12 +737,30 @@ def from_hsv( rgb = colorsys.hsv_to_rgb(*hsv) return cls(rgb, alpha) + @overload + @classmethod + def parse( + cls, + color: ParsableManimColor | None, + alpha: float = ..., + ) -> Self: + ... + + @overload + @classmethod + def parse( + cls, + color: Sequence[ParsableManimColor], + alpha: float = ..., + ) -> list[Self]: + ... + @classmethod def parse( cls, color: ParsableManimColor | list[ParsableManimColor] | None, alpha: float = 1.0, - ) -> ManimColor | list[ManimColor]: + ) -> Self | list[Self]: """ Handles the parsing of a list of colors or a single color. diff --git a/manim/utils/color/manim_colors.py b/manim/utils/color/manim_colors.py index f36925e035..42c93985e6 100644 --- a/manim/utils/color/manim_colors.py +++ b/manim/utils/color/manim_colors.py @@ -125,87 +125,87 @@ def named_lines_group(length, colors, names, text_colors, align_to_block): from .core import ManimColor -WHITE: ManimColor = ManimColor("#FFFFFF") -GRAY_A: ManimColor = ManimColor("#DDDDDD") -GREY_A: ManimColor = ManimColor("#DDDDDD") -GRAY_B: ManimColor = ManimColor("#BBBBBB") -GREY_B: ManimColor = ManimColor("#BBBBBB") -GRAY_C: ManimColor = ManimColor("#888888") -GREY_C: ManimColor = ManimColor("#888888") -GRAY_D: ManimColor = ManimColor("#444444") -GREY_D: ManimColor = ManimColor("#444444") -GRAY_E: ManimColor = ManimColor("#222222") -GREY_E: ManimColor = ManimColor("#222222") -BLACK: ManimColor = ManimColor("#000000") -LIGHTER_GRAY: ManimColor = ManimColor("#DDDDDD") -LIGHTER_GREY: ManimColor = ManimColor("#DDDDDD") -LIGHT_GRAY: ManimColor = ManimColor("#BBBBBB") -LIGHT_GREY: ManimColor = ManimColor("#BBBBBB") -GRAY: ManimColor = ManimColor("#888888") -GREY: ManimColor = ManimColor("#888888") -DARK_GRAY: ManimColor = ManimColor("#444444") -DARK_GREY: ManimColor = ManimColor("#444444") -DARKER_GRAY: ManimColor = ManimColor("#222222") -DARKER_GREY: ManimColor = ManimColor("#222222") -BLUE_A: ManimColor = ManimColor("#C7E9F1") -BLUE_B: ManimColor = ManimColor("#9CDCEB") -BLUE_C: ManimColor = ManimColor("#58C4DD") -BLUE_D: ManimColor = ManimColor("#29ABCA") -BLUE_E: ManimColor = ManimColor("#236B8E") -PURE_BLUE: ManimColor = ManimColor("#0000FF") -BLUE: ManimColor = ManimColor("#58C4DD") -DARK_BLUE: ManimColor = ManimColor("#236B8E") -TEAL_A: ManimColor = ManimColor("#ACEAD7") -TEAL_B: ManimColor = ManimColor("#76DDC0") -TEAL_C: ManimColor = ManimColor("#5CD0B3") -TEAL_D: ManimColor = ManimColor("#55C1A7") -TEAL_E: ManimColor = ManimColor("#49A88F") -TEAL: ManimColor = ManimColor("#5CD0B3") -GREEN_A: ManimColor = ManimColor("#C9E2AE") -GREEN_B: ManimColor = ManimColor("#A6CF8C") -GREEN_C: ManimColor = ManimColor("#83C167") -GREEN_D: ManimColor = ManimColor("#77B05D") -GREEN_E: ManimColor = ManimColor("#699C52") -PURE_GREEN: ManimColor = ManimColor("#00FF00") -GREEN: ManimColor = ManimColor("#83C167") -YELLOW_A: ManimColor = ManimColor("#FFF1B6") -YELLOW_B: ManimColor = ManimColor("#FFEA94") -YELLOW_C: ManimColor = ManimColor("#FFFF00") -YELLOW_D: ManimColor = ManimColor("#F4D345") -YELLOW_E: ManimColor = ManimColor("#E8C11C") -YELLOW: ManimColor = ManimColor("#FFFF00") -GOLD_A: ManimColor = ManimColor("#F7C797") -GOLD_B: ManimColor = ManimColor("#F9B775") -GOLD_C: ManimColor = ManimColor("#F0AC5F") -GOLD_D: ManimColor = ManimColor("#E1A158") -GOLD_E: ManimColor = ManimColor("#C78D46") -GOLD: ManimColor = ManimColor("#F0AC5F") -RED_A: ManimColor = ManimColor("#F7A1A3") -RED_B: ManimColor = ManimColor("#FF8080") -RED_C: ManimColor = ManimColor("#FC6255") -RED_D: ManimColor = ManimColor("#E65A4C") -RED_E: ManimColor = ManimColor("#CF5044") -PURE_RED: ManimColor = ManimColor("#FF0000") -RED: ManimColor = ManimColor("#FC6255") -MAROON_A: ManimColor = ManimColor("#ECABC1") -MAROON_B: ManimColor = ManimColor("#EC92AB") -MAROON_C: ManimColor = ManimColor("#C55F73") -MAROON_D: ManimColor = ManimColor("#A24D61") -MAROON_E: ManimColor = ManimColor("#94424F") -MAROON: ManimColor = ManimColor("#C55F73") -PURPLE_A: ManimColor = ManimColor("#CAA3E8") -PURPLE_B: ManimColor = ManimColor("#B189C6") -PURPLE_C: ManimColor = ManimColor("#9A72AC") -PURPLE_D: ManimColor = ManimColor("#715582") -PURPLE_E: ManimColor = ManimColor("#644172") -PURPLE: ManimColor = ManimColor("#9A72AC") -PINK: ManimColor = ManimColor("#D147BD") -LIGHT_PINK: ManimColor = ManimColor("#DC75CD") -ORANGE: ManimColor = ManimColor("#FF862F") -LIGHT_BROWN: ManimColor = ManimColor("#CD853F") -DARK_BROWN: ManimColor = ManimColor("#8B4513") -GRAY_BROWN: ManimColor = ManimColor("#736357") -GREY_BROWN: ManimColor = ManimColor("#736357") +WHITE = ManimColor("#FFFFFF") +GRAY_A = ManimColor("#DDDDDD") +GREY_A = ManimColor("#DDDDDD") +GRAY_B = ManimColor("#BBBBBB") +GREY_B = ManimColor("#BBBBBB") +GRAY_C = ManimColor("#888888") +GREY_C = ManimColor("#888888") +GRAY_D = ManimColor("#444444") +GREY_D = ManimColor("#444444") +GRAY_E = ManimColor("#222222") +GREY_E = ManimColor("#222222") +BLACK = ManimColor("#000000") +LIGHTER_GRAY = ManimColor("#DDDDDD") +LIGHTER_GREY = ManimColor("#DDDDDD") +LIGHT_GRAY = ManimColor("#BBBBBB") +LIGHT_GREY = ManimColor("#BBBBBB") +GRAY = ManimColor("#888888") +GREY = ManimColor("#888888") +DARK_GRAY = ManimColor("#444444") +DARK_GREY = ManimColor("#444444") +DARKER_GRAY = ManimColor("#222222") +DARKER_GREY = ManimColor("#222222") +BLUE_A = ManimColor("#C7E9F1") +BLUE_B = ManimColor("#9CDCEB") +BLUE_C = ManimColor("#58C4DD") +BLUE_D = ManimColor("#29ABCA") +BLUE_E = ManimColor("#236B8E") +PURE_BLUE = ManimColor("#0000FF") +BLUE = ManimColor("#58C4DD") +DARK_BLUE = ManimColor("#236B8E") +TEAL_A = ManimColor("#ACEAD7") +TEAL_B = ManimColor("#76DDC0") +TEAL_C = ManimColor("#5CD0B3") +TEAL_D = ManimColor("#55C1A7") +TEAL_E = ManimColor("#49A88F") +TEAL = ManimColor("#5CD0B3") +GREEN_A = ManimColor("#C9E2AE") +GREEN_B = ManimColor("#A6CF8C") +GREEN_C = ManimColor("#83C167") +GREEN_D = ManimColor("#77B05D") +GREEN_E = ManimColor("#699C52") +PURE_GREEN = ManimColor("#00FF00") +GREEN = ManimColor("#83C167") +YELLOW_A = ManimColor("#FFF1B6") +YELLOW_B = ManimColor("#FFEA94") +YELLOW_C = ManimColor("#FFFF00") +YELLOW_D = ManimColor("#F4D345") +YELLOW_E = ManimColor("#E8C11C") +YELLOW = ManimColor("#FFFF00") +GOLD_A = ManimColor("#F7C797") +GOLD_B = ManimColor("#F9B775") +GOLD_C = ManimColor("#F0AC5F") +GOLD_D = ManimColor("#E1A158") +GOLD_E = ManimColor("#C78D46") +GOLD = ManimColor("#F0AC5F") +RED_A = ManimColor("#F7A1A3") +RED_B = ManimColor("#FF8080") +RED_C = ManimColor("#FC6255") +RED_D = ManimColor("#E65A4C") +RED_E = ManimColor("#CF5044") +PURE_RED = ManimColor("#FF0000") +RED = ManimColor("#FC6255") +MAROON_A = ManimColor("#ECABC1") +MAROON_B = ManimColor("#EC92AB") +MAROON_C = ManimColor("#C55F73") +MAROON_D = ManimColor("#A24D61") +MAROON_E = ManimColor("#94424F") +MAROON = ManimColor("#C55F73") +PURPLE_A = ManimColor("#CAA3E8") +PURPLE_B = ManimColor("#B189C6") +PURPLE_C = ManimColor("#9A72AC") +PURPLE_D = ManimColor("#715582") +PURPLE_E = ManimColor("#644172") +PURPLE = ManimColor("#9A72AC") +PINK = ManimColor("#D147BD") +LIGHT_PINK = ManimColor("#DC75CD") +ORANGE = ManimColor("#FF862F") +LIGHT_BROWN = ManimColor("#CD853F") +DARK_BROWN = ManimColor("#8B4513") +GRAY_BROWN = ManimColor("#736357") +GREY_BROWN = ManimColor("#736357") # Colors used for Manim Community's logo and banner diff --git a/poetry.lock b/poetry.lock index d60391e95b..2aa4fa09e4 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,9 @@ -# This file is automatically @generated by Poetry and should not be changed by hand. +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. [[package]] name = "aiofiles" version = "22.1.0" description = "File support for asyncio." -category = "main" optional = true python-versions = ">=3.7,<4.0" files = [ @@ -16,7 +15,6 @@ files = [ name = "aiosqlite" version = "0.19.0" description = "asyncio bridge to the standard sqlite3 module" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -32,7 +30,6 @@ docs = ["sphinx (==6.1.3)", "sphinx-mdinclude (==0.5.3)"] name = "alabaster" version = "0.7.13" description = "A configurable sidebar-enabled Sphinx theme" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -42,31 +39,29 @@ files = [ [[package]] name = "anyio" -version = "3.7.1" +version = "4.0.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" -category = "main" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"}, - {file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"}, + {file = "anyio-4.0.0-py3-none-any.whl", hash = "sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f"}, + {file = "anyio-4.0.0.tar.gz", hash = "sha256:f7ed51751b2c2add651e5747c891b47e26d2a21be5d32d9311dfe9692f3e5d7a"}, ] [package.dependencies] -exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} idna = ">=2.8" sniffio = ">=1.1" [package.extras] -doc = ["Sphinx", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme (>=1.2.2)", "sphinxcontrib-jquery"] -test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] -trio = ["trio (<0.22)"] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (>=0.22)"] [[package]] name = "appnope" version = "0.1.3" description = "Disable App Nap on macOS >= 10.9" -category = "main" optional = true python-versions = "*" files = [ @@ -76,29 +71,28 @@ files = [ [[package]] name = "argon2-cffi" -version = "21.3.0" -description = "The secure Argon2 password hashing algorithm." -category = "main" +version = "23.1.0" +description = "Argon2 for Python" optional = true -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "argon2-cffi-21.3.0.tar.gz", hash = "sha256:d384164d944190a7dd7ef22c6aa3ff197da12962bd04b17f64d4e93d934dba5b"}, - {file = "argon2_cffi-21.3.0-py3-none-any.whl", hash = "sha256:8c976986f2c5c0e5000919e6de187906cfd81fb1c72bf9d88c01177e77da7f80"}, + {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"}, + {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"}, ] [package.dependencies] argon2-cffi-bindings = "*" [package.extras] -dev = ["cogapp", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "pre-commit", "pytest", "sphinx", "sphinx-notfound-page", "tomli"] -docs = ["furo", "sphinx", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] +dev = ["argon2-cffi[tests,typing]", "tox (>4)"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-notfound-page"] +tests = ["hypothesis", "pytest"] +typing = ["mypy"] [[package]] name = "argon2-cffi-bindings" version = "21.2.0" description = "Low-level CFFI bindings for Argon2" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -136,7 +130,6 @@ tests = ["pytest"] name = "arrow" version = "1.2.3" description = "Better dates & times for Python" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -151,7 +144,6 @@ python-dateutil = ">=2.7.0" 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 = [ @@ -163,7 +155,6 @@ files = [ name = "astroid" version = "2.15.6" description = "An abstract syntax tree for Python with inference support." -category = "dev" optional = false python-versions = ">=3.7.2" files = [ @@ -181,18 +172,17 @@ wrapt = [ [[package]] name = "asttokens" -version = "2.2.1" +version = "2.4.0" description = "Annotate AST trees with source code positions" -category = "main" optional = true python-versions = "*" files = [ - {file = "asttokens-2.2.1-py2.py3-none-any.whl", hash = "sha256:6b0ac9e93fb0335014d382b8fa9b3afa7df546984258005da0b9e7095b3deb1c"}, - {file = "asttokens-2.2.1.tar.gz", hash = "sha256:4622110b2a6f30b77e1473affaa97e711bc2f07d3f10848420ff1898edbe94f3"}, + {file = "asttokens-2.4.0-py2.py3-none-any.whl", hash = "sha256:cf8fc9e61a86461aa9fb161a14a0841a03c405fa829ac6b202670b3495d2ce69"}, + {file = "asttokens-2.4.0.tar.gz", hash = "sha256:2e0171b991b2c959acc6c49318049236844a5da1d65ba2672c4880c1c894834e"}, ] [package.dependencies] -six = "*" +six = ">=1.12.0" [package.extras] test = ["astroid", "pytest"] @@ -201,7 +191,6 @@ test = ["astroid", "pytest"] name = "attrs" version = "23.1.0" description = "Classes Without Boilerplate" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -220,7 +209,6 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte name = "babel" version = "2.12.1" description = "Internationalization utilities" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -235,7 +223,6 @@ pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} name = "backcall" version = "0.2.0" description = "Specifications for callback functions passed in to an API" -category = "main" optional = true python-versions = "*" files = [ @@ -247,7 +234,6 @@ files = [ name = "beautifulsoup4" version = "4.12.2" description = "Screen-scraping library" -category = "main" optional = false python-versions = ">=3.6.0" files = [ @@ -264,34 +250,33 @@ lxml = ["lxml"] [[package]] name = "black" -version = "23.7.0" +version = "23.9.1" description = "The uncompromising code formatter." -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "black-23.7.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:5c4bc552ab52f6c1c506ccae05681fab58c3f72d59ae6e6639e8885e94fe2587"}, - {file = "black-23.7.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:552513d5cd5694590d7ef6f46e1767a4df9af168d449ff767b13b084c020e63f"}, - {file = "black-23.7.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:86cee259349b4448adb4ef9b204bb4467aae74a386bce85d56ba4f5dc0da27be"}, - {file = "black-23.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:501387a9edcb75d7ae8a4412bb8749900386eaef258f1aefab18adddea1936bc"}, - {file = "black-23.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb074d8b213749fa1d077d630db0d5f8cc3b2ae63587ad4116e8a436e9bbe995"}, - {file = "black-23.7.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b5b0ee6d96b345a8b420100b7d71ebfdd19fab5e8301aff48ec270042cd40ac2"}, - {file = "black-23.7.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:893695a76b140881531062d48476ebe4a48f5d1e9388177e175d76234ca247cd"}, - {file = "black-23.7.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:c333286dc3ddca6fdff74670b911cccedacb4ef0a60b34e491b8a67c833b343a"}, - {file = "black-23.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:831d8f54c3a8c8cf55f64d0422ee875eecac26f5f649fb6c1df65316b67c8926"}, - {file = "black-23.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:7f3bf2dec7d541b4619b8ce526bda74a6b0bffc480a163fed32eb8b3c9aed8ad"}, - {file = "black-23.7.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:f9062af71c59c004cd519e2fb8f5d25d39e46d3af011b41ab43b9c74e27e236f"}, - {file = "black-23.7.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:01ede61aac8c154b55f35301fac3e730baf0c9cf8120f65a9cd61a81cfb4a0c3"}, - {file = "black-23.7.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:327a8c2550ddc573b51e2c352adb88143464bb9d92c10416feb86b0f5aee5ff6"}, - {file = "black-23.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1c6022b86f83b632d06f2b02774134def5d4d4f1dac8bef16d90cda18ba28a"}, - {file = "black-23.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:27eb7a0c71604d5de083757fbdb245b1a4fae60e9596514c6ec497eb63f95320"}, - {file = "black-23.7.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:8417dbd2f57b5701492cd46edcecc4f9208dc75529bcf76c514864e48da867d9"}, - {file = "black-23.7.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:47e56d83aad53ca140da0af87678fb38e44fd6bc0af71eebab2d1f59b1acf1d3"}, - {file = "black-23.7.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:25cc308838fe71f7065df53aedd20327969d05671bac95b38fdf37ebe70ac087"}, - {file = "black-23.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:642496b675095d423f9b8448243336f8ec71c9d4d57ec17bf795b67f08132a91"}, - {file = "black-23.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:ad0014efc7acf0bd745792bd0d8857413652979200ab924fbf239062adc12491"}, - {file = "black-23.7.0-py3-none-any.whl", hash = "sha256:9fd59d418c60c0348505f2ddf9609c1e1de8e7493eab96198fc89d9f865e7a96"}, - {file = "black-23.7.0.tar.gz", hash = "sha256:022a582720b0d9480ed82576c920a8c1dde97cc38ff11d8d8859b3bd6ca9eedb"}, + {file = "black-23.9.1-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:d6bc09188020c9ac2555a498949401ab35bb6bf76d4e0f8ee251694664df6301"}, + {file = "black-23.9.1-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:13ef033794029b85dfea8032c9d3b92b42b526f1ff4bf13b2182ce4e917f5100"}, + {file = "black-23.9.1-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:75a2dc41b183d4872d3a500d2b9c9016e67ed95738a3624f4751a0cb4818fe71"}, + {file = "black-23.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13a2e4a93bb8ca74a749b6974925c27219bb3df4d42fc45e948a5d9feb5122b7"}, + {file = "black-23.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:adc3e4442eef57f99b5590b245a328aad19c99552e0bdc7f0b04db6656debd80"}, + {file = "black-23.9.1-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:8431445bf62d2a914b541da7ab3e2b4f3bc052d2ccbf157ebad18ea126efb91f"}, + {file = "black-23.9.1-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:8fc1ddcf83f996247505db6b715294eba56ea9372e107fd54963c7553f2b6dfe"}, + {file = "black-23.9.1-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:7d30ec46de88091e4316b17ae58bbbfc12b2de05e069030f6b747dfc649ad186"}, + {file = "black-23.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:031e8c69f3d3b09e1aa471a926a1eeb0b9071f80b17689a655f7885ac9325a6f"}, + {file = "black-23.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:538efb451cd50f43aba394e9ec7ad55a37598faae3348d723b59ea8e91616300"}, + {file = "black-23.9.1-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:638619a559280de0c2aa4d76f504891c9860bb8fa214267358f0a20f27c12948"}, + {file = "black-23.9.1-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:a732b82747235e0542c03bf352c126052c0fbc458d8a239a94701175b17d4855"}, + {file = "black-23.9.1-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:cf3a4d00e4cdb6734b64bf23cd4341421e8953615cba6b3670453737a72ec204"}, + {file = "black-23.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf99f3de8b3273a8317681d8194ea222f10e0133a24a7548c73ce44ea1679377"}, + {file = "black-23.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:14f04c990259576acd093871e7e9b14918eb28f1866f91968ff5524293f9c573"}, + {file = "black-23.9.1-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:c619f063c2d68f19b2d7270f4cf3192cb81c9ec5bc5ba02df91471d0b88c4c5c"}, + {file = "black-23.9.1-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:6a3b50e4b93f43b34a9d3ef00d9b6728b4a722c997c99ab09102fd5efdb88325"}, + {file = "black-23.9.1-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:c46767e8df1b7beefb0899c4a95fb43058fa8500b6db144f4ff3ca38eb2f6393"}, + {file = "black-23.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50254ebfa56aa46a9fdd5d651f9637485068a1adf42270148cd101cdf56e0ad9"}, + {file = "black-23.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:403397c033adbc45c2bd41747da1f7fc7eaa44efbee256b53842470d4ac5a70f"}, + {file = "black-23.9.1-py3-none-any.whl", hash = "sha256:6ccd59584cc834b6d127628713e4b6b968e5f79572da66284532525a042549f9"}, + {file = "black-23.9.1.tar.gz", hash = "sha256:24b6b3ff5c6d9ea08a8888f6977eae858e1f340d7260cf56d70a49823236b62d"}, ] [package.dependencies] @@ -301,7 +286,7 @@ packaging = ">=22.0" pathspec = ">=0.9.0" platformdirs = ">=2" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} +typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} [package.extras] colorama = ["colorama (>=0.4.3)"] @@ -313,7 +298,6 @@ uvloop = ["uvloop (>=0.15.2)"] name = "bleach" version = "6.0.0" description = "An easy safelist-based HTML-sanitizing tool." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -332,7 +316,6 @@ css = ["tinycss2 (>=1.1.0,<1.2)"] name = "certifi" version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -344,7 +327,6 @@ files = [ name = "cffi" version = "1.15.1" description = "Foreign Function Interface for Python calling C code." -category = "main" optional = false python-versions = "*" files = [ @@ -419,21 +401,19 @@ pycparser = "*" [[package]] name = "cfgv" -version = "3.3.1" +version = "3.4.0" description = "Validate configuration and produce human readable error messages." -category = "dev" optional = false -python-versions = ">=3.6.1" +python-versions = ">=3.8" files = [ - {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, - {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, + {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, + {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, ] [[package]] name = "charset-normalizer" version = "3.2.0" 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 = [ @@ -516,14 +496,13 @@ files = [ [[package]] name = "click" -version = "8.1.6" +version = "8.1.7" description = "Composable command line interface toolkit" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.6-py3-none-any.whl", hash = "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5"}, - {file = "click-8.1.6.tar.gz", hash = "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd"}, + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, ] [package.dependencies] @@ -550,7 +529,6 @@ test = ["pytest"] name = "cloup" version = "0.13.1" description = "Adds features to Click: option groups, constraints, subcommand sections and help themes." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -566,7 +544,6 @@ typing-extensions = {version = "*", markers = "python_version <= \"3.8\""} 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 = [ @@ -578,7 +555,6 @@ files = [ name = "comm" version = "0.1.4" description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -598,7 +574,6 @@ typing = ["mypy (>=0.990)"] name = "commonmark" version = "0.9.1" description = "Python parser for the CommonMark Markdown spec" -category = "dev" optional = false python-versions = "*" files = [ @@ -611,131 +586,134 @@ test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] [[package]] name = "contourpy" -version = "1.1.0" +version = "1.1.1" description = "Python library for calculating contours of 2D quadrilateral grids" -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "contourpy-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:89f06eff3ce2f4b3eb24c1055a26981bffe4e7264acd86f15b97e40530b794bc"}, - {file = "contourpy-1.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dffcc2ddec1782dd2f2ce1ef16f070861af4fb78c69862ce0aab801495dda6a3"}, - {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25ae46595e22f93592d39a7eac3d638cda552c3e1160255258b695f7b58e5655"}, - {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:17cfaf5ec9862bc93af1ec1f302457371c34e688fbd381f4035a06cd47324f48"}, - {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18a64814ae7bce73925131381603fff0116e2df25230dfc80d6d690aa6e20b37"}, - {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90c81f22b4f572f8a2110b0b741bb64e5a6427e0a198b2cdc1fbaf85f352a3aa"}, - {file = "contourpy-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:53cc3a40635abedbec7f1bde60f8c189c49e84ac180c665f2cd7c162cc454baa"}, - {file = "contourpy-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:1f795597073b09d631782e7245016a4323cf1cf0b4e06eef7ea6627e06a37ff2"}, - {file = "contourpy-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0b7b04ed0961647691cfe5d82115dd072af7ce8846d31a5fac6c142dcce8b882"}, - {file = "contourpy-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:27bc79200c742f9746d7dd51a734ee326a292d77e7d94c8af6e08d1e6c15d545"}, - {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:052cc634bf903c604ef1a00a5aa093c54f81a2612faedaa43295809ffdde885e"}, - {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9382a1c0bc46230fb881c36229bfa23d8c303b889b788b939365578d762b5c18"}, - {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5cec36c5090e75a9ac9dbd0ff4a8cf7cecd60f1b6dc23a374c7d980a1cd710e"}, - {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f0cbd657e9bde94cd0e33aa7df94fb73c1ab7799378d3b3f902eb8eb2e04a3a"}, - {file = "contourpy-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:181cbace49874f4358e2929aaf7ba84006acb76694102e88dd15af861996c16e"}, - {file = "contourpy-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fb3b7d9e6243bfa1efb93ccfe64ec610d85cfe5aec2c25f97fbbd2e58b531256"}, - {file = "contourpy-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bcb41692aa09aeb19c7c213411854402f29f6613845ad2453d30bf421fe68fed"}, - {file = "contourpy-1.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5d123a5bc63cd34c27ff9c7ac1cd978909e9c71da12e05be0231c608048bb2ae"}, - {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62013a2cf68abc80dadfd2307299bfa8f5aa0dcaec5b2954caeb5fa094171103"}, - {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b6616375d7de55797d7a66ee7d087efe27f03d336c27cf1f32c02b8c1a5ac70"}, - {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:317267d915490d1e84577924bd61ba71bf8681a30e0d6c545f577363157e5e94"}, - {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d551f3a442655f3dcc1285723f9acd646ca5858834efeab4598d706206b09c9f"}, - {file = "contourpy-1.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e7a117ce7df5a938fe035cad481b0189049e8d92433b4b33aa7fc609344aafa1"}, - {file = "contourpy-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:d4f26b25b4f86087e7d75e63212756c38546e70f2a92d2be44f80114826e1cd4"}, - {file = "contourpy-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc00bb4225d57bff7ebb634646c0ee2a1298402ec10a5fe7af79df9a51c1bfd9"}, - {file = "contourpy-1.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:189ceb1525eb0655ab8487a9a9c41f42a73ba52d6789754788d1883fb06b2d8a"}, - {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f2931ed4741f98f74b410b16e5213f71dcccee67518970c42f64153ea9313b9"}, - {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30f511c05fab7f12e0b1b7730ebdc2ec8deedcfb505bc27eb570ff47c51a8f15"}, - {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:143dde50520a9f90e4a2703f367cf8ec96a73042b72e68fcd184e1279962eb6f"}, - {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e94bef2580e25b5fdb183bf98a2faa2adc5b638736b2c0a4da98691da641316a"}, - {file = "contourpy-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ed614aea8462735e7d70141374bd7650afd1c3f3cb0c2dbbcbe44e14331bf002"}, - {file = "contourpy-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:438ba416d02f82b692e371858143970ed2eb6337d9cdbbede0d8ad9f3d7dd17d"}, - {file = "contourpy-1.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a698c6a7a432789e587168573a864a7ea374c6be8d4f31f9d87c001d5a843493"}, - {file = "contourpy-1.1.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:397b0ac8a12880412da3551a8cb5a187d3298a72802b45a3bd1805e204ad8439"}, - {file = "contourpy-1.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:a67259c2b493b00e5a4d0f7bfae51fb4b3371395e47d079a4446e9b0f4d70e76"}, - {file = "contourpy-1.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2b836d22bd2c7bb2700348e4521b25e077255ebb6ab68e351ab5aa91ca27e027"}, - {file = "contourpy-1.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:084eaa568400cfaf7179b847ac871582199b1b44d5699198e9602ecbbb5f6104"}, - {file = "contourpy-1.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:911ff4fd53e26b019f898f32db0d4956c9d227d51338fb3b03ec72ff0084ee5f"}, - {file = "contourpy-1.1.0.tar.gz", hash = "sha256:e53046c3863828d21d531cc3b53786e6580eb1ba02477e8681009b6aa0870b21"}, + {file = "contourpy-1.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:46e24f5412c948d81736509377e255f6040e94216bf1a9b5ea1eaa9d29f6ec1b"}, + {file = "contourpy-1.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e48694d6a9c5a26ee85b10130c77a011a4fedf50a7279fa0bdaf44bafb4299d"}, + {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a66045af6cf00e19d02191ab578a50cb93b2028c3eefed999793698e9ea768ae"}, + {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ebf42695f75ee1a952f98ce9775c873e4971732a87334b099dde90b6af6a916"}, + {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6aec19457617ef468ff091669cca01fa7ea557b12b59a7908b9474bb9674cf0"}, + {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:462c59914dc6d81e0b11f37e560b8a7c2dbab6aca4f38be31519d442d6cde1a1"}, + {file = "contourpy-1.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6d0a8efc258659edc5299f9ef32d8d81de8b53b45d67bf4bfa3067f31366764d"}, + {file = "contourpy-1.1.1-cp310-cp310-win32.whl", hash = "sha256:d6ab42f223e58b7dac1bb0af32194a7b9311065583cc75ff59dcf301afd8a431"}, + {file = "contourpy-1.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:549174b0713d49871c6dee90a4b499d3f12f5e5f69641cd23c50a4542e2ca1eb"}, + {file = "contourpy-1.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:407d864db716a067cc696d61fa1ef6637fedf03606e8417fe2aeed20a061e6b2"}, + {file = "contourpy-1.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe80c017973e6a4c367e037cb31601044dd55e6bfacd57370674867d15a899b"}, + {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e30aaf2b8a2bac57eb7e1650df1b3a4130e8d0c66fc2f861039d507a11760e1b"}, + {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3de23ca4f381c3770dee6d10ead6fff524d540c0f662e763ad1530bde5112532"}, + {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:566f0e41df06dfef2431defcfaa155f0acfa1ca4acbf8fd80895b1e7e2ada40e"}, + {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b04c2f0adaf255bf756cf08ebef1be132d3c7a06fe6f9877d55640c5e60c72c5"}, + {file = "contourpy-1.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d0c188ae66b772d9d61d43c6030500344c13e3f73a00d1dc241da896f379bb62"}, + {file = "contourpy-1.1.1-cp311-cp311-win32.whl", hash = "sha256:0683e1ae20dc038075d92e0e0148f09ffcefab120e57f6b4c9c0f477ec171f33"}, + {file = "contourpy-1.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:8636cd2fc5da0fb102a2504fa2c4bea3cbc149533b345d72cdf0e7a924decc45"}, + {file = "contourpy-1.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:560f1d68a33e89c62da5da4077ba98137a5e4d3a271b29f2f195d0fba2adcb6a"}, + {file = "contourpy-1.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:24216552104ae8f3b34120ef84825400b16eb6133af2e27a190fdc13529f023e"}, + {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56de98a2fb23025882a18b60c7f0ea2d2d70bbbcfcf878f9067234b1c4818442"}, + {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:07d6f11dfaf80a84c97f1a5ba50d129d9303c5b4206f776e94037332e298dda8"}, + {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1eaac5257a8f8a047248d60e8f9315c6cff58f7803971170d952555ef6344a7"}, + {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19557fa407e70f20bfaba7d55b4d97b14f9480856c4fb65812e8a05fe1c6f9bf"}, + {file = "contourpy-1.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:081f3c0880712e40effc5f4c3b08feca6d064cb8cfbb372ca548105b86fd6c3d"}, + {file = "contourpy-1.1.1-cp312-cp312-win32.whl", hash = "sha256:059c3d2a94b930f4dafe8105bcdc1b21de99b30b51b5bce74c753686de858cb6"}, + {file = "contourpy-1.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:f44d78b61740e4e8c71db1cf1fd56d9050a4747681c59ec1094750a658ceb970"}, + {file = "contourpy-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:70e5a10f8093d228bb2b552beeb318b8928b8a94763ef03b858ef3612b29395d"}, + {file = "contourpy-1.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8394e652925a18ef0091115e3cc191fef350ab6dc3cc417f06da66bf98071ae9"}, + {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5bd5680f844c3ff0008523a71949a3ff5e4953eb7701b28760805bc9bcff217"}, + {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66544f853bfa85c0d07a68f6c648b2ec81dafd30f272565c37ab47a33b220684"}, + {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0c02b75acfea5cab07585d25069207e478d12309557f90a61b5a3b4f77f46ce"}, + {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41339b24471c58dc1499e56783fedc1afa4bb018bcd035cfb0ee2ad2a7501ef8"}, + {file = "contourpy-1.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f29fb0b3f1217dfe9362ec55440d0743fe868497359f2cf93293f4b2701b8251"}, + {file = "contourpy-1.1.1-cp38-cp38-win32.whl", hash = "sha256:f9dc7f933975367251c1b34da882c4f0e0b2e24bb35dc906d2f598a40b72bfc7"}, + {file = "contourpy-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:498e53573e8b94b1caeb9e62d7c2d053c263ebb6aa259c81050766beb50ff8d9"}, + {file = "contourpy-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ba42e3810999a0ddd0439e6e5dbf6d034055cdc72b7c5c839f37a7c274cb4eba"}, + {file = "contourpy-1.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c06e4c6e234fcc65435223c7b2a90f286b7f1b2733058bdf1345d218cc59e34"}, + {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca6fab080484e419528e98624fb5c4282148b847e3602dc8dbe0cb0669469887"}, + {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93df44ab351119d14cd1e6b52a5063d3336f0754b72736cc63db59307dabb718"}, + {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eafbef886566dc1047d7b3d4b14db0d5b7deb99638d8e1be4e23a7c7ac59ff0f"}, + {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efe0fab26d598e1ec07d72cf03eaeeba8e42b4ecf6b9ccb5a356fde60ff08b85"}, + {file = "contourpy-1.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f08e469821a5e4751c97fcd34bcb586bc243c39c2e39321822060ba902eac49e"}, + {file = "contourpy-1.1.1-cp39-cp39-win32.whl", hash = "sha256:bfc8a5e9238232a45ebc5cb3bfee71f1167064c8d382cadd6076f0d51cff1da0"}, + {file = "contourpy-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:c84fdf3da00c2827d634de4fcf17e3e067490c4aea82833625c4c8e6cdea0887"}, + {file = "contourpy-1.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:229a25f68046c5cf8067d6d6351c8b99e40da11b04d8416bf8d2b1d75922521e"}, + {file = "contourpy-1.1.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a10dab5ea1bd4401c9483450b5b0ba5416be799bbd50fc7a6cc5e2a15e03e8a3"}, + {file = "contourpy-1.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4f9147051cb8fdb29a51dc2482d792b3b23e50f8f57e3720ca2e3d438b7adf23"}, + {file = "contourpy-1.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a75cc163a5f4531a256f2c523bd80db509a49fc23721b36dd1ef2f60ff41c3cb"}, + {file = "contourpy-1.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b53d5769aa1f2d4ea407c65f2d1d08002952fac1d9e9d307aa2e1023554a163"}, + {file = "contourpy-1.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11b836b7dbfb74e049c302bbf74b4b8f6cb9d0b6ca1bf86cfa8ba144aedadd9c"}, + {file = "contourpy-1.1.1.tar.gz", hash = "sha256:96ba37c2e24b7212a77da85004c38e7c4d155d3e72a45eeaf22c1f03f607e8ab"}, ] [package.dependencies] -numpy = ">=1.16" +numpy = {version = ">=1.16,<2.0", markers = "python_version <= \"3.11\""} [package.extras] bokeh = ["bokeh", "selenium"] -docs = ["furo", "sphinx-copybutton"] -mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.2.0)", "types-Pillow"] +docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.4.1)", "types-Pillow"] test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] test-no-images = ["pytest", "pytest-cov", "wurlitzer"] [[package]] name = "coverage" -version = "7.2.7" +version = "7.3.1" description = "Code coverage measurement for Python" -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "coverage-7.2.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d39b5b4f2a66ccae8b7263ac3c8170994b65266797fb96cbbfd3fb5b23921db8"}, - {file = "coverage-7.2.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d040ef7c9859bb11dfeb056ff5b3872436e3b5e401817d87a31e1750b9ae2fb"}, - {file = "coverage-7.2.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba90a9563ba44a72fda2e85302c3abc71c5589cea608ca16c22b9804262aaeb6"}, - {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7d9405291c6928619403db1d10bd07888888ec1abcbd9748fdaa971d7d661b2"}, - {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31563e97dae5598556600466ad9beea39fb04e0229e61c12eaa206e0aa202063"}, - {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ebba1cd308ef115925421d3e6a586e655ca5a77b5bf41e02eb0e4562a111f2d1"}, - {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cb017fd1b2603ef59e374ba2063f593abe0fc45f2ad9abdde5b4d83bd922a353"}, - {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62a5c7dad11015c66fbb9d881bc4caa5b12f16292f857842d9d1871595f4495"}, - {file = "coverage-7.2.7-cp310-cp310-win32.whl", hash = "sha256:ee57190f24fba796e36bb6d3aa8a8783c643d8fa9760c89f7a98ab5455fbf818"}, - {file = "coverage-7.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:f75f7168ab25dd93110c8a8117a22450c19976afbc44234cbf71481094c1b850"}, - {file = "coverage-7.2.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:06a9a2be0b5b576c3f18f1a241f0473575c4a26021b52b2a85263a00f034d51f"}, - {file = "coverage-7.2.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5baa06420f837184130752b7c5ea0808762083bf3487b5038d68b012e5937dbe"}, - {file = "coverage-7.2.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdec9e8cbf13a5bf63290fc6013d216a4c7232efb51548594ca3631a7f13c3a3"}, - {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:52edc1a60c0d34afa421c9c37078817b2e67a392cab17d97283b64c5833f427f"}, - {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63426706118b7f5cf6bb6c895dc215d8a418d5952544042c8a2d9fe87fcf09cb"}, - {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:afb17f84d56068a7c29f5fa37bfd38d5aba69e3304af08ee94da8ed5b0865833"}, - {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:48c19d2159d433ccc99e729ceae7d5293fbffa0bdb94952d3579983d1c8c9d97"}, - {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0e1f928eaf5469c11e886fe0885ad2bf1ec606434e79842a879277895a50942a"}, - {file = "coverage-7.2.7-cp311-cp311-win32.whl", hash = "sha256:33d6d3ea29d5b3a1a632b3c4e4f4ecae24ef170b0b9ee493883f2df10039959a"}, - {file = "coverage-7.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:5b7540161790b2f28143191f5f8ec02fb132660ff175b7747b95dcb77ac26562"}, - {file = "coverage-7.2.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f2f67fe12b22cd130d34d0ef79206061bfb5eda52feb6ce0dba0644e20a03cf4"}, - {file = "coverage-7.2.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a342242fe22407f3c17f4b499276a02b01e80f861f1682ad1d95b04018e0c0d4"}, - {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:171717c7cb6b453aebac9a2ef603699da237f341b38eebfee9be75d27dc38e01"}, - {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49969a9f7ffa086d973d91cec8d2e31080436ef0fb4a359cae927e742abfaaa6"}, - {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b46517c02ccd08092f4fa99f24c3b83d8f92f739b4657b0f146246a0ca6a831d"}, - {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:a3d33a6b3eae87ceaefa91ffdc130b5e8536182cd6dfdbfc1aa56b46ff8c86de"}, - {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:976b9c42fb2a43ebf304fa7d4a310e5f16cc99992f33eced91ef6f908bd8f33d"}, - {file = "coverage-7.2.7-cp312-cp312-win32.whl", hash = "sha256:8de8bb0e5ad103888d65abef8bca41ab93721647590a3f740100cd65c3b00511"}, - {file = "coverage-7.2.7-cp312-cp312-win_amd64.whl", hash = "sha256:9e31cb64d7de6b6f09702bb27c02d1904b3aebfca610c12772452c4e6c21a0d3"}, - {file = "coverage-7.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58c2ccc2f00ecb51253cbe5d8d7122a34590fac9646a960d1430d5b15321d95f"}, - {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d22656368f0e6189e24722214ed8d66b8022db19d182927b9a248a2a8a2f67eb"}, - {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a895fcc7b15c3fc72beb43cdcbdf0ddb7d2ebc959edac9cef390b0d14f39f8a9"}, - {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e84606b74eb7de6ff581a7915e2dab7a28a0517fbe1c9239eb227e1354064dcd"}, - {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0a5f9e1dbd7fbe30196578ca36f3fba75376fb99888c395c5880b355e2875f8a"}, - {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:419bfd2caae268623dd469eff96d510a920c90928b60f2073d79f8fe2bbc5959"}, - {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2aee274c46590717f38ae5e4650988d1af340fe06167546cc32fe2f58ed05b02"}, - {file = "coverage-7.2.7-cp37-cp37m-win32.whl", hash = "sha256:61b9a528fb348373c433e8966535074b802c7a5d7f23c4f421e6c6e2f1697a6f"}, - {file = "coverage-7.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:b1c546aca0ca4d028901d825015dc8e4d56aac4b541877690eb76490f1dc8ed0"}, - {file = "coverage-7.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:54b896376ab563bd38453cecb813c295cf347cf5906e8b41d340b0321a5433e5"}, - {file = "coverage-7.2.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3d376df58cc111dc8e21e3b6e24606b5bb5dee6024f46a5abca99124b2229ef5"}, - {file = "coverage-7.2.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e330fc79bd7207e46c7d7fd2bb4af2963f5f635703925543a70b99574b0fea9"}, - {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e9d683426464e4a252bf70c3498756055016f99ddaec3774bf368e76bbe02b6"}, - {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d13c64ee2d33eccf7437961b6ea7ad8673e2be040b4f7fd4fd4d4d28d9ccb1e"}, - {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b7aa5f8a41217360e600da646004f878250a0d6738bcdc11a0a39928d7dc2050"}, - {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8fa03bce9bfbeeef9f3b160a8bed39a221d82308b4152b27d82d8daa7041fee5"}, - {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:245167dd26180ab4c91d5e1496a30be4cd721a5cf2abf52974f965f10f11419f"}, - {file = "coverage-7.2.7-cp38-cp38-win32.whl", hash = "sha256:d2c2db7fd82e9b72937969bceac4d6ca89660db0a0967614ce2481e81a0b771e"}, - {file = "coverage-7.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:2e07b54284e381531c87f785f613b833569c14ecacdcb85d56b25c4622c16c3c"}, - {file = "coverage-7.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:537891ae8ce59ef63d0123f7ac9e2ae0fc8b72c7ccbe5296fec45fd68967b6c9"}, - {file = "coverage-7.2.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:06fb182e69f33f6cd1d39a6c597294cff3143554b64b9825d1dc69d18cc2fff2"}, - {file = "coverage-7.2.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:201e7389591af40950a6480bd9edfa8ed04346ff80002cec1a66cac4549c1ad7"}, - {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f6951407391b639504e3b3be51b7ba5f3528adbf1a8ac3302b687ecababf929e"}, - {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f48351d66575f535669306aa7d6d6f71bc43372473b54a832222803eb956fd1"}, - {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b29019c76039dc3c0fd815c41392a044ce555d9bcdd38b0fb60fb4cd8e475ba9"}, - {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:81c13a1fc7468c40f13420732805a4c38a105d89848b7c10af65a90beff25250"}, - {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:975d70ab7e3c80a3fe86001d8751f6778905ec723f5b110aed1e450da9d4b7f2"}, - {file = "coverage-7.2.7-cp39-cp39-win32.whl", hash = "sha256:7ee7d9d4822c8acc74a5e26c50604dff824710bc8de424904c0982e25c39c6cb"}, - {file = "coverage-7.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:eb393e5ebc85245347950143969b241d08b52b88a3dc39479822e073a1a8eb27"}, - {file = "coverage-7.2.7-pp37.pp38.pp39-none-any.whl", hash = "sha256:b7b4c971f05e6ae490fef852c218b0e79d4e52f79ef0c8475566584a8fb3e01d"}, - {file = "coverage-7.2.7.tar.gz", hash = "sha256:924d94291ca674905fe9481f12294eb11f2d3d3fd1adb20314ba89e94f44ed59"}, + {file = "coverage-7.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cd0f7429ecfd1ff597389907045ff209c8fdb5b013d38cfa7c60728cb484b6e3"}, + {file = "coverage-7.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:966f10df9b2b2115da87f50f6a248e313c72a668248be1b9060ce935c871f276"}, + {file = "coverage-7.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0575c37e207bb9b98b6cf72fdaaa18ac909fb3d153083400c2d48e2e6d28bd8e"}, + {file = "coverage-7.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:245c5a99254e83875c7fed8b8b2536f040997a9b76ac4c1da5bff398c06e860f"}, + {file = "coverage-7.3.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c96dd7798d83b960afc6c1feb9e5af537fc4908852ef025600374ff1a017392"}, + {file = "coverage-7.3.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:de30c1aa80f30af0f6b2058a91505ea6e36d6535d437520067f525f7df123887"}, + {file = "coverage-7.3.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:50dd1e2dd13dbbd856ffef69196781edff26c800a74f070d3b3e3389cab2600d"}, + {file = "coverage-7.3.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b9c0c19f70d30219113b18fe07e372b244fb2a773d4afde29d5a2f7930765136"}, + {file = "coverage-7.3.1-cp310-cp310-win32.whl", hash = "sha256:770f143980cc16eb601ccfd571846e89a5fe4c03b4193f2e485268f224ab602f"}, + {file = "coverage-7.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:cdd088c00c39a27cfa5329349cc763a48761fdc785879220d54eb785c8a38520"}, + {file = "coverage-7.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:74bb470399dc1989b535cb41f5ca7ab2af561e40def22d7e188e0a445e7639e3"}, + {file = "coverage-7.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:025ded371f1ca280c035d91b43252adbb04d2aea4c7105252d3cbc227f03b375"}, + {file = "coverage-7.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6191b3a6ad3e09b6cfd75b45c6aeeffe7e3b0ad46b268345d159b8df8d835f9"}, + {file = "coverage-7.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7eb0b188f30e41ddd659a529e385470aa6782f3b412f860ce22b2491c89b8593"}, + {file = "coverage-7.3.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75c8f0df9dfd8ff745bccff75867d63ef336e57cc22b2908ee725cc552689ec8"}, + {file = "coverage-7.3.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7eb3cd48d54b9bd0e73026dedce44773214064be93611deab0b6a43158c3d5a0"}, + {file = "coverage-7.3.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ac3c5b7e75acac31e490b7851595212ed951889918d398b7afa12736c85e13ce"}, + {file = "coverage-7.3.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5b4ee7080878077af0afa7238df1b967f00dc10763f6e1b66f5cced4abebb0a3"}, + {file = "coverage-7.3.1-cp311-cp311-win32.whl", hash = "sha256:229c0dd2ccf956bf5aeede7e3131ca48b65beacde2029f0361b54bf93d36f45a"}, + {file = "coverage-7.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:c6f55d38818ca9596dc9019eae19a47410d5322408140d9a0076001a3dcb938c"}, + {file = "coverage-7.3.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5289490dd1c3bb86de4730a92261ae66ea8d44b79ed3cc26464f4c2cde581fbc"}, + {file = "coverage-7.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ca833941ec701fda15414be400c3259479bfde7ae6d806b69e63b3dc423b1832"}, + {file = "coverage-7.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd694e19c031733e446c8024dedd12a00cda87e1c10bd7b8539a87963685e969"}, + {file = "coverage-7.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aab8e9464c00da5cb9c536150b7fbcd8850d376d1151741dd0d16dfe1ba4fd26"}, + {file = "coverage-7.3.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87d38444efffd5b056fcc026c1e8d862191881143c3aa80bb11fcf9dca9ae204"}, + {file = "coverage-7.3.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8a07b692129b8a14ad7a37941a3029c291254feb7a4237f245cfae2de78de037"}, + {file = "coverage-7.3.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:2829c65c8faaf55b868ed7af3c7477b76b1c6ebeee99a28f59a2cb5907a45760"}, + {file = "coverage-7.3.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1f111a7d85658ea52ffad7084088277135ec5f368457275fc57f11cebb15607f"}, + {file = "coverage-7.3.1-cp312-cp312-win32.whl", hash = "sha256:c397c70cd20f6df7d2a52283857af622d5f23300c4ca8e5bd8c7a543825baa5a"}, + {file = "coverage-7.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:5ae4c6da8b3d123500f9525b50bf0168023313963e0e2e814badf9000dd6ef92"}, + {file = "coverage-7.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ca70466ca3a17460e8fc9cea7123c8cbef5ada4be3140a1ef8f7b63f2f37108f"}, + {file = "coverage-7.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f2781fd3cabc28278dc982a352f50c81c09a1a500cc2086dc4249853ea96b981"}, + {file = "coverage-7.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6407424621f40205bbe6325686417e5e552f6b2dba3535dd1f90afc88a61d465"}, + {file = "coverage-7.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:04312b036580ec505f2b77cbbdfb15137d5efdfade09156961f5277149f5e344"}, + {file = "coverage-7.3.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac9ad38204887349853d7c313f53a7b1c210ce138c73859e925bc4e5d8fc18e7"}, + {file = "coverage-7.3.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:53669b79f3d599da95a0afbef039ac0fadbb236532feb042c534fbb81b1a4e40"}, + {file = "coverage-7.3.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:614f1f98b84eb256e4f35e726bfe5ca82349f8dfa576faabf8a49ca09e630086"}, + {file = "coverage-7.3.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f1a317fdf5c122ad642db8a97964733ab7c3cf6009e1a8ae8821089993f175ff"}, + {file = "coverage-7.3.1-cp38-cp38-win32.whl", hash = "sha256:defbbb51121189722420a208957e26e49809feafca6afeef325df66c39c4fdb3"}, + {file = "coverage-7.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:f4f456590eefb6e1b3c9ea6328c1e9fa0f1006e7481179d749b3376fc793478e"}, + {file = "coverage-7.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f12d8b11a54f32688b165fd1a788c408f927b0960984b899be7e4c190ae758f1"}, + {file = "coverage-7.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f09195dda68d94a53123883de75bb97b0e35f5f6f9f3aa5bf6e496da718f0cb6"}, + {file = "coverage-7.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6601a60318f9c3945be6ea0f2a80571f4299b6801716f8a6e4846892737ebe4"}, + {file = "coverage-7.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07d156269718670d00a3b06db2288b48527fc5f36859425ff7cec07c6b367745"}, + {file = "coverage-7.3.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:636a8ac0b044cfeccae76a36f3b18264edcc810a76a49884b96dd744613ec0b7"}, + {file = "coverage-7.3.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5d991e13ad2ed3aced177f524e4d670f304c8233edad3210e02c465351f785a0"}, + {file = "coverage-7.3.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:586649ada7cf139445da386ab6f8ef00e6172f11a939fc3b2b7e7c9082052fa0"}, + {file = "coverage-7.3.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4aba512a15a3e1e4fdbfed2f5392ec221434a614cc68100ca99dcad7af29f3f8"}, + {file = "coverage-7.3.1-cp39-cp39-win32.whl", hash = "sha256:6bc6f3f4692d806831c136c5acad5ccedd0262aa44c087c46b7101c77e139140"}, + {file = "coverage-7.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:553d7094cb27db58ea91332e8b5681bac107e7242c23f7629ab1316ee73c4981"}, + {file = "coverage-7.3.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:220eb51f5fb38dfdb7e5d54284ca4d0cd70ddac047d750111a68ab1798945194"}, + {file = "coverage-7.3.1.tar.gz", hash = "sha256:6cb7fe1581deb67b782c153136541e20901aa312ceedaf1467dcb35255787952"}, ] [package.dependencies] @@ -746,35 +724,34 @@ toml = ["tomli"] [[package]] name = "cryptography" -version = "41.0.3" +version = "41.0.4" 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-41.0.3-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:652627a055cb52a84f8c448185922241dd5217443ca194d5739b44612c5e6507"}, - {file = "cryptography-41.0.3-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:8f09daa483aedea50d249ef98ed500569841d6498aa9c9f4b0531b9964658922"}, - {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fd871184321100fb400d759ad0cddddf284c4b696568204d281c902fc7b0d81"}, - {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84537453d57f55a50a5b6835622ee405816999a7113267739a1b4581f83535bd"}, - {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:3fb248989b6363906827284cd20cca63bb1a757e0a2864d4c1682a985e3dca47"}, - {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:42cb413e01a5d36da9929baa9d70ca90d90b969269e5a12d39c1e0d475010116"}, - {file = "cryptography-41.0.3-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:aeb57c421b34af8f9fe830e1955bf493a86a7996cc1338fe41b30047d16e962c"}, - {file = "cryptography-41.0.3-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6af1c6387c531cd364b72c28daa29232162010d952ceb7e5ca8e2827526aceae"}, - {file = "cryptography-41.0.3-cp37-abi3-win32.whl", hash = "sha256:0d09fb5356f975974dbcb595ad2d178305e5050656affb7890a1583f5e02a306"}, - {file = "cryptography-41.0.3-cp37-abi3-win_amd64.whl", hash = "sha256:a983e441a00a9d57a4d7c91b3116a37ae602907a7618b882c8013b5762e80574"}, - {file = "cryptography-41.0.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5259cb659aa43005eb55a0e4ff2c825ca111a0da1814202c64d28a985d33b087"}, - {file = "cryptography-41.0.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:67e120e9a577c64fe1f611e53b30b3e69744e5910ff3b6e97e935aeb96005858"}, - {file = "cryptography-41.0.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:7efe8041897fe7a50863e51b77789b657a133c75c3b094e51b5e4b5cec7bf906"}, - {file = "cryptography-41.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ce785cf81a7bdade534297ef9e490ddff800d956625020ab2ec2780a556c313e"}, - {file = "cryptography-41.0.3-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:57a51b89f954f216a81c9d057bf1a24e2f36e764a1ca9a501a6964eb4a6800dd"}, - {file = "cryptography-41.0.3-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c2f0d35703d61002a2bbdcf15548ebb701cfdd83cdc12471d2bae80878a4207"}, - {file = "cryptography-41.0.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:23c2d778cf829f7d0ae180600b17e9fceea3c2ef8b31a99e3c694cbbf3a24b84"}, - {file = "cryptography-41.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:95dd7f261bb76948b52a5330ba5202b91a26fbac13ad0e9fc8a3ac04752058c7"}, - {file = "cryptography-41.0.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:41d7aa7cdfded09b3d73a47f429c298e80796c8e825ddfadc84c8a7f12df212d"}, - {file = "cryptography-41.0.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d0d651aa754ef58d75cec6edfbd21259d93810b73f6ec246436a21b7841908de"}, - {file = "cryptography-41.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ab8de0d091acbf778f74286f4989cf3d1528336af1b59f3e5d2ebca8b5fe49e1"}, - {file = "cryptography-41.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a74fbcdb2a0d46fe00504f571a2a540532f4c188e6ccf26f1f178480117b33c4"}, - {file = "cryptography-41.0.3.tar.gz", hash = "sha256:6d192741113ef5e30d89dcb5b956ef4e1578f304708701b8b73d38e3e1461f34"}, + {file = "cryptography-41.0.4-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:80907d3faa55dc5434a16579952ac6da800935cd98d14dbd62f6f042c7f5e839"}, + {file = "cryptography-41.0.4-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:35c00f637cd0b9d5b6c6bd11b6c3359194a8eba9c46d4e875a3660e3b400005f"}, + {file = "cryptography-41.0.4-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cecfefa17042941f94ab54f769c8ce0fe14beff2694e9ac684176a2535bf9714"}, + {file = "cryptography-41.0.4-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e40211b4923ba5a6dc9769eab704bdb3fbb58d56c5b336d30996c24fcf12aadb"}, + {file = "cryptography-41.0.4-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:23a25c09dfd0d9f28da2352503b23e086f8e78096b9fd585d1d14eca01613e13"}, + {file = "cryptography-41.0.4-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2ed09183922d66c4ec5fdaa59b4d14e105c084dd0febd27452de8f6f74704143"}, + {file = "cryptography-41.0.4-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5a0f09cefded00e648a127048119f77bc2b2ec61e736660b5789e638f43cc397"}, + {file = "cryptography-41.0.4-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:9eeb77214afae972a00dee47382d2591abe77bdae166bda672fb1e24702a3860"}, + {file = "cryptography-41.0.4-cp37-abi3-win32.whl", hash = "sha256:3b224890962a2d7b57cf5eeb16ccaafba6083f7b811829f00476309bce2fe0fd"}, + {file = "cryptography-41.0.4-cp37-abi3-win_amd64.whl", hash = "sha256:c880eba5175f4307129784eca96f4e70b88e57aa3f680aeba3bab0e980b0f37d"}, + {file = "cryptography-41.0.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:004b6ccc95943f6a9ad3142cfabcc769d7ee38a3f60fb0dddbfb431f818c3a67"}, + {file = "cryptography-41.0.4-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:86defa8d248c3fa029da68ce61fe735432b047e32179883bdb1e79ed9bb8195e"}, + {file = "cryptography-41.0.4-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:37480760ae08065437e6573d14be973112c9e6dcaf5f11d00147ee74f37a3829"}, + {file = "cryptography-41.0.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b5f4dfe950ff0479f1f00eda09c18798d4f49b98f4e2006d644b3301682ebdca"}, + {file = "cryptography-41.0.4-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7e53db173370dea832190870e975a1e09c86a879b613948f09eb49324218c14d"}, + {file = "cryptography-41.0.4-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5b72205a360f3b6176485a333256b9bcd48700fc755fef51c8e7e67c4b63e3ac"}, + {file = "cryptography-41.0.4-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:93530900d14c37a46ce3d6c9e6fd35dbe5f5601bf6b3a5c325c7bffc030344d9"}, + {file = "cryptography-41.0.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:efc8ad4e6fc4f1752ebfb58aefece8b4e3c4cae940b0994d43649bdfce8d0d4f"}, + {file = "cryptography-41.0.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c3391bd8e6de35f6f1140e50aaeb3e2b3d6a9012536ca23ab0d9c35ec18c8a91"}, + {file = "cryptography-41.0.4-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:0d9409894f495d465fe6fda92cb70e8323e9648af912d5b9141d616df40a87b8"}, + {file = "cryptography-41.0.4-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:8ac4f9ead4bbd0bc8ab2d318f97d85147167a488be0e08814a37eb2f439d5cf6"}, + {file = "cryptography-41.0.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:047c4603aeb4bbd8db2756e38f5b8bd7e94318c047cfe4efeb5d715e08b49311"}, + {file = "cryptography-41.0.4.tar.gz", hash = "sha256:7febc3094125fc126a7f6fb1f420d0da639f3f32cb15c8ff0dc3997c4549f51a"}, ] [package.dependencies] @@ -794,7 +771,6 @@ test-randomorder = ["pytest-randomly"] name = "cycler" version = "0.11.0" description = "Composable style cycles" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -804,77 +780,75 @@ files = [ [[package]] name = "cython" -version = "3.0.0" +version = "3.0.2" 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.*" files = [ - {file = "Cython-3.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c7d728e1a49ad01d41181e3a9ea80b8d14e825f4679e4dd837cbf7bca7998a5"}, - {file = "Cython-3.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:626a4a6ef4b7ced87c348ea805488e4bd39dad9d0b39659aa9e1040b62bbfedf"}, - {file = "Cython-3.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33c900d1ca9f622b969ac7d8fc44bdae140a4a6c7d8819413b51f3ccd0586a09"}, - {file = "Cython-3.0.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a65bc50dc1bc2faeafd9425defbdef6a468974f5c4192497ff7f14adccfdcd32"}, - {file = "Cython-3.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3b71b399b10b038b056ad12dce1e317a8aa7a96e99de7e4fa2fa5d1c9415cfb9"}, - {file = "Cython-3.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f42f304c097cc53e9eb5f1a1d150380353d5018a3191f1b77f0de353c762181e"}, - {file = "Cython-3.0.0-cp310-cp310-win32.whl", hash = "sha256:3e234e2549e808d9259fdb23ebcfd145be30c638c65118326ec33a8d29248dc2"}, - {file = "Cython-3.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:829c8333195100448a23863cf64a07e1334fae6a275aefe871458937911531b6"}, - {file = "Cython-3.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:06db81b1a01858fcc406616f8528e686ffb6cf7c3d78fb83767832bfecea8ad8"}, - {file = "Cython-3.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c93634845238645ce7abf63a56b1c5b6248189005c7caff898fd4a0dac1c5e1e"}, - {file = "Cython-3.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa606675c6bd23478b1d174e2a84e3c5a2c660968f97dc455afe0fae198f9d3d"}, - {file = "Cython-3.0.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3355e6f690184f984eeb108b0f5bbc4bcf8b9444f8168933acf79603abf7baf"}, - {file = "Cython-3.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:93a34e1ca8afa4b7075b02ed14a7e4969256297029fb1bfd4cbe48f7290dbcff"}, - {file = "Cython-3.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bb1165ca9e78823f9ad1efa5b3d83156f868eabd679a615d140a3021bb92cd65"}, - {file = "Cython-3.0.0-cp311-cp311-win32.whl", hash = "sha256:2fadde1da055944f5e1e17625055f54ddd11f451889110278ef30e07bd5e1695"}, - {file = "Cython-3.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:254ed1f03a6c237fa64f0c6e44862058de65bfa2e6a3b48ca3c205492e0653aa"}, - {file = "Cython-3.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4e212237b7531759befb92699c452cd65074a78051ae4ee36ff8b237395ecf3d"}, - {file = "Cython-3.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f29307463eba53747b31f71394ed087e3e3e264dcc433e62de1d51f5c0c966c"}, - {file = "Cython-3.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53328a8af0806bebbdb48a4191883b11ee9d9dfb084d84f58fa5a8ab58baefc9"}, - {file = "Cython-3.0.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5962e70b15e863e72bed6910e8c6ffef77d36cc98e2b31c474378f3b9e49b0e3"}, - {file = "Cython-3.0.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9e69139f4e60ab14c50767a568612ea64d6907e9c8e0289590a170eb495e005f"}, - {file = "Cython-3.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c40bdbcb2286f0aeeb5df9ce53d45da2d2a9b36a16b331cd0809d212d22a8fc7"}, - {file = "Cython-3.0.0-cp312-cp312-win32.whl", hash = "sha256:8abb8915eb2e57fa53d918afe641c05d1bcc6ed1913682ec1f28de71f4e3f398"}, - {file = "Cython-3.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:30a4bd2481e59bd7ab2539f835b78edc19fc455811e476916f56026b93afd28b"}, - {file = "Cython-3.0.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0e1e4b7e4bfbf22fecfa5b852f0e499c442d4853b7ebd33ae37cdec9826ed5d8"}, - {file = "Cython-3.0.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b00df42cdd1a285a64491ba23de08ab14169d3257c840428d40eb7e8e9979af"}, - {file = "Cython-3.0.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:650d03ddddc08b051b4659778733f0f173ca7d327415755c05d265a6c1ba02fb"}, - {file = "Cython-3.0.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4965f2ebade17166f21a508d66dd60d2a0b3a3b90abe3f72003baa17ae020dd6"}, - {file = "Cython-3.0.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:4123c8d03167803df31da6b39de167cb9c04ac0aa4e35d4e5aa9d08ad511b84d"}, - {file = "Cython-3.0.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:296c53b6c0030cf82987eef163444e8d7631cc139d995f9d58679d9fd1ddbf31"}, - {file = "Cython-3.0.0-cp36-cp36m-win32.whl", hash = "sha256:0d2c1e172f1c81bafcca703093608e10dc16e3e2d24c5644c17606c7fdb1792c"}, - {file = "Cython-3.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:bc816d8eb3686d6f8d165f4156bac18c1147e1035dc28a76742d0b7fb5b7c032"}, - {file = "Cython-3.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8d86651347bbdbac1aca1824696c5e4c0a3b162946c422edcca2be12a03744d1"}, - {file = "Cython-3.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84176bd04ce9f3cc8799b47ec6d1959fa1ea5e71424507df7bbf0b0915bbedef"}, - {file = "Cython-3.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35abcf07b8277ec95bbe49a07b5c8760a2d941942ccfe759a94c8d2fe5602e9f"}, - {file = "Cython-3.0.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a44d6b9a29b2bff38bb648577b2fcf6a68cf8b1783eee89c2eb749f69494b98d"}, - {file = "Cython-3.0.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:4dc6bbe7cf079db37f1ebb9b0f10d0d7f29e293bb8688e92d50b5ea7a91d82f3"}, - {file = "Cython-3.0.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e28763e75e380b8be62b02266a7995a781997c97c119efbdccb8fb954bcd7574"}, - {file = "Cython-3.0.0-cp37-cp37m-win32.whl", hash = "sha256:edae615cb4af51d5173e76ba9aea212424d025c57012e9cdf2f131f774c5ba71"}, - {file = "Cython-3.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:20c604e974832aaf8b7a1f5455ee7274b34df62a35ee095cd7d2ed7e818e6c53"}, - {file = "Cython-3.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c85fd2b1cbd9400d60ebe074795bb9a9188752f1612be3b35b0831a24879b91f"}, - {file = "Cython-3.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:090256c687106932339f87f888b95f0d69c617bc9b18801555545b695d29d8ab"}, - {file = "Cython-3.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cec2a67a0a7d9d4399758c0657ca03e5912e37218859cfbf046242cc532bfb3b"}, - {file = "Cython-3.0.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a1cdd01ce45333bc264a218c6e183700d6b998f029233f586a53c9b13455c2d2"}, - {file = "Cython-3.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ecee663d2d50ca939fc5db81f2f8a219c2417b4651ad84254c50a03a9cb1aadd"}, - {file = "Cython-3.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:30f10e79393b411af7677c270ea69807acb9fc30205c8ff25561f4deef780ec1"}, - {file = "Cython-3.0.0-cp38-cp38-win32.whl", hash = "sha256:609777d3a7a0a23b225e84d967af4ad2485c8bdfcacef8037cf197e87d431ca0"}, - {file = "Cython-3.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:7f4a6dfd42ae0a45797f50fc4f6add702abf46ab3e7cd61811a6c6a97a40e1a2"}, - {file = "Cython-3.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2d8158277c8942c0b20ff4c074fe6a51c5b89e6ac60cef606818de8c92773596"}, - {file = "Cython-3.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54e34f99b2a8c1e11478541b2822e6408c132b98b6b8f5ed89411e5e906631ea"}, - {file = "Cython-3.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:877d1c8745df59dd2061a0636c602729e9533ba13f13aa73a498f68662e1cbde"}, - {file = "Cython-3.0.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:204690be60f0ff32eb70b04f28ef0d1e50ffd7b3f77ba06a7dc2389ee3b848e0"}, - {file = "Cython-3.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:06fcb4628ccce2ba5abc8630adbeaf4016f63a359b4c6c3827b2d80e0673981c"}, - {file = "Cython-3.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:090e24cfa31c926d0b13d8bb2ef48175acdd061ae1413343c94a2b12a4a4fa6f"}, - {file = "Cython-3.0.0-cp39-cp39-win32.whl", hash = "sha256:4cd00f2158dc00f7f93a92444d0f663eda124c9c29bbbd658964f4e89c357fe8"}, - {file = "Cython-3.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:5b4cc896d49ce2bae8d6a030f9a4c64965b59c38acfbf4617685e17f7fcf1731"}, - {file = "Cython-3.0.0-py2.py3-none-any.whl", hash = "sha256:ff1aef1a03cfe293237c7a86ae9625b0411b2df30c53d1a7f29a8d381f38a1df"}, - {file = "Cython-3.0.0.tar.gz", hash = "sha256:350b18f9673e63101dbbfcf774ee2f57c20ac4636d255741d76ca79016b1bd82"}, + {file = "Cython-3.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8ccb91d2254e34724f1541b2a6fcdfacdb88284185b0097ae84e0ddf476c7a38"}, + {file = "Cython-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c298b1589205ecaaed0457ad05e0c8a43e7db2053607f48ed4a899cb6aa114df"}, + {file = "Cython-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e825e682cef76d0c33384f38b56b7e87c76152482a914dfc78faed6ff66ce05a"}, + {file = "Cython-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:77ec0134fc1b10aebef2013936a91c07bff2498ec283bc2eca099ee0cb94d12e"}, + {file = "Cython-3.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c90eeb94395315e65fd758a2f86b92904fce7b50060b4d45a878ef6767f9276e"}, + {file = "Cython-3.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:38085523fa7a299638d051ae08144222785639882f6291bd275c0b12db1034ff"}, + {file = "Cython-3.0.2-cp310-cp310-win32.whl", hash = "sha256:b032cb0c69082f0665b2c5fb416d041157062f1538336d0edf823b9ee500e39c"}, + {file = "Cython-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:067b2b9eb487bd61367b296f11b7c1c70a084b3eb7d5a572f607cd1fc5ca5586"}, + {file = "Cython-3.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:213ff9f95de319e54b520bf31edd6aa7a1fa4fbf617c2beb0f92362595e6476a"}, + {file = "Cython-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bebbca13078125a35937966137af4bd0300a0c66fd7ae4ce36adc049b13bdf3"}, + {file = "Cython-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e5587128e8c2423aefcffa4ded4ddf60d44898938fbb7c0f236636a750a94f"}, + {file = "Cython-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78e2853d484643c6b7ac3bdb48392753442da1c71b689468fa3176b619bebe54"}, + {file = "Cython-3.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c5e722732e9aa9bde667ed6d87525234823eb7766ca234cfb19d7e0c095a2ef4"}, + {file = "Cython-3.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:989787fc24a95100a26918b6577d06e15a8868a3ed267009c5cfcf1a906179ac"}, + {file = "Cython-3.0.2-cp311-cp311-win32.whl", hash = "sha256:d21801981db44b7e9f9768f121317946461d56b51de1e6eff3c42e8914048696"}, + {file = "Cython-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:809617cf4825b2138ce0ec827e1f28e39668743c81ac8286373f8d148c05f088"}, + {file = "Cython-3.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5682293d344b7dbad97ce6eceb9e887aca6e53499709db9da726ca3424e5559d"}, + {file = "Cython-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e08ff5da5f5b969639784b1bffcd880a0c0f048d182aed7cba9945ee8b367c2"}, + {file = "Cython-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8850269ff59f77a1629e26d0576701925360d732011d6d3516ccdc5b2c2bc310"}, + {file = "Cython-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:550b3fbe9b3c555b44ded934f4822f9fcc04dfcee512167ebcbbd370ccede20e"}, + {file = "Cython-3.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4db017b104f47b1185237702f6ed2651839c8124614683efa7c489f3fa4e19d9"}, + {file = "Cython-3.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:75a2395cc7b78cff59be6e9b7f92bbb5d7b8d25203f6d3fb6f72bdb7d3f49777"}, + {file = "Cython-3.0.2-cp312-cp312-win32.whl", hash = "sha256:786b6034a91e886116bb562fe42f8bf0f97c3e00c02e56791d02675959ed65b1"}, + {file = "Cython-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:cc9d173ab8b167cae674f6deed8c65ba816574797a2bd6d8aa623277d1fa81ca"}, + {file = "Cython-3.0.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:8948504338d7a140ce588333177dcabf0743a68dbc83b0174f214f5b959634d5"}, + {file = "Cython-3.0.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a51efba0e136b2af358e5a347bae09678b17460c35cf1eab24f0476820348991"}, + {file = "Cython-3.0.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05cb2a73810f045d328b7579cf98f550a9e601df5e282d1fea0512d8ad589011"}, + {file = "Cython-3.0.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22ba78e48bdb65977928ecb275ac8c82df7b0eefa075078a1363a5af4606b42e"}, + {file = "Cython-3.0.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:302281b927409b3e0ef8cd9251eab782cf1acd2578eab305519fbae5d184b7e9"}, + {file = "Cython-3.0.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:a1c3675394b81024aaf56e4f53c2b4f81d9a116c7049e9d4706f810899c9134e"}, + {file = "Cython-3.0.2-cp36-cp36m-win32.whl", hash = "sha256:34f7b014ebce5d325c8084e396c81cdafbd8d82be56780dffe6b67b28c891f1b"}, + {file = "Cython-3.0.2-cp36-cp36m-win_amd64.whl", hash = "sha256:477cd3549597f09a1608da7b05e16ba641e9aedd171b868533a5a07790ed886f"}, + {file = "Cython-3.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a49dde9f9e29ea82f29aaf3bb1a270b6eb90b75d627c7ff2f5dd3764540ae646"}, + {file = "Cython-3.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc1c8013fad0933f5201186eccc5f2be223cafd6a8dcd586d3f7bb6ba84dc845"}, + {file = "Cython-3.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b75e9c9d7ad7c9dd85d45241d1d4e3c5f66079c1f84eec91689c26d98bc3349"}, + {file = "Cython-3.0.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f43c4d3ecd9e3b8b7afe834e519f55cf4249b1088f96d11b96f02c55cbaeff7"}, + {file = "Cython-3.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:dab6a923e21e212aa3dc6dde9b22a190f5d7c449315a94e57ddc019ea74a979b"}, + {file = "Cython-3.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ae453cfa933b919c0a19d2cc5dc9fb28486268e95dc2ab7a11ab7f99cf8c3883"}, + {file = "Cython-3.0.2-cp37-cp37m-win32.whl", hash = "sha256:b1f023d36a3829069ed11017c670128be3f135a9c17bd64c35d3b3442243b05c"}, + {file = "Cython-3.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:011c4e0b75baee1843334562487eb4fbc0c59ddb2cc32a978b972a81eedcbdcc"}, + {file = "Cython-3.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:832bbee87bca760efeae248ddf19ccd77f9a2355cb6f8a64f20cc377e56957b3"}, + {file = "Cython-3.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fe806d154b6b7f0ab746dac36c022889e2e7cf47546ff9afdc29a62cfa692d0"}, + {file = "Cython-3.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e486331a29e7700b1ad5f4f753bef483c81412a5e64a873df46d6cb66f9a65de"}, + {file = "Cython-3.0.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54d41a1dfbaab74449873e7f8e6cd4239850fe7a50f7f784dd99a560927f3bac"}, + {file = "Cython-3.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4dca13c86d6cd523c7d8bbf8db1b2bbf8faedd0addedb229158d8015ad1819e1"}, + {file = "Cython-3.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:10cbfb37f31938371a6213cc8b5459c639954aed053efeded3c012d4c5915db9"}, + {file = "Cython-3.0.2-cp38-cp38-win32.whl", hash = "sha256:e663c237579c033deaa2cb362b74651da7712f56e441c11382510a8c4c4f2dd7"}, + {file = "Cython-3.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:2f84bd6cefa5130750c492038170c44f1cbd6f42e9ed85e168fd9cb453f85160"}, + {file = "Cython-3.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f37e4287f520f3748a06ad5eaae09ba4ac68f52e155d70de5f75780d83575c43"}, + {file = "Cython-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd30826ca8b27b2955a63c8ffe8aacc9f0779582b4bd154cf7b441ac10dae2cb"}, + {file = "Cython-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08d67c7225a09eeb77e090c8d4f60677165b052ccf76e3a57d8237064e5c2de2"}, + {file = "Cython-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e625eec8c5c9a8cb062a318b257cc469d301bed952c7daf86e38bbd3afe7c91"}, + {file = "Cython-3.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1b12a8f23270675b537d1c3b988f845bea4bbcc66ae0468857f5ede0526d4522"}, + {file = "Cython-3.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:62dd78afdf748a58dae9c9b9c42a1519ae30787b28ce5f84a0e1bb54144142ca"}, + {file = "Cython-3.0.2-cp39-cp39-win32.whl", hash = "sha256:d0d0cc4ecc05f41c5e02af14ac0083552d22efed976f79eb7bade55fed63b25d"}, + {file = "Cython-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:147cc1d3dda8b06de9d86df5e59cdf15f0a522620168b7349a5ec88b48104d7d"}, + {file = "Cython-3.0.2-py2.py3-none-any.whl", hash = "sha256:8f1c9e4b8e413da211dd7942440cf410ff0eafb081309e04e81f4fafbb146bf2"}, + {file = "Cython-3.0.2.tar.gz", hash = "sha256:9594818dca8bb22ae6580c5222da2bc5cc32334350bd2d294a00d8669bcc61b5"}, ] [[package]] name = "data-science-types" version = "0.2.23" description = "Type stubs for Python machine learning libraries" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -887,65 +861,62 @@ dev = ["black", "flake8", "flake8-pyi", "matplotlib", "mypy (==0.770)", "numpy", [[package]] name = "dearpygui" -version = "1.9.1" +version = "1.10.0" description = "DearPyGui: A simple Python GUI Toolkit" -category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "dearpygui-1.9.1-cp310-cp310-macosx_10_6_x86_64.whl", hash = "sha256:055d3399bdf0cfa03a06ceed2a213c304f7eea314bc57032d9a06b1e8f6ec400"}, - {file = "dearpygui-1.9.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0c7ce1000004078f4d6ceb26b99df17118ae6d412aba60d0b4b217588d3cbfc7"}, - {file = "dearpygui-1.9.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:5a006fe44590c362a03fe451237074ed99563d0334f1bc6ec6c7d498eca41e46"}, - {file = "dearpygui-1.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:2982e456dbe2be5bf7e398af6e1f9ea16d8bfdc90e00d83b9c17c834d210cb7a"}, - {file = "dearpygui-1.9.1-cp311-cp311-macosx_10_6_x86_64.whl", hash = "sha256:8a031bcd0e58083dd0f48ada33ec86a2379f47fc56d8e199aef481237ceda774"}, - {file = "dearpygui-1.9.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c16181743f79b2d2809d24e696a5e5144135ad61ee10072ce1430bc5724ee5c1"}, - {file = "dearpygui-1.9.1-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:64cba064a5b6dac96abd8fb88fdb61842ca75668bdca364fbd52b9151adc6eb9"}, - {file = "dearpygui-1.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:b687bfa9e5dd34cb84e144ad307ec4d0fa8ad7c43f37a0cbd68d018a93f0d240"}, - {file = "dearpygui-1.9.1-cp37-cp37m-macosx_10_6_x86_64.whl", hash = "sha256:fa37c0f95a202fefba86e0f9e422357e24297f65554c06d8cf68b71b3671f278"}, - {file = "dearpygui-1.9.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:10310d34ef998cc201b13915a8742d6a69bf32a17c999bea2abfdf12a14bce31"}, - {file = "dearpygui-1.9.1-cp37-cp37m-win_amd64.whl", hash = "sha256:1a05cc0adeb9cba19181eafe2418c1b6e2004624b350a619c0e7b3c92ff0966c"}, - {file = "dearpygui-1.9.1-cp38-cp38-macosx_10_6_x86_64.whl", hash = "sha256:d6d8fc7c6b8d97e972d4343b871ea789da39d89c9f7a5bb7bb106b4053fb1c69"}, - {file = "dearpygui-1.9.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:1a308bc9bc21830a5c4d3f205559741a29bc191283dfa4ed5d24ae23a1e93dc2"}, - {file = "dearpygui-1.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:23b954f304bcf63e0c9aa5c16344f1d44e034ca5c6e0764e05bd1c0b0bd10173"}, - {file = "dearpygui-1.9.1-cp39-cp39-macosx_10_6_x86_64.whl", hash = "sha256:069b557fd20cbbf0b13a0c41d16366eb7adb1c895fff1cd6653e472acee5ef5c"}, - {file = "dearpygui-1.9.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7646f0b80e0b94acd1e0232f32d5fe67b31d0e7b1921fb4947ee551d8b90ba86"}, - {file = "dearpygui-1.9.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7394cba85ef6495091e7806c9a9b7ae03463d77a84b507329dc2d5a42e6581c7"}, - {file = "dearpygui-1.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:caebf2e331a8d9f945806aaa2cd8a308cb2712c11b1484aee967ad031d79e0d1"}, + {file = "dearpygui-1.10.0-cp310-cp310-macosx_10_6_x86_64.whl", hash = "sha256:e3c9184bca4ce1192d0ea78fa44581a5ebfae0ea2738570f83a0c1b93d7fe067"}, + {file = "dearpygui-1.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:970f42ac7a54ad9cf90489a8a767770e4a7631d1a5844c493d24d02e43ca2249"}, + {file = "dearpygui-1.10.0-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:52fb640ac00f385f31a86666301228f7608f76b07eaa37f1bbf86809d6efae0b"}, + {file = "dearpygui-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:f580a25cbb067f548a377875a82171cceb5f803591775db7b56687945ecc5841"}, + {file = "dearpygui-1.10.0-cp311-cp311-macosx_10_6_x86_64.whl", hash = "sha256:8f676b5f81bb56352602ac3b88a72ad12c412aa90db3ade1243caf0efa317147"}, + {file = "dearpygui-1.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ab6ee39a29f51a3c836a4c5562db5198ea6d161c9484136035324b97b0cad754"}, + {file = "dearpygui-1.10.0-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:616907fc1a50d17587ba689e14490aa38b012df58decd2d747fc59acb3a1f4fe"}, + {file = "dearpygui-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:b697fc0d5c17b0612ed82bd65eda791d4871dda9d4d7c48a43d5093a7f04f3b8"}, + {file = "dearpygui-1.10.0-cp37-cp37m-macosx_10_6_x86_64.whl", hash = "sha256:7183ca9e3aa168d920b3cbb97afcf31b62eadefe5778a5365af0348e37e7f683"}, + {file = "dearpygui-1.10.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:8d274f59ec0652991a75dc4e5e383d168c8c3960cf57797ee6bca6576027ef94"}, + {file = "dearpygui-1.10.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1a4ac7ef9a585dcfd2214629c0997a80efb45be598dbdea445129f6d623b2bc8"}, + {file = "dearpygui-1.10.0-cp38-cp38-macosx_10_6_x86_64.whl", hash = "sha256:59c5fae21fa916d7100cc0d1bcc62837b37815aea962fff3d2c9c5b725107c38"}, + {file = "dearpygui-1.10.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8525dff74c75ec3ae9969e2dc36e61984b3ea89b2f1245e5c95fd3b816f22741"}, + {file = "dearpygui-1.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:fcda36f7b86ce68d98eafc743d4ff43f3fb70d1b02ee146bf37fc66f753e0d7f"}, + {file = "dearpygui-1.10.0-cp39-cp39-macosx_10_6_x86_64.whl", hash = "sha256:89b0c973073f73e08275480fd6e5162bf30623910af6ffd405bdac6eb4943ec7"}, + {file = "dearpygui-1.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fd466db6aa6c9754cfb6bdffef74ba0e5aaa2b1c330dc9d0e4dc2197223fcdd6"}, + {file = "dearpygui-1.10.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:8d1028b663bd69efa3cf89e210f7b3eca02ac36a7e184b5534f5e5c776feb16d"}, + {file = "dearpygui-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:59342047f413ed53c545b179aa191767ddd76ad03ba6c3828d041ef5d9cfe26f"}, ] [[package]] name = "debugpy" -version = "1.6.7.post1" +version = "1.8.0" description = "An implementation of the Debug Adapter Protocol for Python" -category = "main" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "debugpy-1.6.7.post1-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:903bd61d5eb433b6c25b48eae5e23821d4c1a19e25c9610205f5aeaccae64e32"}, - {file = "debugpy-1.6.7.post1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d16882030860081e7dd5aa619f30dec3c2f9a421e69861125f83cc372c94e57d"}, - {file = "debugpy-1.6.7.post1-cp310-cp310-win32.whl", hash = "sha256:eea8d8cfb9965ac41b99a61f8e755a8f50e9a20330938ad8271530210f54e09c"}, - {file = "debugpy-1.6.7.post1-cp310-cp310-win_amd64.whl", hash = "sha256:85969d864c45f70c3996067cfa76a319bae749b04171f2cdeceebe4add316155"}, - {file = "debugpy-1.6.7.post1-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:890f7ab9a683886a0f185786ffbda3b46495c4b929dab083b8c79d6825832a52"}, - {file = "debugpy-1.6.7.post1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4ac7a4dba28801d184b7fc0e024da2635ca87d8b0a825c6087bb5168e3c0d28"}, - {file = "debugpy-1.6.7.post1-cp37-cp37m-win32.whl", hash = "sha256:3370ef1b9951d15799ef7af41f8174194f3482ee689988379763ef61a5456426"}, - {file = "debugpy-1.6.7.post1-cp37-cp37m-win_amd64.whl", hash = "sha256:65b28435a17cba4c09e739621173ff90c515f7b9e8ea469b92e3c28ef8e5cdfb"}, - {file = "debugpy-1.6.7.post1-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:92b6dae8bfbd497c90596bbb69089acf7954164aea3228a99d7e43e5267f5b36"}, - {file = "debugpy-1.6.7.post1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72f5d2ecead8125cf669e62784ef1e6300f4067b0f14d9f95ee00ae06fc7c4f7"}, - {file = "debugpy-1.6.7.post1-cp38-cp38-win32.whl", hash = "sha256:f0851403030f3975d6e2eaa4abf73232ab90b98f041e3c09ba33be2beda43fcf"}, - {file = "debugpy-1.6.7.post1-cp38-cp38-win_amd64.whl", hash = "sha256:3de5d0f97c425dc49bce4293df6a04494309eedadd2b52c22e58d95107e178d9"}, - {file = "debugpy-1.6.7.post1-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:38651c3639a4e8bbf0ca7e52d799f6abd07d622a193c406be375da4d510d968d"}, - {file = "debugpy-1.6.7.post1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:038c51268367c9c935905a90b1c2d2dbfe304037c27ba9d19fe7409f8cdc710c"}, - {file = "debugpy-1.6.7.post1-cp39-cp39-win32.whl", hash = "sha256:4b9eba71c290852f959d2cf8a03af28afd3ca639ad374d393d53d367f7f685b2"}, - {file = "debugpy-1.6.7.post1-cp39-cp39-win_amd64.whl", hash = "sha256:973a97ed3b434eab0f792719a484566c35328196540676685c975651266fccf9"}, - {file = "debugpy-1.6.7.post1-py2.py3-none-any.whl", hash = "sha256:1093a5c541af079c13ac8c70ab8b24d1d35c8cacb676306cf11e57f699c02926"}, - {file = "debugpy-1.6.7.post1.zip", hash = "sha256:fe87ec0182ef624855d05e6ed7e0b7cb1359d2ffa2a925f8ec2d22e98b75d0ca"}, + {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"}, ] [[package]] name = "decorator" version = "5.1.1" description = "Decorators for Humans" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -957,7 +928,6 @@ 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 = [ @@ -969,7 +939,6 @@ 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 = [ @@ -987,7 +956,6 @@ dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] name = "dill" version = "0.3.7" description = "serialize all of Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1002,7 +970,6 @@ graph = ["objgraph (>=1.7.2)"] name = "distlib" version = "0.3.7" description = "Distribution utilities" -category = "dev" optional = false python-versions = "*" files = [ @@ -1014,7 +981,6 @@ files = [ name = "docutils" version = "0.17.1" description = "Docutils -- Python Documentation Utilities" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -1022,28 +988,15 @@ files = [ {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, ] -[[package]] -name = "entrypoints" -version = "0.4" -description = "Discover and load entry points from installed packages." -category = "main" -optional = true -python-versions = ">=3.6" -files = [ - {file = "entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f"}, - {file = "entrypoints-0.4.tar.gz", hash = "sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4"}, -] - [[package]] name = "exceptiongroup" -version = "1.1.2" +version = "1.1.3" description = "Backport of PEP 654 (exception groups)" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.2-py3-none-any.whl", hash = "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f"}, - {file = "exceptiongroup-1.1.2.tar.gz", hash = "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5"}, + {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, + {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, ] [package.extras] @@ -1053,7 +1006,6 @@ test = ["pytest (>=6)"] name = "execnet" version = "2.0.2" description = "execnet: rapid multi-Python deployment" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1068,7 +1020,6 @@ testing = ["hatch", "pre-commit", "pytest", "tox"] name = "executing" version = "1.2.0" description = "Get the currently executing AST node of a frame, and other information" -category = "main" optional = true python-versions = "*" files = [ @@ -1083,7 +1034,6 @@ tests = ["asttokens", "littleutils", "pytest", "rich"] name = "fastjsonschema" version = "2.18.0" description = "Fastest Python implementation of JSON schema" -category = "main" optional = true python-versions = "*" files = [ @@ -1096,25 +1046,24 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc [[package]] name = "filelock" -version = "3.12.2" +version = "3.12.4" description = "A platform independent file lock." -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "filelock-3.12.2-py3-none-any.whl", hash = "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"}, - {file = "filelock-3.12.2.tar.gz", hash = "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81"}, + {file = "filelock-3.12.4-py3-none-any.whl", hash = "sha256:08c21d87ded6e2b9da6728c3dff51baf1dcecf973b768ef35bcbc3447edb9ad4"}, + {file = "filelock-3.12.4.tar.gz", hash = "sha256:2e6f249f1f3654291606e046b09f1fd5eac39b360664c27f5aad072012f8bcbd"}, ] [package.extras] -docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] +docs = ["furo (>=2023.7.26)", "sphinx (>=7.1.2)", "sphinx-autodoc-typehints (>=1.24)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3)", "diff-cover (>=7.7)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)", "pytest-timeout (>=2.1)"] +typing = ["typing-extensions (>=4.7.1)"] [[package]] name = "flake8" version = "3.9.2" description = "the modular source code checker: pep8 pyflakes and co" -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ @@ -1131,7 +1080,6 @@ pyflakes = ">=2.3.0,<2.4.0" name = "flake8-bugbear" version = "21.11.29" 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.6" files = [ @@ -1150,7 +1098,6 @@ dev = ["coverage", "hypothesis", "hypothesmith (>=0.2)", "pre-commit"] name = "flake8-builtins" version = "1.5.3" description = "Check for python builtins being used as variables or parameters." -category = "dev" optional = false python-versions = "*" files = [ @@ -1168,7 +1115,6 @@ test = ["coverage", "coveralls", "mock", "pytest", "pytest-cov"] 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 = [ @@ -1183,7 +1129,6 @@ 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 = [ @@ -1199,7 +1144,6 @@ 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 = [ @@ -1211,7 +1155,6 @@ 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 = [ @@ -1226,7 +1169,6 @@ flake8-plugin-utils = ">=1.3.2,<2.0.0" name = "flake8-rst-docstrings" version = "0.2.7" description = "Python docstring reStructuredText (RST) validator" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1243,7 +1185,6 @@ restructuredtext-lint = "*" 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 = [ @@ -1257,46 +1198,45 @@ flake8 = ">=3.7" [[package]] name = "fonttools" -version = "4.42.0" +version = "4.42.1" description = "Tools to manipulate font files" -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.42.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9c456d1f23deff64ffc8b5b098718e149279abdea4d8692dba69172fb6a0d597"}, - {file = "fonttools-4.42.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:150122ed93127a26bc3670ebab7e2add1e0983d30927733aec327ebf4255b072"}, - {file = "fonttools-4.42.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48e82d776d2e93f88ca56567509d102266e7ab2fb707a0326f032fe657335238"}, - {file = "fonttools-4.42.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58c1165f9b2662645de9b19a8c8bdd636b36294ccc07e1b0163856b74f10bafc"}, - {file = "fonttools-4.42.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2d6dc3fa91414ff4daa195c05f946e6a575bd214821e26d17ca50f74b35b0fe4"}, - {file = "fonttools-4.42.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fae4e801b774cc62cecf4a57b1eae4097903fced00c608d9e2bc8f84cd87b54a"}, - {file = "fonttools-4.42.0-cp310-cp310-win32.whl", hash = "sha256:b8600ae7dce6ec3ddfb201abb98c9d53abbf8064d7ac0c8a0d8925e722ccf2a0"}, - {file = "fonttools-4.42.0-cp310-cp310-win_amd64.whl", hash = "sha256:57b68eab183fafac7cd7d464a7bfa0fcd4edf6c67837d14fb09c1c20516cf20b"}, - {file = "fonttools-4.42.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0a1466713e54bdbf5521f2f73eebfe727a528905ff5ec63cda40961b4b1eea95"}, - {file = "fonttools-4.42.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3fb2a69870bfe143ec20b039a1c8009e149dd7780dd89554cc8a11f79e5de86b"}, - {file = "fonttools-4.42.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae881e484702efdb6cf756462622de81d4414c454edfd950b137e9a7352b3cb9"}, - {file = "fonttools-4.42.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27ec3246a088555629f9f0902f7412220c67340553ca91eb540cf247aacb1983"}, - {file = "fonttools-4.42.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8ece1886d12bb36c48c00b2031518877f41abae317e3a55620d38e307d799b7e"}, - {file = "fonttools-4.42.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:10dac980f2b975ef74532e2a94bb00e97a95b4595fb7f98db493c474d5f54d0e"}, - {file = "fonttools-4.42.0-cp311-cp311-win32.whl", hash = "sha256:83b98be5d291e08501bd4fc0c4e0f8e6e05b99f3924068b17c5c9972af6fff84"}, - {file = "fonttools-4.42.0-cp311-cp311-win_amd64.whl", hash = "sha256:e35bed436726194c5e6e094fdfb423fb7afaa0211199f9d245e59e11118c576c"}, - {file = "fonttools-4.42.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c36c904ce0322df01e590ba814d5d69e084e985d7e4c2869378671d79662a7d4"}, - {file = "fonttools-4.42.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d54e600a2bcfa5cdaa860237765c01804a03b08404d6affcd92942fa7315ffba"}, - {file = "fonttools-4.42.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01cfe02416b6d416c5c8d15e30315cbcd3e97d1b50d3b34b0ce59f742ef55258"}, - {file = "fonttools-4.42.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f81ed9065b4bd3f4f3ce8e4873cd6a6b3f4e92b1eddefde35d332c6f414acc3"}, - {file = "fonttools-4.42.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:685a4dd6cf31593b50d6d441feb7781a4a7ef61e19551463e14ed7c527b86f9f"}, - {file = "fonttools-4.42.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:329341ba3d86a36e482610db56b30705384cb23bd595eac8cbb045f627778e9d"}, - {file = "fonttools-4.42.0-cp38-cp38-win32.whl", hash = "sha256:4655c480a1a4d706152ff54f20e20cf7609084016f1df3851cce67cef768f40a"}, - {file = "fonttools-4.42.0-cp38-cp38-win_amd64.whl", hash = "sha256:6bd7e4777bff1dcb7c4eff4786998422770f3bfbef8be401c5332895517ba3fa"}, - {file = "fonttools-4.42.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a9b55d2a3b360e0c7fc5bd8badf1503ca1c11dd3a1cd20f2c26787ffa145a9c7"}, - {file = "fonttools-4.42.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0df8ef75ba5791e873c9eac2262196497525e3f07699a2576d3ab9ddf41cb619"}, - {file = "fonttools-4.42.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cd2363ea7728496827658682d049ffb2e98525e2247ca64554864a8cc945568"}, - {file = "fonttools-4.42.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d40673b2e927f7cd0819c6f04489dfbeb337b4a7b10fc633c89bf4f34ecb9620"}, - {file = "fonttools-4.42.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c8bf88f9e3ce347c716921804ef3a8330cb128284eb6c0b6c4b3574f3c580023"}, - {file = "fonttools-4.42.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:703101eb0490fae32baf385385d47787b73d9ea55253df43b487c89ec767e0d7"}, - {file = "fonttools-4.42.0-cp39-cp39-win32.whl", hash = "sha256:f0290ea7f9945174bd4dfd66e96149037441eb2008f3649094f056201d99e293"}, - {file = "fonttools-4.42.0-cp39-cp39-win_amd64.whl", hash = "sha256:ae7df0ae9ee2f3f7676b0ff6f4ebe48ad0acaeeeaa0b6839d15dbf0709f2c5ef"}, - {file = "fonttools-4.42.0-py3-none-any.whl", hash = "sha256:dfe7fa7e607f7e8b58d0c32501a3a7cac148538300626d1b930082c90ae7f6bd"}, - {file = "fonttools-4.42.0.tar.gz", hash = "sha256:614b1283dca88effd20ee48160518e6de275ce9b5456a3134d5f235523fc5065"}, + {file = "fonttools-4.42.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ed1a13a27f59d1fc1920394a7f596792e9d546c9ca5a044419dca70c37815d7c"}, + {file = "fonttools-4.42.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c9b1ce7a45978b821a06d375b83763b27a3a5e8a2e4570b3065abad240a18760"}, + {file = "fonttools-4.42.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f720fa82a11c0f9042376fd509b5ed88dab7e3cd602eee63a1af08883b37342b"}, + {file = "fonttools-4.42.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db55cbaea02a20b49fefbd8e9d62bd481aaabe1f2301dabc575acc6b358874fa"}, + {file = "fonttools-4.42.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3a35981d90feebeaef05e46e33e6b9e5b5e618504672ca9cd0ff96b171e4bfff"}, + {file = "fonttools-4.42.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:68a02bbe020dc22ee0540e040117535f06df9358106d3775e8817d826047f3fd"}, + {file = "fonttools-4.42.1-cp310-cp310-win32.whl", hash = "sha256:12a7c247d1b946829bfa2f331107a629ea77dc5391dfd34fdcd78efa61f354ca"}, + {file = "fonttools-4.42.1-cp310-cp310-win_amd64.whl", hash = "sha256:a398bdadb055f8de69f62b0fc70625f7cbdab436bbb31eef5816e28cab083ee8"}, + {file = "fonttools-4.42.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:689508b918332fb40ce117131633647731d098b1b10d092234aa959b4251add5"}, + {file = "fonttools-4.42.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9e36344e48af3e3bde867a1ca54f97c308735dd8697005c2d24a86054a114a71"}, + {file = "fonttools-4.42.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19b7db825c8adee96fac0692e6e1ecd858cae9affb3b4812cdb9d934a898b29e"}, + {file = "fonttools-4.42.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:113337c2d29665839b7d90b39f99b3cac731f72a0eda9306165a305c7c31d341"}, + {file = "fonttools-4.42.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:37983b6bdab42c501202500a2be3a572f50d4efe3237e0686ee9d5f794d76b35"}, + {file = "fonttools-4.42.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6ed2662a3d9c832afa36405f8748c250be94ae5dfc5283d668308391f2102861"}, + {file = "fonttools-4.42.1-cp311-cp311-win32.whl", hash = "sha256:179737095eb98332a2744e8f12037b2977f22948cf23ff96656928923ddf560a"}, + {file = "fonttools-4.42.1-cp311-cp311-win_amd64.whl", hash = "sha256:f2b82f46917d8722e6b5eafeefb4fb585d23babd15d8246c664cd88a5bddd19c"}, + {file = "fonttools-4.42.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:62f481ac772fd68901573956231aea3e4b1ad87b9b1089a61613a91e2b50bb9b"}, + {file = "fonttools-4.42.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f2f806990160d1ce42d287aa419df3ffc42dfefe60d473695fb048355fe0c6a0"}, + {file = "fonttools-4.42.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db372213d39fa33af667c2aa586a0c1235e88e9c850f5dd5c8e1f17515861868"}, + {file = "fonttools-4.42.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d18fc642fd0ac29236ff88ecfccff229ec0386090a839dd3f1162e9a7944a40"}, + {file = "fonttools-4.42.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8708b98c278012ad267ee8a7433baeb809948855e81922878118464b274c909d"}, + {file = "fonttools-4.42.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c95b0724a6deea2c8c5d3222191783ced0a2f09bd6d33f93e563f6f1a4b3b3a4"}, + {file = "fonttools-4.42.1-cp38-cp38-win32.whl", hash = "sha256:4aa79366e442dbca6e2c8595645a3a605d9eeabdb7a094d745ed6106816bef5d"}, + {file = "fonttools-4.42.1-cp38-cp38-win_amd64.whl", hash = "sha256:acb47f6f8680de24c1ab65ebde39dd035768e2a9b571a07c7b8da95f6c8815fd"}, + {file = "fonttools-4.42.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5fb289b7a815638a7613d46bcf324c9106804725b2bb8ad913c12b6958ffc4ec"}, + {file = "fonttools-4.42.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:53eb5091ddc8b1199330bb7b4a8a2e7995ad5d43376cadce84523d8223ef3136"}, + {file = "fonttools-4.42.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:46a0ec8adbc6ff13494eb0c9c2e643b6f009ce7320cf640de106fb614e4d4360"}, + {file = "fonttools-4.42.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cc7d685b8eeca7ae69dc6416833fbfea61660684b7089bca666067cb2937dcf"}, + {file = "fonttools-4.42.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:be24fcb80493b2c94eae21df70017351851652a37de514de553435b256b2f249"}, + {file = "fonttools-4.42.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:515607ec756d7865f23070682622c49d922901943697871fc292277cf1e71967"}, + {file = "fonttools-4.42.1-cp39-cp39-win32.whl", hash = "sha256:0eb79a2da5eb6457a6f8ab904838454accc7d4cccdaff1fd2bd3a0679ea33d64"}, + {file = "fonttools-4.42.1-cp39-cp39-win_amd64.whl", hash = "sha256:7286aed4ea271df9eab8d7a9b29e507094b51397812f7ce051ecd77915a6e26b"}, + {file = "fonttools-4.42.1-py3-none-any.whl", hash = "sha256:9398f244e28e0596e2ee6024f808b06060109e33ed38dcc9bded452fd9bbb853"}, + {file = "fonttools-4.42.1.tar.gz", hash = "sha256:c391cd5af88aacaf41dd7cfb96eeedfad297b5899a39e12f4c2c3706d0a3329d"}, ] [package.extras] @@ -1317,7 +1257,6 @@ 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 = [ @@ -1329,7 +1268,6 @@ files = [ name = "furo" version = "2022.9.29" description = "A clean customisable Sphinx documentation theme." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1347,7 +1285,6 @@ sphinx-basic-ng = "*" name = "gitdb" version = "4.0.10" description = "Git Object Database" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1360,24 +1297,25 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.32" +version = "3.1.37" 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.32-py3-none-any.whl", hash = "sha256:e3d59b1c2c6ebb9dfa7a184daf3b6dd4914237e7488a1730a6d8f6f5d0b4187f"}, - {file = "GitPython-3.1.32.tar.gz", hash = "sha256:8d9b8cb1e80b9735e8717c9362079d3ce4c6e5ddeebedd0361b228c3a67a62f6"}, + {file = "GitPython-3.1.37-py3-none-any.whl", hash = "sha256:5f4c4187de49616d710a77e98ddf17b4782060a1788df441846bddefbb89ab33"}, + {file = "GitPython-3.1.37.tar.gz", hash = "sha256:f9b9ddc0761c125d5780eab2d64be4873fc6817c2899cbcb34b02344bdc7bc54"}, ] [package.dependencies] gitdb = ">=4.0.1,<5" +[package.extras] +test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mypy", "pre-commit", "pytest", "pytest-cov", "pytest-sugar"] + [[package]] name = "glcontext" version = "2.4.0" description = "Portable OpenGL Context" -category = "main" optional = false python-versions = "*" files = [ @@ -1444,14 +1382,13 @@ files = [ [[package]] name = "identify" -version = "2.5.26" +version = "2.5.29" description = "File identification library for Python" -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "identify-2.5.26-py2.py3-none-any.whl", hash = "sha256:c22a8ead0d4ca11f1edd6c9418c3220669b3b7533ada0a0ffa6cc0ef85cf9b54"}, - {file = "identify-2.5.26.tar.gz", hash = "sha256:7243800bce2f58404ed41b7c002e53d4d22bcf3ae1b7900c2d7aefd95394bf7f"}, + {file = "identify-2.5.29-py2.py3-none-any.whl", hash = "sha256:24437fbf6f4d3fe6efd0eb9d67e24dd9106db99af5ceb27996a5f7895f24bf1b"}, + {file = "identify-2.5.29.tar.gz", hash = "sha256:d43d52b86b15918c137e3a74fff5224f60385cd0e9c38e99d07c257f02f151a5"}, ] [package.extras] @@ -1461,7 +1398,6 @@ license = ["ukkonen"] name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1473,7 +1409,6 @@ 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 = [ @@ -1485,7 +1420,6 @@ files = [ name = "importlib-metadata" version = "6.8.0" description = "Read metadata from Python packages" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1503,28 +1437,26 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs [[package]] name = "importlib-resources" -version = "6.0.1" +version = "6.1.0" description = "Read resources from Python packages" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_resources-6.0.1-py3-none-any.whl", hash = "sha256:134832a506243891221b88b4ae1213327eea96ceb4e407a00d790bb0626f45cf"}, - {file = "importlib_resources-6.0.1.tar.gz", hash = "sha256:4359457e42708462b9626a04657c6208ad799ceb41e5c58c57ffa0e6a098a5d4"}, + {file = "importlib_resources-6.1.0-py3-none-any.whl", hash = "sha256:aa50258bbfa56d4e33fbd8aa3ef48ded10d1735f11532b8df95388cc6bdb7e83"}, + {file = "importlib_resources-6.1.0.tar.gz", hash = "sha256:9d48dcccc213325e810fd723e7fbb45ccb39f6cf5c31f00cf2b965f5f10f3cb9"}, ] [package.dependencies] 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 (>=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"] +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)"] [[package]] name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1534,14 +1466,13 @@ files = [ [[package]] name = "ipykernel" -version = "6.25.1" +version = "6.25.2" description = "IPython Kernel for Jupyter" -category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "ipykernel-6.25.1-py3-none-any.whl", hash = "sha256:c8a2430b357073b37c76c21c52184db42f6b4b0e438e1eb7df3c4440d120497c"}, - {file = "ipykernel-6.25.1.tar.gz", hash = "sha256:050391364c0977e768e354bdb60cbbfbee7cbb943b1af1618382021136ffd42f"}, + {file = "ipykernel-6.25.2-py3-none-any.whl", hash = "sha256:2e2ee359baba19f10251b99415bb39de1e97d04e1fab385646f24f0596510b77"}, + {file = "ipykernel-6.25.2.tar.gz", hash = "sha256:f468ddd1f17acb48c8ce67fcfa49ba6d46d4f9ac0438c1f441be7c3d1372230b"}, ] [package.dependencies] @@ -1550,7 +1481,7 @@ comm = ">=0.1.1" debugpy = ">=1.6.5" ipython = ">=7.23.1" jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" matplotlib-inline = ">=0.1" nest-asyncio = "*" packaging = "*" @@ -1570,7 +1501,6 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio" name = "ipython" version = "8.12.2" description = "IPython: Productive Interactive Computing" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -1610,7 +1540,6 @@ test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pa name = "ipython-genutils" version = "0.2.0" description = "Vestigial utilities from IPython" -category = "main" optional = true python-versions = "*" files = [ @@ -1622,7 +1551,6 @@ files = [ name = "isoduration" version = "20.11.0" description = "Operations with ISO 8601 durations" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -1637,7 +1565,6 @@ arrow = ">=0.15.0" name = "isort" version = "5.12.0" description = "A Python utility / library to sort Python imports." -category = "dev" optional = false python-versions = ">=3.8.0" files = [ @@ -1655,7 +1582,6 @@ requirements-deprecated-finder = ["pip-api", "pipreqs"] name = "isosurfaces" version = "0.1.0" description = "Construct isolines/isosurfaces over a 2D/3D scalar field defined by a function (not a uniform grid)" -category = "main" optional = false python-versions = "*" files = [ @@ -1670,7 +1596,6 @@ numpy = "*" name = "jedi" version = "0.19.0" description = "An autocompletion tool for Python that can be used for text editors." -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -1690,7 +1615,6 @@ testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] name = "jinja2" version = "3.1.2" description = "A very fast and expressive template engine." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1708,7 +1632,6 @@ i18n = ["Babel (>=2.7)"] name = "json5" version = "0.9.14" description = "A Python implementation of the JSON5 data format." -category = "main" optional = true python-versions = "*" files = [ @@ -1723,7 +1646,6 @@ dev = ["hypothesis"] 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 = [ @@ -1733,14 +1655,13 @@ files = [ [[package]] name = "jsonschema" -version = "4.19.0" +version = "4.19.1" description = "An implementation of JSON Schema validation for Python" -category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "jsonschema-4.19.0-py3-none-any.whl", hash = "sha256:043dc26a3845ff09d20e4420d6012a9c91c9aa8999fa184e7efcfeccb41e32cb"}, - {file = "jsonschema-4.19.0.tar.gz", hash = "sha256:6e1e7569ac13be8139b2dd2c21a55d350066ee3f80df06c608b398cdc6f30e8f"}, + {file = "jsonschema-4.19.1-py3-none-any.whl", hash = "sha256:cd5f1f9ed9444e554b38ba003af06c0a8c2868131e56bfbef0550fb450c0330e"}, + {file = "jsonschema-4.19.1.tar.gz", hash = "sha256:ec84cc37cfa703ef7cd4928db24f9cb31428a5d0fa77747b8b51a847458e0bbf"}, ] [package.dependencies] @@ -1767,7 +1688,6 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- name = "jsonschema-specifications" version = "2023.7.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -1781,34 +1701,31 @@ referencing = ">=0.28.0" [[package]] name = "jupyter-client" -version = "7.4.9" +version = "8.3.1" description = "Jupyter protocol implementation and client libraries" -category = "main" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "jupyter_client-7.4.9-py3-none-any.whl", hash = "sha256:214668aaea208195f4c13d28eb272ba79f945fc0cf3f11c7092c20b2ca1980e7"}, - {file = "jupyter_client-7.4.9.tar.gz", hash = "sha256:52be28e04171f07aed8f20e1616a5a552ab9fee9cbbe6c1896ae170c3880d392"}, + {file = "jupyter_client-8.3.1-py3-none-any.whl", hash = "sha256:5eb9f55eb0650e81de6b7e34308d8b92d04fe4ec41cd8193a913979e33d8e1a5"}, + {file = "jupyter_client-8.3.1.tar.gz", hash = "sha256:60294b2d5b869356c893f57b1a877ea6510d60d45cf4b38057f1672d85699ac9"}, ] [package.dependencies] -entrypoints = "*" -jupyter-core = ">=4.9.2" -nest-asyncio = ">=1.5.4" +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" python-dateutil = ">=2.8.2" pyzmq = ">=23.0" tornado = ">=6.2" -traitlets = "*" +traitlets = ">=5.3" [package.extras] -doc = ["ipykernel", "myst-parser", "sphinx (>=1.3.6)", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] -test = ["codecov", "coverage", "ipykernel (>=6.12)", "ipython", "mypy", "pre-commit", "pytest", "pytest-asyncio (>=0.18)", "pytest-cov", "pytest-timeout"] +docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pytest", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] [[package]] name = "jupyter-core" version = "5.3.1" description = "Jupyter core package. A base package on which Jupyter projects rely." -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -1829,7 +1746,6 @@ test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] name = "jupyter-events" version = "0.7.0" description = "Jupyter Event System library" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -1853,14 +1769,13 @@ test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "p [[package]] name = "jupyter-server" -version = "2.7.0" +version = "2.7.3" 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.7.0-py3-none-any.whl", hash = "sha256:6a77912aff643e53fa14bdb2634884b52b784a4be77ce8e93f7283faed0f0849"}, - {file = "jupyter_server-2.7.0.tar.gz", hash = "sha256:36da0a266d31a41ac335a366c88933c17dfa5bb817a48f5c02c16d303bc9477f"}, + {file = "jupyter_server-2.7.3-py3-none-any.whl", hash = "sha256:8e4b90380b59d7a1e31086c4692231f2a2ea4cb269f5516e60aba72ce8317fc9"}, + {file = "jupyter_server-2.7.3.tar.gz", hash = "sha256:d4916c8581c4ebbc534cebdaa8eca2478d9f3bfdd88eae29fcab0120eac57649"}, ] [package.dependencies] @@ -1868,7 +1783,7 @@ anyio = ">=3.1.0" argon2-cffi = "*" jinja2 = "*" jupyter-client = ">=7.4.4" -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" jupyter-events = ">=0.6.0" jupyter-server-terminals = "*" nbconvert = ">=6.4.4" @@ -1878,7 +1793,7 @@ packaging = "*" prometheus-client = "*" pywinpty = {version = "*", markers = "os_name == \"nt\""} pyzmq = ">=24" -send2trash = "*" +send2trash = ">=1.8.2" terminado = ">=0.8.3" tornado = ">=6.2.0" traitlets = ">=5.6.0" @@ -1892,7 +1807,6 @@ test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-sc name = "jupyter-server-fileid" version = "0.9.0" description = "" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -1912,7 +1826,6 @@ test = ["jupyter-server[test] (>=1.15,<3)", "pytest", "pytest-cov"] name = "jupyter-server-terminals" version = "0.4.4" description = "A Jupyter Server Extension Providing Terminals." -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -1932,7 +1845,6 @@ test = ["coverage", "jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-cov", name = "jupyter-server-ydoc" version = "0.8.0" description = "A Jupyter Server Extension Providing Y Documents." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -1952,7 +1864,6 @@ test = ["coverage", "jupyter-server[test] (>=2.0.0a0)", "pytest (>=7.0)", "pytes name = "jupyter-ydoc" version = "0.2.5" description = "Document structures for collaborative editing using Ypy" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -1972,7 +1883,6 @@ test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-we name = "jupyterlab" version = "3.6.5" description = "JupyterLab computational environment" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -2001,7 +1911,6 @@ test = ["check-manifest", "coverage", "jupyterlab-server[test]", "pre-commit", " name = "jupyterlab-pygments" version = "0.2.2" description = "Pygments theme using JupyterLab CSS variables" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -2011,14 +1920,13 @@ files = [ [[package]] name = "jupyterlab-server" -version = "2.24.0" +version = "2.25.0" description = "A set of server components for JupyterLab and JupyterLab like applications." -category = "main" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "jupyterlab_server-2.24.0-py3-none-any.whl", hash = "sha256:5f077e142bb8dc9b843d960f940c513581bceca3793a0d80f9c67d9522c4e876"}, - {file = "jupyterlab_server-2.24.0.tar.gz", hash = "sha256:4e6f99e0a5579bbbc32e449c4dbb039561d4f1a7827d5733273ed56738f21f07"}, + {file = "jupyterlab_server-2.25.0-py3-none-any.whl", hash = "sha256:c9f67a98b295c5dee87f41551b0558374e45d449f3edca153dd722140630dcb2"}, + {file = "jupyterlab_server-2.25.0.tar.gz", hash = "sha256:77c2f1f282d610f95e496e20d5bf1d2a7706826dfb7b18f3378ae2870d272fb7"}, ] [package.dependencies] @@ -2026,99 +1934,133 @@ babel = ">=2.10" importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} jinja2 = ">=3.0.3" json5 = ">=0.9.0" -jsonschema = ">=4.17.3" +jsonschema = ">=4.18.0" jupyter-server = ">=1.21,<3" packaging = ">=21.3" -requests = ">=2.28" +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.16.1,<0.17.0)", "ruamel-yaml"] -test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1,<0.7.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] +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.7.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"] [[package]] name = "kiwisolver" -version = "1.4.4" +version = "1.4.5" description = "A fast implementation of the Cassowary constraint solver" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "kiwisolver-1.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2f5e60fabb7343a836360c4f0919b8cd0d6dbf08ad2ca6b9cf90bf0c76a3c4f6"}, - {file = "kiwisolver-1.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:10ee06759482c78bdb864f4109886dff7b8a56529bc1609d4f1112b93fe6423c"}, - {file = "kiwisolver-1.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c79ebe8f3676a4c6630fd3f777f3cfecf9289666c84e775a67d1d358578dc2e3"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:abbe9fa13da955feb8202e215c4018f4bb57469b1b78c7a4c5c7b93001699938"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7577c1987baa3adc4b3c62c33bd1118c3ef5c8ddef36f0f2c950ae0b199e100d"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8ad8285b01b0d4695102546b342b493b3ccc6781fc28c8c6a1bb63e95d22f09"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ed58b8acf29798b036d347791141767ccf65eee7f26bde03a71c944449e53de"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a68b62a02953b9841730db7797422f983935aeefceb1679f0fc85cbfbd311c32"}, - {file = "kiwisolver-1.4.4-cp310-cp310-win32.whl", hash = "sha256:e92a513161077b53447160b9bd8f522edfbed4bd9759e4c18ab05d7ef7e49408"}, - {file = "kiwisolver-1.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:3fe20f63c9ecee44560d0e7f116b3a747a5d7203376abeea292ab3152334d004"}, - {file = "kiwisolver-1.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e0ea21f66820452a3f5d1655f8704a60d66ba1191359b96541eaf457710a5fc6"}, - {file = "kiwisolver-1.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bc9db8a3efb3e403e4ecc6cd9489ea2bac94244f80c78e27c31dcc00d2790ac2"}, - {file = "kiwisolver-1.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d5b61785a9ce44e5a4b880272baa7cf6c8f48a5180c3e81c59553ba0cb0821ca"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2dbb44c3f7e6c4d3487b31037b1bdbf424d97687c1747ce4ff2895795c9bf69"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6295ecd49304dcf3bfbfa45d9a081c96509e95f4b9d0eb7ee4ec0530c4a96514"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4bd472dbe5e136f96a4b18f295d159d7f26fd399136f5b17b08c4e5f498cd494"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf7d9fce9bcc4752ca4a1b80aabd38f6d19009ea5cbda0e0856983cf6d0023f5"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78d6601aed50c74e0ef02f4204da1816147a6d3fbdc8b3872d263338a9052c51"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:877272cf6b4b7e94c9614f9b10140e198d2186363728ed0f701c6eee1baec1da"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:db608a6757adabb32f1cfe6066e39b3706d8c3aa69bbc353a5b61edad36a5cb4"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:5853eb494c71e267912275e5586fe281444eb5e722de4e131cddf9d442615626"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:f0a1dbdb5ecbef0d34eb77e56fcb3e95bbd7e50835d9782a45df81cc46949750"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:283dffbf061a4ec60391d51e6155e372a1f7a4f5b15d59c8505339454f8989e4"}, - {file = "kiwisolver-1.4.4-cp311-cp311-win32.whl", hash = "sha256:d06adcfa62a4431d404c31216f0f8ac97397d799cd53800e9d3efc2fbb3cf14e"}, - {file = "kiwisolver-1.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:e7da3fec7408813a7cebc9e4ec55afed2d0fd65c4754bc376bf03498d4e92686"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:62ac9cc684da4cf1778d07a89bf5f81b35834cb96ca523d3a7fb32509380cbf6"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41dae968a94b1ef1897cb322b39360a0812661dba7c682aa45098eb8e193dbdf"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02f79693ec433cb4b5f51694e8477ae83b3205768a6fb48ffba60549080e295b"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0611a0a2a518464c05ddd5a3a1a0e856ccc10e67079bb17f265ad19ab3c7597"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:db5283d90da4174865d520e7366801a93777201e91e79bacbac6e6927cbceede"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1041feb4cda8708ce73bb4dcb9ce1ccf49d553bf87c3954bdfa46f0c3f77252c"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-win32.whl", hash = "sha256:a553dadda40fef6bfa1456dc4be49b113aa92c2a9a9e8711e955618cd69622e3"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-win_amd64.whl", hash = "sha256:03baab2d6b4a54ddbb43bba1a3a2d1627e82d205c5cf8f4c924dc49284b87166"}, - {file = "kiwisolver-1.4.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:841293b17ad704d70c578f1f0013c890e219952169ce8a24ebc063eecf775454"}, - {file = "kiwisolver-1.4.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f4f270de01dd3e129a72efad823da90cc4d6aafb64c410c9033aba70db9f1ff0"}, - {file = "kiwisolver-1.4.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f9f39e2f049db33a908319cf46624a569b36983c7c78318e9726a4cb8923b26c"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c97528e64cb9ebeff9701e7938653a9951922f2a38bd847787d4a8e498cc83ae"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d1573129aa0fd901076e2bfb4275a35f5b7aa60fbfb984499d661ec950320b0"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad881edc7ccb9d65b0224f4e4d05a1e85cf62d73aab798943df6d48ab0cd79a1"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b428ef021242344340460fa4c9185d0b1f66fbdbfecc6c63eff4b7c29fad429d"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2e407cb4bd5a13984a6c2c0fe1845e4e41e96f183e5e5cd4d77a857d9693494c"}, - {file = "kiwisolver-1.4.4-cp38-cp38-win32.whl", hash = "sha256:75facbe9606748f43428fc91a43edb46c7ff68889b91fa31f53b58894503a191"}, - {file = "kiwisolver-1.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:5bce61af018b0cb2055e0e72e7d65290d822d3feee430b7b8203d8a855e78766"}, - {file = "kiwisolver-1.4.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8c808594c88a025d4e322d5bb549282c93c8e1ba71b790f539567932722d7bd8"}, - {file = "kiwisolver-1.4.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f0a71d85ecdd570ded8ac3d1c0f480842f49a40beb423bb8014539a9f32a5897"}, - {file = "kiwisolver-1.4.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b533558eae785e33e8c148a8d9921692a9fe5aa516efbdff8606e7d87b9d5824"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:efda5fc8cc1c61e4f639b8067d118e742b812c930f708e6667a5ce0d13499e29"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7c43e1e1206cd421cd92e6b3280d4385d41d7166b3ed577ac20444b6995a445f"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc8d3bd6c72b2dd9decf16ce70e20abcb3274ba01b4e1c96031e0c4067d1e7cd"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ea39b0ccc4f5d803e3337dd46bcce60b702be4d86fd0b3d7531ef10fd99a1ac"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:968f44fdbf6dd757d12920d63b566eeb4d5b395fd2d00d29d7ef00a00582aac9"}, - {file = "kiwisolver-1.4.4-cp39-cp39-win32.whl", hash = "sha256:da7e547706e69e45d95e116e6939488d62174e033b763ab1496b4c29b76fabea"}, - {file = "kiwisolver-1.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:ba59c92039ec0a66103b1d5fe588fa546373587a7d68f5c96f743c3396afc04b"}, - {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:91672bacaa030f92fc2f43b620d7b337fd9a5af28b0d6ed3f77afc43c4a64b5a"}, - {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:787518a6789009c159453da4d6b683f468ef7a65bbde796bcea803ccf191058d"}, - {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da152d8cdcab0e56e4f45eb08b9aea6455845ec83172092f09b0e077ece2cf7a"}, - {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ecb1fa0db7bf4cff9dac752abb19505a233c7f16684c5826d1f11ebd9472b871"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:28bc5b299f48150b5f822ce68624e445040595a4ac3d59251703779836eceff9"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:81e38381b782cc7e1e46c4e14cd997ee6040768101aefc8fa3c24a4cc58e98f8"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2a66fdfb34e05b705620dd567f5a03f239a088d5a3f321e7b6ac3239d22aa286"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:872b8ca05c40d309ed13eb2e582cab0c5a05e81e987ab9c521bf05ad1d5cf5cb"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:70e7c2e7b750585569564e2e5ca9845acfaa5da56ac46df68414f29fea97be9f"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9f85003f5dfa867e86d53fac6f7e6f30c045673fa27b603c397753bebadc3008"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e307eb9bd99801f82789b44bb45e9f541961831c7311521b13a6c85afc09767"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1792d939ec70abe76f5054d3f36ed5656021dcad1322d1cc996d4e54165cef9"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6cb459eea32a4e2cf18ba5fcece2dbdf496384413bc1bae15583f19e567f3b2"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:36dafec3d6d6088d34e2de6b85f9d8e2324eb734162fba59d2ba9ed7a2043d5b"}, - {file = "kiwisolver-1.4.4.tar.gz", hash = "sha256:d41997519fcba4a1e46eb4a2fe31bc12f0ff957b2b81bac28db24744f333e955"}, + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:05703cf211d585109fcd72207a31bb170a0f22144d68298dc5e61b3c946518af"}, + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:146d14bebb7f1dc4d5fbf74f8a6cb15ac42baadee8912eb84ac0b3b2a3dc6ac3"}, + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ef7afcd2d281494c0a9101d5c571970708ad911d028137cd558f02b851c08b4"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9eaa8b117dc8337728e834b9c6e2611f10c79e38f65157c4c38e9400286f5cb1"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec20916e7b4cbfb1f12380e46486ec4bcbaa91a9c448b97023fde0d5bbf9e4ff"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39b42c68602539407884cf70d6a480a469b93b81b7701378ba5e2328660c847a"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa12042de0171fad672b6c59df69106d20d5596e4f87b5e8f76df757a7c399aa"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a40773c71d7ccdd3798f6489aaac9eee213d566850a9533f8d26332d626b82c"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:19df6e621f6d8b4b9c4d45f40a66839294ff2bb235e64d2178f7522d9170ac5b"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:83d78376d0d4fd884e2c114d0621624b73d2aba4e2788182d286309ebdeed770"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e391b1f0a8a5a10ab3b9bb6afcfd74f2175f24f8975fb87ecae700d1503cdee0"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:852542f9481f4a62dbb5dd99e8ab7aedfeb8fb6342349a181d4036877410f525"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59edc41b24031bc25108e210c0def6f6c2191210492a972d585a06ff246bb79b"}, + {file = "kiwisolver-1.4.5-cp310-cp310-win32.whl", hash = "sha256:a6aa6315319a052b4ee378aa171959c898a6183f15c1e541821c5c59beaa0238"}, + {file = "kiwisolver-1.4.5-cp310-cp310-win_amd64.whl", hash = "sha256:d0ef46024e6a3d79c01ff13801cb19d0cad7fd859b15037aec74315540acc276"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:11863aa14a51fd6ec28688d76f1735f8f69ab1fabf388851a595d0721af042f5"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ab3919a9997ab7ef2fbbed0cc99bb28d3c13e6d4b1ad36e97e482558a91be90"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fcc700eadbbccbf6bc1bcb9dbe0786b4b1cb91ca0dcda336eef5c2beed37b797"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfdd7c0b105af050eb3d64997809dc21da247cf44e63dc73ff0fd20b96be55a9"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76c6a5964640638cdeaa0c359382e5703e9293030fe730018ca06bc2010c4437"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbea0db94288e29afcc4c28afbf3a7ccaf2d7e027489c449cf7e8f83c6346eb9"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ceec1a6bc6cab1d6ff5d06592a91a692f90ec7505d6463a88a52cc0eb58545da"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:040c1aebeda72197ef477a906782b5ab0d387642e93bda547336b8957c61022e"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f91de7223d4c7b793867797bacd1ee53bfe7359bd70d27b7b58a04efbb9436c8"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:faae4860798c31530dd184046a900e652c95513796ef51a12bc086710c2eec4d"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0157420efcb803e71d1b28e2c287518b8808b7cf1ab8af36718fd0a2c453eb0"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:06f54715b7737c2fecdbf140d1afb11a33d59508a47bf11bb38ecf21dc9ab79f"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fdb7adb641a0d13bdcd4ef48e062363d8a9ad4a182ac7647ec88f695e719ae9f"}, + {file = "kiwisolver-1.4.5-cp311-cp311-win32.whl", hash = "sha256:bb86433b1cfe686da83ce32a9d3a8dd308e85c76b60896d58f082136f10bffac"}, + {file = "kiwisolver-1.4.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c08e1312a9cf1074d17b17728d3dfce2a5125b2d791527f33ffbe805200a355"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:32d5cf40c4f7c7b3ca500f8985eb3fb3a7dfc023215e876f207956b5ea26632a"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f846c260f483d1fd217fe5ed7c173fb109efa6b1fc8381c8b7552c5781756192"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5ff5cf3571589b6d13bfbfd6bcd7a3f659e42f96b5fd1c4830c4cf21d4f5ef45"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7269d9e5f1084a653d575c7ec012ff57f0c042258bf5db0954bf551c158466e7"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da802a19d6e15dffe4b0c24b38b3af68e6c1a68e6e1d8f30148c83864f3881db"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3aba7311af82e335dd1e36ffff68aaca609ca6290c2cb6d821a39aa075d8e3ff"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:763773d53f07244148ccac5b084da5adb90bfaee39c197554f01b286cf869228"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2270953c0d8cdab5d422bee7d2007f043473f9d2999631c86a223c9db56cbd16"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d099e745a512f7e3bbe7249ca835f4d357c586d78d79ae8f1dcd4d8adeb9bda9"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:74db36e14a7d1ce0986fa104f7d5637aea5c82ca6326ed0ec5694280942d1162"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e5bab140c309cb3a6ce373a9e71eb7e4873c70c2dda01df6820474f9889d6d4"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0f114aa76dc1b8f636d077979c0ac22e7cd8f3493abbab152f20eb8d3cda71f3"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:88a2df29d4724b9237fc0c6eaf2a1adae0cdc0b3e9f4d8e7dc54b16812d2d81a"}, + {file = "kiwisolver-1.4.5-cp312-cp312-win32.whl", hash = "sha256:72d40b33e834371fd330fb1472ca19d9b8327acb79a5821d4008391db8e29f20"}, + {file = "kiwisolver-1.4.5-cp312-cp312-win_amd64.whl", hash = "sha256:2c5674c4e74d939b9d91dda0fae10597ac7521768fec9e399c70a1f27e2ea2d9"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3a2b053a0ab7a3960c98725cfb0bf5b48ba82f64ec95fe06f1d06c99b552e130"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cd32d6c13807e5c66a7cbb79f90b553642f296ae4518a60d8d76243b0ad2898"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59ec7b7c7e1a61061850d53aaf8e93db63dce0c936db1fda2658b70e4a1be709"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da4cfb373035def307905d05041c1d06d8936452fe89d464743ae7fb8371078b"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2400873bccc260b6ae184b2b8a4fec0e4082d30648eadb7c3d9a13405d861e89"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1b04139c4236a0f3aff534479b58f6f849a8b351e1314826c2d230849ed48985"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:4e66e81a5779b65ac21764c295087de82235597a2293d18d943f8e9e32746265"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7931d8f1f67c4be9ba1dd9c451fb0eeca1a25b89e4d3f89e828fe12a519b782a"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:b3f7e75f3015df442238cca659f8baa5f42ce2a8582727981cbfa15fee0ee205"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:bbf1d63eef84b2e8c89011b7f2235b1e0bf7dacc11cac9431fc6468e99ac77fb"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4c380469bd3f970ef677bf2bcba2b6b0b4d5c75e7a020fb863ef75084efad66f"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-win32.whl", hash = "sha256:9408acf3270c4b6baad483865191e3e582b638b1654a007c62e3efe96f09a9a3"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-win_amd64.whl", hash = "sha256:5b94529f9b2591b7af5f3e0e730a4e0a41ea174af35a4fd067775f9bdfeee01a"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:11c7de8f692fc99816e8ac50d1d1aef4f75126eefc33ac79aac02c099fd3db71"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:53abb58632235cd154176ced1ae8f0d29a6657aa1aa9decf50b899b755bc2b93"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:88b9f257ca61b838b6f8094a62418421f87ac2a1069f7e896c36a7d86b5d4c29"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3195782b26fc03aa9c6913d5bad5aeb864bdc372924c093b0f1cebad603dd712"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc579bf0f502e54926519451b920e875f433aceb4624a3646b3252b5caa9e0b6"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a580c91d686376f0f7c295357595c5a026e6cbc3d77b7c36e290201e7c11ecb"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cfe6ab8da05c01ba6fbea630377b5da2cd9bcbc6338510116b01c1bc939a2c18"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d2e5a98f0ec99beb3c10e13b387f8db39106d53993f498b295f0c914328b1333"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a51a263952b1429e429ff236d2f5a21c5125437861baeed77f5e1cc2d2c7c6da"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3edd2fa14e68c9be82c5b16689e8d63d89fe927e56debd6e1dbce7a26a17f81b"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:74d1b44c6cfc897df648cc9fdaa09bc3e7679926e6f96df05775d4fb3946571c"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:76d9289ed3f7501012e05abb8358bbb129149dbd173f1f57a1bf1c22d19ab7cc"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:92dea1ffe3714fa8eb6a314d2b3c773208d865a0e0d35e713ec54eea08a66250"}, + {file = "kiwisolver-1.4.5-cp38-cp38-win32.whl", hash = "sha256:5c90ae8c8d32e472be041e76f9d2f2dbff4d0b0be8bd4041770eddb18cf49a4e"}, + {file = "kiwisolver-1.4.5-cp38-cp38-win_amd64.whl", hash = "sha256:c7940c1dc63eb37a67721b10d703247552416f719c4188c54e04334321351ced"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9407b6a5f0d675e8a827ad8742e1d6b49d9c1a1da5d952a67d50ef5f4170b18d"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15568384086b6df3c65353820a4473575dbad192e35010f622c6ce3eebd57af9"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0dc9db8e79f0036e8173c466d21ef18e1befc02de8bf8aa8dc0813a6dc8a7046"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cdc8a402aaee9a798b50d8b827d7ecf75edc5fb35ea0f91f213ff927c15f4ff0"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6c3bd3cde54cafb87d74d8db50b909705c62b17c2099b8f2e25b461882e544ff"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:955e8513d07a283056b1396e9a57ceddbd272d9252c14f154d450d227606eb54"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:346f5343b9e3f00b8db8ba359350eb124b98c99efd0b408728ac6ebf38173958"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9098e0049e88c6a24ff64545cdfc50807818ba6c1b739cae221bbbcbc58aad3"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:00bd361b903dc4bbf4eb165f24d1acbee754fce22ded24c3d56eec268658a5cf"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7b8b454bac16428b22560d0a1cf0a09875339cab69df61d7805bf48919415901"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f1d072c2eb0ad60d4c183f3fb44ac6f73fb7a8f16a2694a91f988275cbf352f9"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:31a82d498054cac9f6d0b53d02bb85811185bcb477d4b60144f915f3b3126342"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6512cb89e334e4700febbffaaa52761b65b4f5a3cf33f960213d5656cea36a77"}, + {file = "kiwisolver-1.4.5-cp39-cp39-win32.whl", hash = "sha256:9db8ea4c388fdb0f780fe91346fd438657ea602d58348753d9fb265ce1bca67f"}, + {file = "kiwisolver-1.4.5-cp39-cp39-win_amd64.whl", hash = "sha256:59415f46a37f7f2efeec758353dd2eae1b07640d8ca0f0c42548ec4125492635"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5c7b3b3a728dc6faf3fc372ef24f21d1e3cee2ac3e9596691d746e5a536de920"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:620ced262a86244e2be10a676b646f29c34537d0d9cc8eb26c08f53d98013390"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:378a214a1e3bbf5ac4a8708304318b4f890da88c9e6a07699c4ae7174c09a68d"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf7be1207676ac608a50cd08f102f6742dbfc70e8d60c4db1c6897f62f71523"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ba55dce0a9b8ff59495ddd050a0225d58bd0983d09f87cfe2b6aec4f2c1234e4"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fd32ea360bcbb92d28933fc05ed09bffcb1704ba3fc7942e81db0fd4f81a7892"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7139af55d1688f8b960ee9ad5adafc4ac17c1c473fe07133ac092310d76544"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dced8146011d2bc2e883f9bd68618b8247387f4bbec46d7392b3c3b032640126"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9bf3325c47b11b2e51bca0824ea217c7cd84491d8ac4eefd1e409705ef092bd"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5794cf59533bc3f1b1c821f7206a3617999db9fbefc345360aafe2e067514929"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e368f200bbc2e4f905b8e71eb38b3c04333bddaa6a2464a6355487b02bb7fb09"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5d706eba36b4c4d5bc6c6377bb6568098765e990cfc21ee16d13963fab7b3e7"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85267bd1aa8880a9c88a8cb71e18d3d64d2751a790e6ca6c27b8ccc724bcd5ad"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:210ef2c3a1f03272649aff1ef992df2e724748918c4bc2d5a90352849eb40bea"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11d011a7574eb3b82bcc9c1a1d35c1d7075677fdd15de527d91b46bd35e935ee"}, + {file = "kiwisolver-1.4.5.tar.gz", hash = "sha256:e57e563a57fb22a142da34f38acc2fc1a5c864bc29ca1517a88abc963e60d6ec"}, ] [[package]] name = "lazy-object-proxy" version = "1.9.0" description = "A fast and thorough lazy object proxy." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2164,7 +2106,6 @@ files = [ name = "manimpango" version = "0.4.3" description = "Bindings for Pango for using with Manim." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2190,7 +2131,6 @@ 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 = [ @@ -2265,7 +2205,6 @@ test = ["pytest"] name = "markdown-it-py" version = "2.2.0" description = "Python port of markdown-it. Markdown parsing, done right!" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2290,7 +2229,6 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] name = "markupsafe" version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2314,6 +2252,16 @@ files = [ {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, @@ -2348,53 +2296,58 @@ files = [ [[package]] name = "matplotlib" -version = "3.7.2" +version = "3.7.3" description = "Python plotting package" -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "matplotlib-3.7.2-cp310-cp310-macosx_10_12_universal2.whl", hash = "sha256:2699f7e73a76d4c110f4f25be9d2496d6ab4f17345307738557d345f099e07de"}, - {file = "matplotlib-3.7.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a8035ba590658bae7562786c9cc6ea1a84aa49d3afab157e414c9e2ea74f496d"}, - {file = "matplotlib-3.7.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2f8e4a49493add46ad4a8c92f63e19d548b2b6ebbed75c6b4c7f46f57d36cdd1"}, - {file = "matplotlib-3.7.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71667eb2ccca4c3537d9414b1bc00554cb7f91527c17ee4ec38027201f8f1603"}, - {file = "matplotlib-3.7.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:152ee0b569a37630d8628534c628456b28686e085d51394da6b71ef84c4da201"}, - {file = "matplotlib-3.7.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:070f8dddd1f5939e60aacb8fa08f19551f4b0140fab16a3669d5cd6e9cb28fc8"}, - {file = "matplotlib-3.7.2-cp310-cp310-win32.whl", hash = "sha256:fdbb46fad4fb47443b5b8ac76904b2e7a66556844f33370861b4788db0f8816a"}, - {file = "matplotlib-3.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:23fb1750934e5f0128f9423db27c474aa32534cec21f7b2153262b066a581fd1"}, - {file = "matplotlib-3.7.2-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:30e1409b857aa8a747c5d4f85f63a79e479835f8dffc52992ac1f3f25837b544"}, - {file = "matplotlib-3.7.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:50e0a55ec74bf2d7a0ebf50ac580a209582c2dd0f7ab51bc270f1b4a0027454e"}, - {file = "matplotlib-3.7.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ac60daa1dc83e8821eed155796b0f7888b6b916cf61d620a4ddd8200ac70cd64"}, - {file = "matplotlib-3.7.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:305e3da477dc8607336ba10bac96986d6308d614706cae2efe7d3ffa60465b24"}, - {file = "matplotlib-3.7.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c308b255efb9b06b23874236ec0f10f026673ad6515f602027cc8ac7805352d"}, - {file = "matplotlib-3.7.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60c521e21031632aa0d87ca5ba0c1c05f3daacadb34c093585a0be6780f698e4"}, - {file = "matplotlib-3.7.2-cp311-cp311-win32.whl", hash = "sha256:26bede320d77e469fdf1bde212de0ec889169b04f7f1179b8930d66f82b30cbc"}, - {file = "matplotlib-3.7.2-cp311-cp311-win_amd64.whl", hash = "sha256:af4860132c8c05261a5f5f8467f1b269bf1c7c23902d75f2be57c4a7f2394b3e"}, - {file = "matplotlib-3.7.2-cp38-cp38-macosx_10_12_universal2.whl", hash = "sha256:a1733b8e84e7e40a9853e505fe68cc54339f97273bdfe6f3ed980095f769ddc7"}, - {file = "matplotlib-3.7.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d9881356dc48e58910c53af82b57183879129fa30492be69058c5b0d9fddf391"}, - {file = "matplotlib-3.7.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f081c03f413f59390a80b3e351cc2b2ea0205839714dbc364519bcf51f4b56ca"}, - {file = "matplotlib-3.7.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1cd120fca3407a225168238b790bd5c528f0fafde6172b140a2f3ab7a4ea63e9"}, - {file = "matplotlib-3.7.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a2c1590b90aa7bd741b54c62b78de05d4186271e34e2377e0289d943b3522273"}, - {file = "matplotlib-3.7.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d2ff3c984b8a569bc1383cd468fc06b70d7b59d5c2854ca39f1436ae8394117"}, - {file = "matplotlib-3.7.2-cp38-cp38-win32.whl", hash = "sha256:5dea00b62d28654b71ca92463656d80646675628d0828e08a5f3b57e12869e13"}, - {file = "matplotlib-3.7.2-cp38-cp38-win_amd64.whl", hash = "sha256:0f506a1776ee94f9e131af1ac6efa6e5bc7cb606a3e389b0ccb6e657f60bb676"}, - {file = "matplotlib-3.7.2-cp39-cp39-macosx_10_12_universal2.whl", hash = "sha256:6515e878f91894c2e4340d81f0911857998ccaf04dbc1bba781e3d89cbf70608"}, - {file = "matplotlib-3.7.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:71f7a8c6b124e904db550f5b9fe483d28b896d4135e45c4ea381ad3b8a0e3256"}, - {file = "matplotlib-3.7.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:12f01b92ecd518e0697da4d97d163b2b3aa55eb3eb4e2c98235b3396d7dad55f"}, - {file = "matplotlib-3.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7e28d6396563955f7af437894a36bf2b279462239a41028323e04b85179058b"}, - {file = "matplotlib-3.7.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbcf59334ff645e6a67cd5f78b4b2cdb76384cdf587fa0d2dc85f634a72e1a3e"}, - {file = "matplotlib-3.7.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:318c89edde72ff95d8df67d82aca03861240512994a597a435a1011ba18dbc7f"}, - {file = "matplotlib-3.7.2-cp39-cp39-win32.whl", hash = "sha256:ce55289d5659b5b12b3db4dc9b7075b70cef5631e56530f14b2945e8836f2d20"}, - {file = "matplotlib-3.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:2ecb5be2b2815431c81dc115667e33da0f5a1bcf6143980d180d09a717c4a12e"}, - {file = "matplotlib-3.7.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:fdcd28360dbb6203fb5219b1a5658df226ac9bebc2542a9e8f457de959d713d0"}, - {file = "matplotlib-3.7.2-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c3cca3e842b11b55b52c6fb8bd6a4088693829acbfcdb3e815fa9b7d5c92c1b"}, - {file = "matplotlib-3.7.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebf577c7a6744e9e1bd3fee45fc74a02710b214f94e2bde344912d85e0c9af7c"}, - {file = "matplotlib-3.7.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:936bba394682049919dda062d33435b3be211dc3dcaa011e09634f060ec878b2"}, - {file = "matplotlib-3.7.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bc221ffbc2150458b1cd71cdd9ddd5bb37962b036e41b8be258280b5b01da1dd"}, - {file = "matplotlib-3.7.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35d74ebdb3f71f112b36c2629cf32323adfbf42679e2751252acd468f5001c07"}, - {file = "matplotlib-3.7.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:717157e61b3a71d3d26ad4e1770dc85156c9af435659a25ee6407dc866cb258d"}, - {file = "matplotlib-3.7.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:20f844d6be031948148ba49605c8b96dfe7d3711d1b63592830d650622458c11"}, - {file = "matplotlib-3.7.2.tar.gz", hash = "sha256:a8cdb91dddb04436bd2f098b8fdf4b81352e68cf4d2c6756fcc414791076569b"}, + {file = "matplotlib-3.7.3-cp310-cp310-macosx_10_12_universal2.whl", hash = "sha256:085c33b27561d9c04386789d5aa5eb4a932ddef43cfcdd0e01735f9a6e85ce0c"}, + {file = "matplotlib-3.7.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c568e80e1c17f68a727f30f591926751b97b98314d8e59804f54f86ae6fa6a22"}, + {file = "matplotlib-3.7.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7baf98c5ad59c5c4743ea884bb025cbffa52dacdfdac0da3e6021a285a90377e"}, + {file = "matplotlib-3.7.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:236024f582e40dac39bca592258888b38ae47a9fed7b8de652d68d3d02d47d2b"}, + {file = "matplotlib-3.7.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12b4f6795efea037ce2d41e7c417ad8bd02d5719c6ad4a8450a0708f4a1cfb89"}, + {file = "matplotlib-3.7.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78b2136cc6c5415b78977e0e8c608647d597204b05b1d9089ccf513c7d913733"}, + {file = "matplotlib-3.7.3-cp310-cp310-win32.whl", hash = "sha256:122dcbf9be0086e2a95d9e5e0632dbf3bd5b65eaa68c369363310a6c87753059"}, + {file = "matplotlib-3.7.3-cp310-cp310-win_amd64.whl", hash = "sha256:4aab27d9e33293389e3c1d7c881d414a72bdfda0fedc3a6bf46c6fa88d9b8015"}, + {file = "matplotlib-3.7.3-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:d5adc743de91e8e0b13df60deb1b1c285b8effea3d66223afceb14b63c9b05de"}, + {file = "matplotlib-3.7.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:55de4cf7cd0071b8ebf203981b53ab64f988a0a1f897a2dff300a1124e8bcd8b"}, + {file = "matplotlib-3.7.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ac03377fd908aaee2312d0b11735753e907adb6f4d1d102de5e2425249693f6c"}, + {file = "matplotlib-3.7.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:755bafc10a46918ce9a39980009b54b02dd249594e5adf52f9c56acfddb5d0b7"}, + {file = "matplotlib-3.7.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a6094c6f8e8d18db631754df4fe9a34dec3caf074f6869a7db09f18f9b1d6b2"}, + {file = "matplotlib-3.7.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:272dba2f1b107790ed78ebf5385b8d14b27ad9e90419de340364b49fe549a993"}, + {file = "matplotlib-3.7.3-cp311-cp311-win32.whl", hash = "sha256:591c123bed1cb4b9996fb60b41a6d89c2ec4943244540776c5f1283fb6960a53"}, + {file = "matplotlib-3.7.3-cp311-cp311-win_amd64.whl", hash = "sha256:3bf3a178c6504694cee8b88b353df0051583f2f6f8faa146f67115c27c856881"}, + {file = "matplotlib-3.7.3-cp312-cp312-macosx_10_12_universal2.whl", hash = "sha256:edf54cac8ee3603f3093616b40a931e8c063969756a4d78a86e82c2fea9659f7"}, + {file = "matplotlib-3.7.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:91e36a85ea639a1ba9f91427041eac064b04829945fe331a92617b6cb21d27e5"}, + {file = "matplotlib-3.7.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:caf5eaaf7c68f8d7df269dfbcaf46f48a70ff482bfcebdcc97519671023f2a7d"}, + {file = "matplotlib-3.7.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74bf57f505efea376097e948b7cdd87191a7ce8180616390aef496639edf601f"}, + {file = "matplotlib-3.7.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee152a88a0da527840a426535514b6ed8ac4240eb856b1da92cf48124320e346"}, + {file = "matplotlib-3.7.3-cp312-cp312-win_amd64.whl", hash = "sha256:67a410a9c9e07cbc83581eeea144bbe298870bf0ac0ee2f2e10a015ab7efee19"}, + {file = "matplotlib-3.7.3-cp38-cp38-macosx_10_12_universal2.whl", hash = "sha256:259999c05285cb993d7f2a419cea547863fa215379eda81f7254c9e932963729"}, + {file = "matplotlib-3.7.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:3f4e7fd5a6157e1d018ce2166ec8e531a481dd4a36f035b5c23edfe05a25419a"}, + {file = "matplotlib-3.7.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:faa3d12d8811d08d14080a8b7b9caea9a457dc495350166b56df0db4b9909ef5"}, + {file = "matplotlib-3.7.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:336e88900c11441e458da01c8414fc57e04e17f9d3bb94958a76faa2652bcf6b"}, + {file = "matplotlib-3.7.3-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:12f4c0dd8aa280d796c8772ea8265a14f11a04319baa3a16daa5556065e8baea"}, + {file = "matplotlib-3.7.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1990955b11e7918d256cf3b956b10997f405b7917a3f1c7d8e69c1d15c7b1930"}, + {file = "matplotlib-3.7.3-cp38-cp38-win32.whl", hash = "sha256:e78707b751260b42b721507ad7aa60fe4026d7f51c74cca6b9cd8b123ebb633a"}, + {file = "matplotlib-3.7.3-cp38-cp38-win_amd64.whl", hash = "sha256:e594ee43c59ea39ca5c6244667cac9d017a3527febc31f5532ad9135cf7469ec"}, + {file = "matplotlib-3.7.3-cp39-cp39-macosx_10_12_universal2.whl", hash = "sha256:6eaa1cf0e94c936a26b78f6d756c5fbc12e0a58c8a68b7248a2a31456ce4e234"}, + {file = "matplotlib-3.7.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:0a97af9d22e8ebedc9f00b043d9bbd29a375e9e10b656982012dded44c10fd77"}, + {file = "matplotlib-3.7.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1f9c6c16597af660433ab330b59ee2934b832ee1fabcaf5cbde7b2add840f31e"}, + {file = "matplotlib-3.7.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7240259b4b9cbc62381f6378cff4d57af539162a18e832c1e48042fabc40b6b"}, + {file = "matplotlib-3.7.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:747c6191d2e88ae854809e69aa358dbf852ff1a5738401b85c1cc9012309897a"}, + {file = "matplotlib-3.7.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec726b08a5275d827aa91bb951e68234a4423adb91cf65bc0fcdc0f2777663f7"}, + {file = "matplotlib-3.7.3-cp39-cp39-win32.whl", hash = "sha256:40e3b9b450c6534f07278310c4e34caff41c2a42377e4b9d47b0f8d3ac1083a2"}, + {file = "matplotlib-3.7.3-cp39-cp39-win_amd64.whl", hash = "sha256:dfc118642903a23e309b1da32886bb39a4314147d013e820c86b5fb4cb2e36d0"}, + {file = "matplotlib-3.7.3-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:165c8082bf8fc0360c24aa4724a22eaadbfd8c28bf1ccf7e94d685cad48261e4"}, + {file = "matplotlib-3.7.3-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ebd8470cc2a3594746ff0513aecbfa2c55ff6f58e6cef2efb1a54eb87c88ffa2"}, + {file = "matplotlib-3.7.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7153453669c9672b52095119fd21dd032d19225d48413a2871519b17db4b0fde"}, + {file = "matplotlib-3.7.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:498a08267dc69dd8f24c4b5d7423fa584d7ce0027ba71f7881df05fc09b89bb7"}, + {file = "matplotlib-3.7.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:d48999c4b19b5a0c058c9cd828ff6fc7748390679f6cf9a2ad653a3e802c87d3"}, + {file = "matplotlib-3.7.3-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22d65d18b4ee8070a5fea5761d59293f1f9e2fac37ec9ce090463b0e629432fd"}, + {file = "matplotlib-3.7.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c40cde976c36693cc0767e27cf5f443f91c23520060bd9496678364adfafe9c"}, + {file = "matplotlib-3.7.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:39018a2b17592448fbfdf4b8352955e6c3905359939791d4ff429296494d1a0c"}, + {file = "matplotlib-3.7.3.tar.gz", hash = "sha256:f09b3dd6bdeb588de91f853bbb2d6f0ff8ab693485b0c49035eaa510cb4f142e"}, ] [package.dependencies] @@ -2403,17 +2356,17 @@ cycler = ">=0.10" fonttools = ">=4.22.0" importlib-resources = {version = ">=3.2.0", markers = "python_version < \"3.10\""} kiwisolver = ">=1.0.1" -numpy = ">=1.20" +numpy = ">=1.20,<2" packaging = ">=20.0" pillow = ">=6.2.0" -pyparsing = ">=2.3.1,<3.1" +pyparsing = ">=2.3.1" python-dateutil = ">=2.7" +setuptools_scm = ">=7" [[package]] name = "matplotlib-inline" version = "0.1.6" description = "Inline Matplotlib backend for Jupyter" -category = "main" optional = true python-versions = ">=3.5" files = [ @@ -2428,7 +2381,6 @@ traitlets = "*" name = "mccabe" version = "0.6.1" description = "McCabe checker, plugin for flake8" -category = "dev" optional = false python-versions = "*" files = [ @@ -2440,7 +2392,6 @@ files = [ name = "mdit-py-plugins" version = "0.3.5" description = "Collection of plugins for markdown-it-py" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2460,7 +2411,6 @@ 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 = [ @@ -2472,7 +2422,6 @@ files = [ name = "mistune" version = "3.0.1" description = "A sane and fast Markdown parser with useful plugins and renderers" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -2484,7 +2433,6 @@ files = [ name = "moderngl" version = "5.8.2" description = "ModernGL: High performance rendering for Python 3" -category = "main" optional = false python-versions = "*" files = [ @@ -2547,7 +2495,6 @@ glcontext = ">=2.3.6,<3" name = "moderngl-window" version = "2.4.4" description = "A cross platform helper library for ModernGL making window creation and resource loading simple" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2576,7 +2523,6 @@ trimesh = ["scipy (>=1.3.2)", "trimesh (>=3.2.6,<4)"] name = "multipledispatch" version = "1.0.0" description = "Multiple dispatch" -category = "main" optional = false python-versions = "*" files = [ @@ -2588,7 +2534,6 @@ files = [ name = "mypy" version = "0.991" description = "Optional static typing for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2639,7 +2584,6 @@ reports = ["lxml"] 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 = [ @@ -2651,7 +2595,6 @@ files = [ name = "myst-parser" version = "0.17.2" description = "An extended commonmark compliant parser, with bridges to docutils & sphinx." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2678,7 +2621,6 @@ testing = ["beautifulsoup4", "coverage", "docutils (>=0.17.0,<0.18.0)", "pytest name = "nbclassic" version = "1.0.0" description = "Jupyter Notebook as a Jupyter Server extension." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -2714,7 +2656,6 @@ test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-jupyter", "pytest-p name = "nbclient" version = "0.8.0" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." -category = "main" optional = true python-versions = ">=3.8.0" files = [ @@ -2724,7 +2665,7 @@ files = [ [package.dependencies] jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" nbformat = ">=5.1" traitlets = ">=5.4" @@ -2735,14 +2676,13 @@ test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>= [[package]] name = "nbconvert" -version = "7.7.3" +version = "7.8.0" description = "Converting Jupyter Notebooks" -category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "nbconvert-7.7.3-py3-none-any.whl", hash = "sha256:3022adadff3f86578a47fab7c2228bb3ca9c56a24345642a22f917f6168b48fc"}, - {file = "nbconvert-7.7.3.tar.gz", hash = "sha256:4a5996bf5f3cd16aa0431897ba1aa4c64842c2079f434b3dc6b8c4b252ef3355"}, + {file = "nbconvert-7.8.0-py3-none-any.whl", hash = "sha256:aec605e051fa682ccc7934ccc338ba1e8b626cfadbab0db592106b630f63f0f2"}, + {file = "nbconvert-7.8.0.tar.gz", hash = "sha256:f5bc15a1247e14dd41ceef0c0a3bc70020e016576eb0578da62f1c5b4f950479"}, ] [package.dependencies] @@ -2776,7 +2716,6 @@ webpdf = ["playwright"] name = "nbformat" version = "5.9.2" description = "The Jupyter Notebook format" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -2796,21 +2735,19 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] [[package]] name = "nest-asyncio" -version = "1.5.7" +version = "1.5.8" description = "Patch asyncio to allow nested event loops" -category = "main" optional = true python-versions = ">=3.5" files = [ - {file = "nest_asyncio-1.5.7-py3-none-any.whl", hash = "sha256:5301c82941b550b3123a1ea772ba9a1c80bad3a182be8c1a5ae6ad3be57a9657"}, - {file = "nest_asyncio-1.5.7.tar.gz", hash = "sha256:6a80f7b98f24d9083ed24608977c09dd608d83f91cccc24c9d2cba6d10e01c10"}, + {file = "nest_asyncio-1.5.8-py3-none-any.whl", hash = "sha256:accda7a339a70599cb08f9dd09a67e0c2ef8d8d6f4c07f96ab203f2ae254e48d"}, + {file = "nest_asyncio-1.5.8.tar.gz", hash = "sha256:25aa2ca0d2a5b5531956b9e273b45cf664cae2b145101d73b86b199978d48fdb"}, ] [[package]] name = "networkx" version = "2.8.8" description = "Python package for creating and manipulating graphs and networks" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2829,7 +2766,6 @@ test = ["codecov (>=2.1)", "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 = [ @@ -2842,14 +2778,13 @@ setuptools = "*" [[package]] name = "notebook" -version = "6.5.5" +version = "6.5.4" description = "A web-based notebook environment for interactive computing" -category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "notebook-6.5.5-py3-none-any.whl", hash = "sha256:171039245a5b1a8f8233165091210632c21250ce2a652daed38fe8f94389984f"}, - {file = "notebook-6.5.5.tar.gz", hash = "sha256:457caa1fa1c647395420945b2b7559f603eedbc9aeb2a59a0c286c8029e31efa"}, + {file = "notebook-6.5.4-py3-none-any.whl", hash = "sha256:dd17e78aefe64c768737b32bf171c1c766666a21cc79a44d37a1700771cab56f"}, + {file = "notebook-6.5.4.tar.gz", hash = "sha256:517209568bd47261e2def27a140e97d49070602eea0d226a696f42a7f16c9a4e"}, ] [package.dependencies] @@ -2857,14 +2792,14 @@ argon2-cffi = "*" ipykernel = "*" ipython-genutils = "*" jinja2 = "*" -jupyter-client = ">=5.3.4,<8" +jupyter-client = ">=5.3.4" jupyter-core = ">=4.6.1" nbclassic = ">=0.4.7" nbconvert = ">=5" nbformat = "*" nest-asyncio = ">=1.5" prometheus-client = "*" -pyzmq = ">=17,<25" +pyzmq = ">=17" Send2Trash = ">=1.8.0" terminado = ">=0.8.3" tornado = ">=6.1" @@ -2879,7 +2814,6 @@ test = ["coverage", "nbval", "pytest", "pytest-cov", "requests", "requests-unixs name = "notebook-shim" version = "0.2.3" description = "A shim layer for notebook traits and config" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -2897,7 +2831,6 @@ test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync" name = "numpy" version = "1.24.4" description = "Fundamental package for array computing in Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2935,7 +2868,6 @@ files = [ name = "overrides" version = "7.4.0" description = "A decorator to automatically detect mismatch when overriding a method." -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -2947,7 +2879,6 @@ files = [ name = "packaging" version = "23.1" description = "Core utilities for Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2959,7 +2890,6 @@ files = [ name = "pandocfilters" version = "1.5.0" description = "Utilities for writing pandoc filters in python" -category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2971,7 +2901,6 @@ files = [ name = "parso" version = "0.8.3" description = "A Python Parser" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -2987,7 +2916,6 @@ testing = ["docopt", "pytest (<6.0.0)"] name = "pathspec" version = "0.11.2" description = "Utility library for gitignore style pattern matching of file paths." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2999,7 +2927,6 @@ files = [ name = "pexpect" version = "4.8.0" description = "Pexpect allows easy control of interactive console applications." -category = "main" optional = true python-versions = "*" files = [ @@ -3014,7 +2941,6 @@ ptyprocess = ">=0.5" name = "pickleshare" version = "0.7.5" description = "Tiny 'shelve'-like database with concurrency support" -category = "main" optional = true python-versions = "*" files = [ @@ -3026,7 +2952,6 @@ files = [ name = "pillow" version = "9.5.0" description = "Python Imaging Library (Fork)" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3106,7 +3031,6 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa name = "pkgutil-resolve-name" version = "1.3.10" description = "Resolve a name to an object." -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -3118,7 +3042,6 @@ files = [ name = "platformdirs" version = "3.10.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3132,14 +3055,13 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-co [[package]] name = "pluggy" -version = "1.2.0" +version = "1.3.0" description = "plugin and hook calling mechanisms for python" -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, - {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, + {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, + {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, ] [package.extras] @@ -3150,7 +3072,6 @@ testing = ["pytest", "pytest-benchmark"] name = "pre-commit" version = "2.21.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3169,7 +3090,6 @@ virtualenv = ">=20.10.0" name = "prometheus-client" version = "0.17.1" description = "Python client for the Prometheus monitoring system." -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -3184,7 +3104,6 @@ twisted = ["twisted"] name = "prompt-toolkit" version = "3.0.39" description = "Library for building powerful interactive command lines in Python" -category = "main" optional = true python-versions = ">=3.7.0" files = [ @@ -3199,7 +3118,6 @@ wcwidth = "*" name = "psutil" version = "5.9.5" 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.*" files = [ @@ -3226,7 +3144,6 @@ 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 = [ @@ -3252,7 +3169,6 @@ 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 = [ @@ -3264,7 +3180,6 @@ files = [ name = "pure-eval" version = "0.2.2" description = "Safely evaluate AST nodes without side effects" -category = "main" optional = true python-versions = "*" files = [ @@ -3279,7 +3194,6 @@ tests = ["pytest"] name = "py" version = "1.11.0" description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -3291,7 +3205,6 @@ files = [ name = "pycairo" version = "1.24.0" description = "Python interface for cairo" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -3312,7 +3225,6 @@ files = [ name = "pycodestyle" version = "2.7.0" description = "Python style guide checker" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -3324,7 +3236,6 @@ files = [ name = "pycparser" version = "2.21" description = "C parser in Python" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -3336,7 +3247,6 @@ files = [ name = "pydocstyle" version = "6.3.0" description = "Python docstring style checker" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -3354,7 +3264,6 @@ 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 = [ @@ -3366,7 +3275,6 @@ files = [ name = "pyflakes" version = "2.3.1" description = "passive checker of Python programs" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -3378,7 +3286,6 @@ files = [ name = "pygithub" version = "1.59.1" description = "Use the full Github API v3" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3396,7 +3303,6 @@ requests = ">=2.14.0" name = "pyglet" version = "2.0.9" description = "Cross-platform windowing and multimedia library" -category = "main" optional = false python-versions = "*" files = [ @@ -3408,7 +3314,6 @@ files = [ name = "pygments" version = "2.16.1" description = "Pygments is a syntax highlighting package written in Python." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3423,7 +3328,6 @@ plugins = ["importlib-metadata"] name = "pyjwt" version = "2.8.0" description = "JSON Web Token implementation in Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3444,7 +3348,6 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] name = "pylint" version = "2.17.5" description = "python code static checker" -category = "dev" optional = false python-versions = ">=3.7.2" files = [ @@ -3474,7 +3377,6 @@ testutils = ["gitpython (>3)"] 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 = [ @@ -3501,7 +3403,6 @@ tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] name = "pyobjc-core" version = "9.2" description = "Python<->ObjC Interoperability Module" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3519,7 +3420,6 @@ files = [ name = "pyobjc-framework-cocoa" version = "9.2" description = "Wrappers for the Cocoa frameworks on macOS" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3538,14 +3438,13 @@ pyobjc-core = ">=9.2" [[package]] name = "pyparsing" -version = "3.0.9" +version = "3.1.1" 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.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, - {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, + {file = "pyparsing-3.1.1-py3-none-any.whl", hash = "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb"}, + {file = "pyparsing-3.1.1.tar.gz", hash = "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db"}, ] [package.extras] @@ -3555,7 +3454,6 @@ diagrams = ["jinja2", "railroad-diagrams"] name = "pyrr" version = "0.10.3" description = "3D mathematical functions using NumPy" -category = "main" optional = false python-versions = "*" files = [ @@ -3569,14 +3467,13 @@ numpy = "*" [[package]] name = "pytest" -version = "7.4.0" +version = "7.4.2" description = "pytest: simple powerful testing with Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"}, - {file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"}, + {file = "pytest-7.4.2-py3-none-any.whl", hash = "sha256:1d881c6124e08ff0a1bb75ba3ec0bfd8b5354a01c194ddd5a0a870a48d99b002"}, + {file = "pytest-7.4.2.tar.gz", hash = "sha256:a766259cfab564a2ad52cb1aae1b881a75c3eb7e34ca3779697c23ed47c47069"}, ] [package.dependencies] @@ -3594,7 +3491,6 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no name = "pytest-cov" version = "3.0.0" description = "Pytest plugin for measuring coverage." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -3613,7 +3509,6 @@ 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 = [ @@ -3629,7 +3524,6 @@ 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 = [ @@ -3651,7 +3545,6 @@ testing = ["filelock"] name = "python-dateutil" version = "2.8.2" description = "Extensions to the standard Python datetime module" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ @@ -3666,7 +3559,6 @@ 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 = [ @@ -3676,21 +3568,19 @@ files = [ [[package]] name = "pytz" -version = "2023.3" +version = "2023.3.post1" description = "World timezone definitions, modern and historical" -category = "main" optional = false python-versions = "*" files = [ - {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, - {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, + {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, + {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, ] [[package]] name = "pywin32" version = "306" description = "Python for Window Extensions" -category = "main" optional = true python-versions = "*" files = [ @@ -3714,7 +3604,6 @@ files = [ name = "pywinpty" version = "2.0.11" description = "Pseudo terminal support for Windows from Python." -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -3729,7 +3618,6 @@ files = [ name = "pyyaml" version = "6.0.1" description = "YAML parser and emitter for Python" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -3787,97 +3675,113 @@ files = [ [[package]] name = "pyzmq" -version = "24.0.1" +version = "25.1.1" description = "Python bindings for 0MQ" -category = "main" optional = true python-versions = ">=3.6" files = [ - {file = "pyzmq-24.0.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:28b119ba97129d3001673a697b7cce47fe6de1f7255d104c2f01108a5179a066"}, - {file = "pyzmq-24.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bcbebd369493d68162cddb74a9c1fcebd139dfbb7ddb23d8f8e43e6c87bac3a6"}, - {file = "pyzmq-24.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae61446166983c663cee42c852ed63899e43e484abf080089f771df4b9d272ef"}, - {file = "pyzmq-24.0.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:87f7ac99b15270db8d53f28c3c7b968612993a90a5cf359da354efe96f5372b4"}, - {file = "pyzmq-24.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9dca7c3956b03b7663fac4d150f5e6d4f6f38b2462c1e9afd83bcf7019f17913"}, - {file = "pyzmq-24.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8c78bfe20d4c890cb5580a3b9290f700c570e167d4cdcc55feec07030297a5e3"}, - {file = "pyzmq-24.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:48f721f070726cd2a6e44f3c33f8ee4b24188e4b816e6dd8ba542c8c3bb5b246"}, - {file = "pyzmq-24.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:afe1f3bc486d0ce40abb0a0c9adb39aed3bbac36ebdc596487b0cceba55c21c1"}, - {file = "pyzmq-24.0.1-cp310-cp310-win32.whl", hash = "sha256:3e6192dbcefaaa52ed81be88525a54a445f4b4fe2fffcae7fe40ebb58bd06bfd"}, - {file = "pyzmq-24.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:86de64468cad9c6d269f32a6390e210ca5ada568c7a55de8e681ca3b897bb340"}, - {file = "pyzmq-24.0.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:838812c65ed5f7c2bd11f7b098d2e5d01685a3f6d1f82849423b570bae698c00"}, - {file = "pyzmq-24.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dfb992dbcd88d8254471760879d48fb20836d91baa90f181c957122f9592b3dc"}, - {file = "pyzmq-24.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7abddb2bd5489d30ffeb4b93a428130886c171b4d355ccd226e83254fcb6b9ef"}, - {file = "pyzmq-24.0.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:94010bd61bc168c103a5b3b0f56ed3b616688192db7cd5b1d626e49f28ff51b3"}, - {file = "pyzmq-24.0.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:8242543c522d84d033fe79be04cb559b80d7eb98ad81b137ff7e0a9020f00ace"}, - {file = "pyzmq-24.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ccb94342d13e3bf3ffa6e62f95b5e3f0bc6bfa94558cb37f4b3d09d6feb536ff"}, - {file = "pyzmq-24.0.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6640f83df0ae4ae1104d4c62b77e9ef39be85ebe53f636388707d532bee2b7b8"}, - {file = "pyzmq-24.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a180dbd5ea5d47c2d3b716d5c19cc3fb162d1c8db93b21a1295d69585bfddac1"}, - {file = "pyzmq-24.0.1-cp311-cp311-win32.whl", hash = "sha256:624321120f7e60336be8ec74a172ae7fba5c3ed5bf787cc85f7e9986c9e0ebc2"}, - {file = "pyzmq-24.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:1724117bae69e091309ffb8255412c4651d3f6355560d9af312d547f6c5bc8b8"}, - {file = "pyzmq-24.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:15975747462ec49fdc863af906bab87c43b2491403ab37a6d88410635786b0f4"}, - {file = "pyzmq-24.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b947e264f0e77d30dcbccbb00f49f900b204b922eb0c3a9f0afd61aaa1cedc3d"}, - {file = "pyzmq-24.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0ec91f1bad66f3ee8c6deb65fa1fe418e8ad803efedd69c35f3b5502f43bd1dc"}, - {file = "pyzmq-24.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:db03704b3506455d86ec72c3358a779e9b1d07b61220dfb43702b7b668edcd0d"}, - {file = "pyzmq-24.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:e7e66b4e403c2836ac74f26c4b65d8ac0ca1eef41dfcac2d013b7482befaad83"}, - {file = "pyzmq-24.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:7a23ccc1083c260fa9685c93e3b170baba45aeed4b524deb3f426b0c40c11639"}, - {file = "pyzmq-24.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:fa0ae3275ef706c0309556061185dd0e4c4cd3b7d6f67ae617e4e677c7a41e2e"}, - {file = "pyzmq-24.0.1-cp36-cp36m-win32.whl", hash = "sha256:f01de4ec083daebf210531e2cca3bdb1608dbbbe00a9723e261d92087a1f6ebc"}, - {file = "pyzmq-24.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:de4217b9eb8b541cf2b7fde4401ce9d9a411cc0af85d410f9d6f4333f43640be"}, - {file = "pyzmq-24.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:78068e8678ca023594e4a0ab558905c1033b2d3e806a0ad9e3094e231e115a33"}, - {file = "pyzmq-24.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77c2713faf25a953c69cf0f723d1b7dd83827b0834e6c41e3fb3bbc6765914a1"}, - {file = "pyzmq-24.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8bb4af15f305056e95ca1bd086239b9ebc6ad55e9f49076d27d80027f72752f6"}, - {file = "pyzmq-24.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0f14cffd32e9c4c73da66db97853a6aeceaac34acdc0fae9e5bbc9370281864c"}, - {file = "pyzmq-24.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0108358dab8c6b27ff6b985c2af4b12665c1bc659648284153ee501000f5c107"}, - {file = "pyzmq-24.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:d66689e840e75221b0b290b0befa86f059fb35e1ee6443bce51516d4d61b6b99"}, - {file = "pyzmq-24.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ae08ac90aa8fa14caafc7a6251bd218bf6dac518b7bff09caaa5e781119ba3f2"}, - {file = "pyzmq-24.0.1-cp37-cp37m-win32.whl", hash = "sha256:8421aa8c9b45ea608c205db9e1c0c855c7e54d0e9c2c2f337ce024f6843cab3b"}, - {file = "pyzmq-24.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:54d8b9c5e288362ec8595c1d98666d36f2070fd0c2f76e2b3c60fbad9bd76227"}, - {file = "pyzmq-24.0.1-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:acbd0a6d61cc954b9f535daaa9ec26b0a60a0d4353c5f7c1438ebc88a359a47e"}, - {file = "pyzmq-24.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:47b11a729d61a47df56346283a4a800fa379ae6a85870d5a2e1e4956c828eedc"}, - {file = "pyzmq-24.0.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:abe6eb10122f0d746a0d510c2039ae8edb27bc9af29f6d1b05a66cc2401353ff"}, - {file = "pyzmq-24.0.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:07bec1a1b22dacf718f2c0e71b49600bb6a31a88f06527dfd0b5aababe3fa3f7"}, - {file = "pyzmq-24.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0d945a85b70da97ae86113faf9f1b9294efe66bd4a5d6f82f2676d567338b66"}, - {file = "pyzmq-24.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1b7928bb7580736ffac5baf814097be342ba08d3cfdfb48e52773ec959572287"}, - {file = "pyzmq-24.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b946da90dc2799bcafa682692c1d2139b2a96ec3c24fa9fc6f5b0da782675330"}, - {file = "pyzmq-24.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c8840f064b1fb377cffd3efeaad2b190c14d4c8da02316dae07571252d20b31f"}, - {file = "pyzmq-24.0.1-cp38-cp38-win32.whl", hash = "sha256:4854f9edc5208f63f0841c0c667260ae8d6846cfa233c479e29fdc85d42ebd58"}, - {file = "pyzmq-24.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:42d4f97b9795a7aafa152a36fe2ad44549b83a743fd3e77011136def512e6c2a"}, - {file = "pyzmq-24.0.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:52afb0ac962963fff30cf1be775bc51ae083ef4c1e354266ab20e5382057dd62"}, - {file = "pyzmq-24.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bad8210ad4df68c44ff3685cca3cda448ee46e20d13edcff8909eba6ec01ca4"}, - {file = "pyzmq-24.0.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:dabf1a05318d95b1537fd61d9330ef4313ea1216eea128a17615038859da3b3b"}, - {file = "pyzmq-24.0.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5bd3d7dfd9cd058eb68d9a905dec854f86649f64d4ddf21f3ec289341386c44b"}, - {file = "pyzmq-24.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8012bce6836d3f20a6c9599f81dfa945f433dab4dbd0c4917a6fb1f998ab33d"}, - {file = "pyzmq-24.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c31805d2c8ade9b11feca4674eee2b9cce1fec3e8ddb7bbdd961a09dc76a80ea"}, - {file = "pyzmq-24.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:3104f4b084ad5d9c0cb87445cc8cfd96bba710bef4a66c2674910127044df209"}, - {file = "pyzmq-24.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:df0841f94928f8af9c7a1f0aaaffba1fb74607af023a152f59379c01c53aee58"}, - {file = "pyzmq-24.0.1-cp39-cp39-win32.whl", hash = "sha256:a435ef8a3bd95c8a2d316d6e0ff70d0db524f6037411652803e118871d703333"}, - {file = "pyzmq-24.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:2032d9cb994ce3b4cba2b8dfae08c7e25bc14ba484c770d4d3be33c27de8c45b"}, - {file = "pyzmq-24.0.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bb5635c851eef3a7a54becde6da99485eecf7d068bd885ac8e6d173c4ecd68b0"}, - {file = "pyzmq-24.0.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:83ea1a398f192957cb986d9206ce229efe0ee75e3c6635baff53ddf39bd718d5"}, - {file = "pyzmq-24.0.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:941fab0073f0a54dc33d1a0460cb04e0d85893cb0c5e1476c785000f8b359409"}, - {file = "pyzmq-24.0.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e8f482c44ccb5884bf3f638f29bea0f8dc68c97e38b2061769c4cb697f6140d"}, - {file = "pyzmq-24.0.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:613010b5d17906c4367609e6f52e9a2595e35d5cc27d36ff3f1b6fa6e954d944"}, - {file = "pyzmq-24.0.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:65c94410b5a8355cfcf12fd600a313efee46ce96a09e911ea92cf2acf6708804"}, - {file = "pyzmq-24.0.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:20e7eeb1166087db636c06cae04a1ef59298627f56fb17da10528ab52a14c87f"}, - {file = "pyzmq-24.0.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a2712aee7b3834ace51738c15d9ee152cc5a98dc7d57dd93300461b792ab7b43"}, - {file = "pyzmq-24.0.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a7c280185c4da99e0cc06c63bdf91f5b0b71deb70d8717f0ab870a43e376db8"}, - {file = "pyzmq-24.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:858375573c9225cc8e5b49bfac846a77b696b8d5e815711b8d4ba3141e6e8879"}, - {file = "pyzmq-24.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:80093b595921eed1a2cead546a683b9e2ae7f4a4592bb2ab22f70d30174f003a"}, - {file = "pyzmq-24.0.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f3f3154fde2b1ff3aa7b4f9326347ebc89c8ef425ca1db8f665175e6d3bd42f"}, - {file = "pyzmq-24.0.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abb756147314430bee5d10919b8493c0ccb109ddb7f5dfd2fcd7441266a25b75"}, - {file = "pyzmq-24.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44e706bac34e9f50779cb8c39f10b53a4d15aebb97235643d3112ac20bd577b4"}, - {file = "pyzmq-24.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:687700f8371643916a1d2c61f3fdaa630407dd205c38afff936545d7b7466066"}, - {file = "pyzmq-24.0.1.tar.gz", hash = "sha256:216f5d7dbb67166759e59b0479bca82b8acf9bed6015b526b8eb10143fb08e77"}, + {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:381469297409c5adf9a0e884c5eb5186ed33137badcbbb0560b86e910a2f1e76"}, + {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:955215ed0604dac5b01907424dfa28b40f2b2292d6493445dd34d0dfa72586a8"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:985bbb1316192b98f32e25e7b9958088431d853ac63aca1d2c236f40afb17c83"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:afea96f64efa98df4da6958bae37f1cbea7932c35878b185e5982821bc883369"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76705c9325d72a81155bb6ab48d4312e0032bf045fb0754889133200f7a0d849"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:77a41c26205d2353a4c94d02be51d6cbdf63c06fbc1295ea57dad7e2d3381b71"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:12720a53e61c3b99d87262294e2b375c915fea93c31fc2336898c26d7aed34cd"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:57459b68e5cd85b0be8184382cefd91959cafe79ae019e6b1ae6e2ba8a12cda7"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:292fe3fc5ad4a75bc8df0dfaee7d0babe8b1f4ceb596437213821f761b4589f9"}, + {file = "pyzmq-25.1.1-cp310-cp310-win32.whl", hash = "sha256:35b5ab8c28978fbbb86ea54958cd89f5176ce747c1fb3d87356cf698048a7790"}, + {file = "pyzmq-25.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:11baebdd5fc5b475d484195e49bae2dc64b94a5208f7c89954e9e354fc609d8f"}, + {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:d20a0ddb3e989e8807d83225a27e5c2eb2260eaa851532086e9e0fa0d5287d83"}, + {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e1c1be77bc5fb77d923850f82e55a928f8638f64a61f00ff18a67c7404faf008"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d89528b4943d27029a2818f847c10c2cecc79fa9590f3cb1860459a5be7933eb"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:90f26dc6d5f241ba358bef79be9ce06de58d477ca8485e3291675436d3827cf8"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2b92812bd214018e50b6380ea3ac0c8bb01ac07fcc14c5f86a5bb25e74026e9"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:2f957ce63d13c28730f7fd6b72333814221c84ca2421298f66e5143f81c9f91f"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:047a640f5c9c6ade7b1cc6680a0e28c9dd5a0825135acbd3569cc96ea00b2505"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7f7e58effd14b641c5e4dec8c7dab02fb67a13df90329e61c869b9cc607ef752"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c2910967e6ab16bf6fbeb1f771c89a7050947221ae12a5b0b60f3bca2ee19bca"}, + {file = "pyzmq-25.1.1-cp311-cp311-win32.whl", hash = "sha256:76c1c8efb3ca3a1818b837aea423ff8a07bbf7aafe9f2f6582b61a0458b1a329"}, + {file = "pyzmq-25.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:44e58a0554b21fc662f2712814a746635ed668d0fbc98b7cb9d74cb798d202e6"}, + {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:e1ffa1c924e8c72778b9ccd386a7067cddf626884fd8277f503c48bb5f51c762"}, + {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1af379b33ef33757224da93e9da62e6471cf4a66d10078cf32bae8127d3d0d4a"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cff084c6933680d1f8b2f3b4ff5bbb88538a4aac00d199ac13f49d0698727ecb"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2400a94f7dd9cb20cd012951a0cbf8249e3d554c63a9c0cdfd5cbb6c01d2dec"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d81f1ddae3858b8299d1da72dd7d19dd36aab654c19671aa8a7e7fb02f6638a"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:255ca2b219f9e5a3a9ef3081512e1358bd4760ce77828e1028b818ff5610b87b"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a882ac0a351288dd18ecae3326b8a49d10c61a68b01419f3a0b9a306190baf69"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:724c292bb26365659fc434e9567b3f1adbdb5e8d640c936ed901f49e03e5d32e"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ca1ed0bb2d850aa8471387882247c68f1e62a4af0ce9c8a1dbe0d2bf69e41fb"}, + {file = "pyzmq-25.1.1-cp312-cp312-win32.whl", hash = "sha256:b3451108ab861040754fa5208bca4a5496c65875710f76789a9ad27c801a0075"}, + {file = "pyzmq-25.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:eadbefd5e92ef8a345f0525b5cfd01cf4e4cc651a2cffb8f23c0dd184975d787"}, + {file = "pyzmq-25.1.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:db0b2af416ba735c6304c47f75d348f498b92952f5e3e8bff449336d2728795d"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7c133e93b405eb0d36fa430c94185bdd13c36204a8635470cccc200723c13bb"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:273bc3959bcbff3f48606b28229b4721716598d76b5aaea2b4a9d0ab454ec062"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cbc8df5c6a88ba5ae385d8930da02201165408dde8d8322072e3e5ddd4f68e22"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:18d43df3f2302d836f2a56f17e5663e398416e9dd74b205b179065e61f1a6edf"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:73461eed88a88c866656e08f89299720a38cb4e9d34ae6bf5df6f71102570f2e"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:34c850ce7976d19ebe7b9d4b9bb8c9dfc7aac336c0958e2651b88cbd46682123"}, + {file = "pyzmq-25.1.1-cp36-cp36m-win32.whl", hash = "sha256:d2045d6d9439a0078f2a34b57c7b18c4a6aef0bee37f22e4ec9f32456c852c71"}, + {file = "pyzmq-25.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:458dea649f2f02a0b244ae6aef8dc29325a2810aa26b07af8374dc2a9faf57e3"}, + {file = "pyzmq-25.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7cff25c5b315e63b07a36f0c2bab32c58eafbe57d0dce61b614ef4c76058c115"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1579413ae492b05de5a6174574f8c44c2b9b122a42015c5292afa4be2507f28"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3d0a409d3b28607cc427aa5c30a6f1e4452cc44e311f843e05edb28ab5e36da0"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:21eb4e609a154a57c520e3d5bfa0d97e49b6872ea057b7c85257b11e78068222"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:034239843541ef7a1aee0c7b2cb7f6aafffb005ede965ae9cbd49d5ff4ff73cf"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f8115e303280ba09f3898194791a153862cbf9eef722ad8f7f741987ee2a97c7"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1a5d26fe8f32f137e784f768143728438877d69a586ddeaad898558dc971a5ae"}, + {file = "pyzmq-25.1.1-cp37-cp37m-win32.whl", hash = "sha256:f32260e556a983bc5c7ed588d04c942c9a8f9c2e99213fec11a031e316874c7e"}, + {file = "pyzmq-25.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:abf34e43c531bbb510ae7e8f5b2b1f2a8ab93219510e2b287a944432fad135f3"}, + {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:87e34f31ca8f168c56d6fbf99692cc8d3b445abb5bfd08c229ae992d7547a92a"}, + {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c9c6c9b2c2f80747a98f34ef491c4d7b1a8d4853937bb1492774992a120f475d"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5619f3f5a4db5dbb572b095ea3cb5cc035335159d9da950830c9c4db2fbb6995"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5a34d2395073ef862b4032343cf0c32a712f3ab49d7ec4f42c9661e0294d106f"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25f0e6b78220aba09815cd1f3a32b9c7cb3e02cb846d1cfc526b6595f6046618"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3669cf8ee3520c2f13b2e0351c41fea919852b220988d2049249db10046a7afb"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2d163a18819277e49911f7461567bda923461c50b19d169a062536fffe7cd9d2"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:df27ffddff4190667d40de7beba4a950b5ce78fe28a7dcc41d6f8a700a80a3c0"}, + {file = "pyzmq-25.1.1-cp38-cp38-win32.whl", hash = "sha256:a382372898a07479bd34bda781008e4a954ed8750f17891e794521c3e21c2e1c"}, + {file = "pyzmq-25.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:52533489f28d62eb1258a965f2aba28a82aa747202c8fa5a1c7a43b5db0e85c1"}, + {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:03b3f49b57264909aacd0741892f2aecf2f51fb053e7d8ac6767f6c700832f45"}, + {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:330f9e188d0d89080cde66dc7470f57d1926ff2fb5576227f14d5be7ab30b9fa"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2ca57a5be0389f2a65e6d3bb2962a971688cbdd30b4c0bd188c99e39c234f414"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d457aed310f2670f59cc5b57dcfced452aeeed77f9da2b9763616bd57e4dbaae"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c56d748ea50215abef7030c72b60dd723ed5b5c7e65e7bc2504e77843631c1a6"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8f03d3f0d01cb5a018debeb412441996a517b11c5c17ab2001aa0597c6d6882c"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:820c4a08195a681252f46926de10e29b6bbf3e17b30037bd4250d72dd3ddaab8"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:17ef5f01d25b67ca8f98120d5fa1d21efe9611604e8eb03a5147360f517dd1e2"}, + {file = "pyzmq-25.1.1-cp39-cp39-win32.whl", hash = "sha256:04ccbed567171579ec2cebb9c8a3e30801723c575601f9a990ab25bcac6b51e2"}, + {file = "pyzmq-25.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:e61f091c3ba0c3578411ef505992d356a812fb200643eab27f4f70eed34a29ef"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ade6d25bb29c4555d718ac6d1443a7386595528c33d6b133b258f65f963bb0f6"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0c95ddd4f6e9fca4e9e3afaa4f9df8552f0ba5d1004e89ef0a68e1f1f9807c7"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48e466162a24daf86f6b5ca72444d2bf39a5e58da5f96370078be67c67adc978"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abc719161780932c4e11aaebb203be3d6acc6b38d2f26c0f523b5b59d2fc1996"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ccf825981640b8c34ae54231b7ed00271822ea1c6d8ba1090ebd4943759abf5"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c2f20ce161ebdb0091a10c9ca0372e023ce24980d0e1f810f519da6f79c60800"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:deee9ca4727f53464daf089536e68b13e6104e84a37820a88b0a057b97bba2d2"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:aa8d6cdc8b8aa19ceb319aaa2b660cdaccc533ec477eeb1309e2a291eaacc43a"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:019e59ef5c5256a2c7378f2fb8560fc2a9ff1d315755204295b2eab96b254d0a"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:b9af3757495c1ee3b5c4e945c1df7be95562277c6e5bccc20a39aec50f826cd0"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:548d6482dc8aadbe7e79d1b5806585c8120bafa1ef841167bc9090522b610fa6"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:057e824b2aae50accc0f9a0570998adc021b372478a921506fddd6c02e60308e"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2243700cc5548cff20963f0ca92d3e5e436394375ab8a354bbea2b12911b20b0"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79986f3b4af059777111409ee517da24a529bdbd46da578b33f25580adcff728"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:11d58723d44d6ed4dd677c5615b2ffb19d5c426636345567d6af82be4dff8a55"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:49d238cf4b69652257db66d0c623cd3e09b5d2e9576b56bc067a396133a00d4a"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fedbdc753827cf014c01dbbee9c3be17e5a208dcd1bf8641ce2cd29580d1f0d4"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc16ac425cc927d0a57d242589f87ee093884ea4804c05a13834d07c20db203c"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11c1d2aed9079c6b0c9550a7257a836b4a637feb334904610f06d70eb44c56d2"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e8a701123029cc240cea61dd2d16ad57cab4691804143ce80ecd9286b464d180"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:61706a6b6c24bdece85ff177fec393545a3191eeda35b07aaa1458a027ad1304"}, + {file = "pyzmq-25.1.1.tar.gz", hash = "sha256:259c22485b71abacdfa8bf79720cd7bcf4b9d128b30ea554f01ae71fdbfdaa23"}, ] [package.dependencies] cffi = {version = "*", markers = "implementation_name == \"pypy\""} -py = {version = "*", markers = "implementation_name == \"pypy\""} [[package]] name = "recommonmark" version = "0.7.1" description = "A docutils-compatibility bridge to CommonMark, enabling you to write CommonMark inside of Docutils & Sphinx projects." -category = "dev" optional = false python-versions = "*" files = [ @@ -3894,7 +3798,6 @@ sphinx = ">=1.3.1" name = "referencing" version = "0.30.2" description = "JSON Referencing + Python" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -3910,7 +3813,6 @@ 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 = [ @@ -3932,7 +3834,6 @@ 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 = [ @@ -3946,7 +3847,6 @@ 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 = [ @@ -3961,7 +3861,6 @@ 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 = [ @@ -3971,14 +3870,13 @@ files = [ [[package]] name = "rich" -version = "13.5.2" +version = "13.5.3" 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.5.2-py3-none-any.whl", hash = "sha256:146a90b3b6b47cac4a73c12866a499e9817426423f57c5a66949c086191a8808"}, - {file = "rich-13.5.2.tar.gz", hash = "sha256:fb9d6c0a0f643c99eed3875b5377a184132ba9be4d61516a55273d3554d75a39"}, + {file = "rich-13.5.3-py3-none-any.whl", hash = "sha256:9257b468badc3d347e146a4faa268ff229039d4c2d176ab0cffb4c4fbc73d5d9"}, + {file = "rich-13.5.3.tar.gz", hash = "sha256:87b43e0543149efa1253f485cd845bb7ee54df16c9617b8a893650ab84b4acb6"}, ] [package.dependencies] @@ -3991,116 +3889,114 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "rpds-py" -version = "0.9.2" +version = "0.10.3" description = "Python bindings to Rust's persistent data structures (rpds)" -category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "rpds_py-0.9.2-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:ab6919a09c055c9b092798ce18c6c4adf49d24d4d9e43a92b257e3f2548231e7"}, - {file = "rpds_py-0.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d55777a80f78dd09410bd84ff8c95ee05519f41113b2df90a69622f5540c4f8b"}, - {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a216b26e5af0a8e265d4efd65d3bcec5fba6b26909014effe20cd302fd1138fa"}, - {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:29cd8bfb2d716366a035913ced99188a79b623a3512292963d84d3e06e63b496"}, - {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44659b1f326214950a8204a248ca6199535e73a694be8d3e0e869f820767f12f"}, - {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:745f5a43fdd7d6d25a53ab1a99979e7f8ea419dfefebcab0a5a1e9095490ee5e"}, - {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a987578ac5214f18b99d1f2a3851cba5b09f4a689818a106c23dbad0dfeb760f"}, - {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bf4151acb541b6e895354f6ff9ac06995ad9e4175cbc6d30aaed08856558201f"}, - {file = "rpds_py-0.9.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:03421628f0dc10a4119d714a17f646e2837126a25ac7a256bdf7c3943400f67f"}, - {file = "rpds_py-0.9.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:13b602dc3e8dff3063734f02dcf05111e887f301fdda74151a93dbbc249930fe"}, - {file = "rpds_py-0.9.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:fae5cb554b604b3f9e2c608241b5d8d303e410d7dfb6d397c335f983495ce7f6"}, - {file = "rpds_py-0.9.2-cp310-none-win32.whl", hash = "sha256:47c5f58a8e0c2c920cc7783113df2fc4ff12bf3a411d985012f145e9242a2764"}, - {file = "rpds_py-0.9.2-cp310-none-win_amd64.whl", hash = "sha256:4ea6b73c22d8182dff91155af018b11aac9ff7eca085750455c5990cb1cfae6e"}, - {file = "rpds_py-0.9.2-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:e564d2238512c5ef5e9d79338ab77f1cbbda6c2d541ad41b2af445fb200385e3"}, - {file = "rpds_py-0.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f411330a6376fb50e5b7a3e66894e4a39e60ca2e17dce258d53768fea06a37bd"}, - {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e7521f5af0233e89939ad626b15278c71b69dc1dfccaa7b97bd4cdf96536bb7"}, - {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8d3335c03100a073883857e91db9f2e0ef8a1cf42dc0369cbb9151c149dbbc1b"}, - {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d25b1c1096ef0447355f7293fbe9ad740f7c47ae032c2884113f8e87660d8f6e"}, - {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6a5d3fbd02efd9cf6a8ffc2f17b53a33542f6b154e88dd7b42ef4a4c0700fdad"}, - {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5934e2833afeaf36bd1eadb57256239785f5af0220ed8d21c2896ec4d3a765f"}, - {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:095b460e117685867d45548fbd8598a8d9999227e9061ee7f012d9d264e6048d"}, - {file = "rpds_py-0.9.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:91378d9f4151adc223d584489591dbb79f78814c0734a7c3bfa9c9e09978121c"}, - {file = "rpds_py-0.9.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:24a81c177379300220e907e9b864107614b144f6c2a15ed5c3450e19cf536fae"}, - {file = "rpds_py-0.9.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:de0b6eceb46141984671802d412568d22c6bacc9b230174f9e55fc72ef4f57de"}, - {file = "rpds_py-0.9.2-cp311-none-win32.whl", hash = "sha256:700375326ed641f3d9d32060a91513ad668bcb7e2cffb18415c399acb25de2ab"}, - {file = "rpds_py-0.9.2-cp311-none-win_amd64.whl", hash = "sha256:0766babfcf941db8607bdaf82569ec38107dbb03c7f0b72604a0b346b6eb3298"}, - {file = "rpds_py-0.9.2-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:b1440c291db3f98a914e1afd9d6541e8fc60b4c3aab1a9008d03da4651e67386"}, - {file = "rpds_py-0.9.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0f2996fbac8e0b77fd67102becb9229986396e051f33dbceada3debaacc7033f"}, - {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f30d205755566a25f2ae0382944fcae2f350500ae4df4e795efa9e850821d82"}, - {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:159fba751a1e6b1c69244e23ba6c28f879a8758a3e992ed056d86d74a194a0f3"}, - {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1f044792e1adcea82468a72310c66a7f08728d72a244730d14880cd1dabe36b"}, - {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9251eb8aa82e6cf88510530b29eef4fac825a2b709baf5b94a6094894f252387"}, - {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01899794b654e616c8625b194ddd1e5b51ef5b60ed61baa7a2d9c2ad7b2a4238"}, - {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b0c43f8ae8f6be1d605b0465671124aa8d6a0e40f1fb81dcea28b7e3d87ca1e1"}, - {file = "rpds_py-0.9.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:207f57c402d1f8712618f737356e4b6f35253b6d20a324d9a47cb9f38ee43a6b"}, - {file = "rpds_py-0.9.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b52e7c5ae35b00566d244ffefba0f46bb6bec749a50412acf42b1c3f402e2c90"}, - {file = "rpds_py-0.9.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:978fa96dbb005d599ec4fd9ed301b1cc45f1a8f7982d4793faf20b404b56677d"}, - {file = "rpds_py-0.9.2-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:6aa8326a4a608e1c28da191edd7c924dff445251b94653988efb059b16577a4d"}, - {file = "rpds_py-0.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:aad51239bee6bff6823bbbdc8ad85136c6125542bbc609e035ab98ca1e32a192"}, - {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bd4dc3602370679c2dfb818d9c97b1137d4dd412230cfecd3c66a1bf388a196"}, - {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dd9da77c6ec1f258387957b754f0df60766ac23ed698b61941ba9acccd3284d1"}, - {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:190ca6f55042ea4649ed19c9093a9be9d63cd8a97880106747d7147f88a49d18"}, - {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:876bf9ed62323bc7dcfc261dbc5572c996ef26fe6406b0ff985cbcf460fc8a4c"}, - {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa2818759aba55df50592ecbc95ebcdc99917fa7b55cc6796235b04193eb3c55"}, - {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9ea4d00850ef1e917815e59b078ecb338f6a8efda23369677c54a5825dbebb55"}, - {file = "rpds_py-0.9.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:5855c85eb8b8a968a74dc7fb014c9166a05e7e7a8377fb91d78512900aadd13d"}, - {file = "rpds_py-0.9.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:14c408e9d1a80dcb45c05a5149e5961aadb912fff42ca1dd9b68c0044904eb32"}, - {file = "rpds_py-0.9.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:65a0583c43d9f22cb2130c7b110e695fff834fd5e832a776a107197e59a1898e"}, - {file = "rpds_py-0.9.2-cp38-none-win32.whl", hash = "sha256:71f2f7715935a61fa3e4ae91d91b67e571aeb5cb5d10331ab681256bda2ad920"}, - {file = "rpds_py-0.9.2-cp38-none-win_amd64.whl", hash = "sha256:674c704605092e3ebbbd13687b09c9f78c362a4bc710343efe37a91457123044"}, - {file = "rpds_py-0.9.2-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:07e2c54bef6838fa44c48dfbc8234e8e2466d851124b551fc4e07a1cfeb37260"}, - {file = "rpds_py-0.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f7fdf55283ad38c33e35e2855565361f4bf0abd02470b8ab28d499c663bc5d7c"}, - {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:890ba852c16ace6ed9f90e8670f2c1c178d96510a21b06d2fa12d8783a905193"}, - {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:50025635ba8b629a86d9d5474e650da304cb46bbb4d18690532dd79341467846"}, - {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:517cbf6e67ae3623c5127206489d69eb2bdb27239a3c3cc559350ef52a3bbf0b"}, - {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0836d71ca19071090d524739420a61580f3f894618d10b666cf3d9a1688355b1"}, - {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c439fd54b2b9053717cca3de9583be6584b384d88d045f97d409f0ca867d80f"}, - {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f68996a3b3dc9335037f82754f9cdbe3a95db42bde571d8c3be26cc6245f2324"}, - {file = "rpds_py-0.9.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7d68dc8acded354c972116f59b5eb2e5864432948e098c19fe6994926d8e15c3"}, - {file = "rpds_py-0.9.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f963c6b1218b96db85fc37a9f0851eaf8b9040aa46dec112611697a7023da535"}, - {file = "rpds_py-0.9.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5a46859d7f947061b4010e554ccd1791467d1b1759f2dc2ec9055fa239f1bc26"}, - {file = "rpds_py-0.9.2-cp39-none-win32.whl", hash = "sha256:e07e5dbf8a83c66783a9fe2d4566968ea8c161199680e8ad38d53e075df5f0d0"}, - {file = "rpds_py-0.9.2-cp39-none-win_amd64.whl", hash = "sha256:682726178138ea45a0766907957b60f3a1bf3acdf212436be9733f28b6c5af3c"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:196cb208825a8b9c8fc360dc0f87993b8b260038615230242bf18ec84447c08d"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:c7671d45530fcb6d5e22fd40c97e1e1e01965fc298cbda523bb640f3d923b387"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83b32f0940adec65099f3b1c215ef7f1d025d13ff947975a055989cb7fd019a4"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f67da97f5b9eac838b6980fc6da268622e91f8960e083a34533ca710bec8611"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:03975db5f103997904c37e804e5f340c8fdabbb5883f26ee50a255d664eed58c"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:987b06d1cdb28f88a42e4fb8a87f094e43f3c435ed8e486533aea0bf2e53d931"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c861a7e4aef15ff91233751619ce3a3d2b9e5877e0fcd76f9ea4f6847183aa16"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:02938432352359805b6da099c9c95c8a0547fe4b274ce8f1a91677401bb9a45f"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:ef1f08f2a924837e112cba2953e15aacfccbbfcd773b4b9b4723f8f2ddded08e"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:35da5cc5cb37c04c4ee03128ad59b8c3941a1e5cd398d78c37f716f32a9b7f67"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:141acb9d4ccc04e704e5992d35472f78c35af047fa0cfae2923835d153f091be"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:79f594919d2c1a0cc17d1988a6adaf9a2f000d2e1048f71f298b056b1018e872"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:a06418fe1155e72e16dddc68bb3780ae44cebb2912fbd8bb6ff9161de56e1798"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b2eb034c94b0b96d5eddb290b7b5198460e2d5d0c421751713953a9c4e47d10"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8b08605d248b974eb02f40bdcd1a35d3924c83a2a5e8f5d0fa5af852c4d960af"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a0805911caedfe2736935250be5008b261f10a729a303f676d3d5fea6900c96a"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ab2299e3f92aa5417d5e16bb45bb4586171c1327568f638e8453c9f8d9e0f020"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c8d7594e38cf98d8a7df25b440f684b510cf4627fe038c297a87496d10a174f"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8b9ec12ad5f0a4625db34db7e0005be2632c1013b253a4a60e8302ad4d462afd"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1fcdee18fea97238ed17ab6478c66b2095e4ae7177e35fb71fbe561a27adf620"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:933a7d5cd4b84f959aedeb84f2030f0a01d63ae6cf256629af3081cf3e3426e8"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:686ba516e02db6d6f8c279d1641f7067ebb5dc58b1d0536c4aaebb7bf01cdc5d"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0173c0444bec0a3d7d848eaeca2d8bd32a1b43f3d3fde6617aac3731fa4be05f"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:d576c3ef8c7b2d560e301eb33891d1944d965a4d7a2eacb6332eee8a71827db6"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed89861ee8c8c47d6beb742a602f912b1bb64f598b1e2f3d758948721d44d468"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1054a08e818f8e18910f1bee731583fe8f899b0a0a5044c6e680ceea34f93876"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99e7c4bb27ff1aab90dcc3e9d37ee5af0231ed98d99cb6f5250de28889a3d502"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c545d9d14d47be716495076b659db179206e3fd997769bc01e2d550eeb685596"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9039a11bca3c41be5a58282ed81ae422fa680409022b996032a43badef2a3752"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fb39aca7a64ad0c9490adfa719dbeeb87d13be137ca189d2564e596f8ba32c07"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2d8b3b3a2ce0eaa00c5bbbb60b6713e94e7e0becab7b3db6c5c77f979e8ed1f1"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:99b1c16f732b3a9971406fbfe18468592c5a3529585a45a35adbc1389a529a03"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:c27ee01a6c3223025f4badd533bea5e87c988cb0ba2811b690395dfe16088cfe"}, - {file = "rpds_py-0.9.2.tar.gz", hash = "sha256:8d70e8f14900f2657c249ea4def963bed86a29b81f81f5b76b5a9215680de945"}, + {file = "rpds_py-0.10.3-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:485747ee62da83366a44fbba963c5fe017860ad408ccd6cd99aa66ea80d32b2e"}, + {file = "rpds_py-0.10.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c55f9821f88e8bee4b7a72c82cfb5ecd22b6aad04033334f33c329b29bfa4da0"}, + {file = "rpds_py-0.10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3b52a67ac66a3a64a7e710ba629f62d1e26ca0504c29ee8cbd99b97df7079a8"}, + {file = "rpds_py-0.10.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3aed39db2f0ace76faa94f465d4234aac72e2f32b009f15da6492a561b3bbebd"}, + {file = "rpds_py-0.10.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:271c360fdc464fe6a75f13ea0c08ddf71a321f4c55fc20a3fe62ea3ef09df7d9"}, + {file = "rpds_py-0.10.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef5fddfb264e89c435be4adb3953cef5d2936fdeb4463b4161a6ba2f22e7b740"}, + {file = "rpds_py-0.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a771417c9c06c56c9d53d11a5b084d1de75de82978e23c544270ab25e7c066ff"}, + {file = "rpds_py-0.10.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:52b5cbc0469328e58180021138207e6ec91d7ca2e037d3549cc9e34e2187330a"}, + {file = "rpds_py-0.10.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6ac3fefb0d168c7c6cab24fdfc80ec62cd2b4dfd9e65b84bdceb1cb01d385c33"}, + {file = "rpds_py-0.10.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:8d54bbdf5d56e2c8cf81a1857250f3ea132de77af543d0ba5dce667183b61fec"}, + {file = "rpds_py-0.10.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cd2163f42868865597d89399a01aa33b7594ce8e2c4a28503127c81a2f17784e"}, + {file = "rpds_py-0.10.3-cp310-none-win32.whl", hash = "sha256:ea93163472db26ac6043e8f7f93a05d9b59e0505c760da2a3cd22c7dd7111391"}, + {file = "rpds_py-0.10.3-cp310-none-win_amd64.whl", hash = "sha256:7cd020b1fb41e3ab7716d4d2c3972d4588fdfbab9bfbbb64acc7078eccef8860"}, + {file = "rpds_py-0.10.3-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:1d9b5ee46dcb498fa3e46d4dfabcb531e1f2e76b477e0d99ef114f17bbd38453"}, + {file = "rpds_py-0.10.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:563646d74a4b4456d0cf3b714ca522e725243c603e8254ad85c3b59b7c0c4bf0"}, + {file = "rpds_py-0.10.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e626b864725680cd3904414d72e7b0bd81c0e5b2b53a5b30b4273034253bb41f"}, + {file = "rpds_py-0.10.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:485301ee56ce87a51ccb182a4b180d852c5cb2b3cb3a82f7d4714b4141119d8c"}, + {file = "rpds_py-0.10.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:42f712b4668831c0cd85e0a5b5a308700fe068e37dcd24c0062904c4e372b093"}, + {file = "rpds_py-0.10.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6c9141af27a4e5819d74d67d227d5047a20fa3c7d4d9df43037a955b4c748ec5"}, + {file = "rpds_py-0.10.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef750a20de1b65657a1425f77c525b0183eac63fe7b8f5ac0dd16f3668d3e64f"}, + {file = "rpds_py-0.10.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e1a0ffc39f51aa5f5c22114a8f1906b3c17eba68c5babb86c5f77d8b1bba14d1"}, + {file = "rpds_py-0.10.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f4c179a7aeae10ddf44c6bac87938134c1379c49c884529f090f9bf05566c836"}, + {file = "rpds_py-0.10.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:176287bb998fd1e9846a9b666e240e58f8d3373e3bf87e7642f15af5405187b8"}, + {file = "rpds_py-0.10.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6446002739ca29249f0beaaf067fcbc2b5aab4bc7ee8fb941bd194947ce19aff"}, + {file = "rpds_py-0.10.3-cp311-none-win32.whl", hash = "sha256:c7aed97f2e676561416c927b063802c8a6285e9b55e1b83213dfd99a8f4f9e48"}, + {file = "rpds_py-0.10.3-cp311-none-win_amd64.whl", hash = "sha256:8bd01ff4032abaed03f2db702fa9a61078bee37add0bd884a6190b05e63b028c"}, + {file = "rpds_py-0.10.3-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:4cf0855a842c5b5c391dd32ca273b09e86abf8367572073bd1edfc52bc44446b"}, + {file = "rpds_py-0.10.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:69b857a7d8bd4f5d6e0db4086da8c46309a26e8cefdfc778c0c5cc17d4b11e08"}, + {file = "rpds_py-0.10.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:975382d9aa90dc59253d6a83a5ca72e07f4ada3ae3d6c0575ced513db322b8ec"}, + {file = "rpds_py-0.10.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:35fbd23c1c8732cde7a94abe7fb071ec173c2f58c0bd0d7e5b669fdfc80a2c7b"}, + {file = "rpds_py-0.10.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:106af1653007cc569d5fbb5f08c6648a49fe4de74c2df814e234e282ebc06957"}, + {file = "rpds_py-0.10.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ce5e7504db95b76fc89055c7f41e367eaadef5b1d059e27e1d6eabf2b55ca314"}, + {file = "rpds_py-0.10.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aca759ada6b1967fcfd4336dcf460d02a8a23e6abe06e90ea7881e5c22c4de6"}, + {file = "rpds_py-0.10.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b5d4bdd697195f3876d134101c40c7d06d46c6ab25159ed5cbd44105c715278a"}, + {file = "rpds_py-0.10.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a657250807b6efd19b28f5922520ae002a54cb43c2401e6f3d0230c352564d25"}, + {file = "rpds_py-0.10.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:177c9dd834cdf4dc39c27436ade6fdf9fe81484758885f2d616d5d03c0a83bd2"}, + {file = "rpds_py-0.10.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e22491d25f97199fc3581ad8dd8ce198d8c8fdb8dae80dea3512e1ce6d5fa99f"}, + {file = "rpds_py-0.10.3-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:2f3e1867dd574014253b4b8f01ba443b9c914e61d45f3674e452a915d6e929a3"}, + {file = "rpds_py-0.10.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c22211c165166de6683de8136229721f3d5c8606cc2c3d1562da9a3a5058049c"}, + {file = "rpds_py-0.10.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40bc802a696887b14c002edd43c18082cb7b6f9ee8b838239b03b56574d97f71"}, + {file = "rpds_py-0.10.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e271dd97c7bb8eefda5cca38cd0b0373a1fea50f71e8071376b46968582af9b"}, + {file = "rpds_py-0.10.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:95cde244e7195b2c07ec9b73fa4c5026d4a27233451485caa1cd0c1b55f26dbd"}, + {file = "rpds_py-0.10.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08a80cf4884920863623a9ee9a285ee04cef57ebedc1cc87b3e3e0f24c8acfe5"}, + {file = "rpds_py-0.10.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:763ad59e105fca09705d9f9b29ecffb95ecdc3b0363be3bb56081b2c6de7977a"}, + {file = "rpds_py-0.10.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:187700668c018a7e76e89424b7c1042f317c8df9161f00c0c903c82b0a8cac5c"}, + {file = "rpds_py-0.10.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:5267cfda873ad62591b9332fd9472d2409f7cf02a34a9c9cb367e2c0255994bf"}, + {file = "rpds_py-0.10.3-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:2ed83d53a8c5902ec48b90b2ac045e28e1698c0bea9441af9409fc844dc79496"}, + {file = "rpds_py-0.10.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:255f1a10ae39b52122cce26ce0781f7a616f502feecce9e616976f6a87992d6b"}, + {file = "rpds_py-0.10.3-cp38-none-win32.whl", hash = "sha256:a019a344312d0b1f429c00d49c3be62fa273d4a1094e1b224f403716b6d03be1"}, + {file = "rpds_py-0.10.3-cp38-none-win_amd64.whl", hash = "sha256:efb9ece97e696bb56e31166a9dd7919f8f0c6b31967b454718c6509f29ef6fee"}, + {file = "rpds_py-0.10.3-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:570cc326e78ff23dec7f41487aa9c3dffd02e5ee9ab43a8f6ccc3df8f9327623"}, + {file = "rpds_py-0.10.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cff7351c251c7546407827b6a37bcef6416304fc54d12d44dbfecbb717064717"}, + {file = "rpds_py-0.10.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:177914f81f66c86c012311f8c7f46887ec375cfcfd2a2f28233a3053ac93a569"}, + {file = "rpds_py-0.10.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:448a66b8266de0b581246ca7cd6a73b8d98d15100fb7165974535fa3b577340e"}, + {file = "rpds_py-0.10.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bbac1953c17252f9cc675bb19372444aadf0179b5df575ac4b56faaec9f6294"}, + {file = "rpds_py-0.10.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9dd9d9d9e898b9d30683bdd2b6c1849449158647d1049a125879cb397ee9cd12"}, + {file = "rpds_py-0.10.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8c71ea77536149e36c4c784f6d420ffd20bea041e3ba21ed021cb40ce58e2c9"}, + {file = "rpds_py-0.10.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:16a472300bc6c83fe4c2072cc22b3972f90d718d56f241adabc7ae509f53f154"}, + {file = "rpds_py-0.10.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:b9255e7165083de7c1d605e818025e8860636348f34a79d84ec533546064f07e"}, + {file = "rpds_py-0.10.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:53d7a3cd46cdc1689296348cb05ffd4f4280035770aee0c8ead3bbd4d6529acc"}, + {file = "rpds_py-0.10.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:22da15b902f9f8e267020d1c8bcfc4831ca646fecb60254f7bc71763569f56b1"}, + {file = "rpds_py-0.10.3-cp39-none-win32.whl", hash = "sha256:850c272e0e0d1a5c5d73b1b7871b0a7c2446b304cec55ccdb3eaac0d792bb065"}, + {file = "rpds_py-0.10.3-cp39-none-win_amd64.whl", hash = "sha256:de61e424062173b4f70eec07e12469edde7e17fa180019a2a0d75c13a5c5dc57"}, + {file = "rpds_py-0.10.3-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:af247fd4f12cca4129c1b82090244ea5a9d5bb089e9a82feb5a2f7c6a9fe181d"}, + {file = "rpds_py-0.10.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:3ad59efe24a4d54c2742929001f2d02803aafc15d6d781c21379e3f7f66ec842"}, + {file = "rpds_py-0.10.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:642ed0a209ced4be3a46f8cb094f2d76f1f479e2a1ceca6de6346a096cd3409d"}, + {file = "rpds_py-0.10.3-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:37d0c59548ae56fae01c14998918d04ee0d5d3277363c10208eef8c4e2b68ed6"}, + {file = "rpds_py-0.10.3-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aad6ed9e70ddfb34d849b761fb243be58c735be6a9265b9060d6ddb77751e3e8"}, + {file = "rpds_py-0.10.3-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8f94fdd756ba1f79f988855d948ae0bad9ddf44df296770d9a58c774cfbcca72"}, + {file = "rpds_py-0.10.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77076bdc8776a2b029e1e6ffbe6d7056e35f56f5e80d9dc0bad26ad4a024a762"}, + {file = "rpds_py-0.10.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:87d9b206b1bd7a0523375dc2020a6ce88bca5330682ae2fe25e86fd5d45cea9c"}, + {file = "rpds_py-0.10.3-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:8efaeb08ede95066da3a3e3c420fcc0a21693fcd0c4396d0585b019613d28515"}, + {file = "rpds_py-0.10.3-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:a4d9bfda3f84fc563868fe25ca160c8ff0e69bc4443c5647f960d59400ce6557"}, + {file = "rpds_py-0.10.3-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:d27aa6bbc1f33be920bb7adbb95581452cdf23005d5611b29a12bb6a3468cc95"}, + {file = "rpds_py-0.10.3-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:ed8313809571a5463fd7db43aaca68ecb43ca7a58f5b23b6e6c6c5d02bdc7882"}, + {file = "rpds_py-0.10.3-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:e10e6a1ed2b8661201e79dff5531f8ad4cdd83548a0f81c95cf79b3184b20c33"}, + {file = "rpds_py-0.10.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:015de2ce2af1586ff5dc873e804434185199a15f7d96920ce67e50604592cae9"}, + {file = "rpds_py-0.10.3-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae87137951bb3dc08c7d8bfb8988d8c119f3230731b08a71146e84aaa919a7a9"}, + {file = "rpds_py-0.10.3-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0bb4f48bd0dd18eebe826395e6a48b7331291078a879295bae4e5d053be50d4c"}, + {file = "rpds_py-0.10.3-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:09362f86ec201288d5687d1dc476b07bf39c08478cde837cb710b302864e7ec9"}, + {file = "rpds_py-0.10.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:821392559d37759caa67d622d0d2994c7a3f2fb29274948ac799d496d92bca73"}, + {file = "rpds_py-0.10.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7170cbde4070dc3c77dec82abf86f3b210633d4f89550fa0ad2d4b549a05572a"}, + {file = "rpds_py-0.10.3-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:5de11c041486681ce854c814844f4ce3282b6ea1656faae19208ebe09d31c5b8"}, + {file = "rpds_py-0.10.3-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:4ed172d0c79f156c1b954e99c03bc2e3033c17efce8dd1a7c781bc4d5793dfac"}, + {file = "rpds_py-0.10.3-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:11fdd1192240dda8d6c5d18a06146e9045cb7e3ba7c06de6973000ff035df7c6"}, + {file = "rpds_py-0.10.3-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:f602881d80ee4228a2355c68da6b296a296cd22bbb91e5418d54577bbf17fa7c"}, + {file = "rpds_py-0.10.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:691d50c99a937709ac4c4cd570d959a006bd6a6d970a484c84cc99543d4a5bbb"}, + {file = "rpds_py-0.10.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24cd91a03543a0f8d09cb18d1cb27df80a84b5553d2bd94cba5979ef6af5c6e7"}, + {file = "rpds_py-0.10.3-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fc2200e79d75b5238c8d69f6a30f8284290c777039d331e7340b6c17cad24a5a"}, + {file = "rpds_py-0.10.3-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea65b59882d5fa8c74a23f8960db579e5e341534934f43f3b18ec1839b893e41"}, + {file = "rpds_py-0.10.3-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:829e91f3a8574888b73e7a3feb3b1af698e717513597e23136ff4eba0bc8387a"}, + {file = "rpds_py-0.10.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eab75a8569a095f2ad470b342f2751d9902f7944704f0571c8af46bede438475"}, + {file = "rpds_py-0.10.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:061c3ff1f51ecec256e916cf71cc01f9975af8fb3af9b94d3c0cc8702cfea637"}, + {file = "rpds_py-0.10.3-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:39d05e65f23a0fe897b6ac395f2a8d48c56ac0f583f5d663e0afec1da89b95da"}, + {file = "rpds_py-0.10.3-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:4eca20917a06d2fca7628ef3c8b94a8c358f6b43f1a621c9815243462dcccf97"}, + {file = "rpds_py-0.10.3-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e8d0f0eca087630d58b8c662085529781fd5dc80f0a54eda42d5c9029f812599"}, + {file = "rpds_py-0.10.3.tar.gz", hash = "sha256:fcc1ebb7561a3e24a6588f7c6ded15d80aec22c66a070c757559b57b17ffd1cb"}, ] [[package]] name = "scipy" version = "1.10.1" description = "Fundamental algorithms for scientific computing in Python" -category = "main" optional = false python-versions = "<3.12,>=3.8" files = [ @@ -4139,7 +4035,6 @@ test = ["asv", "gmpy2", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeo 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 = [ @@ -4155,7 +4050,6 @@ pyobjc-framework-Cocoa = {version = "*", markers = "sys_platform == \"darwin\""} name = "send2trash" version = "1.8.2" 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" files = [ @@ -4170,26 +4064,46 @@ win32 = ["pywin32"] [[package]] name = "setuptools" -version = "68.0.0" +version = "68.2.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +files = [ + {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, + {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, +] + +[package.extras] +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-hoverxref (<2)", "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"] + +[[package]] +name = "setuptools-scm" +version = "8.0.3" +description = "the blessed package to manage your versions by scm tags" +optional = false +python-versions = ">=3.8" files = [ - {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, - {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, + {file = "setuptools-scm-8.0.3.tar.gz", hash = "sha256:0169fd70197efda2f8c4d0b2a7a3d614431b488116f37b79d031e9e7ec884d8c"}, + {file = "setuptools_scm-8.0.3-py3-none-any.whl", hash = "sha256:813822234453438a13c78d05c8af29918fbc06f88efb33d38f065340bbb48c39"}, ] +[package.dependencies] +packaging = ">=20" +setuptools = "*" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} +typing-extensions = {version = "*", markers = "python_version < \"3.11\""} + [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "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]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +docs = ["entangled-cli[rich]", "mkdocs", "mkdocs-entangled-plugin", "mkdocs-material", "mkdocstrings[python]", "pygments"] +rich = ["rich"] +test = ["pytest", "rich", "virtualenv (>20)"] [[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 = [ @@ -4201,7 +4115,6 @@ files = [ name = "skia-pathops" version = "0.7.4" description = "Python access to operations on paths using the Skia library" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4255,21 +4168,19 @@ testing = ["coverage", "pytest", "pytest-randomly", "pytest-xdist"] [[package]] name = "smmap" -version = "5.0.0" +version = "5.0.1" description = "A pure Python implementation of a sliding window memory map manager" -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"}, - {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, + {file = "smmap-5.0.1-py3-none-any.whl", hash = "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da"}, + {file = "smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62"}, ] [[package]] name = "sniffio" version = "1.3.0" description = "Sniff out which async library your code is running under" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4281,7 +4192,6 @@ files = [ 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 = [ @@ -4291,21 +4201,19 @@ files = [ [[package]] name = "soupsieve" -version = "2.4.1" +version = "2.5" description = "A modern CSS selector implementation for Beautiful Soup." -category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "soupsieve-2.4.1-py3-none-any.whl", hash = "sha256:1c1bfee6819544a3447586c889157365a27e10d88cde3ad3da0cf0ddf646feb8"}, - {file = "soupsieve-2.4.1.tar.gz", hash = "sha256:89d12b2d5dfcd2c9e8c22326da9d9aa9cb3dfab0a83a024f05704076ee8d35ea"}, + {file = "soupsieve-2.5-py3-none-any.whl", hash = "sha256:eaa337ff55a1579b6549dc679565eac1e3d000563bcb1c8ab0d0fefbc0c2cdc7"}, + {file = "soupsieve-2.5.tar.gz", hash = "sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690"}, ] [[package]] name = "sphinx" version = "4.5.0" description = "Python documentation generator" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -4341,7 +4249,6 @@ test = ["cython", "html5lib", "pytest", "pytest-cov", "typed-ast"] name = "sphinx-basic-ng" version = "1.0.0b2" description = "A modern skeleton for Sphinx themes." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4359,7 +4266,6 @@ docs = ["furo", "ipython", "myst-parser", "sphinx-copybutton", "sphinx-inline-ta name = "sphinx-copybutton" version = "0.4.0" description = "Add a copy button to each of your code cells." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -4378,7 +4284,6 @@ rtd = ["ipython", "sphinx", "sphinx-book-theme"] name = "sphinxcontrib-applehelp" version = "1.0.4" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -4394,7 +4299,6 @@ test = ["pytest"] name = "sphinxcontrib-devhelp" version = "1.0.2" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -4410,7 +4314,6 @@ test = ["pytest"] name = "sphinxcontrib-htmlhelp" version = "2.0.1" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -4426,7 +4329,6 @@ 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 = [ @@ -4441,7 +4343,6 @@ 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 = [ @@ -4456,7 +4357,6 @@ Sphinx = ">=1.7.0" name = "sphinxcontrib-qthelp" version = "1.0.3" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -4472,7 +4372,6 @@ test = ["pytest"] name = "sphinxcontrib-serializinghtml" version = "1.1.5" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -4488,7 +4387,6 @@ test = ["pytest"] name = "sphinxext-opengraph" version = "0.8.2" description = "Sphinx Extension to enable OGP support" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4504,7 +4402,6 @@ 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 = [ @@ -4515,7 +4412,6 @@ files = [ name = "stack-data" version = "0.6.2" description = "Extract data from python stack frames and tracebacks for informative displays" -category = "main" optional = true python-versions = "*" files = [ @@ -4533,21 +4429,19 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] [[package]] name = "svgelements" -version = "1.9.5" +version = "1.9.6" description = "Svg Elements Parsing" -category = "main" optional = false python-versions = "*" files = [ - {file = "svgelements-1.9.5-py2.py3-none-any.whl", hash = "sha256:32b583484a627eb19d66a4da923856336fa512698eac75540915446fd1ab28ff"}, - {file = "svgelements-1.9.5.tar.gz", hash = "sha256:e192648ab7e07a67a355ce19b7f1d8a1497d62feca6debe3ddbd92d8617ef3be"}, + {file = "svgelements-1.9.6-py2.py3-none-any.whl", hash = "sha256:8a5cf2cc066d98e713d5b875b1d6e5eeb9b92e855e835ebd7caab2713ae1dcad"}, + {file = "svgelements-1.9.6.tar.gz", hash = "sha256:7c02ad6404cd3d1771fd50e40fbfc0550b0893933466f86a6eb815f3ba3f37f7"}, ] [[package]] name = "terminado" version = "0.17.1" description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4568,7 +4462,6 @@ test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] name = "tinycss2" version = "1.2.1" description = "A tiny CSS parser" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4587,7 +4480,6 @@ test = ["flake8", "isort", "pytest"] name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4599,7 +4491,6 @@ files = [ name = "tomlkit" version = "0.12.1" description = "Style preserving TOML library" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4609,30 +4500,28 @@ files = [ [[package]] name = "tornado" -version = "6.3.2" +version = "6.3.3" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -category = "main" optional = true python-versions = ">= 3.8" files = [ - {file = "tornado-6.3.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:c367ab6c0393d71171123ca5515c61ff62fe09024fa6bf299cd1339dc9456829"}, - {file = "tornado-6.3.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b46a6ab20f5c7c1cb949c72c1994a4585d2eaa0be4853f50a03b5031e964fc7c"}, - {file = "tornado-6.3.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c2de14066c4a38b4ecbbcd55c5cc4b5340eb04f1c5e81da7451ef555859c833f"}, - {file = "tornado-6.3.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:05615096845cf50a895026f749195bf0b10b8909f9be672f50b0fe69cba368e4"}, - {file = "tornado-6.3.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b17b1cf5f8354efa3d37c6e28fdfd9c1c1e5122f2cb56dac121ac61baa47cbe"}, - {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:29e71c847a35f6e10ca3b5c2990a52ce38b233019d8e858b755ea6ce4dcdd19d"}, - {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:834ae7540ad3a83199a8da8f9f2d383e3c3d5130a328889e4cc991acc81e87a0"}, - {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6a0848f1aea0d196a7c4f6772197cbe2abc4266f836b0aac76947872cd29b411"}, - {file = "tornado-6.3.2-cp38-abi3-win32.whl", hash = "sha256:7efcbcc30b7c654eb6a8c9c9da787a851c18f8ccd4a5a3a95b05c7accfa068d2"}, - {file = "tornado-6.3.2-cp38-abi3-win_amd64.whl", hash = "sha256:0c325e66c8123c606eea33084976c832aa4e766b7dff8aedd7587ea44a604cdf"}, - {file = "tornado-6.3.2.tar.gz", hash = "sha256:4b927c4f19b71e627b13f3db2324e4ae660527143f9e1f2e2fb404f3a187e2ba"}, + {file = "tornado-6.3.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:502fba735c84450974fec147340016ad928d29f1e91f49be168c0a4c18181e1d"}, + {file = "tornado-6.3.3-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:805d507b1f588320c26f7f097108eb4023bbaa984d63176d1652e184ba24270a"}, + {file = "tornado-6.3.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bd19ca6c16882e4d37368e0152f99c099bad93e0950ce55e71daed74045908f"}, + {file = "tornado-6.3.3-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ac51f42808cca9b3613f51ffe2a965c8525cb1b00b7b2d56828b8045354f76a"}, + {file = "tornado-6.3.3-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71a8db65160a3c55d61839b7302a9a400074c9c753040455494e2af74e2501f2"}, + {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:ceb917a50cd35882b57600709dd5421a418c29ddc852da8bcdab1f0db33406b0"}, + {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:7d01abc57ea0dbb51ddfed477dfe22719d376119844e33c661d873bf9c0e4a16"}, + {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:9dc4444c0defcd3929d5c1eb5706cbe1b116e762ff3e0deca8b715d14bf6ec17"}, + {file = "tornado-6.3.3-cp38-abi3-win32.whl", hash = "sha256:65ceca9500383fbdf33a98c0087cb975b2ef3bfb874cb35b8de8740cf7f41bd3"}, + {file = "tornado-6.3.3-cp38-abi3-win_amd64.whl", hash = "sha256:22d3c2fa10b5793da13c807e6fc38ff49a4f6e1e3868b0a6f4164768bb8e20f5"}, + {file = "tornado-6.3.3.tar.gz", hash = "sha256:e7d8db41c0181c80d76c982aacc442c0783a2c54d6400fe028954201a2e032fe"}, ] [[package]] name = "tqdm" version = "4.66.1" description = "Fast, Extensible Progress Meter" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4651,25 +4540,23 @@ telegram = ["requests"] [[package]] name = "traitlets" -version = "5.9.0" +version = "5.10.0" description = "Traitlets Python configuration system" -category = "main" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "traitlets-5.9.0-py3-none-any.whl", hash = "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8"}, - {file = "traitlets-5.9.0.tar.gz", hash = "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9"}, + {file = "traitlets-5.10.0-py3-none-any.whl", hash = "sha256:417745a96681fbb358e723d5346a547521f36e9bd0d50ba7ab368fff5d67aa54"}, + {file = "traitlets-5.10.0.tar.gz", hash = "sha256:f584ea209240466e66e91f3c81aa7d004ba4cf794990b0c775938a1544217cd1"}, ] [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.5.1)", "pre-commit", "pytest (>=7.0,<7.5)", "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 = [ @@ -4679,21 +4566,19 @@ files = [ [[package]] name = "types-docutils" -version = "0.20.0.1" +version = "0.20.0.3" description = "Typing stubs for docutils" -category = "dev" optional = false python-versions = "*" files = [ - {file = "types-docutils-0.20.0.1.tar.gz", hash = "sha256:f682b5459a1e6e28208742adb0be8573d1ecbddd442f00d202b0278c1c4418a2"}, - {file = "types_docutils-0.20.0.1-py3-none-any.whl", hash = "sha256:6b17cbe57cb282158feb41d154cddaeabc16f1d6cff3c7308bd3056f42aa7cd2"}, + {file = "types-docutils-0.20.0.3.tar.gz", hash = "sha256:4928e790f42b99d5833990f99c8dd9fa9f16825f6ed30380ca981846d36870cd"}, + {file = "types_docutils-0.20.0.3-py3-none-any.whl", hash = "sha256:a930150d8e01a9170f9bca489f46808ddebccdd8bc1e47c07968a77e49fb9321"}, ] [[package]] name = "types-pillow" version = "9.5.0.6" description = "Typing stubs for Pillow" -category = "dev" optional = false python-versions = "*" files = [ @@ -4705,7 +4590,6 @@ files = [ name = "types-protobuf" version = "3.20.4.6" description = "Typing stubs for protobuf" -category = "dev" optional = false python-versions = "*" files = [ @@ -4717,7 +4601,6 @@ files = [ name = "types-pygments" version = "2.16.0.0" description = "Typing stubs for Pygments" -category = "dev" optional = false python-versions = "*" files = [ @@ -4731,14 +4614,13 @@ types-setuptools = "*" [[package]] name = "types-requests" -version = "2.31.0.2" +version = "2.31.0.3" description = "Typing stubs for requests" -category = "dev" optional = false python-versions = "*" files = [ - {file = "types-requests-2.31.0.2.tar.gz", hash = "sha256:6aa3f7faf0ea52d728bb18c0a0d1522d9bfd8c72d26ff6f61bfc3d06a411cf40"}, - {file = "types_requests-2.31.0.2-py3-none-any.whl", hash = "sha256:56d181c85b5925cbc59f4489a57e72a8b2166f18273fd8ba7b6fe0c0b986f12a"}, + {file = "types-requests-2.31.0.3.tar.gz", hash = "sha256:d5d7a08965fca12bedf716eaf5430c6e3d0da9f3164a1dba2a7f3885f9ebe3c0"}, + {file = "types_requests-2.31.0.3-py3-none-any.whl", hash = "sha256:938f51653c757716aeca5d72c405c5e2befad8b0d330e3b385ce7f148e1b10dc"}, ] [package.dependencies] @@ -4748,7 +4630,6 @@ types-urllib3 = "*" name = "types-setuptools" version = "57.4.18" description = "Typing stubs for setuptools" -category = "dev" optional = false python-versions = "*" files = [ @@ -4756,22 +4637,10 @@ files = [ {file = "types_setuptools-57.4.18-py3-none-any.whl", hash = "sha256:9660b8774b12cd61b448e2fd87a667c02e7ec13ce9f15171f1d49a4654c4df6a"}, ] -[[package]] -name = "types-tqdm" -version = "4.66.0.0" -description = "Typing stubs for tqdm" -optional = false -python-versions = "*" -files = [ - {file = "types-tqdm-4.66.0.0.tar.gz", hash = "sha256:7a981f281f911cb2f4780ba67e3dd7f15d36f32996a16a56e2834a6f734b7db9"}, - {file = "types_tqdm-4.66.0.0-py3-none-any.whl", hash = "sha256:be1c0ee809e915fa62af1981923a4ec9b8ccdae6d0e332399bf06bd6c5843d70"}, -] - [[package]] name = "types-urllib3" version = "1.26.25.14" description = "Typing stubs for urllib3" -category = "dev" optional = false python-versions = "*" files = [ @@ -4781,21 +4650,19 @@ files = [ [[package]] name = "typing-extensions" -version = "4.7.1" -description = "Backported and Experimental Type Hints for Python 3.7+" -category = "main" +version = "4.8.0" +description = "Backported and Experimental Type Hints for Python 3.8+" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, - {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, + {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, + {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, ] [[package]] name = "uri-template" version = "1.3.0" description = "RFC 6570 URI Template Processor" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4808,14 +4675,13 @@ dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake [[package]] name = "urllib3" -version = "2.0.4" +version = "2.0.5" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"}, - {file = "urllib3-2.0.4.tar.gz", hash = "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"}, + {file = "urllib3-2.0.5-py3-none-any.whl", hash = "sha256:ef16afa8ba34a1f989db38e1dbbe0c302e4289a47856990d0682e374563ce35e"}, + {file = "urllib3-2.0.5.tar.gz", hash = "sha256:13abf37382ea2ce6fb744d4dad67838eec857c9f4f57009891805e0b5e123594"}, ] [package.extras] @@ -4826,14 +4692,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.24.2" +version = "20.24.5" description = "Virtual Python Environment builder" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.24.2-py3-none-any.whl", hash = "sha256:43a3052be36080548bdee0b42919c88072037d50d56c28bd3f853cbe92b953ff"}, - {file = "virtualenv-20.24.2.tar.gz", hash = "sha256:fd8a78f46f6b99a67b7ec5cf73f92357891a7b3a40fd97637c27f854aae3b9e0"}, + {file = "virtualenv-20.24.5-py3-none-any.whl", hash = "sha256:b80039f280f4919c77b30f1c23294ae357c4c8701042086e3fc005963e4e537b"}, + {file = "virtualenv-20.24.5.tar.gz", hash = "sha256:e8361967f6da6fbdf1426483bfe9fca8287c242ac0bc30429905721cefbff752"}, ] [package.dependencies] @@ -4842,14 +4707,13 @@ filelock = ">=3.12.2,<4" platformdirs = ">=3.9.1,<4" [package.extras] -docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "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 = "2.3.1" description = "Filesystem events monitoring" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -4890,7 +4754,6 @@ watchmedo = ["PyYAML (>=3.10)"] name = "wcwidth" version = "0.2.6" description = "Measures the displayed width of unicode strings in a terminal" -category = "main" optional = true python-versions = "*" files = [ @@ -4902,7 +4765,6 @@ 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 = [ @@ -4918,7 +4780,6 @@ 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 = [ @@ -4928,18 +4789,17 @@ files = [ [[package]] name = "websocket-client" -version = "1.6.1" +version = "1.6.3" description = "WebSocket client for Python with low level API options" -category = "main" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "websocket-client-1.6.1.tar.gz", hash = "sha256:c951af98631d24f8df89ab1019fc365f2227c0892f12fd150e935607c79dd0dd"}, - {file = "websocket_client-1.6.1-py3-none-any.whl", hash = "sha256:f1f9f2ad5291f0225a49efad77abf9e700b6fef553900623060dad6e26503b9d"}, + {file = "websocket-client-1.6.3.tar.gz", hash = "sha256:3aad25d31284266bcfcfd1fd8a743f63282305a364b8d0948a43bd606acc652f"}, + {file = "websocket_client-1.6.3-py3-none-any.whl", hash = "sha256:6cfc30d051ebabb73a5fa246efdcc14c8fbebbd0330f8984ac3bb6d9edd2ad03"}, ] [package.extras] -docs = ["Sphinx (>=3.4)", "sphinx-rtd-theme (>=0.5)"] +docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"] optional = ["python-socks", "wsaccel"] test = ["websockets"] @@ -4947,7 +4807,6 @@ test = ["websockets"] name = "wrapt" version = "1.15.0" description = "Module for decorators, wrappers and monkey patching." -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ @@ -5032,7 +4891,6 @@ files = [ name = "y-py" version = "0.6.0" description = "Python bindings for the Y-CRDT built from yrs (Rust)" -category = "main" optional = true python-versions = "*" files = [ @@ -5108,7 +4966,6 @@ files = [ name = "ypy-websocket" version = "0.8.4" description = "WebSocket connector for Ypy" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -5126,18 +4983,17 @@ test = ["mypy", "pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)"] [[package]] name = "zipp" -version = "3.16.2" +version = "3.17.0" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"}, - {file = "zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"}, + {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, + {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +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"] [extras] @@ -5147,4 +5003,4 @@ jupyterlab = ["jupyterlab", "notebook"] [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.12" -content-hash = "90c884ea37e200808df3c88f2aa63d1b65c9145c61845b32eae142c6bcab56ba" +content-hash = "152aa3859853881686c7d6667610017991e5f281ea91696077c19203b8993d12" diff --git a/pyproject.toml b/pyproject.toml index c9c24177d4..ad2bec52de 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -111,11 +111,6 @@ allow-prereleases = false python = "^3.6" markers = "platform_python_implementation == 'CPython'" - -[tool.poetry.group.dev.dependencies] -mypy = "^0.991" -types-tqdm = "^4.64.7.9" - [tool.pytest.ini_options] markers = "slow: Mark the test as slow. Can be skipped with --skip_slow" addopts = "--no-cov-on-fail --cov=manim --cov-report xml --cov-report term -n auto --dist=loadfile --durations=0" From ca3154cc5e3d348f6cabc7c462cfe9ab7650f91d Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Fri, 22 Sep 2023 18:55:31 +0200 Subject: [PATCH 49/91] Update docs --- docs/source/contributing/typings.rst | 98 +++++++++------------------- 1 file changed, 32 insertions(+), 66 deletions(-) diff --git a/docs/source/contributing/typings.rst b/docs/source/contributing/typings.rst index 034f4b6faf..2854e41a80 100644 --- a/docs/source/contributing/typings.rst +++ b/docs/source/contributing/typings.rst @@ -2,102 +2,68 @@ Adding Typings ============== +.. warning:: + This section is still a work in progress. + Adding type hints to functions and parameters --------------------------------------------- -.. warning:: - This section is still a work in progress. +Manim is currently in the process of adding type hints into the library. In this section, you will find information about the standards used +and some general guidelines. If you've never used type hints before, this is a good place to get started: https://realpython.com/python-type-checking/#hello-types. -When adding type hints to manim, there are some guidelines that should be followed: +Typing standards +~~~~~~~~~~~~~~~~ -* Coordinates have the typehint ``Sequence[float]``, e.g. +Manim uses `mypy`_ to type check its codebase. You will find a list of configuration values in the ``.mypy.ini`` configuration file. -.. code:: py +To be able to use the newest typing features not available in the lowest supported Python version, make use of `typing_extensions`_. - def set_points_as_corners(self, points: Sequence[float]) -> "VMobject": - """Given an array of points, set them as corner of the Vmobject.""" +To be able to use the new Union syntax (``|``) and builtins subscripting, use the ``from __future__ import annotations`` import. -* ``**kwargs`` has no typehint +.. _mypy: https://mypy-lang.org/ +.. _typing_extensions: https://pypi.org/project/typing-extensions/ -* Mobjects have the typehint "Mobject", e.g. +Typing guidelines +~~~~~~~~~~~~~~~~~ -.. code:: py +* Manim has a dedicated :mod:`~.typing` module where type alias are provided. Most of them may seem redundant, in particular the ones related to ``numpy``. This is in anticipation of the +support for shape type hinting (`related issue _`). Besides the pending shape support, using the correct type aliases will help users understand +which shape should be used. - def match_color(self, mobject: "Mobject"): - """Match the color with the color of another :class:`~.Mobject`.""" - return self.set_color(mobject.get_color()) - -* Colors have the typehint ``Color``, e.g. - -.. code:: py - - def set_color(self, color: Color = YELLOW_C, family: bool = True): - """Condition is function which takes in one arguments, (x, y, z).""" - -* As ``float`` and ``Union[int, float]`` are the same, use only ``float`` - -* For numpy arrays use the typehint ``np.ndarray`` - -* Functions that does not return a value should get the type hint ``None``. (This annotations help catch the kinds of subtle bugs where you are trying to use a meaningless return value. ) +* Always use a type hint of ``None`` for functions that does not return a value (this also applies to ``__init__``), e.g.: .. code:: py def height(self, value) -> None: self.scale_to_fit_height(value) -* Parameters that are None by default should get the type hint ``Optional`` - -.. code:: py +* For variables representing paths, use the ``StrPath`` or ``StrOrBytesPath`` type alias defined in the :mod:`~.typing` module. - def rotate( - self, - angle, - axis=OUT, - about_point: Optional[Sequence[float]] = None, - **kwargs, - ): - pass +* ``*args`` and ``**kwargs`` shouldn't be left untyped (in most cases you can use ``Any``). +* As `PEP 484 _` implies that ``int`` can be used ``float`` is specified, use ``float`` instead of ``int | float``. -* The ``__init__()`` method always should have None as its return type. - -* Functions and lambda functions should get the typehint ``Callable`` +* Mobjects have the typehint ``Mobject``, e.g.: .. code:: py - rate_func: Callable[[float], float] = lambda t: smooth(1 - t) - - -* Assuming that typical path objects are either Paths or strs, one can use the typehint ``typing.Union[str, pathlib.Path]`` + def match_color(self, mobject: "Mobject"): + """Match the color with the color of another :class:`~.Mobject`.""" + return self.set_color(mobject.get_color()) -.. note:: - As a helper for tool for typesets, you can use `typestring-parser - `_ - which can be accessed by first installing it via ``pip`` - ``pip install typestring-parser`` and - then using ``from typestring_parser import parse``. +* Functions and lambda functions should get the type hint ``Callable``, e.g.: -.. doctest:: - :options: +SKIP +.. code:: py - >>> from typestring_parser import parse - >>> parse("int") - - >>> parse("int or str") - typing.Union[int, str] - >>> parse("list of str or str") - typing.Union[typing.List[str], str] - >>> parse("list of (int, str)") - typing.List[typing.Tuple[int, str]] + rate_func: Callable[[float], float] = lambda t: smooth(1 - t) Missing Sections for typehints are: ----------------------------------- -* Tools for typehinting -* Link to MyPy + * Mypy and numpy import errors: https://realpython.com/python-type-checking/#running-mypy -* Where to find the alias -* When to use Object and when to use "Object". -* The use of a TypeVar on the type hints for copy(). -* The definition and use of Protocols (like Sized, or Sequence, or Iterable...) +* When to use ``object`` vs ``Any`` +* The use of a TypeVar on the type hints for ``copy()``. +* The definition and use of Protocols (like ``Sized``, ``Sequence``, ``Iterable``...) From 920d15c4bd98570c619fe500160422d0534a53a4 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 22 Sep 2023 16:59:47 +0000 Subject: [PATCH 50/91] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- manim/typing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/typing.py b/manim/typing.py index efa53568d1..553c868d02 100644 --- a/manim/typing.py +++ b/manim/typing.py @@ -1,7 +1,7 @@ from __future__ import annotations -from typing import Callable from os import PathLike +from typing import Callable import numpy as np import numpy.typing as npt From c6183e8c322f0ef18a67a762314533e16d7b48d1 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Fri, 22 Sep 2023 19:09:22 +0200 Subject: [PATCH 51/91] Only type check manim --- .mypy.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/.mypy.ini b/.mypy.ini index 6d058cac42..74bf61dc0f 100644 --- a/.mypy.ini +++ b/.mypy.ini @@ -1,5 +1,6 @@ [mypy] strict = False +files = ["manim"] python_version = 3.10 ; plugins = numpy.typing.mypy_plugin ignore_errors = False From ad7043f8abb6f9d7438dca7c23b7ee3921b54f28 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Fri, 22 Sep 2023 19:28:52 +0200 Subject: [PATCH 52/91] Try fixing pre-commit --- .pre-commit-config.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9b25dc9e72..aa134edea8 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -69,6 +69,7 @@ repos: types-requests, types-setuptools, ] + files: ^manim/ - repo: https://github.com/codespell-project/codespell rev: v2.2.5 From 1da1b99bd493e30a523590961bf6898e540014be Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Fri, 22 Sep 2023 19:50:23 +0200 Subject: [PATCH 53/91] fix merge --- manim/utils/color/__init__.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/manim/utils/color/__init__.py b/manim/utils/color/__init__.py index ce9ee03beb..903fcc9d0c 100644 --- a/manim/utils/color/__init__.py +++ b/manim/utils/color/__init__.py @@ -52,3 +52,7 @@ from . import AS2700, BS381, X11, XKCD from .core import * from .manim_colors import * + +_all_color_dict: Dict[str, ManimColor] = { + k: v for k, v in globals().items() if isinstance(v, ManimColor) +} From 8522b59252f08620c361b273470e6c551f52d34e Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 22 Sep 2023 17:52:53 +0000 Subject: [PATCH 54/91] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- manim/utils/color/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/utils/color/__init__.py b/manim/utils/color/__init__.py index 903fcc9d0c..6e0f36ff44 100644 --- a/manim/utils/color/__init__.py +++ b/manim/utils/color/__init__.py @@ -54,5 +54,5 @@ from .manim_colors import * _all_color_dict: Dict[str, ManimColor] = { - k: v for k, v in globals().items() if isinstance(v, ManimColor) + k: v for k, v in globals().items() if isinstance(v, ManimColor) } From 6f95fd3df47c31c5a2b27da051429565a2883338 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Fri, 22 Sep 2023 19:57:57 +0200 Subject: [PATCH 55/91] Fix compat --- manim/typing.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/manim/typing.py b/manim/typing.py index 553c868d02..9c42ee1af0 100644 --- a/manim/typing.py +++ b/manim/typing.py @@ -1,7 +1,7 @@ from __future__ import annotations from os import PathLike -from typing import Callable +from typing import Callable, Tuple, Union import numpy as np import numpy.typing as npt @@ -14,16 +14,16 @@ ManimColorDType: TypeAlias = ManimFloat RGB_Array_Float: TypeAlias = npt.NDArray[ManimFloat] -RGB_Tuple_Float: TypeAlias = tuple[float, float, float] +RGB_Tuple_Float: TypeAlias = Tuple[float, float, float] RGB_Array_Int: TypeAlias = npt.NDArray[ManimInt] -RGB_Tuple_Int: TypeAlias = tuple[int, int, int] +RGB_Tuple_Int: TypeAlias = Tuple[int, int, int] RGBA_Array_Float: TypeAlias = npt.NDArray[ManimFloat] -RGBA_Tuple_Float: TypeAlias = tuple[float, float, float, float] +RGBA_Tuple_Float: TypeAlias = Tuple[float, float, float, float] RGBA_Array_Int: TypeAlias = npt.NDArray[ManimInt] -RGBA_Tuple_Int: TypeAlias = tuple[int, int, int, int] +RGBA_Tuple_Int: TypeAlias = Tuple[int, int, int, int] HSV_Array_Float: TypeAlias = RGB_Array_Float HSV_Tuple_Float: TypeAlias = RGB_Tuple_Float @@ -110,5 +110,5 @@ Image: TypeAlias = np.ndarray """An Image""" -StrPath: TypeAlias = str | PathLike[str] -StrOrBytesPath: TypeAlias = str | bytes | PathLike[str] | PathLike[bytes] +StrPath: TypeAlias = Union[str, PathLike[str]] +StrOrBytesPath: TypeAlias = Union[str, bytes, PathLike[str], PathLike[bytes]] From c2d7d42a281ffc301094b3175d92fabe0cc0d694 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Fri, 22 Sep 2023 20:02:48 +0200 Subject: [PATCH 56/91] Fix compat again --- manim/typing.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manim/typing.py b/manim/typing.py index 9c42ee1af0..6965bed990 100644 --- a/manim/typing.py +++ b/manim/typing.py @@ -1,7 +1,7 @@ from __future__ import annotations from os import PathLike -from typing import Callable, Tuple, Union +from typing import Callable, Tuple import numpy as np import numpy.typing as npt @@ -110,5 +110,5 @@ Image: TypeAlias = np.ndarray """An Image""" -StrPath: TypeAlias = Union[str, PathLike[str]] -StrOrBytesPath: TypeAlias = Union[str, bytes, PathLike[str], PathLike[bytes]] +StrPath: TypeAlias = "str | PathLike[str]" +StrOrBytesPath: TypeAlias = "str | bytes | PathLike[str] | PathLike[bytes]" From 3a3d5018025399cfb6193cb46a1e569fa0ae8472 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Fri, 22 Sep 2023 20:26:32 +0200 Subject: [PATCH 57/91] Fix imports compat --- manim/_config/__init__.py | 1 - manim/_config/logger_utils.py | 1 + manim/_config/utils.py | 4 ++-- manim/mobject/geometry/arc.py | 3 ++- manim/mobject/geometry/line.py | 3 ++- manim/mobject/geometry/shape_matchers.py | 4 +++- manim/mobject/mobject.py | 3 ++- manim/mobject/three_d/three_dimensions.py | 5 +++-- manim/mobject/types/vectorized_mobject.py | 2 +- 9 files changed, 16 insertions(+), 10 deletions(-) diff --git a/manim/_config/__init__.py b/manim/_config/__init__.py index 94bea642aa..5c8d257293 100644 --- a/manim/_config/__init__.py +++ b/manim/_config/__init__.py @@ -20,7 +20,6 @@ ] parser = make_config_parser() -logger: logging.Logger # The logger can be accessed from anywhere as manim.logger, or as # logging.getLogger("manim"). The console must be accessed as manim.console. diff --git a/manim/_config/logger_utils.py b/manim/_config/logger_utils.py index ca31b4fa54..6ed8751ef2 100644 --- a/manim/_config/logger_utils.py +++ b/manim/_config/logger_utils.py @@ -26,6 +26,7 @@ if TYPE_CHECKING: from pathlib import Path + HIGHLIGHTED_KEYWORDS = [ # these keywords are highlighted specially "Played", "animations", diff --git a/manim/_config/utils.py b/manim/_config/utils.py index fcbc417ead..d5512b491f 100644 --- a/manim/_config/utils.py +++ b/manim/_config/utils.py @@ -27,9 +27,9 @@ from .. import constants from ..constants import RendererType +from ..typing import StrPath from ..utils.color import ManimColor from ..utils.tex import TexTemplate, TexTemplateFromFile -from ..utils.tex_templates import TexTemplateLibrary def config_file_paths() -> list[Path]: @@ -76,7 +76,7 @@ def config_file_paths() -> list[Path]: def make_config_parser( - custom_file: str | os.PathLike | None = None, + custom_file: StrPath | None = None, ) -> configparser.ConfigParser: """Make a :class:`ConfigParser` object and load any ``.cfg`` files. diff --git a/manim/mobject/geometry/arc.py b/manim/mobject/geometry/arc.py index a0c131326b..6d09e4cdeb 100644 --- a/manim/mobject/geometry/arc.py +++ b/manim/mobject/geometry/arc.py @@ -44,9 +44,10 @@ def construct(self): import itertools import warnings -from typing import TYPE_CHECKING, Self, TypeAlias +from typing import TYPE_CHECKING import numpy as np +from typing_extensions import Self, TypeAlias from manim.constants import * from manim.mobject.opengl.opengl_compatibility import ConvertToOpenGL diff --git a/manim/mobject/geometry/line.py b/manim/mobject/geometry/line.py index 8a8c9b8a63..b958e55e19 100644 --- a/manim/mobject/geometry/line.py +++ b/manim/mobject/geometry/line.py @@ -14,9 +14,10 @@ "RightAngle", ] -from typing import TYPE_CHECKING, Self, Sequence +from typing import TYPE_CHECKING import numpy as np +from typing_extensions import Self from manim import config from manim.constants import * diff --git a/manim/mobject/geometry/shape_matchers.py b/manim/mobject/geometry/shape_matchers.py index 187ed93d99..296d9b9d9f 100644 --- a/manim/mobject/geometry/shape_matchers.py +++ b/manim/mobject/geometry/shape_matchers.py @@ -4,7 +4,9 @@ __all__ = ["SurroundingRectangle", "BackgroundRectangle", "Cross", "Underline"] -from typing import Any, Self +from typing import Any + +from typing_extensions import Self from manim import config, logger from manim.constants import * diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index 21c632dea9..e685fb24c4 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -14,9 +14,10 @@ import warnings from functools import partialmethod, reduce from pathlib import Path -from typing import TYPE_CHECKING, Callable, Iterable, Literal, Self, TypeVar +from typing import TYPE_CHECKING, Callable, Iterable, Literal, TypeVar import numpy as np +from typing_extensions import Self from manim.mobject.opengl.opengl_compatibility import ConvertToOpenGL diff --git a/manim/mobject/three_d/three_dimensions.py b/manim/mobject/three_d/three_dimensions.py index 26ea0bd853..ce39ece61d 100644 --- a/manim/mobject/three_d/three_dimensions.py +++ b/manim/mobject/three_d/three_dimensions.py @@ -4,7 +4,7 @@ from pyrr import Vector3 -from manim.typing import Point3D, Vector +from manim.typing import Point3D from manim.utils.color import BLUE, BLUE_D, BLUE_E, LIGHT_GREY, WHITE, interpolate_color __all__ = [ @@ -21,9 +21,10 @@ "Torus", ] -from typing import Callable, Sequence, Tuple +from typing import Any, Callable, Iterable, Sequence import numpy as np +from typing_extensions import Self from manim import config, logger from manim.constants import * diff --git a/manim/mobject/types/vectorized_mobject.py b/manim/mobject/types/vectorized_mobject.py index 59ea4a2cb9..4a3fd4146e 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -22,12 +22,12 @@ Iterable, Literal, Mapping, - Self, Sequence, ) import numpy as np from PIL.Image import Image +from typing_extensions import Self from manim.mobject.opengl.opengl_compatibility import ConvertToOpenGL from manim.mobject.opengl.opengl_vectorized_mobject import OpenGLVMobject From 2189d0103aa5edb73e471729532fc92e05ab1ee3 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Fri, 22 Sep 2023 20:33:55 +0200 Subject: [PATCH 58/91] Use union syntax --- manim/mobject/mobject.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index e685fb24c4..f7c4653044 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -14,10 +14,10 @@ import warnings from functools import partialmethod, reduce from pathlib import Path -from typing import TYPE_CHECKING, Callable, Iterable, Literal, TypeVar +from typing import TYPE_CHECKING, Callable, Iterable, Literal, TypeVar, Union import numpy as np -from typing_extensions import Self +from typing_extensions import Self, TypeAlias from manim.mobject.opengl.opengl_compatibility import ConvertToOpenGL @@ -40,13 +40,12 @@ # TODO: Explain array_attrs -TimeBasedUpdater = Callable[["Mobject", float], None] -NonTimeBasedUpdater = Callable[["Mobject"], None] -Updater = NonTimeBasedUpdater | TimeBasedUpdater +TimeBasedUpdater: TypeAlias = Callable[["Mobject", float], None] +NonTimeBasedUpdater: TypeAlias = Callable[["Mobject"], None] +Updater: TypeAlias = Union[NonTimeBasedUpdater, TimeBasedUpdater] T = TypeVar("T", bound="Mobject") if TYPE_CHECKING: - from manim.mobject.types.vectorized_mobject import VMobject from manim.typing import ( FunctionOverride, Image, @@ -111,7 +110,7 @@ def __init__( self.submobjects = [] self.updaters: list[Updater] = [] self.updating_suspended = False - self.color: ManimColor = ManimColor.parse(color) + self.color = ManimColor.parse(color) self.reset_points() self.generate_points() From e62ade2ebc0f1d327b9b989c974f0cf5a4512dde Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Fri, 22 Sep 2023 20:43:51 +0200 Subject: [PATCH 59/91] Use union syntax --- manim/mobject/geometry/arc.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/manim/mobject/geometry/arc.py b/manim/mobject/geometry/arc.py index 6d09e4cdeb..35c3a147a0 100644 --- a/manim/mobject/geometry/arc.py +++ b/manim/mobject/geometry/arc.py @@ -44,7 +44,7 @@ def construct(self): import itertools import warnings -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, Union import numpy as np from typing_extensions import Self, TypeAlias @@ -69,7 +69,7 @@ def construct(self): from manim.typing import CubicBezierPoints, Point3D, QuadraticBezierPoints, Vector -Angle: TypeAlias = float | np.float64 +Angle: TypeAlias = Union[float, np.float64] class TipableVMobject(VMobject, metaclass=ConvertToOpenGL): From 4497734eb02f679fda82ba0613ed4d2ca11b458d Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Fri, 22 Sep 2023 21:06:42 +0200 Subject: [PATCH 60/91] Fix reduce_across_dimension --- manim/mobject/mobject.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index f7c4653044..0d52412cb2 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -1887,7 +1887,7 @@ def restore(self) -> Self: return self def reduce_across_dimension( - self, points_func: Callable, reduce_func: Callable, dim: int + self, reduce_func: Callable, dim: int ): """Find the min or max value from a dimension across all points in this and submobjects.""" assert dim >= 0 and dim <= 2 From aadb22cf78673ed68f3c742f6800c0ac5d36db10 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 22 Sep 2023 19:07:24 +0000 Subject: [PATCH 61/91] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- manim/mobject/mobject.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index 0d52412cb2..90bea59841 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -1886,9 +1886,7 @@ def restore(self) -> Self: self.become(self.saved_state) return self - def reduce_across_dimension( - self, reduce_func: Callable, dim: int - ): + def reduce_across_dimension(self, reduce_func: Callable, dim: int): """Find the min or max value from a dimension across all points in this and submobjects.""" assert dim >= 0 and dim <= 2 if len(self.submobjects) == 0 and len(self.points) == 0: From 0852403ca0aba90c64ac9d1a492b1d5344287a94 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Fri, 22 Sep 2023 21:44:13 +0200 Subject: [PATCH 62/91] Various test and merge fixes --- manim/mobject/geometry/polygram.py | 8 +++++++- manim/utils/color/BS381.py | 8 -------- manim/utils/color/core.py | 3 +++ 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/manim/mobject/geometry/polygram.py b/manim/mobject/geometry/polygram.py index f3226416a7..bf2a92bdb5 100644 --- a/manim/mobject/geometry/polygram.py +++ b/manim/mobject/geometry/polygram.py @@ -16,6 +16,7 @@ ] +from math import ceil from typing import TYPE_CHECKING import numpy as np @@ -141,7 +142,12 @@ def get_vertex_groups(self) -> np.ndarray[Point3D_Array]: return np.array(vertex_groups) - def round_corners(self, radius: float = 0.5) -> Self: + def round_corners( + self, + radius: float | list[float] = 0.5, + evenly_distribute_anchors: bool = False, + components_per_rounded_corner: int = 2, + ) -> Self: """Rounds off the corners of the :class:`Polygram`. Parameters diff --git a/manim/utils/color/BS381.py b/manim/utils/color/BS381.py index c1f5c243b8..5d09a6f1b3 100644 --- a/manim/utils/color/BS381.py +++ b/manim/utils/color/BS381.py @@ -185,8 +185,6 @@ CAMOUFLAGE_BEIGE = ManimColor("#B2A788") BS381_397 = ManimColor("#F3D163") JASMINE_YELLOW = ManimColor("#F3D163") -BS381_410 = ManimColor("#93612B") -LIGHT_BROWN = ManimColor("#93612B") BS381_411 = ManimColor("#74542F") MIDDLE_BROWN = ManimColor("#74542F") BS381_412 = ManimColor("#5C422E") @@ -203,8 +201,6 @@ CAMOUFLAGE_RED = ManimColor("#845B4D") BS381_436 = ManimColor("#564B47") DARK_CAMOUFLAGE_BROWN = ManimColor("#564B47") -BS381_437 = ManimColor("#464334") -VERY_DARK_DRAB = ManimColor("#464334") BS381_439 = ManimColor("#753B1E") ORANGE_BROWN = ManimColor("#753B1E") BS381_443 = ManimColor("#C98A71") @@ -221,8 +217,6 @@ DEEP_INDIAN_RED = ManimColor("#67403A") BS381_449 = ManimColor("#693B3F") LIGHT_PURPLE_BROWN = ManimColor("#693B3F") -BS381_450 = ManimColor("#745F46") -DARK_EARTH = ManimColor("#745F46") BS381_452 = ManimColor("#613339") DARK_CRIMSON = ManimColor("#613339") BS381_453 = ManimColor("#FBDED6") @@ -299,8 +293,6 @@ LIGHT_SLATE_GREY = ManimColor("#667563") BS381_640 = ManimColor("#566164") EXTRA_DARK_SEA_GREY = ManimColor("#566164") -BS381_641 = ManimColor("#484837") -DARK_GREEN = ManimColor("#484837") BS381_642 = ManimColor("#282B2F") NIGHT = ManimColor("#282b2f") BS381_671 = ManimColor("#4E5355") diff --git a/manim/utils/color/core.py b/manim/utils/color/core.py index 6265a609fc..cd4bff272e 100644 --- a/manim/utils/color/core.py +++ b/manim/utils/color/core.py @@ -1021,6 +1021,8 @@ def color_gradient( length_of_output: int, ) -> list[ManimColor] | ManimColor: """Creates a list of colors interpolated between the input array of colors with a specific number of colors + + Parameters ---------- reference_colors : Sequence[ParsableManimColor] The colors to be interpolated between or spread apart @@ -1034,6 +1036,7 @@ def color_gradient( """ if length_of_output == 0: return ManimColor(reference_colors[0]) + if len(reference_colors) == 1: return [ManimColor(reference_colors[0])] * length_of_output rgbs = list(map(color_to_rgb, reference_colors)) alphas = np.linspace(0, (len(rgbs) - 1), length_of_output) From b9fbf546cc00bd63bb75a559aaeef34342ee0f10 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Fri, 22 Sep 2023 22:09:59 +0200 Subject: [PATCH 63/91] Doc fixes --- .mypy.ini | 1 - manim/mobject/geometry/arc.py | 2 +- manim/utils/color/core.py | 12 +----------- 3 files changed, 2 insertions(+), 13 deletions(-) diff --git a/.mypy.ini b/.mypy.ini index 74bf61dc0f..acf409f5ee 100644 --- a/.mypy.ini +++ b/.mypy.ini @@ -5,7 +5,6 @@ python_version = 3.10 ; plugins = numpy.typing.mypy_plugin ignore_errors = False cache_fine_grained = True -use_fine_grained_cache = True # Disallow Dynamic Typing # disallow_any_unimported = True diff --git a/manim/mobject/geometry/arc.py b/manim/mobject/geometry/arc.py index 35c3a147a0..c1aa6a83e7 100644 --- a/manim/mobject/geometry/arc.py +++ b/manim/mobject/geometry/arc.py @@ -1089,7 +1089,7 @@ def __init__( if radius: all_arc_configs = itertools.repeat({"radius": radius}, len(point_pairs)) else: - all_arc_configs = itertools.repeat({"angle": float}, len(point_pairs)) + all_arc_configs = itertools.repeat({"angle": angle}, len(point_pairs)) elif isinstance(arc_config, dict): all_arc_configs = itertools.repeat(arc_config, len(point_pairs)) else: diff --git a/manim/utils/color/core.py b/manim/utils/color/core.py index cd4bff272e..19d2c844d8 100644 --- a/manim/utils/color/core.py +++ b/manim/utils/color/core.py @@ -127,21 +127,11 @@ def named_lines_group(length, colors, names, text_colors, align_to_block): .. code-block:: pycon >>> from manim import RED, GREEN, BLUE - >>> RED + >>> print(RED) '#FC6255' Note this way uses the name of the colors in UPPERCASE. -Alternatively, you can also import this Enum directly and use its members -directly, through the use of :code:`color.value`. Note this way uses the -name of the colors in lowercase. - -.. code-block:: pycon - - >>> from manim.utils.color import Colors - >>> Colors.red.value - '#FC6255' - .. note:: The colors of type "C" have an alias equal to the colorname without a letter, From 0f108c0aa3cc0b3f5e7098d8a3027969c16787de Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Fri, 22 Sep 2023 22:40:39 +0200 Subject: [PATCH 64/91] Last doc fix --- manim/utils/color/core.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/utils/color/core.py b/manim/utils/color/core.py index 19d2c844d8..3903d49ba1 100644 --- a/manim/utils/color/core.py +++ b/manim/utils/color/core.py @@ -128,7 +128,7 @@ def named_lines_group(length, colors, names, text_colors, align_to_block): >>> from manim import RED, GREEN, BLUE >>> print(RED) - '#FC6255' + #FC6255 Note this way uses the name of the colors in UPPERCASE. From 5160a1f0d8d7a17d6d3cde3f2ae0067582601ef1 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Sat, 23 Sep 2023 09:53:09 +0200 Subject: [PATCH 65/91] Revert usage of np over math --- manim/mobject/mobject.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index 90bea59841..331c2ea06a 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -7,6 +7,7 @@ import copy import itertools as it +import math import operator as op import random import sys @@ -2368,15 +2369,15 @@ def init_size(num, alignments, sizes): # calculate rows cols if rows is None and cols is None: - cols = np.ceil(np.sqrt(len(mobs))) + cols = math.ceil(math.sqrt(len(mobs))) # make the grid as close to quadratic as possible. # choosing cols first can results in cols>rows. # This is favored over rows>cols since in general # the sceene is wider than high. if rows is None: - rows = np.ceil(len(mobs) / cols) + rows = math.ceil(len(mobs) / cols) if cols is None: - cols = np.ceil(len(mobs) / rows) + cols = math.ceil(len(mobs) / rows) if rows * cols < len(mobs): raise ValueError("Too few rows and columns to fit all submobjetcs.") # rows and cols are now finally valid. @@ -2658,7 +2659,7 @@ def push_self_into_submobjects(self) -> Self: self.add(copy) return self - def add_n_more_submobjects(self, n: int) -> Self: + def add_n_more_submobjects(self, n: int) -> Self | None: if n == 0: return From 388b6d1a15b7734448df90c5bf3ca7644d14ee08 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Sat, 23 Sep 2023 10:32:06 +0200 Subject: [PATCH 66/91] Bump numpy version --- poetry.lock | 58 ++++---------------------------------------------- pyproject.toml | 3 +-- 2 files changed, 5 insertions(+), 56 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2aa4fa09e4..9a0c0ea054 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2530,56 +2530,6 @@ files = [ {file = "multipledispatch-1.0.0.tar.gz", hash = "sha256:5c839915465c68206c3e9c473357908216c28383b425361e5d144594bf85a7e0"}, ] -[[package]] -name = "mypy" -version = "0.991" -description = "Optional static typing for Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mypy-0.991-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7d17e0a9707d0772f4a7b878f04b4fd11f6f5bcb9b3813975a9b13c9332153ab"}, - {file = "mypy-0.991-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0714258640194d75677e86c786e80ccf294972cc76885d3ebbb560f11db0003d"}, - {file = "mypy-0.991-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0c8f3be99e8a8bd403caa8c03be619544bc2c77a7093685dcf308c6b109426c6"}, - {file = "mypy-0.991-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc9ec663ed6c8f15f4ae9d3c04c989b744436c16d26580eaa760ae9dd5d662eb"}, - {file = "mypy-0.991-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4307270436fd7694b41f913eb09210faff27ea4979ecbcd849e57d2da2f65305"}, - {file = "mypy-0.991-cp310-cp310-win_amd64.whl", hash = "sha256:901c2c269c616e6cb0998b33d4adbb4a6af0ac4ce5cd078afd7bc95830e62c1c"}, - {file = "mypy-0.991-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d13674f3fb73805ba0c45eb6c0c3053d218aa1f7abead6e446d474529aafc372"}, - {file = "mypy-0.991-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1c8cd4fb70e8584ca1ed5805cbc7c017a3d1a29fb450621089ffed3e99d1857f"}, - {file = "mypy-0.991-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:209ee89fbb0deed518605edddd234af80506aec932ad28d73c08f1400ef80a33"}, - {file = "mypy-0.991-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37bd02ebf9d10e05b00d71302d2c2e6ca333e6c2a8584a98c00e038db8121f05"}, - {file = "mypy-0.991-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:26efb2fcc6b67e4d5a55561f39176821d2adf88f2745ddc72751b7890f3194ad"}, - {file = "mypy-0.991-cp311-cp311-win_amd64.whl", hash = "sha256:3a700330b567114b673cf8ee7388e949f843b356a73b5ab22dd7cff4742a5297"}, - {file = "mypy-0.991-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:1f7d1a520373e2272b10796c3ff721ea1a0712288cafaa95931e66aa15798813"}, - {file = "mypy-0.991-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:641411733b127c3e0dab94c45af15fea99e4468f99ac88b39efb1ad677da5711"}, - {file = "mypy-0.991-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3d80e36b7d7a9259b740be6d8d906221789b0d836201af4234093cae89ced0cd"}, - {file = "mypy-0.991-cp37-cp37m-win_amd64.whl", hash = "sha256:e62ebaad93be3ad1a828a11e90f0e76f15449371ffeecca4a0a0b9adc99abcef"}, - {file = "mypy-0.991-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b86ce2c1866a748c0f6faca5232059f881cda6dda2a893b9a8373353cfe3715a"}, - {file = "mypy-0.991-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac6e503823143464538efda0e8e356d871557ef60ccd38f8824a4257acc18d93"}, - {file = "mypy-0.991-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0cca5adf694af539aeaa6ac633a7afe9bbd760df9d31be55ab780b77ab5ae8bf"}, - {file = "mypy-0.991-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a12c56bf73cdab116df96e4ff39610b92a348cc99a1307e1da3c3768bbb5b135"}, - {file = "mypy-0.991-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:652b651d42f155033a1967739788c436491b577b6a44e4c39fb340d0ee7f0d70"}, - {file = "mypy-0.991-cp38-cp38-win_amd64.whl", hash = "sha256:4175593dc25d9da12f7de8de873a33f9b2b8bdb4e827a7cae952e5b1a342e243"}, - {file = "mypy-0.991-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:98e781cd35c0acf33eb0295e8b9c55cdbef64fcb35f6d3aa2186f289bed6e80d"}, - {file = "mypy-0.991-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6d7464bac72a85cb3491c7e92b5b62f3dcccb8af26826257760a552a5e244aa5"}, - {file = "mypy-0.991-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c9166b3f81a10cdf9b49f2d594b21b31adadb3d5e9db9b834866c3258b695be3"}, - {file = "mypy-0.991-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8472f736a5bfb159a5e36740847808f6f5b659960115ff29c7cecec1741c648"}, - {file = "mypy-0.991-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5e80e758243b97b618cdf22004beb09e8a2de1af481382e4d84bc52152d1c476"}, - {file = "mypy-0.991-cp39-cp39-win_amd64.whl", hash = "sha256:74e259b5c19f70d35fcc1ad3d56499065c601dfe94ff67ae48b85596b9ec1461"}, - {file = "mypy-0.991-py3-none-any.whl", hash = "sha256:de32edc9b0a7e67c2775e574cb061a537660e51210fbf6006b0b36ea695ae9bb"}, - {file = "mypy-0.991.tar.gz", hash = "sha256:3c0165ba8f354a6d9881809ef29f1a9318a236a6d81c690094c5df32107bde06"}, -] - -[package.dependencies] -mypy-extensions = ">=0.4.3" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = ">=3.10" - -[package.extras] -dmypy = ["psutil (>=4.0)"] -install-types = ["pip"] -python2 = ["typed-ast (>=1.4.0,<2)"] -reports = ["lxml"] - [[package]] name = "mypy-extensions" version = "1.0.0" @@ -4614,13 +4564,13 @@ types-setuptools = "*" [[package]] name = "types-requests" -version = "2.31.0.3" +version = "2.31.0.4" description = "Typing stubs for requests" optional = false python-versions = "*" files = [ - {file = "types-requests-2.31.0.3.tar.gz", hash = "sha256:d5d7a08965fca12bedf716eaf5430c6e3d0da9f3164a1dba2a7f3885f9ebe3c0"}, - {file = "types_requests-2.31.0.3-py3-none-any.whl", hash = "sha256:938f51653c757716aeca5d72c405c5e2befad8b0d330e3b385ce7f148e1b10dc"}, + {file = "types-requests-2.31.0.4.tar.gz", hash = "sha256:a111041148d7e04bf100c476bc4db3ee6b0a1cd0b4018777f6a660b1c4f1318d"}, + {file = "types_requests-2.31.0.4-py3-none-any.whl", hash = "sha256:c7a9d6b62776f21b169a94a0e9d2dfcae62fa9149f53594ff791c3ae67325490"}, ] [package.dependencies] @@ -5003,4 +4953,4 @@ jupyterlab = ["jupyterlab", "notebook"] [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.12" -content-hash = "152aa3859853881686c7d6667610017991e5f281ea91696077c19203b8993d12" +content-hash = "1f7e474a838207a9e04444a2aa39d7d998f0201c9ff1335c6430ffc2072b94b9" diff --git a/pyproject.toml b/pyproject.toml index ad2bec52de..0dde007494 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,7 +29,7 @@ packages = [ python = ">=3.8,<3.12" click = ">=7.2,<=9.0" click-default-group = "^1.2.2" -numpy = "^1.19" +numpy = ">=1.22" Pillow = ">=9.1,<10.0" scipy = "^1.7.3" tqdm = "^4.62.3" @@ -78,7 +78,6 @@ pygithub = "^1" flake8 = "^3.9.0" isort = "^5.8.0" pytest-xdist = "^2.2" -mypy = "^0.991" types-requests = "^2.25.6" types-protobuf = "^3.17.4" types-decorator = "^0.1.7" From 287c3adb79bdf3d22e19eda213d67398f6c40e3a Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Sat, 23 Sep 2023 15:19:46 +0200 Subject: [PATCH 67/91] Remove obsolete duplicate example --- manim/utils/color/core.py | 119 -------------------------------------- 1 file changed, 119 deletions(-) diff --git a/manim/utils/color/core.py b/manim/utils/color/core.py index 3903d49ba1..5e4b93add9 100644 --- a/manim/utils/color/core.py +++ b/manim/utils/color/core.py @@ -4,124 +4,6 @@ This module contains the implementation of :class:`.ManimColor`, the data structure internally used to represent colors. -Examples --------- - -.. manim:: ColorsOverview - :save_last_frame: - :hide_source: - - from manim.utils.color import Colors - class ColorsOverview(Scene): - def construct(self): - def color_group(color): - group = VGroup( - *[ - Line(ORIGIN, RIGHT * 1.5, stroke_width=35, color=Colors[name].value) - for name in subnames(color) - ] - ).arrange_submobjects(buff=0.4, direction=DOWN) - - name = Text(color).scale(0.6).next_to(group, UP, buff=0.3) - if any(decender in color for decender in "gjpqy"): - name.shift(DOWN * 0.08) - group.add(name) - return group - - def subnames(name): - return [name + "_" + char for char in "abcde"] - - color_groups = VGroup( - *[ - color_group(color) - for color in [ - "blue", - "teal", - "green", - "yellow", - "gold", - "red", - "maroon", - "purple", - ] - ] - ).arrange_submobjects(buff=0.2, aligned_edge=DOWN) - - for line, char in zip(color_groups[0], "abcde"): - color_groups.add(Text(char).scale(0.6).next_to(line, LEFT, buff=0.2)) - - def named_lines_group(length, colors, names, text_colors, align_to_block): - lines = VGroup( - *[ - Line( - ORIGIN, - RIGHT * length, - stroke_width=55, - color=Colors[color].value, - ) - for color in colors - ] - ).arrange_submobjects(buff=0.6, direction=DOWN) - - for line, name, color in zip(lines, names, text_colors): - line.add(Text(name, color=color).scale(0.6).move_to(line)) - lines.next_to(color_groups, DOWN, buff=0.5).align_to( - color_groups[align_to_block], LEFT - ) - return lines - - other_colors = ( - "pink", - "light_pink", - "orange", - "light_brown", - "dark_brown", - "gray_brown", - ) - - other_lines = named_lines_group( - 3.2, - other_colors, - other_colors, - [BLACK] * 4 + [WHITE] * 2, - 0, - ) - - gray_lines = named_lines_group( - 6.6, - ["white"] + subnames("gray") + ["black"], - [ - "white", - "lighter_gray / gray_a", - "light_gray / gray_b", - "gray / gray_c", - "dark_gray / gray_d", - "darker_gray / gray_e", - "black", - ], - [BLACK] * 3 + [WHITE] * 4, - 2, - ) - - pure_colors = ( - "pure_red", - "pure_green", - "pure_blue", - ) - - pure_lines = named_lines_group( - 3.2, - pure_colors, - pure_colors, - [BLACK, BLACK, WHITE], - 6, - ) - - self.add(color_groups, other_lines, gray_lines, pure_lines) - - VGroup(*self.mobjects).move_to(ORIGIN) - - The preferred way of using these colors is by importing their constants from manim: .. code-block:: pycon @@ -136,7 +18,6 @@ def named_lines_group(length, colors, names, text_colors, align_to_block): The colors of type "C" have an alias equal to the colorname without a letter, e.g. GREEN = GREEN_C - """ from __future__ import annotations From 0c0f87540e58a2ef3ca94e31300365a2e534be83 Mon Sep 17 00:00:00 2001 From: JasonGrace2282 Date: Sat, 23 Sep 2023 11:14:17 -0400 Subject: [PATCH 68/91] Fixed Incorrect Typehint in manim.constants --- manim/constants.py | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/manim/constants.py b/manim/constants.py index b8058c99ad..f4437ff252 100644 --- a/manim/constants.py +++ b/manim/constants.py @@ -10,7 +10,7 @@ from cloup import Context # type: ignore from PIL.Image import Resampling -from manim.typing import Point3D +from manim.typing import Vector3 __all__ = [ "SCENE_NOT_FOUND_MESSAGE", @@ -122,43 +122,43 @@ } # Geometry: directions -ORIGIN: Point3D = np.array((0.0, 0.0, 0.0)) +ORIGIN: Vector3 = np.array((0.0, 0.0, 0.0)) """The center of the coordinate system.""" -UP: Point3D = np.array((0.0, 1.0, 0.0)) +UP: Vector3 = np.array((0.0, 1.0, 0.0)) """One unit step in the positive Y direction.""" -DOWN: Point3D = np.array((0.0, -1.0, 0.0)) +DOWN: Vector3 = np.array((0.0, -1.0, 0.0)) """One unit step in the negative Y direction.""" -RIGHT: Point3D = np.array((1.0, 0.0, 0.0)) +RIGHT: Vector3 = np.array((1.0, 0.0, 0.0)) """One unit step in the positive X direction.""" -LEFT: Point3D = np.array((-1.0, 0.0, 0.0)) +LEFT: Vector3 = np.array((-1.0, 0.0, 0.0)) """One unit step in the negative X direction.""" -IN: Point3D = np.array((0.0, 0.0, -1.0)) +IN: Vector3 = np.array((0.0, 0.0, -1.0)) """One unit step in the negative Z direction.""" -OUT: Point3D = np.array((0.0, 0.0, 1.0)) +OUT: Vector3 = np.array((0.0, 0.0, 1.0)) """One unit step in the positive Z direction.""" # Geometry: axes -X_AXIS: Point3D = np.array((1.0, 0.0, 0.0)) -Y_AXIS: Point3D = np.array((0.0, 1.0, 0.0)) -Z_AXIS: Point3D = np.array((0.0, 0.0, 1.0)) +X_AXIS: Vector3 = np.array((1.0, 0.0, 0.0)) +Y_AXIS: Vector3 = np.array((0.0, 1.0, 0.0)) +Z_AXIS: Vector3 = np.array((0.0, 0.0, 1.0)) # Geometry: useful abbreviations for diagonals -UL: Point3D = UP + LEFT +UL: Vector3 = UP + LEFT """One step up plus one step left.""" -UR: Point3D = UP + RIGHT +UR: Vector3 = UP + RIGHT """One step up plus one step right.""" -DL: Point3D = DOWN + LEFT +DL: Vector3 = DOWN + LEFT """One step down plus one step left.""" -DR: Point3D = DOWN + RIGHT +DR: Vector3 = DOWN + RIGHT """One step down plus one step right.""" # Geometry From b87b5943df369e8238d7ab75ae628c62c95a7f81 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Sun, 24 Sep 2023 22:06:48 +0200 Subject: [PATCH 69/91] Fix docstring typo --- manim/typing.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/manim/typing.py b/manim/typing.py index 6965bed990..f1805f2890 100644 --- a/manim/typing.py +++ b/manim/typing.py @@ -35,9 +35,9 @@ PointDType: TypeAlias = ManimFloat """ DType for all points. """ Point2D: TypeAlias = npt.NDArray[PointDType] -""" `shape: (2,) A 2D point. [float,float] """ +""" `shape: (2,)` A 2D point. `[float,float]` """ Point3D: TypeAlias = npt.NDArray[PointDType] -""" `shape: (3,) A 3D point. `[float,float,float]` """ +""" `shape: (3,)` A 3D point. `[float,float,float]` """ # Bezier Types QuadraticBezierPoints: TypeAlias = npt.NDArray[PointDType] From 1c139afc7d641b6f0e55aeae0378e4285a128ef3 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Mon, 25 Sep 2023 11:19:12 +0200 Subject: [PATCH 70/91] More fixes Use mypy.ini instead of .mypy.ini Fix more docstrings Improve types in utils and constants --- manim/constants.py | 84 +++++++++++------------ manim/mobject/three_d/three_dimensions.py | 4 +- manim/typing.py | 30 ++++---- manim/utils/bezier.py | 57 +++------------ manim/utils/color/core.py | 49 ++++++------- .mypy.ini => mypy.ini | 3 +- 6 files changed, 97 insertions(+), 130 deletions(-) rename .mypy.ini => mypy.ini (98%) diff --git a/manim/constants.py b/manim/constants.py index f4437ff252..065a10fcfc 100644 --- a/manim/constants.py +++ b/manim/constants.py @@ -7,7 +7,7 @@ from enum import Enum import numpy as np -from cloup import Context # type: ignore +from cloup import Context from PIL.Image import Resampling from manim.typing import Vector3 @@ -79,34 +79,34 @@ ] # Messages -SCENE_NOT_FOUND_MESSAGE: str = """ +SCENE_NOT_FOUND_MESSAGE = """ {} is not in the script """ -CHOOSE_NUMBER_MESSAGE: str = """ +CHOOSE_NUMBER_MESSAGE = """ Choose number corresponding to desired scene/arguments. (Use comma separated list for multiple entries) Choice(s): """ -INVALID_NUMBER_MESSAGE: str = "Invalid scene numbers have been specified. Aborting." -NO_SCENE_MESSAGE: str = """ +INVALID_NUMBER_MESSAGE = "Invalid scene numbers have been specified. Aborting." +NO_SCENE_MESSAGE = """ There are no scenes inside that module """ # Pango stuff -NORMAL: str = "NORMAL" -ITALIC: str = "ITALIC" -OBLIQUE: str = "OBLIQUE" -BOLD: str = "BOLD" +NORMAL = "NORMAL" +ITALIC = "ITALIC" +OBLIQUE = "OBLIQUE" +BOLD = "BOLD" # Only for Pango from below -THIN: str = "THIN" -ULTRALIGHT: str = "ULTRALIGHT" -LIGHT: str = "LIGHT" -SEMILIGHT: str = "SEMILIGHT" -BOOK: str = "BOOK" -MEDIUM: str = "MEDIUM" -SEMIBOLD: str = "SEMIBOLD" -ULTRABOLD: str = "ULTRABOLD" -HEAVY: str = "HEAVY" -ULTRAHEAVY: str = "ULTRAHEAVY" +THIN = "THIN" +ULTRALIGHT = "ULTRALIGHT" +LIGHT = "LIGHT" +SEMILIGHT = "SEMILIGHT" +BOOK = "BOOK" +MEDIUM = "MEDIUM" +SEMIBOLD = "SEMIBOLD" +ULTRABOLD = "ULTRABOLD" +HEAVY = "HEAVY" +ULTRAHEAVY = "ULTRAHEAVY" RESAMPLING_ALGORITHMS = { "nearest": Resampling.NEAREST, @@ -162,40 +162,40 @@ """One step down plus one step right.""" # Geometry -START_X: int = 30 -START_Y: int = 20 -DEFAULT_DOT_RADIUS: float = 0.08 -DEFAULT_SMALL_DOT_RADIUS: float = 0.04 -DEFAULT_DASH_LENGTH: float = 0.05 -DEFAULT_ARROW_TIP_LENGTH: float = 0.35 +START_X = 30 +START_Y = 20 +DEFAULT_DOT_RADIUS = 0.08 +DEFAULT_SMALL_DOT_RADIUS = 0.04 +DEFAULT_DASH_LENGTH = 0.05 +DEFAULT_ARROW_TIP_LENGTH = 0.35 # Default buffers (padding) -SMALL_BUFF: float = 0.1 -MED_SMALL_BUFF: float = 0.25 -MED_LARGE_BUFF: float = 0.5 -LARGE_BUFF: float = 1 -DEFAULT_MOBJECT_TO_EDGE_BUFFER: float = MED_LARGE_BUFF -DEFAULT_MOBJECT_TO_MOBJECT_BUFFER: float = MED_SMALL_BUFF +SMALL_BUFF = 0.1 +MED_SMALL_BUFF = 0.25 +MED_LARGE_BUFF = 0.5 +LARGE_BUFF = 1 +DEFAULT_MOBJECT_TO_EDGE_BUFFER = MED_LARGE_BUFF +DEFAULT_MOBJECT_TO_MOBJECT_BUFFER = MED_SMALL_BUFF # Times in seconds -DEFAULT_POINTWISE_FUNCTION_RUN_TIME: float = 3.0 -DEFAULT_WAIT_TIME: float = 1.0 +DEFAULT_POINTWISE_FUNCTION_RUN_TIME = 3.0 +DEFAULT_WAIT_TIME = 1.0 # Misc -DEFAULT_POINT_DENSITY_2D: int = 25 -DEFAULT_POINT_DENSITY_1D: int = 10 -DEFAULT_STROKE_WIDTH: int = 4 -DEFAULT_FONT_SIZE: float = 48 -SCALE_FACTOR_PER_FONT_POINT: float = 1 / 960 +DEFAULT_POINT_DENSITY_2D = 25 +DEFAULT_POINT_DENSITY_1D = 10 +DEFAULT_STROKE_WIDTH = 4 +DEFAULT_FONT_SIZE = 48 +SCALE_FACTOR_PER_FONT_POINT = 1 / 960 # Mathematical constants -PI: float = np.pi +PI = np.pi """The ratio of the circumference of a circle to its diameter.""" -TAU: float = 2 * PI +TAU = 2 * PI """The ratio of the circumference of a circle to its radius.""" -DEGREES: float = TAU / 360 +DEGREES = TAU / 360 """The exchange rate between radians and degrees.""" # Video qualities @@ -238,7 +238,7 @@ }, } -DEFAULT_QUALITY: str = "high_quality" +DEFAULT_QUALITY = "high_quality" EPILOG = "Made with <3 by Manim Community developers." SHIFT_VALUE = 65505 diff --git a/manim/mobject/three_d/three_dimensions.py b/manim/mobject/three_d/three_dimensions.py index ce39ece61d..1be9edf7dd 100644 --- a/manim/mobject/three_d/three_dimensions.py +++ b/manim/mobject/three_d/three_dimensions.py @@ -2,9 +2,7 @@ from __future__ import annotations -from pyrr import Vector3 - -from manim.typing import Point3D +from manim.typing import Point3D, Vector3 from manim.utils.color import BLUE, BLUE_D, BLUE_E, LIGHT_GREY, WHITE, interpolate_color __all__ = [ diff --git a/manim/typing.py b/manim/typing.py index f1805f2890..b6a8a81d66 100644 --- a/manim/typing.py +++ b/manim/typing.py @@ -35,62 +35,62 @@ PointDType: TypeAlias = ManimFloat """ DType for all points. """ Point2D: TypeAlias = npt.NDArray[PointDType] -""" `shape: (2,)` A 2D point. `[float,float]` """ +""" `shape: (2,)` A 2D point. `[float, float]` """ Point3D: TypeAlias = npt.NDArray[PointDType] -""" `shape: (3,)` A 3D point. `[float,float,float]` """ +""" `shape: (3,)` A 3D point. `[float, float, float]` """ # Bezier Types QuadraticBezierPoints: TypeAlias = npt.NDArray[PointDType] -""" `shape: (3,3)` An Array of Quadratic Bezier Handles `[[float,float,float], [float,float,float], [float,float,float]]`. """ +""" `shape: (3,3)` An Array of Quadratic Bezier Handles `[[float, float, float], [float, float, float], [float, float, float]]`. """ QuadraticBezierPoints_Array: TypeAlias = npt.NDArray[PointDType] -""" `shape: (N,3,3)` An Array of Quadratic Bezier Handles `[[[float,float,float], [float,float,float], [float,float,float]], ...]`. """ +""" `shape: (N,3,3)` An Array of Quadratic Bezier Handles `[[[float, float, float], [float, float, float], [float, float, float]], ...]`. """ CubicBezierPoints: TypeAlias = npt.NDArray[PointDType] -""" `shape: (4,3)` An Array of Cubic Bezier Handles `[[float,float,float], [float,float,float], [float,float,float], [float,float,float]]`. """ +""" `shape: (4,3)` An Array of Cubic Bezier Handles `[[float, float, float], [float, float, float], [float, float, float], [float, float, float]]`. """ BezierPoints: TypeAlias = npt.NDArray[PointDType] -""" `shape: (N,3)` An Array of Cubic Bezier Handles `[[float,float,float],...]`. +""" `shape: (N,3)` An Array of Cubic Bezier Handles `[[float, float, float], ...]`. `N` Is always multiples of the degree of the Bezier curve. (Please refer to the documentation of the function you are using for further type Information) """ FlatBezierPoints: TypeAlias = npt.NDArray[PointDType] -""" `shape: (N)` An Array of Bezier Handles but flattened `[float,...]`.""" +""" `shape: (N)` An Array of Bezier Handles but flattened `[float, ...]`.""" Point2D_Array: TypeAlias = npt.NDArray[PointDType] -""" `shape: (N,2)` An Array of Points in 2D Space `[[float,float],...]`. +""" `shape: (N,2)` An Array of Points in 2D Space `[[float, float], ...]`. (Please refer to the documentation of the function you are using for further type Information) """ Point3D_Array: TypeAlias = npt.NDArray[PointDType] -""" `shape: (N,3)` An Array of Points in 3D Space `[[float,float,float],...]`. +""" `shape: (N,3)` An Array of Points in 3D Space `[[float, float, float], ...]`. (Please refer to the documentation of the function you are using for further type Information) """ BezierPoints_Array: TypeAlias = npt.NDArray[PointDType] -""" `shape: (N,PPC,3)` An Array of Bezier Handles `[[[float,float,float],...],...]`. +""" `shape: (N,PPC,3)` An Array of Bezier Handles `[[[float, float, float], ...], ...]`. `PPC` Is the number of points per bezier curve. `N` Is the number of bezier curves. (Please refer to the documentation of the function you are using for further type Information) """ # Vector Types Vector3: TypeAlias = npt.NDArray[PointDType] -""" `shape: (3,)` A Vector `[float, float]`. """ +""" `shape: (3,)` A Vector `[float, float, float]`. """ Vector: TypeAlias = npt.NDArray[PointDType] -""" `shape: (N,)` A Vector `[float,...]`. """ +""" `shape: (N,)` A Vector `[float, ...]`. """ RowVector: TypeAlias = npt.NDArray[PointDType] -""" `shape: (1,N)` A Row Vector `[[float,...]]`. """ +""" `shape: (1,N)` A Row Vector `[[float, ...]]`. """ ColVector: TypeAlias = npt.NDArray[PointDType] -""" `shape: (N,1)` A Column Vector `[[float],[float],...]`. """ +""" `shape: (N,1)` A Column Vector `[[float], [float], ...]`. """ MatrixMN: TypeAlias = npt.NDArray[PointDType] -""" `shape: (M,N)` A Matrix `[[float,...],[float,...],...]`. """ +""" `shape: (M,N)` A Matrix `[[float, ...], [float, ...], ...]`. """ Zeros: TypeAlias = npt.NDArray[ManimFloat] """A Matrix of Zeros. Typically created with `numpy.zeros((M,N))`""" diff --git a/manim/utils/bezier.py b/manim/utils/bezier.py index 25d6ac0c1e..ec2f2b9457 100644 --- a/manim/utils/bezier.py +++ b/manim/utils/bezier.py @@ -32,9 +32,10 @@ from functools import reduce -from typing import Callable, Sequence, overload +from typing import Any, Callable, Sequence, overload import numpy as np +import numpy.typing as npt from scipy import linalg from ..utils.simple_functions import choose @@ -259,11 +260,6 @@ def quadratic_bezier_remap( # Linear interpolation variants -@overload -def interpolate(start: int, end: int, alpha: float) -> float: - ... - - @overload def interpolate(start: float, end: float, alpha: float) -> float: ... @@ -280,19 +276,9 @@ def interpolate( return (1 - alpha) * start + alpha * end -@overload -def integer_interpolate(start: int, end: int, alpha: float) -> tuple[int, float]: - ... - - -@overload -def integer_interpolate(start: float, end: float, alpha: float) -> tuple[int, float]: - ... - - def integer_interpolate( - start: int | float, - end: int | float, + start: float, + end: float, alpha: float, ) -> tuple[int, float]: """ @@ -328,11 +314,6 @@ def integer_interpolate( return (value, residue) -@overload -def mid(start: int, end: int) -> float: - ... - - @overload def mid(start: float, end: float) -> float: ... @@ -343,7 +324,7 @@ def mid(start: Point3D, end: Point3D) -> Point3D: ... -def mid(start: int | float | Point3D, end: int | float | Point3D) -> float | Point3D: +def mid(start: float | Point3D, end: float | Point3D) -> float | Point3D: """Returns the midpoint between two values. Parameters @@ -360,11 +341,6 @@ def mid(start: int | float | Point3D, end: int | float | Point3D) -> float | Poi return (start + end) / 2.0 -@overload -def inverse_interpolate(start: float, end: float, value: int) -> float: - ... - - @overload def inverse_interpolate(start: float, end: float, value: float) -> float: ... @@ -377,22 +353,11 @@ def inverse_interpolate(start: float, end: float, value: Point3D) -> Point3D: # !TODO: Add documentation to this function def inverse_interpolate( - start: float, end: float, value: int | float | Point3D + start: float, end: float, value: float | Point3D ) -> float | Point3D: return np.true_divide(value - start, end - start) -@overload -def match_interpolate( - new_start: float, - new_end: float, - old_start: float, - old_end: float, - old_value: int, -) -> float: - ... - - @overload def match_interpolate( new_start: float, @@ -420,7 +385,7 @@ def match_interpolate( new_end: float, old_start: float, old_end: float, - old_value: int | float | Point3D, + old_value: float | Point3D, ) -> float | Point3D: return interpolate( new_start, @@ -565,7 +530,7 @@ def closed_curve_solve_func(b: ColVector) -> ColVector | MatrixMN: return handle_pairs[0::2], handle_pairs[1::2] -def diag_to_matrix(l_and_u: tuple[int, int], diag: np.ndarray) -> np.ndarray: +def diag_to_matrix(l_and_u: tuple[int, int], diag: npt.NDArray[Any]) -> npt.NDArray[Any]: """ Converts array whose rows represent diagonal entries of a matrix into the matrix itself. @@ -661,8 +626,8 @@ def is_closed(points: Point3D_Array) -> bool: def proportions_along_bezier_curve_for_point( point: Point3D, control_points: BezierPoints, - round_to: float | int = 1e-6, -) -> np.ndarray: + round_to: float = 1e-6, +) -> npt.NDArray[Any]: """Obtains the proportion along the bezier curve corresponding to a given point given the bezier curve's control points. @@ -747,7 +712,7 @@ def proportions_along_bezier_curve_for_point( def point_lies_on_bezier( point: Point3D, control_points: BezierPoints, - round_to: float | int = 1e-6, + round_to: float = 1e-6, ) -> bool: """Checks if a given point lies on the bezier curves with the given control points. diff --git a/manim/utils/color/core.py b/manim/utils/color/core.py index 5e4b93add9..1b6084e2d7 100644 --- a/manim/utils/color/core.py +++ b/manim/utils/color/core.py @@ -27,9 +27,10 @@ # logger = _config.logger import random import re -from typing import Any, Sequence, Union, overload +from typing import Any, Sequence, TypeVar, Union, overload import numpy as np +import numpy.typing as npt from typing_extensions import Self, TypeAlias from manim.typing import ( @@ -717,6 +718,9 @@ def __xor__(self, other: ManimColor) -> ManimColor: """ParsableManimColor is the representation for all types that are parsable to a color in manim""" +ManimColorT = TypeVar("ManimColorT", bound=ManimColor) + + def color_to_rgb(color: ParsableManimColor) -> RGB_Array_Float: """Helper function for use in functional style programming refer to :meth:`to_rgb` in :class:`ManimColor` @@ -751,12 +755,12 @@ def color_to_rgba(color: ParsableManimColor, alpha: float = 1) -> RGBA_Array_Flo return ManimColor(color).to_rgba_with_alpha(alpha) -def color_to_int_rgb(color: ManimColor) -> RGB_Array_Int: +def color_to_int_rgb(color: ParsableManimColor) -> RGB_Array_Int: """Helper function for use in functional style programming refer to :meth:`to_int_rgb` in :class:`ManimColor` Parameters ---------- - color : ManimColor + color : ParsableManimColor A color Returns @@ -767,12 +771,12 @@ def color_to_int_rgb(color: ManimColor) -> RGB_Array_Int: return ManimColor(color).to_int_rgb() -def color_to_int_rgba(color: ManimColor, alpha: float = 1.0) -> RGBA_Array_Int: +def color_to_int_rgba(color: ParsableManimColor, alpha: float = 1.0) -> RGBA_Array_Int: """Helper function for use in functional style programming refer to :meth:`to_int_rgba_with_alpha` in :class:`ManimColor` Parameters ---------- - color : ManimColor + color : ParsableManimColor A color alpha : float, optional alpha value to be used in the color, by default 1.0 @@ -785,7 +789,7 @@ def color_to_int_rgba(color: ManimColor, alpha: float = 1.0) -> RGBA_Array_Int: return ManimColor(color).to_int_rgba_with_alpha(alpha) -def rgb_to_color(rgb: RGB_Array_Float | RGB_Tuple_Float) -> ManimColor: +def rgb_to_color(rgb: RGB_Array_Float | RGB_Tuple_Float | RGB_Array_Int | RGB_Tuple_Int) -> ManimColor: """Helper function for use in functional style programming refer to :meth:`from_rgb` in :class:`ManimColor` Parameters @@ -801,7 +805,7 @@ def rgb_to_color(rgb: RGB_Array_Float | RGB_Tuple_Float) -> ManimColor: return ManimColor.from_rgb(rgb) -def rgba_to_color(rgba: RGBA_Array_Float | RGBA_Tuple_Float) -> ManimColor: +def rgba_to_color(rgba: RGBA_Array_Float | RGBA_Tuple_Float | RGBA_Array_Int | RGBA_Tuple_Int) -> ManimColor: """Helper function for use in functional style programming refer to :meth:`from_rgba` in :class:`ManimColor` Parameters @@ -817,7 +821,7 @@ def rgba_to_color(rgba: RGBA_Array_Float | RGBA_Tuple_Float) -> ManimColor: return ManimColor.from_rgba(rgba) -def rgb_to_hex(rgb: RGB_Array_Float | RGB_Tuple_Float) -> str: +def rgb_to_hex(rgb: RGB_Array_Float | RGB_Tuple_Float | RGB_Array_Int | RGB_Tuple_Int) -> str: """Helper function for use in functional style programming refer to :meth:`from_rgb` in :class:`ManimColor` Parameters @@ -849,7 +853,7 @@ def hex_to_rgb(hex_code: str) -> RGB_Array_Float: return ManimColor(hex_code).to_rgb() -def invert_color(color: ManimColor) -> ManimColor: +def invert_color(color: ManimColorT) -> ManimColorT: """Helper function for use in functional style programming refer to :meth:`invert` in :class:`ManimColor` Parameters @@ -866,15 +870,15 @@ def invert_color(color: ManimColor) -> ManimColor: def interpolate_arrays( - arr1: np.ndarray[Any, Any], arr2: np.ndarray[Any, Any], alpha: float + arr1: npt.NDArray[Any], arr2: npt.NDArray[Any], alpha: float ) -> np.ndarray: """Helper function used in Manim to fade between two objects smoothly Parameters ---------- - arr1 : np.ndarray[Any, Any] + arr1 : npt.NDArray[Any] The first array of colors - arr2 : np.ndarray[Any, Any] + arr2 : npt.NDArray[Any] The second array of colors alpha : float The alpha value corresponding to the interpolation point between the two inputs @@ -909,7 +913,7 @@ def color_gradient( return ManimColor(reference_colors[0]) if len(reference_colors) == 1: return [ManimColor(reference_colors[0])] * length_of_output - rgbs = list(map(color_to_rgb, reference_colors)) + rgbs = [color_to_rgb(color) for color in reference_colors] alphas = np.linspace(0, (len(rgbs) - 1), length_of_output) floors = alphas.astype("int") alphas_mod1 = alphas % 1 @@ -923,8 +927,8 @@ def color_gradient( def interpolate_color( - color1: ManimColor, color2: ManimColor, alpha: float -) -> ManimColor: + color1: ManimColorT, color2: ManimColor, alpha: float +) -> ManimColorT: """Standalone function to interpolate two ManimColors and get the result refer to :meth:`interpolate` in :class:`ManimColor` Parameters @@ -944,7 +948,7 @@ def interpolate_color( return color1.interpolate(color2, alpha) -def average_color(*colors: ManimColor) -> ManimColor: +def average_color(*colors: ParsableManimColor) -> ManimColor: """Determines the Average color of the given parameters Returns @@ -952,7 +956,7 @@ def average_color(*colors: ManimColor) -> ManimColor: ManimColor The average color of the input """ - rgbs = np.array(list(map(color_to_rgb, colors))) + rgbs = np.array([color_to_rgb(color) for color in colors]) mean_rgb = np.apply_along_axis(np.mean, 0, rgbs) return rgb_to_color(mean_rgb) @@ -968,8 +972,7 @@ def random_bright_color() -> ManimColor: ManimColor A bright ManimColor """ - color = random_color() - curr_rgb = color_to_rgb(color) + curr_rgb = color_to_rgb(random_color()) new_rgb = interpolate_arrays(curr_rgb, np.ones(len(curr_rgb)), 0.5) return ManimColor(new_rgb) @@ -991,10 +994,10 @@ def random_color() -> ManimColor: def get_shaded_rgb( - rgb: np.ndarray, - point: np.ndarray, - unit_normal_vect: np.ndarray, - light_source: np.ndarray, + rgb: npt.NDArray[Any], + point: npt.NDArray[Any], + unit_normal_vect: npt.NDArray[Any], + light_source: npt.NDArray[Any], ) -> RGBA_Array_Float: to_sun = normalize(light_source - point) factor = 0.5 * np.dot(unit_normal_vect, to_sun) ** 3 diff --git a/.mypy.ini b/mypy.ini similarity index 98% rename from .mypy.ini rename to mypy.ini index acf409f5ee..a4707261b7 100644 --- a/.mypy.ini +++ b/mypy.ini @@ -1,10 +1,11 @@ [mypy] strict = False -files = ["manim"] +files = manim python_version = 3.10 ; plugins = numpy.typing.mypy_plugin ignore_errors = False cache_fine_grained = True +warn_unused_ignores = True # Disallow Dynamic Typing # disallow_any_unimported = True From ffaa0311fb2107d5550d912ff44f5f8624b0e505 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 25 Sep 2023 09:20:24 +0000 Subject: [PATCH 71/91] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- manim/utils/bezier.py | 4 +++- manim/utils/color/core.py | 12 +++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/manim/utils/bezier.py b/manim/utils/bezier.py index ec2f2b9457..3932d698b7 100644 --- a/manim/utils/bezier.py +++ b/manim/utils/bezier.py @@ -530,7 +530,9 @@ def closed_curve_solve_func(b: ColVector) -> ColVector | MatrixMN: return handle_pairs[0::2], handle_pairs[1::2] -def diag_to_matrix(l_and_u: tuple[int, int], diag: npt.NDArray[Any]) -> npt.NDArray[Any]: +def diag_to_matrix( + l_and_u: tuple[int, int], diag: npt.NDArray[Any] +) -> npt.NDArray[Any]: """ Converts array whose rows represent diagonal entries of a matrix into the matrix itself. diff --git a/manim/utils/color/core.py b/manim/utils/color/core.py index 1b6084e2d7..cdd75ad9ae 100644 --- a/manim/utils/color/core.py +++ b/manim/utils/color/core.py @@ -789,7 +789,9 @@ def color_to_int_rgba(color: ParsableManimColor, alpha: float = 1.0) -> RGBA_Arr return ManimColor(color).to_int_rgba_with_alpha(alpha) -def rgb_to_color(rgb: RGB_Array_Float | RGB_Tuple_Float | RGB_Array_Int | RGB_Tuple_Int) -> ManimColor: +def rgb_to_color( + rgb: RGB_Array_Float | RGB_Tuple_Float | RGB_Array_Int | RGB_Tuple_Int, +) -> ManimColor: """Helper function for use in functional style programming refer to :meth:`from_rgb` in :class:`ManimColor` Parameters @@ -805,7 +807,9 @@ def rgb_to_color(rgb: RGB_Array_Float | RGB_Tuple_Float | RGB_Array_Int | RGB_Tu return ManimColor.from_rgb(rgb) -def rgba_to_color(rgba: RGBA_Array_Float | RGBA_Tuple_Float | RGBA_Array_Int | RGBA_Tuple_Int) -> ManimColor: +def rgba_to_color( + rgba: RGBA_Array_Float | RGBA_Tuple_Float | RGBA_Array_Int | RGBA_Tuple_Int, +) -> ManimColor: """Helper function for use in functional style programming refer to :meth:`from_rgba` in :class:`ManimColor` Parameters @@ -821,7 +825,9 @@ def rgba_to_color(rgba: RGBA_Array_Float | RGBA_Tuple_Float | RGBA_Array_Int | R return ManimColor.from_rgba(rgba) -def rgb_to_hex(rgb: RGB_Array_Float | RGB_Tuple_Float | RGB_Array_Int | RGB_Tuple_Int) -> str: +def rgb_to_hex( + rgb: RGB_Array_Float | RGB_Tuple_Float | RGB_Array_Int | RGB_Tuple_Int, +) -> str: """Helper function for use in functional style programming refer to :meth:`from_rgb` in :class:`ManimColor` Parameters From 56501d70107e903cab82fa03b629917c365d0731 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Mon, 25 Sep 2023 12:18:57 +0200 Subject: [PATCH 72/91] docs fixes --- docs/source/contributing/typings.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/source/contributing/typings.rst b/docs/source/contributing/typings.rst index 2854e41a80..b025ba063f 100644 --- a/docs/source/contributing/typings.rst +++ b/docs/source/contributing/typings.rst @@ -17,7 +17,7 @@ https://realpython.com/python-type-checking/#hello-types. Typing standards ~~~~~~~~~~~~~~~~ -Manim uses `mypy`_ to type check its codebase. You will find a list of configuration values in the ``.mypy.ini`` configuration file. +Manim uses `mypy`_ to type check its codebase. You will find a list of configuration values in the ``mypy.ini`` configuration file. To be able to use the newest typing features not available in the lowest supported Python version, make use of `typing_extensions`_. @@ -30,7 +30,7 @@ Typing guidelines ~~~~~~~~~~~~~~~~~ * Manim has a dedicated :mod:`~.typing` module where type alias are provided. Most of them may seem redundant, in particular the ones related to ``numpy``. This is in anticipation of the -support for shape type hinting (`related issue _`). Besides the pending shape support, using the correct type aliases will help users understand +support for shape type hinting (`related issue `_). Besides the pending shape support, using the correct type aliases will help users understand which shape should be used. * Always use a type hint of ``None`` for functions that does not return a value (this also applies to ``__init__``), e.g.: @@ -44,7 +44,7 @@ which shape should be used. * ``*args`` and ``**kwargs`` shouldn't be left untyped (in most cases you can use ``Any``). -* As `PEP 484 _` implies that ``int`` can be used ``float`` is specified, use ``float`` instead of ``int | float``. +* Following `PEP 484 `_, use ``float`` instead of ``int | float``. * Mobjects have the typehint ``Mobject``, e.g.: @@ -54,7 +54,7 @@ which shape should be used. """Match the color with the color of another :class:`~.Mobject`.""" return self.set_color(mobject.get_color()) -* Functions and lambda functions should get the type hint ``Callable``, e.g.: +* Always parametrize generics (``list[int]`` instead of ``list``, ``type[Any]`` instead of ``type``, etc.). This also applies to callables: .. code:: py From 921f450f156b94e7955bfed314dec467b5bd1720 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Mon, 25 Sep 2023 15:25:13 +0200 Subject: [PATCH 73/91] Add internal aliases --- manim/typing.py | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/manim/typing.py b/manim/typing.py index b6a8a81d66..d065e495a2 100644 --- a/manim/typing.py +++ b/manim/typing.py @@ -1,7 +1,7 @@ from __future__ import annotations from os import PathLike -from typing import Callable, Tuple +from typing import Callable, Tuple, Union import numpy as np import numpy.typing as npt @@ -34,9 +34,21 @@ PointDType: TypeAlias = ManimFloat """ DType for all points. """ -Point2D: TypeAlias = npt.NDArray[PointDType] -""" `shape: (2,)` A 2D point. `[float, float]` """ -Point3D: TypeAlias = npt.NDArray[PointDType] + +InternalPoint2D: TypeAlias = npt.NDArray[PointDType] +""" `shape: (2,)` A 2D point. `[float, float]`. +This type alias is mostly made available for internal use and only includes the numpy type. +""" + +Point2D: TypeAlias = Union[InternalPoint2D, Tuple[float, float]] +""" `shape: (2,)` A 2D point. `[float, float]`. """ + +InternalPoint3D: TypeAlias = npt.NDArray[PointDType] +""" `shape: (3,)` A 3D point. `[float, float, float]`. +This type alias is mostly made available for internal use and only includes the numpy type. +""" + +Point3D: TypeAlias = Union[InternalPoint3D, Tuple[float, float, float]] """ `shape: (3,)` A 3D point. `[float, float, float]` """ # Bezier Types @@ -64,7 +76,12 @@ (Please refer to the documentation of the function you are using for further type Information) """ -Point3D_Array: TypeAlias = npt.NDArray[PointDType] +InternalPoint3D_Array: TypeAlias = npt.NDArray[PointDType] +""" `shape: (N,3)` An Array of Points in 3D Space `[[float, float, float], ...]`. +This type alias is mostly made available for internal use and only includes the numpy type. +""" + +Point3D_Array: TypeAlias = Union[InternalPoint3D_Array, tuple[tuple[float, float, float], ...]] """ `shape: (N,3)` An Array of Points in 3D Space `[[float, float, float], ...]`. (Please refer to the documentation of the function you are using for further type Information) From 4e3fe301279542558dde60bd33665751094a6817 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 25 Sep 2023 13:26:08 +0000 Subject: [PATCH 74/91] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- manim/typing.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/manim/typing.py b/manim/typing.py index d065e495a2..58eabbd0ac 100644 --- a/manim/typing.py +++ b/manim/typing.py @@ -81,7 +81,9 @@ This type alias is mostly made available for internal use and only includes the numpy type. """ -Point3D_Array: TypeAlias = Union[InternalPoint3D_Array, tuple[tuple[float, float, float], ...]] +Point3D_Array: TypeAlias = Union[ + InternalPoint3D_Array, tuple[tuple[float, float, float], ...] +] """ `shape: (N,3)` An Array of Points in 3D Space `[[float, float, float], ...]`. (Please refer to the documentation of the function you are using for further type Information) From 566379190a0bb4b5ae0a87b31736948d5756db08 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Mon, 25 Sep 2023 15:28:42 +0200 Subject: [PATCH 75/91] fix compat --- manim/typing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/typing.py b/manim/typing.py index 58eabbd0ac..495f199758 100644 --- a/manim/typing.py +++ b/manim/typing.py @@ -82,7 +82,7 @@ """ Point3D_Array: TypeAlias = Union[ - InternalPoint3D_Array, tuple[tuple[float, float, float], ...] + InternalPoint3D_Array, Tuple[Tuple[float, float, float], ...] ] """ `shape: (N,3)` An Array of Points in 3D Space `[[float, float, float], ...]`. From feca6835f6775adb8344acafadb1307040023ea4 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Sat, 28 Oct 2023 20:49:08 +0200 Subject: [PATCH 76/91] line lengths in .rst file, formatting, typos --- docs/source/contributing/typings.rst | 38 ++++++++++++++++++---------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/docs/source/contributing/typings.rst b/docs/source/contributing/typings.rst index b025ba063f..9880bfb3b7 100644 --- a/docs/source/contributing/typings.rst +++ b/docs/source/contributing/typings.rst @@ -8,8 +8,9 @@ Adding Typings Adding type hints to functions and parameters --------------------------------------------- -Manim is currently in the process of adding type hints into the library. In this section, you will find information about the standards used -and some general guidelines. +Manim is currently in the process of adding type hints into the library. In this +section, you will find information about the standards used and some general +guidelines. If you've never used type hints before, this is a good place to get started: https://realpython.com/python-type-checking/#hello-types. @@ -17,11 +18,14 @@ https://realpython.com/python-type-checking/#hello-types. Typing standards ~~~~~~~~~~~~~~~~ -Manim uses `mypy`_ to type check its codebase. You will find a list of configuration values in the ``mypy.ini`` configuration file. +Manim uses `mypy`_ to type check its codebase. You will find a list of +configuration values in the ``mypy.ini`` configuration file. -To be able to use the newest typing features not available in the lowest supported Python version, make use of `typing_extensions`_. +To be able to use the newest typing features not available in the lowest +supported Python version, make use of `typing_extensions`_. -To be able to use the new Union syntax (``|``) and builtins subscripting, use the ``from __future__ import annotations`` import. +To be able to use the new Union syntax (``|``) and builtins subscripting, use +the ``from __future__ import annotations`` import. .. _mypy: https://mypy-lang.org/ .. _typing_extensions: https://pypi.org/project/typing-extensions/ @@ -29,22 +33,29 @@ To be able to use the new Union syntax (``|``) and builtins subscripting, use th Typing guidelines ~~~~~~~~~~~~~~~~~ -* Manim has a dedicated :mod:`~.typing` module where type alias are provided. Most of them may seem redundant, in particular the ones related to ``numpy``. This is in anticipation of the -support for shape type hinting (`related issue `_). Besides the pending shape support, using the correct type aliases will help users understand -which shape should be used. +* Manim has a dedicated :mod:`~.typing` module where type aliases are provided. + Most of them may seem redundant, in particular the ones related to ``numpy``. + This is in anticipation of the support for shape type hinting + (`related issue `_). Besides the + pending shape support, using the correct type aliases will help users understand + which shape should be used. -* Always use a type hint of ``None`` for functions that does not return a value (this also applies to ``__init__``), e.g.: +* Always use a type hint of ``None`` for functions that does not return + a value (this also applies to ``__init__``), e.g.: .. code:: py def height(self, value) -> None: self.scale_to_fit_height(value) -* For variables representing paths, use the ``StrPath`` or ``StrOrBytesPath`` type alias defined in the :mod:`~.typing` module. +* For variables representing paths, use the ``StrPath`` or ``StrOrBytesPath`` + type alias defined in the :mod:`~.typing` module. -* ``*args`` and ``**kwargs`` shouldn't be left untyped (in most cases you can use ``Any``). +* ``*args`` and ``**kwargs`` shouldn't be left untyped (in most cases you can + use ``Any``). -* Following `PEP 484 `_, use ``float`` instead of ``int | float``. +* Following `PEP 484 `_, + use ``float`` instead of ``int | float``. * Mobjects have the typehint ``Mobject``, e.g.: @@ -54,7 +65,8 @@ which shape should be used. """Match the color with the color of another :class:`~.Mobject`.""" return self.set_color(mobject.get_color()) -* Always parametrize generics (``list[int]`` instead of ``list``, ``type[Any]`` instead of ``type``, etc.). This also applies to callables: +* Always parametrize generics (``list[int]`` instead of ``list``, + ``type[Any]`` instead of ``type``, etc.). This also applies to callables: .. code:: py From 2bcd8ac7830e2842ce34b7bb92227418a1f3245c Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Sat, 28 Oct 2023 21:42:43 +0200 Subject: [PATCH 77/91] add docstring for space_ops:cross2d --- manim/utils/space_ops.py | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/manim/utils/space_ops.py b/manim/utils/space_ops.py index f84e8cbc81..c26c87bec9 100644 --- a/manim/utils/space_ops.py +++ b/manim/utils/space_ops.py @@ -622,8 +622,37 @@ def shoelace_direction(x_y: np.ndarray) -> str: return "CW" if area > 0 else "CCW" -# !TODO: Probably needs retyping but idk what it does at the moment -def cross2d(a: Vector, b: Vector) -> Vector: +def cross2d( + a: Sequence[Vector] | Vector, + b: Sequence[Vector] | Vector + ) -> Sequence[float] | float: + """Compute the determinant(s) of the passed + vector (sequences). + + Parameters + ---------- + a + A vector or a sequence of vectors. + b + A vector or a sequence of vectors. + + Returns + ------- + Sequence[float] | float + The determinant or sequence of determinants + of the first two components of the specified + vectors. + + Examples + -------- + >>> cross2d(np.array([1, 2]), np.array([3, 4])) + -2 + >>> cross2d( + ... np.array([[1, 2, 0], [1, 0, 0]]), + ... np.array([[3, 4, 0], [0, 1, 0]]), + ... ) + array([-2, 1]) + """ if len(a.shape) == 2: return a[:, 0] * b[:, 1] - a[:, 1] * b[:, 0] else: From 5514ac4991c9325a5e765d11ccb99642e0e00bfb Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Sat, 28 Oct 2023 21:58:07 +0200 Subject: [PATCH 78/91] add some more arrow tip typings (in a non-circular import causing way) --- manim/mobject/geometry/arc.py | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/manim/mobject/geometry/arc.py b/manim/mobject/geometry/arc.py index c1aa6a83e7..3ade6d150b 100644 --- a/manim/mobject/geometry/arc.py +++ b/manim/mobject/geometry/arc.py @@ -68,6 +68,8 @@ def construct(self): from manim.mobject.text.text_mobject import Text from manim.typing import CubicBezierPoints, Point3D, QuadraticBezierPoints, Vector + import manim.mobject.geometry.tips as tips + Angle: TypeAlias = Union[float, np.float64] @@ -106,10 +108,10 @@ def __init__( def add_tip( self, - tip=None, - tip_shape=None, - tip_length: float = None, - tip_width: float = None, + tip: tips.ArrowTip | None = None, + tip_shape: type[tips.ArrowTip] | None = None, + tip_length: float | None = None, + tip_width: float | None = None, at_start: bool = False, ) -> Self: """Adds a tip to the TipableVMobject instance, recognising @@ -127,7 +129,7 @@ def add_tip( def create_tip( self, - tip_shape=None, + tip_shape: type[tips.ArrowTip] | None = None, tip_length: float = None, tip_width: float = None, at_start: bool = False, @@ -140,7 +142,10 @@ def create_tip( return tip def get_unpositioned_tip( - self, tip_shape=None, tip_length: float = None, tip_width: float = None + self, + tip_shape: type[tips.ArrowTip] | None = None, + tip_length: float | None = None, + tip_width: float | None = None, ): """Returns a tip that has been stylistically configured, but has not yet been given a position in space. @@ -165,7 +170,9 @@ def get_unpositioned_tip( tip = tip_shape(length=tip_length, **style) return tip - def position_tip(self, tip, at_start: bool = False): + def position_tip( + self, tip: tips.ArrowTip, at_start: bool = False + ): # Last two control points, defining both # the end, and the tangency direction if at_start: @@ -192,7 +199,9 @@ def position_tip(self, tip, at_start: bool = False): tip.shift(anchor - tip.tip_point) return tip - def reset_endpoints_based_on_tip(self, tip, at_start: bool) -> Self: + def reset_endpoints_based_on_tip( + self, tip: tips.ArrowTip, at_start: bool + ) -> Self: if self.get_length() == 0: # Zero length, put_start_and_end_on wouldn't work return self @@ -203,7 +212,9 @@ def reset_endpoints_based_on_tip(self, tip, at_start: bool) -> Self: self.put_start_and_end_on(self.get_start(), tip.base) return self - def asign_tip_attr(self, tip, at_start: bool) -> Self: + def asign_tip_attr( + self, tip: tips.ArrowTip, at_start: bool + ) -> Self: if at_start: self.start_tip = tip else: From b259a04b321f1d621a3cb290c99ae5b2043d2ea9 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Sat, 28 Oct 2023 22:00:00 +0200 Subject: [PATCH 79/91] yes, this can be deleted --- manim/mobject/geometry/boolean_ops.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/manim/mobject/geometry/boolean_ops.py b/manim/mobject/geometry/boolean_ops.py index e9845f5f11..87dea629f9 100644 --- a/manim/mobject/geometry/boolean_ops.py +++ b/manim/mobject/geometry/boolean_ops.py @@ -21,11 +21,6 @@ class _BooleanOps(VMobject, metaclass=ConvertToOpenGL): helps to convert to and from skia objects and manim objects (:class:`~.VMobject`). """ - - # Can this be deleted? - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - def _convert_2d_to_3d_array( self, points: Point2D_Array, From e3900823ebf022cbe0be098ba9f8348e80159225 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Sat, 28 Oct 2023 22:18:40 +0200 Subject: [PATCH 80/91] fix formatting of example --- manim/utils/space_ops.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/manim/utils/space_ops.py b/manim/utils/space_ops.py index c26c87bec9..848dbfd3c4 100644 --- a/manim/utils/space_ops.py +++ b/manim/utils/space_ops.py @@ -645,13 +645,15 @@ def cross2d( Examples -------- - >>> cross2d(np.array([1, 2]), np.array([3, 4])) - -2 - >>> cross2d( - ... np.array([[1, 2, 0], [1, 0, 0]]), - ... np.array([[3, 4, 0], [0, 1, 0]]), - ... ) - array([-2, 1]) + .. code-block:: pycon + + >>> cross2d(np.array([1, 2]), np.array([3, 4])) + -2 + >>> cross2d( + ... np.array([[1, 2, 0], [1, 0, 0]]), + ... np.array([[3, 4, 0], [0, 1, 0]]), + ... ) + array([-2, 1]) """ if len(a.shape) == 2: return a[:, 0] * b[:, 1] - a[:, 1] * b[:, 0] From 737189c1428483b1c370aebab502a1384598e476 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Sat, 28 Oct 2023 22:40:15 +0200 Subject: [PATCH 81/91] added docstring to bezier::inverse_interpolation --- manim/utils/bezier.py | 41 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/manim/utils/bezier.py b/manim/utils/bezier.py index 3932d698b7..1389fe4f88 100644 --- a/manim/utils/bezier.py +++ b/manim/utils/bezier.py @@ -350,11 +350,48 @@ def inverse_interpolate(start: float, end: float, value: float) -> float: def inverse_interpolate(start: float, end: float, value: Point3D) -> Point3D: ... +@overload +def inverse_interpolate(start: Point3D, end: Point3D, value: Point3D) -> Point3D: + ... -# !TODO: Add documentation to this function def inverse_interpolate( - start: float, end: float, value: float | Point3D + start: float | Point3D, + end: float | Point3D, + value: float | Point3D ) -> float | Point3D: + """Perform inverse interpolation to determine the alpha + values that would produce the specified ``value`` + given the ``start`` and ``end`` values or points. + + Parameters + ---------- + start + The start value or point of the interpolation. + end + The end value or point of the interpolation. + value + The value or point for which the alpha value + should be determined. + + Returns + ------- + The alpha values producing the given input + when interpolating between ``start`` and ``end``. + + Example + ------- + + .. code-block:: pycon + + >>> inverse_interpolate(start=2, end=6, value=4) + 0.5 + + >>> start = np.array([1, 2, 1]) + >>> end = np.array([7, 8, 11]) + >>> value = np.array([4, 5, 5]) + >>> inverse_interpolate(start, end, value) + array([0.5, 0.5, 0.4]) + """ return np.true_divide(value - start, end - start) From 3c4051f43a278d0d41d156745f7d5177118f88e6 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Sat, 28 Oct 2023 22:58:19 +0200 Subject: [PATCH 82/91] added docstring + test for bezier::match_interpolate --- manim/utils/bezier.py | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/manim/utils/bezier.py b/manim/utils/bezier.py index 1389fe4f88..20ac78fd10 100644 --- a/manim/utils/bezier.py +++ b/manim/utils/bezier.py @@ -424,16 +424,40 @@ def match_interpolate( old_end: float, old_value: float | Point3D, ) -> float | Point3D: + """Interpolate a value from an old range to a new range. + + Parameters + ---------- + new_start + The start of the new range. + new_end + The end of the new range. + old_start + The start of the old range. + old_end + The end of the old range. + old_value + The value within the old range whose corresponding + value in the new range (with the same alpha value) + is desired. + + Returns + ------- + The interpolated value within the new range. + + Examples + -------- + >>> match_interpolate(0, 100, 10, 20, 15) + 50.0 + """ + old_alpha = inverse_interpolate(old_start, old_end, old_value) return interpolate( new_start, new_end, - inverse_interpolate(old_start, old_end, old_value), # type: ignore + old_alpha, # type: ignore ) -# Figuring out which bezier curves most smoothly connect a sequence of points - - def get_smooth_cubic_bezier_handle_points( points: Point3D_Array, ) -> tuple[BezierPoints, BezierPoints]: From c7659d3e8098bcb70eeeaa0bb93a47fcee5f599d Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Sat, 28 Oct 2023 23:20:05 +0200 Subject: [PATCH 83/91] some improvements in coordinate_systems --- manim/mobject/graphing/coordinate_systems.py | 28 ++++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/manim/mobject/graphing/coordinate_systems.py b/manim/mobject/graphing/coordinate_systems.py index d75a78a016..2e1ac919a4 100644 --- a/manim/mobject/graphing/coordinate_systems.py +++ b/manim/mobject/graphing/coordinate_systems.py @@ -55,7 +55,7 @@ if TYPE_CHECKING: from manim.mobject.mobject import Mobject - from manim.typing import Point2D + from manim.typing import ManimFloat, Point2D, Point3D, Vector3 LineType = TypeVar("LineType", bound=Line) @@ -145,10 +145,10 @@ def __init__( self.y_length = y_length self.num_sampled_graph_points_per_tick = 10 - def coords_to_point(self, *coords): + def coords_to_point(self, *coords: Sequence[ManimFloat]): raise NotImplementedError() - def point_to_coords(self, point): + def point_to_coords(self, point: Point3D): raise NotImplementedError() def polar_to_point(self, radius: float, azimuth: float) -> Point2D: @@ -204,7 +204,7 @@ def c2p( """Abbreviation for :meth:`coords_to_point`""" return self.coords_to_point(*coords) - def p2c(self, point: np.ndarray): + def p2c(self, point: Point3D): """Abbreviation for :meth:`point_to_coords`""" return self.point_to_coords(point) @@ -2341,7 +2341,7 @@ def __init__( y_length: float | None = config.frame_height + 2.5, z_length: float | None = config.frame_height - 1.5, z_axis_config: dict[str, Any] | None = None, - z_normal: Sequence[float] = DOWN, + z_normal: Vector3 = DOWN, num_axis_pieces: int = 20, light_source: Sequence[float] = 9 * DOWN + 7 * LEFT + 10 * OUT, # opengl stuff (?) @@ -2431,8 +2431,8 @@ def get_y_axis_label( edge: Sequence[float] = UR, direction: Sequence[float] = UR, buff: float = SMALL_BUFF, - rotation=PI / 2, - rotation_axis=OUT, + rotation: float = PI / 2, + rotation_axis: Vector3 = OUT, **kwargs, ) -> Mobject: """Generate a y-axis label. @@ -2479,11 +2479,11 @@ def construct(self): def get_z_axis_label( self, label: float | str | Mobject, - edge: Sequence[float] = OUT, - direction: Sequence[float] = RIGHT, + edge: Vector3 = OUT, + direction: Vector3 = RIGHT, buff: float = SMALL_BUFF, rotation: float = PI / 2, - rotation_axis: Sequence[float] = RIGHT, + rotation_axis: Vector3 = RIGHT, **kwargs: Any, ) -> Mobject: """Generate a z-axis label. @@ -2836,7 +2836,7 @@ def _get_lines_parallel_to_axis( lines2.add(new_line) return lines1, lines2 - def get_vector(self, coords: Sequence[float], **kwargs: Any) -> Arrow: + def get_vector(self, coords: Sequence[ManimFloat], **kwargs: Any) -> Arrow: kwargs["buff"] = 0 return Arrow( self.coords_to_point(0, 0), self.coords_to_point(*coords), **kwargs @@ -3093,7 +3093,7 @@ def get_axes(self) -> VGroup: """ return self.axes - def get_vector(self, coords: Sequence[float], **kwargs: Any) -> Arrow: + def get_vector(self, coords: Sequence[ManimFloat], **kwargs: Any) -> Arrow: kwargs["buff"] = 0 return Arrow( self.coords_to_point(0, 0), self.coords_to_point(*coords), **kwargs @@ -3320,7 +3320,7 @@ def n2p(self, number: float | complex) -> np.ndarray: """Abbreviation for :meth:`number_to_point`.""" return self.number_to_point(number) - def point_to_number(self, point: Sequence[float]) -> complex: + def point_to_number(self, point: Point3D) -> complex: """Accepts a point and returns a complex number equivalent to that point on the plane. Parameters @@ -3337,7 +3337,7 @@ def point_to_number(self, point: Sequence[float]) -> complex: x, y = self.point_to_coords(point) return complex(x, y) - def p2n(self, point: Sequence[float]) -> complex: + def p2n(self, point: Point3D) -> complex: """Abbreviation for :meth:`point_to_number`.""" return self.point_to_number(point) From 351353a90075f644bc63910df4d9aaf8b821f357 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Sat, 28 Oct 2023 23:40:44 +0200 Subject: [PATCH 84/91] Vector -> Vector3 --- manim/mobject/types/vectorized_mobject.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/manim/mobject/types/vectorized_mobject.py b/manim/mobject/types/vectorized_mobject.py index 4a3fd4146e..bbfea57080 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -61,7 +61,7 @@ Point3D_Array, QuadraticBezierPoints, RGBA_Array_Float, - Vector, + Vector3, Zeros, ) @@ -113,7 +113,7 @@ def __init__( background_stroke_width: float = 0, sheen_factor: float = 0.0, joint_type: LineJointType | None = None, - sheen_direction: Vector = UL, + sheen_direction: Vector3 = UL, close_new_points: bool = False, pre_function_handle_to_anchor_scale_factor: float = 0.01, make_smooth_after_applying_functions: bool = False, @@ -137,7 +137,7 @@ def __init__( self.joint_type: LineJointType = ( LineJointType.AUTO if joint_type is None else joint_type ) - self.sheen_direction: Vector = sheen_direction + self.sheen_direction: Vector3 = sheen_direction self.close_new_points: bool = close_new_points self.pre_function_handle_to_anchor_scale_factor: float = ( pre_function_handle_to_anchor_scale_factor @@ -355,7 +355,7 @@ def set_style( background_stroke_width: float | None = None, background_stroke_opacity: float | None = None, sheen_factor: float | None = None, - sheen_direction: Vector | None = None, + sheen_direction: Vector3 | None = None, background_image: Image | str | None = None, family: bool = True, ) -> Self: @@ -522,7 +522,7 @@ def get_color(self) -> ManimColor: color = property(get_color, set_color) - def set_sheen_direction(self, direction: Vector, family: bool = True) -> Self: + def set_sheen_direction(self, direction: Vector3, family: bool = True) -> Self: """Sets the direction of the applied sheen. Parameters @@ -547,11 +547,11 @@ def set_sheen_direction(self, direction: Vector, family: bool = True) -> Self: for submob in self.get_family(): submob.sheen_direction = direction else: - self.sheen_direction: Vector = direction + self.sheen_direction: Vector3 = direction return self def rotate_sheen_direction( - self, angle: float, axis: Vector = OUT, family: bool = True + self, angle: float, axis: Vector3 = OUT, family: bool = True ) -> Self: """Rotates the direction of the applied sheen. @@ -584,7 +584,7 @@ def rotate_sheen_direction( return self def set_sheen( - self, factor: float, direction: Vector | None = None, family: bool = True + self, factor: float, direction: Vector3 | None = None, family: bool = True ) -> Self: """Applies a color gradient from a direction. @@ -622,7 +622,7 @@ def construct(self): self.set_fill(self.get_fill_color(), family=family) return self - def get_sheen_direction(self) -> Vector: + def get_sheen_direction(self) -> Vector3: return np.array(self.sheen_direction) def get_sheen_factor(self) -> float: @@ -997,7 +997,7 @@ def apply_function(self, function: MappingFunction) -> Self: def rotate( self, angle: float, - axis: Vector = OUT, + axis: Vector3 = OUT, about_point: Point3D | None = None, **kwargs, ) -> Self: @@ -1665,7 +1665,7 @@ def align_rgbas(self, vmobject: VMobject) -> Self: setattr(self, attr, new_a1) return self - def get_point_mobject(self, center: Vector | None = None) -> VectorizedPoint: + def get_point_mobject(self, center: Point3D | None = None) -> VectorizedPoint: if center is None: center = self.get_center() point = VectorizedPoint(center) From 3616c502b3fd8fc65b79cb07a16483d7c954bc1d Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Sat, 28 Oct 2023 23:51:12 +0200 Subject: [PATCH 85/91] replaced np.ndarray with more appropriate type hints --- manim/mobject/types/vectorized_mobject.py | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/manim/mobject/types/vectorized_mobject.py b/manim/mobject/types/vectorized_mobject.py index bbfea57080..6048fe4c67 100644 --- a/manim/mobject/types/vectorized_mobject.py +++ b/manim/mobject/types/vectorized_mobject.py @@ -26,6 +26,7 @@ ) import numpy as np +import numpy.typing as npt from PIL.Image import Image from typing_extensions import Self @@ -220,7 +221,7 @@ def generate_rgbas_array( opacities: list[float] = [ o if (o is not None) else 0.0 for o in tuplify(opacity) ] - rgbas: np.ndarray[RGBA_Array_Float] = np.array( + rgbas: npt.NDArray[RGBA_Array_Float] = np.array( [c.to_rgba_with_alpha(o) for c, o in zip(*make_even(colors, opacities))], ) @@ -473,7 +474,7 @@ def get_fill_colors(self) -> list[ManimColor | None]: for rgba in self.get_fill_rgbas() ] - def get_fill_opacities(self) -> np.ndarray[ManimFloat]: + def get_fill_opacities(self) -> npt.NDArray[ManimFloat]: return self.get_fill_rgbas()[:, 3] def get_stroke_rgbas(self, background: bool = False) -> RGBA_Array_float | Zeros: @@ -512,7 +513,7 @@ def get_stroke_colors(self, background: bool = False) -> list[ManimColor | None] for rgba in self.get_stroke_rgbas(background) ] - def get_stroke_opacities(self, background: bool = False) -> np.ndarray[ManimFloat]: + def get_stroke_opacities(self, background: bool = False) -> npt.NDArray[ManimFloat]: return self.get_stroke_rgbas(background)[:, 3] def get_color(self) -> ManimColor: @@ -670,7 +671,7 @@ def set_points(self, points: Point3D_Array) -> Self: def resize_points( self, new_length: int, - resize_func: Callable[[np.ndarray, int], np.ndarray] = resize_array, + resize_func: Callable[[Point3D, int], Point3D] = resize_array, ) -> Self: """Resize the array of anchor points and handles to have the specified size. @@ -1068,7 +1069,7 @@ def consider_points_equals_2d(self, p0: Point2D, p1: Point2D) -> bool: # Information about line def get_cubic_bezier_tuples_from_points( self, points: Point3D_Array - ) -> np.ndarray[Point3D_Array]: + ) -> npt.NDArray[Point3D_Array]: return np.array(self.gen_cubic_bezier_tuples_from_points(points)) def gen_cubic_bezier_tuples_from_points( @@ -1097,7 +1098,7 @@ def gen_cubic_bezier_tuples_from_points( # Basically take every nppcc element. return tuple(points[i : i + nppcc] for i in range(0, len(points), nppcc)) - def get_cubic_bezier_tuples(self) -> np.ndarray[Point3D_Array]: + def get_cubic_bezier_tuples(self) -> npt.NDArray[Point3D_Array]: return self.get_cubic_bezier_tuples_from_points(self.points) def _gen_subpaths_from_points( @@ -1198,7 +1199,7 @@ def get_nth_curve_length_pieces( self, n: int, sample_points: int | None = None, - ) -> np.ndarray[ManimFloat]: + ) -> npt.NDArray[ManimFloat]: """Returns the array of short line lengths used for length approximation. Parameters @@ -1210,7 +1211,6 @@ def get_nth_curve_length_pieces( Returns ------- - np.ndarray[ManimFloat] The short length-pieces of the nth curve. """ if sample_points is None: @@ -1597,7 +1597,7 @@ def insert_n_curves(self, n: int) -> Self: def insert_n_curves_to_point_list( self, n: int, points: Point3D_Array - ) -> np.ndarray[BezierPoints]: + ) -> npt.NDArray[BezierPoints]: """Given an array of k points defining a bezier curves (anchors and handles), returns points defining exactly k + n bezier curves. Parameters @@ -1609,7 +1609,6 @@ def insert_n_curves_to_point_list( Returns ------- - np.ndarray Points generated. """ @@ -2410,7 +2409,7 @@ def __init__(self, vmobject: VMobject, **kwargs) -> None: part.match_style(vmobject) self.add(part) - def point_from_proportion(self, alpha: float) -> np.ndarray: + def point_from_proportion(self, alpha: float) -> Point3D: """Gets the point at a proportion along the path of the :class:`CurvesAsSubmobjects`. Parameters From 672b0e3bfe358d9a511bfb54517e8b6cd65654b1 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 28 Oct 2023 22:01:25 +0000 Subject: [PATCH 86/91] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- manim/mobject/geometry/arc.py | 15 ++++----------- manim/mobject/geometry/boolean_ops.py | 1 + manim/utils/bezier.py | 8 ++++---- manim/utils/space_ops.py | 11 +++++------ 4 files changed, 14 insertions(+), 21 deletions(-) diff --git a/manim/mobject/geometry/arc.py b/manim/mobject/geometry/arc.py index 3ade6d150b..f1390d3874 100644 --- a/manim/mobject/geometry/arc.py +++ b/manim/mobject/geometry/arc.py @@ -63,13 +63,12 @@ def construct(self): ) if TYPE_CHECKING: + import manim.mobject.geometry.tips as tips from manim.mobject.mobject import Mobject from manim.mobject.text.tex_mobject import SingleStringMathTex, Tex from manim.mobject.text.text_mobject import Text from manim.typing import CubicBezierPoints, Point3D, QuadraticBezierPoints, Vector - import manim.mobject.geometry.tips as tips - Angle: TypeAlias = Union[float, np.float64] @@ -170,9 +169,7 @@ def get_unpositioned_tip( tip = tip_shape(length=tip_length, **style) return tip - def position_tip( - self, tip: tips.ArrowTip, at_start: bool = False - ): + def position_tip(self, tip: tips.ArrowTip, at_start: bool = False): # Last two control points, defining both # the end, and the tangency direction if at_start: @@ -199,9 +196,7 @@ def position_tip( tip.shift(anchor - tip.tip_point) return tip - def reset_endpoints_based_on_tip( - self, tip: tips.ArrowTip, at_start: bool - ) -> Self: + def reset_endpoints_based_on_tip(self, tip: tips.ArrowTip, at_start: bool) -> Self: if self.get_length() == 0: # Zero length, put_start_and_end_on wouldn't work return self @@ -212,9 +207,7 @@ def reset_endpoints_based_on_tip( self.put_start_and_end_on(self.get_start(), tip.base) return self - def asign_tip_attr( - self, tip: tips.ArrowTip, at_start: bool - ) -> Self: + def asign_tip_attr(self, tip: tips.ArrowTip, at_start: bool) -> Self: if at_start: self.start_tip = tip else: diff --git a/manim/mobject/geometry/boolean_ops.py b/manim/mobject/geometry/boolean_ops.py index 87dea629f9..0bc33d70b0 100644 --- a/manim/mobject/geometry/boolean_ops.py +++ b/manim/mobject/geometry/boolean_ops.py @@ -21,6 +21,7 @@ class _BooleanOps(VMobject, metaclass=ConvertToOpenGL): helps to convert to and from skia objects and manim objects (:class:`~.VMobject`). """ + def _convert_2d_to_3d_array( self, points: Point2D_Array, diff --git a/manim/utils/bezier.py b/manim/utils/bezier.py index 20ac78fd10..d687364abc 100644 --- a/manim/utils/bezier.py +++ b/manim/utils/bezier.py @@ -350,14 +350,14 @@ def inverse_interpolate(start: float, end: float, value: float) -> float: def inverse_interpolate(start: float, end: float, value: Point3D) -> Point3D: ... + @overload def inverse_interpolate(start: Point3D, end: Point3D, value: Point3D) -> Point3D: ... + def inverse_interpolate( - start: float | Point3D, - end: float | Point3D, - value: float | Point3D + start: float | Point3D, end: float | Point3D, value: float | Point3D ) -> float | Point3D: """Perform inverse interpolation to determine the alpha values that would produce the specified ``value`` @@ -372,7 +372,7 @@ def inverse_interpolate( value The value or point for which the alpha value should be determined. - + Returns ------- The alpha values producing the given input diff --git a/manim/utils/space_ops.py b/manim/utils/space_ops.py index 848dbfd3c4..16af964e74 100644 --- a/manim/utils/space_ops.py +++ b/manim/utils/space_ops.py @@ -623,9 +623,8 @@ def shoelace_direction(x_y: np.ndarray) -> str: def cross2d( - a: Sequence[Vector] | Vector, - b: Sequence[Vector] | Vector - ) -> Sequence[float] | float: + a: Sequence[Vector] | Vector, b: Sequence[Vector] | Vector +) -> Sequence[float] | float: """Compute the determinant(s) of the passed vector (sequences). @@ -635,7 +634,7 @@ def cross2d( A vector or a sequence of vectors. b A vector or a sequence of vectors. - + Returns ------- Sequence[float] | float @@ -650,8 +649,8 @@ def cross2d( >>> cross2d(np.array([1, 2]), np.array([3, 4])) -2 >>> cross2d( - ... np.array([[1, 2, 0], [1, 0, 0]]), - ... np.array([[3, 4, 0], [0, 1, 0]]), + ... np.array([[1, 2, 0], [1, 0, 0]]), + ... np.array([[3, 4, 0], [0, 1, 0]]), ... ) array([-2, 1]) """ From 84c9cdca45dd2f5ba843f9daf1d395f047f69a22 Mon Sep 17 00:00:00 2001 From: Viicos <65306057+Viicos@users.noreply.github.com> Date: Sun, 29 Oct 2023 10:16:50 +0100 Subject: [PATCH 87/91] Apply feedback --- manim/_config/utils.py | 1 - manim/mobject/geometry/arc.py | 6 +- manim/mobject/graphing/coordinate_systems.py | 1 - manim/mobject/mobject.py | 59 ++++++++++--------- .../opengl/opengl_vectorized_mobject.py | 7 +-- manim/utils/bezier.py | 7 ++- 6 files changed, 39 insertions(+), 42 deletions(-) diff --git a/manim/_config/utils.py b/manim/_config/utils.py index d5512b491f..e7b1d0cdc8 100644 --- a/manim/_config/utils.py +++ b/manim/_config/utils.py @@ -1094,7 +1094,6 @@ def format(self, val: str) -> None: doc="Frame rate in frames per second.", ) - # TODO: This was parsed before maybe add ManimColor(val), but results in circular import background_color = property( lambda self: self._d["background_color"], lambda self, val: self._d.__setitem__("background_color", ManimColor(val)), diff --git a/manim/mobject/geometry/arc.py b/manim/mobject/geometry/arc.py index f1390d3874..bd15d84927 100644 --- a/manim/mobject/geometry/arc.py +++ b/manim/mobject/geometry/arc.py @@ -44,10 +44,10 @@ def construct(self): import itertools import warnings -from typing import TYPE_CHECKING, Union +from typing import TYPE_CHECKING import numpy as np -from typing_extensions import Self, TypeAlias +from typing_extensions import Self from manim.constants import * from manim.mobject.opengl.opengl_compatibility import ConvertToOpenGL @@ -70,8 +70,6 @@ def construct(self): from manim.typing import CubicBezierPoints, Point3D, QuadraticBezierPoints, Vector -Angle: TypeAlias = Union[float, np.float64] - class TipableVMobject(VMobject, metaclass=ConvertToOpenGL): """Meant for shared functionality between Arc and Line. diff --git a/manim/mobject/graphing/coordinate_systems.py b/manim/mobject/graphing/coordinate_systems.py index 2e1ac919a4..c2f5744ca8 100644 --- a/manim/mobject/graphing/coordinate_systems.py +++ b/manim/mobject/graphing/coordinate_systems.py @@ -1713,7 +1713,6 @@ def get_T_label( label_color: ParsableManimColor | None = None, triangle_size: float = MED_SMALL_BUFF, triangle_color: ParsableManimColor | None = WHITE, - # TODO: May have to be made a generic but it can be more than just a line. line_func: type[Line] = Line, line_color: ParsableManimColor = YELLOW, ) -> VGroup: diff --git a/manim/mobject/mobject.py b/manim/mobject/mobject.py index 331c2ea06a..1afa091cca 100644 --- a/manim/mobject/mobject.py +++ b/manim/mobject/mobject.py @@ -57,6 +57,7 @@ Point3D, Point3D_Array, Vector, + Vector3, ) from ..animation.animation import Animation @@ -1148,7 +1149,7 @@ def apply_to_family(self, func: Callable[[Mobject], None]) -> None: for mob in self.family_members_with_points(): func(mob) - def shift(self, *vectors: Vector) -> Self: + def shift(self, *vectors: Vector3) -> Self: """Shift by the given vectors. Parameters @@ -1220,14 +1221,14 @@ def construct(self): ) return self - def rotate_about_origin(self, angle: float, axis: Vector = OUT, axes=[]) -> Self: + def rotate_about_origin(self, angle: float, axis: Vector3 = OUT, axes=[]) -> Self: """Rotates the :class:`~.Mobject` about the ORIGIN, which is at [0,0,0].""" return self.rotate(angle, axis, about_point=ORIGIN) def rotate( self, angle: float, - axis: Vector = OUT, + axis: Vector3 = OUT, about_point: Point3D | None = None, **kwargs, ) -> Self: @@ -1238,7 +1239,7 @@ def rotate( ) return self - def flip(self, axis: Vector = UP, **kwargs) -> Self: + def flip(self, axis: Vector3 = UP, **kwargs) -> Self: """Flips/Mirrors an mobject about its center. Examples @@ -1332,7 +1333,7 @@ def R3_func(point): return self.apply_function(R3_func) def wag( - self, direction: Vector = RIGHT, axis: Vector = DOWN, wag_factor: float = 1.0 + self, direction: Vector3 = RIGHT, axis: Vector3 = DOWN, wag_factor: float = 1.0 ) -> Self: for mob in self.family_members_with_points(): alphas = np.dot(mob.points, np.transpose(axis)) @@ -1398,7 +1399,7 @@ def center(self) -> Self: return self def align_on_border( - self, direction: Vector, buff: float = DEFAULT_MOBJECT_TO_EDGE_BUFFER + self, direction: Vector3, buff: float = DEFAULT_MOBJECT_TO_EDGE_BUFFER ) -> Self: """Direction just needs to be a vector pointing towards side or corner in the 2d plane. @@ -1415,24 +1416,24 @@ def align_on_border( return self def to_corner( - self, corner: Vector = DL, buff: float = DEFAULT_MOBJECT_TO_EDGE_BUFFER + self, corner: Vector3 = DL, buff: float = DEFAULT_MOBJECT_TO_EDGE_BUFFER ) -> Self: return self.align_on_border(corner, buff) def to_edge( - self, edge: Vector = LEFT, buff: float = DEFAULT_MOBJECT_TO_EDGE_BUFFER + self, edge: Vector3 = LEFT, buff: float = DEFAULT_MOBJECT_TO_EDGE_BUFFER ) -> Self: return self.align_on_border(edge, buff) def next_to( self, mobject_or_point: Mobject | Point3D, - direction: Vector = RIGHT, + direction: Vector3 = RIGHT, buff: float = DEFAULT_MOBJECT_TO_MOBJECT_BUFFER, - aligned_edge: Vector = ORIGIN, + aligned_edge: Vector3 = ORIGIN, submobject_to_align: Mobject | None = None, index_of_submobject_to_align: int | None = None, - coor_mask: Vector = np.array([1, 1, 1]), + coor_mask: Vector3 = np.array([1, 1, 1]), ) -> Self: """Move this :class:`~.Mobject` next to another's :class:`~.Mobject` or Point3D. @@ -1624,22 +1625,22 @@ def stretch_to_fit_depth(self, depth: float, **kwargs) -> Self: return self.rescale_to_fit(depth, 2, stretch=True, **kwargs) - def set_coord(self, value, dim: int, direction: Vector = ORIGIN) -> Self: + def set_coord(self, value, dim: int, direction: Vector3 = ORIGIN) -> Self: curr = self.get_coord(dim, direction) shift_vect = np.zeros(self.dim) shift_vect[dim] = value - curr self.shift(shift_vect) return self - def set_x(self, x: float, direction: Vector = ORIGIN) -> Self: + def set_x(self, x: float, direction: Vector3 = ORIGIN) -> Self: """Set x value of the center of the :class:`~.Mobject` (``int`` or ``float``)""" return self.set_coord(x, 0, direction) - def set_y(self, y: float, direction: Vector = ORIGIN) -> Self: + def set_y(self, y: float, direction: Vector3 = ORIGIN) -> Self: """Set y value of the center of the :class:`~.Mobject` (``int`` or ``float``)""" return self.set_coord(y, 1, direction) - def set_z(self, z: float, direction: Vector = ORIGIN) -> Self: + def set_z(self, z: float, direction: Vector3 = ORIGIN) -> Self: """Set z value of the center of the :class:`~.Mobject` (``int`` or ``float``)""" return self.set_coord(z, 2, direction) @@ -1652,8 +1653,8 @@ def space_out_submobjects(self, factor: float = 1.5, **kwargs) -> Self: def move_to( self, point_or_mobject: Point3D | Mobject, - aligned_edge: Vector = ORIGIN, - coor_mask: Vector = np.array([1, 1, 1]), + aligned_edge: Vector3 = ORIGIN, + coor_mask: Vector3 = np.array([1, 1, 1]), ) -> Self: """Move center of the :class:`~.Mobject` to certain Point3D.""" if isinstance(point_or_mobject, Mobject): @@ -1958,7 +1959,7 @@ def get_extremum_along_dim( else: return np.max(values) - def get_critical_point(self, direction: Vector) -> Point3D: + def get_critical_point(self, direction: Vector3) -> Point3D: """Picture a box bounding the :class:`~.Mobject`. Such a box has 9 'critical points': 4 corners, 4 edge center, the center. This returns one of them, along the given direction. @@ -1987,11 +1988,11 @@ def get_critical_point(self, direction: Vector) -> Point3D: # Pseudonyms for more general get_critical_point method - def get_edge_center(self, direction: Vector) -> Point3D: + def get_edge_center(self, direction: Vector3) -> Point3D: """Get edge Point3Ds for certain direction.""" return self.get_critical_point(direction) - def get_corner(self, direction: Vector) -> Point3D: + def get_corner(self, direction: Vector3) -> Point3D: """Get corner Point3Ds for certain direction.""" return self.get_critical_point(direction) @@ -2002,7 +2003,7 @@ def get_center(self) -> Point3D: def get_center_of_mass(self) -> Point3D: return np.apply_along_axis(np.mean, 0, self.get_all_points()) - def get_boundary_point(self, direction: Vector) -> Point3D: + def get_boundary_point(self, direction: Vector3) -> Point3D: all_points = self.get_points_defining_boundary() index = np.argmax(np.dot(all_points, np.array(direction).T)) return all_points[index] @@ -2061,19 +2062,19 @@ def length_over_dim(self, dim: int) -> float: dim, ) - self.reduce_across_dimension(min, dim) - def get_coord(self, dim: int, direction: Vector = ORIGIN): + def get_coord(self, dim: int, direction: Vector3 = ORIGIN): """Meant to generalize ``get_x``, ``get_y`` and ``get_z``""" return self.get_extremum_along_dim(dim=dim, key=direction[dim]) - def get_x(self, direction: Vector = ORIGIN) -> ManimFloat: + def get_x(self, direction: Vector3 = ORIGIN) -> ManimFloat: """Returns x Point3D of the center of the :class:`~.Mobject` as ``float``""" return self.get_coord(0, direction) - def get_y(self, direction: Vector = ORIGIN) -> ManimFloat: + def get_y(self, direction: Vector3 = ORIGIN) -> ManimFloat: """Returns y Point3D of the center of the :class:`~.Mobject` as ``float``""" return self.get_coord(1, direction) - def get_z(self, direction: Vector = ORIGIN) -> ManimFloat: + def get_z(self, direction: Vector3 = ORIGIN) -> ManimFloat: """Returns z Point3D of the center of the :class:`~.Mobject` as ``float``""" return self.get_coord(2, direction) @@ -2144,7 +2145,7 @@ def match_depth(self, mobject: Mobject, **kwargs) -> Self: return self.match_dim_size(mobject, 2, **kwargs) def match_coord( - self, mobject: Mobject, dim: int, direction: Vector = ORIGIN + self, mobject: Mobject, dim: int, direction: Vector3 = ORIGIN ) -> Self: """Match the Point3Ds with the Point3Ds of another :class:`~.Mobject`.""" return self.set_coord( @@ -2168,7 +2169,7 @@ def match_z(self, mobject: Mobject, direction=ORIGIN) -> Self: def align_to( self, mobject_or_point: Mobject | Point3D, - direction: Vector = ORIGIN, + direction: Vector3 = ORIGIN, ) -> Self: """Aligns mobject to another :class:`~.Mobject` in a certain direction. @@ -2223,7 +2224,7 @@ def family_members_with_points(self) -> list[Self]: def arrange( self, - direction: Vector = RIGHT, + direction: Vector3 = RIGHT, buff: float = DEFAULT_MOBJECT_TO_MOBJECT_BUFFER, center: bool = True, **kwargs, @@ -2256,7 +2257,7 @@ def arrange_in_grid( rows: int | None = None, cols: int | None = None, buff: float | tuple[float, float] = MED_SMALL_BUFF, - cell_alignment: Vector = ORIGIN, + cell_alignment: Vector3 = ORIGIN, row_alignments: str | None = None, # "ucd" col_alignments: str | None = None, # "lcr" row_heights: Iterable[float | None] | None = None, diff --git a/manim/mobject/opengl/opengl_vectorized_mobject.py b/manim/mobject/opengl/opengl_vectorized_mobject.py index d0c62d893b..0e9aefc0c3 100644 --- a/manim/mobject/opengl/opengl_vectorized_mobject.py +++ b/manim/mobject/opengl/opengl_vectorized_mobject.py @@ -1284,17 +1284,14 @@ def insert_n_curves_to_point_list(self, n: int, points: np.ndarray) -> np.ndarra for _ in range(-diff): ipc[np.argmax(ipc)] -= 1 - new_length = sum(x + 1 for x in ipc) - new_points = np.empty((new_length, nppc, 3)) - i = 0 + new_points = [] for group, n_inserts in zip(bezier_groups, ipc): # What was once a single quadratic curve defined # by "group" will now be broken into n_inserts + 1 # smaller quadratic curves alphas = np.linspace(0, 1, n_inserts + 2) for a1, a2 in zip(alphas, alphas[1:]): - new_points[i] = partial_quadratic_bezier_points(group, a1, a2) - i = i + 1 + new_points += partial_quadratic_bezier_points(group, a1, a2) return np.vstack(new_points) def interpolate(self, mobject1, mobject2, alpha, *args, **kwargs): diff --git a/manim/utils/bezier.py b/manim/utils/bezier.py index d687364abc..205d817e28 100644 --- a/manim/utils/bezier.py +++ b/manim/utils/bezier.py @@ -302,8 +302,11 @@ def integer_interpolate( returned integer and the next one of the list. - For example, if start=0, end=10, alpha=0.46, This - would return (4, 0.6). + Example + ------- + .. code-block:: pycon + >>> integer_interpolate(start=0, end=10, alpha=0.46) + (4, 0.6) """ if alpha >= 1: return (int(end - 1), 1.0) From 4fed4afa752e7720b709fdd3edd6c312b5a89535 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 29 Oct 2023 09:17:34 +0000 Subject: [PATCH 88/91] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- manim/mobject/geometry/arc.py | 1 - 1 file changed, 1 deletion(-) diff --git a/manim/mobject/geometry/arc.py b/manim/mobject/geometry/arc.py index bd15d84927..9b724482c5 100644 --- a/manim/mobject/geometry/arc.py +++ b/manim/mobject/geometry/arc.py @@ -70,7 +70,6 @@ def construct(self): from manim.typing import CubicBezierPoints, Point3D, QuadraticBezierPoints, Vector - class TipableVMobject(VMobject, metaclass=ConvertToOpenGL): """Meant for shared functionality between Arc and Line. Functionality can be classified broadly into these groups: From ad228f1dd366507b02cd227aa4d5651367e765eb Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Thu, 2 Nov 2023 19:53:51 +0100 Subject: [PATCH 89/91] revert to previous (new) version --- manim/mobject/opengl/opengl_vectorized_mobject.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/manim/mobject/opengl/opengl_vectorized_mobject.py b/manim/mobject/opengl/opengl_vectorized_mobject.py index 0e9aefc0c3..d0c62d893b 100644 --- a/manim/mobject/opengl/opengl_vectorized_mobject.py +++ b/manim/mobject/opengl/opengl_vectorized_mobject.py @@ -1284,14 +1284,17 @@ def insert_n_curves_to_point_list(self, n: int, points: np.ndarray) -> np.ndarra for _ in range(-diff): ipc[np.argmax(ipc)] -= 1 - new_points = [] + new_length = sum(x + 1 for x in ipc) + new_points = np.empty((new_length, nppc, 3)) + i = 0 for group, n_inserts in zip(bezier_groups, ipc): # What was once a single quadratic curve defined # by "group" will now be broken into n_inserts + 1 # smaller quadratic curves alphas = np.linspace(0, 1, n_inserts + 2) for a1, a2 in zip(alphas, alphas[1:]): - new_points += partial_quadratic_bezier_points(group, a1, a2) + new_points[i] = partial_quadratic_bezier_points(group, a1, a2) + i = i + 1 return np.vstack(new_points) def interpolate(self, mobject1, mobject2, alpha, *args, **kwargs): From c2b48f8af4ea312f6cfc11933d2eb6aa4d76604e Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Fri, 3 Nov 2023 19:29:44 +0100 Subject: [PATCH 90/91] fix doctest --- manim/utils/bezier.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/manim/utils/bezier.py b/manim/utils/bezier.py index 205d817e28..f76f98cbe7 100644 --- a/manim/utils/bezier.py +++ b/manim/utils/bezier.py @@ -305,8 +305,9 @@ def integer_interpolate( Example ------- .. code-block:: pycon - >>> integer_interpolate(start=0, end=10, alpha=0.46) - (4, 0.6) + >>> integer, residue = integer_interpolate(start=0, end=10, alpha=0.46) + >>> np.allclose((integer, residue), (4, 0.6)) + True """ if alpha >= 1: return (int(end - 1), 1.0) From 948214ec702e72519982c6f5b566c87a47500a26 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Fri, 3 Nov 2023 19:48:51 +0100 Subject: [PATCH 91/91] fix ReST errors --- manim/utils/bezier.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/manim/utils/bezier.py b/manim/utils/bezier.py index f76f98cbe7..938e7362b5 100644 --- a/manim/utils/bezier.py +++ b/manim/utils/bezier.py @@ -304,7 +304,9 @@ def integer_interpolate( Example ------- + .. code-block:: pycon + >>> integer, residue = integer_interpolate(start=0, end=10, alpha=0.46) >>> np.allclose((integer, residue), (4, 0.6)) True